@antadesign/anta 0.3.15 → 0.3.17
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/README.md +75 -45
- package/dist/anta_helpers.d.ts +8 -13
- package/dist/anta_helpers.js +11 -3
- package/dist/components/Banner.js +1 -0
- package/dist/components/ButtonCopy.d.ts +9 -6
- package/dist/components/ButtonCopy.js +5 -3
- package/dist/components/Card.js +1 -15
- package/dist/components/InputAutocomplete.js +1 -1
- package/dist/components/InputTime.d.ts +5 -4
- package/dist/components/Slider.d.ts +89 -0
- package/dist/components/Slider.js +144 -0
- package/dist/components/Switch.d.ts +68 -0
- package/dist/components/Switch.js +90 -0
- package/dist/components/copy-props.d.ts +2 -0
- package/dist/components/copy-props.js +2 -1
- package/dist/elements/a-banner.css +1 -1
- package/dist/elements/a-button.css +1 -1
- package/dist/elements/a-card.css +1 -1
- package/dist/elements/a-checkbox.css +1 -1
- package/dist/elements/a-copy.d.ts +1 -1
- package/dist/elements/a-copy.js +103 -69
- package/dist/elements/a-dialog.css +1 -1
- package/dist/elements/a-dialog.js +1 -1
- package/dist/elements/a-expander.css +1 -1
- package/dist/elements/a-icon.css +1 -1
- package/dist/elements/a-icon.shapes.css +1 -1
- package/dist/elements/a-icon.shapes.d.ts +3 -1
- package/dist/elements/a-icon.shapes.js +4 -0
- package/dist/elements/a-input-time.css +1 -1
- package/dist/elements/a-input-time.js +298 -377
- package/dist/elements/a-input.css +1 -1
- package/dist/elements/a-input.d.ts +0 -3
- package/dist/elements/a-input.js +16 -46
- package/dist/elements/a-progress.css +1 -1
- package/dist/elements/a-progress.js +2 -0
- package/dist/elements/a-radio.css +1 -1
- package/dist/elements/a-slider.css +1 -0
- package/dist/elements/a-slider.d.ts +24 -0
- package/dist/elements/a-slider.js +479 -0
- package/dist/elements/a-switch.css +1 -0
- package/dist/elements/a-switch.d.ts +31 -0
- package/dist/elements/a-switch.js +109 -0
- package/dist/elements/a-tabs.css +1 -1
- package/dist/elements/a-tag.css +1 -1
- package/dist/elements/a-tooltip.css +1 -1
- package/dist/elements/copy-behavior.d.ts +3 -3
- package/dist/elements/index.d.ts +2 -0
- package/dist/elements/index.js +6 -0
- package/dist/general_types.d.ts +98 -4
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/jsx-runtime.d.ts +6 -1
- package/dist/theme-anta.css +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,479 @@
|
|
|
1
|
+
import { HTMLElementBase } from "../anta_helpers";
|
|
2
|
+
import "./a-slider.css";
|
|
3
|
+
const finiteNumber = (value, fallback) => {
|
|
4
|
+
if (value == null || value === "") return fallback;
|
|
5
|
+
const number = Number(value);
|
|
6
|
+
return Number.isFinite(number) ? number : fallback;
|
|
7
|
+
};
|
|
8
|
+
const precisionOf = (value) => {
|
|
9
|
+
const exponent = value.toString().match(/(?:\.(\d+))?(?:e([+-]?\d+))?$/i);
|
|
10
|
+
return Math.max(0, (exponent?.[1]?.length ?? 0) - Number(exponent?.[2] ?? 0));
|
|
11
|
+
};
|
|
12
|
+
class ASliderElement extends HTMLElementBase {
|
|
13
|
+
static formAssociated = true;
|
|
14
|
+
static observedAttributes = [
|
|
15
|
+
"value",
|
|
16
|
+
"defaultvalue",
|
|
17
|
+
"min",
|
|
18
|
+
"max",
|
|
19
|
+
"step",
|
|
20
|
+
"disabled",
|
|
21
|
+
"track-click",
|
|
22
|
+
"value-display",
|
|
23
|
+
"value-prefix",
|
|
24
|
+
"value-suffix"
|
|
25
|
+
];
|
|
26
|
+
#internals;
|
|
27
|
+
#control;
|
|
28
|
+
#railArea;
|
|
29
|
+
#fill;
|
|
30
|
+
#thumb;
|
|
31
|
+
#header;
|
|
32
|
+
#label;
|
|
33
|
+
#inlineValue;
|
|
34
|
+
#inlineValuePrefix;
|
|
35
|
+
#inlineValueSuffix;
|
|
36
|
+
#endValue;
|
|
37
|
+
#endValuePrefix;
|
|
38
|
+
#endValueSuffix;
|
|
39
|
+
#thumbValue;
|
|
40
|
+
#thumbValuePrefix;
|
|
41
|
+
#thumbValueSuffix;
|
|
42
|
+
#markers;
|
|
43
|
+
#extras;
|
|
44
|
+
#value = 0;
|
|
45
|
+
#seeded = false;
|
|
46
|
+
#dirty = false;
|
|
47
|
+
#drag;
|
|
48
|
+
get value() {
|
|
49
|
+
return this.#value;
|
|
50
|
+
}
|
|
51
|
+
set value(value) {
|
|
52
|
+
this.setAttribute("value", String(value));
|
|
53
|
+
}
|
|
54
|
+
get defaultValue() {
|
|
55
|
+
return finiteNumber(this.getAttribute("defaultvalue"), this.#min);
|
|
56
|
+
}
|
|
57
|
+
set defaultValue(value) {
|
|
58
|
+
this.setAttribute("defaultvalue", String(value));
|
|
59
|
+
}
|
|
60
|
+
constructor() {
|
|
61
|
+
super();
|
|
62
|
+
this.#internals = this.attachInternals?.();
|
|
63
|
+
const shadow = this.attachShadow({ mode: "open" });
|
|
64
|
+
const style = document.createElement("style");
|
|
65
|
+
style.textContent = `
|
|
66
|
+
:host {
|
|
67
|
+
display: grid;
|
|
68
|
+
grid-template-columns: minmax(0, 1fr);
|
|
69
|
+
gap: 1px;
|
|
70
|
+
outline: none;
|
|
71
|
+
}
|
|
72
|
+
[hidden] { display: none !important; }
|
|
73
|
+
.header {
|
|
74
|
+
display: flex;
|
|
75
|
+
align-items: baseline;
|
|
76
|
+
gap: 1px;
|
|
77
|
+
min-width: 0;
|
|
78
|
+
}
|
|
79
|
+
slot[name="label"] {
|
|
80
|
+
display: block;
|
|
81
|
+
min-width: 0;
|
|
82
|
+
color: var(--slider-label);
|
|
83
|
+
font-family: var(--sans-serif);
|
|
84
|
+
font-size: var(--slider-label-size);
|
|
85
|
+
font-weight: 500;
|
|
86
|
+
line-height: var(--slider-label-line-height);
|
|
87
|
+
}
|
|
88
|
+
.inline-value,
|
|
89
|
+
.end-value {
|
|
90
|
+
color: var(--slider-value);
|
|
91
|
+
font-family: var(--sans-serif);
|
|
92
|
+
font-feature-settings: 'ss02', 'ss05', 'tnum';
|
|
93
|
+
font-size: var(--slider-value-size);
|
|
94
|
+
font-variant-numeric: tabular-nums;
|
|
95
|
+
line-height: var(--slider-value-line-height);
|
|
96
|
+
}
|
|
97
|
+
.value-affix { color: var(--slider-value-affix); }
|
|
98
|
+
.inline-separator,
|
|
99
|
+
.inline-value { display: none; }
|
|
100
|
+
.inline-value { margin-inline-start: 0.5ch; }
|
|
101
|
+
.end-value {
|
|
102
|
+
display: block;
|
|
103
|
+
flex: 0 0 auto;
|
|
104
|
+
margin-inline-start: auto;
|
|
105
|
+
padding-inline-start: 1ch;
|
|
106
|
+
}
|
|
107
|
+
:host([value-display="inline"]) .inline-separator,
|
|
108
|
+
:host([value-display="inline"]) .inline-value { display: block; }
|
|
109
|
+
:host([value-display="inline"]) .end-value,
|
|
110
|
+
:host([value-display="thumb"]) .end-value,
|
|
111
|
+
:host([value-display="none"]) .end-value { display: none; }
|
|
112
|
+
.control {
|
|
113
|
+
position: relative;
|
|
114
|
+
block-size: var(--anta-slider-control-size);
|
|
115
|
+
border-radius: 4px;
|
|
116
|
+
cursor: grab;
|
|
117
|
+
touch-action: none;
|
|
118
|
+
user-select: none;
|
|
119
|
+
}
|
|
120
|
+
:host([track-click="jump"]) .control { cursor: pointer; }
|
|
121
|
+
.control[data-dragging] { cursor: grabbing; }
|
|
122
|
+
.control[data-dragging] .thumb { background: var(--slider-thumb-active); }
|
|
123
|
+
:host(:focus-visible) .control:not([data-pointer-focus]) {
|
|
124
|
+
outline: 1px solid var(--focus-ring);
|
|
125
|
+
outline-offset: 0;
|
|
126
|
+
}
|
|
127
|
+
.rail-area {
|
|
128
|
+
position: absolute;
|
|
129
|
+
inset-block-start: 50%;
|
|
130
|
+
inset-inline: calc(var(--anta-slider-thumb-size) / 2);
|
|
131
|
+
block-size: var(--anta-slider-track-size);
|
|
132
|
+
transform: translateY(-50%);
|
|
133
|
+
}
|
|
134
|
+
.rail,
|
|
135
|
+
.fill {
|
|
136
|
+
position: absolute;
|
|
137
|
+
inset: 0;
|
|
138
|
+
border-radius: var(--slider-track-radius);
|
|
139
|
+
transition: background-color 75ms ease-out;
|
|
140
|
+
}
|
|
141
|
+
.rail {
|
|
142
|
+
inset-inline: calc(var(--slider-track-inset) - var(--anta-slider-thumb-size) / 2);
|
|
143
|
+
background: var(--slider-track);
|
|
144
|
+
}
|
|
145
|
+
.fill {
|
|
146
|
+
inset-inline-start: calc(var(--slider-track-inset) - var(--anta-slider-thumb-size) / 2);
|
|
147
|
+
inset-inline-end: auto;
|
|
148
|
+
inline-size: calc(var(--_percent, 0%) + var(--anta-slider-thumb-size) / 2 - var(--slider-track-inset));
|
|
149
|
+
background: var(--slider-fill);
|
|
150
|
+
}
|
|
151
|
+
.thumb {
|
|
152
|
+
position: absolute;
|
|
153
|
+
inset-block-start: 50%;
|
|
154
|
+
inset-inline-start: var(--_percent, 0%);
|
|
155
|
+
box-sizing: border-box;
|
|
156
|
+
inline-size: var(--anta-slider-thumb-size);
|
|
157
|
+
block-size: var(--anta-slider-thumb-size);
|
|
158
|
+
border: var(--anta-slider-thumb-border-width) solid var(--slider-thumb-border);
|
|
159
|
+
border-radius: var(--slider-thumb-radius);
|
|
160
|
+
background: var(--slider-thumb);
|
|
161
|
+
transition: background-color 75ms ease-out, border-color 75ms ease-out;
|
|
162
|
+
transform: translate(-50%, -50%);
|
|
163
|
+
}
|
|
164
|
+
.thumb-value {
|
|
165
|
+
display: none;
|
|
166
|
+
position: absolute;
|
|
167
|
+
inset-inline-start: var(--_percent, 0%);
|
|
168
|
+
inset-block-start: 50%;
|
|
169
|
+
min-inline-size: max-content;
|
|
170
|
+
color: var(--slider-value);
|
|
171
|
+
font-family: var(--sans-serif);
|
|
172
|
+
font-feature-settings: 'ss02', 'ss05', 'tnum';
|
|
173
|
+
font-size: var(--slider-value-size);
|
|
174
|
+
font-variant-numeric: tabular-nums;
|
|
175
|
+
line-height: var(--slider-value-line-height);
|
|
176
|
+
padding-inline: 6px;
|
|
177
|
+
background: var(--bg-2);
|
|
178
|
+
border: 1px solid var(--border-3);
|
|
179
|
+
border-radius: 4px;
|
|
180
|
+
text-align: center;
|
|
181
|
+
transform: translate(-50%, calc(
|
|
182
|
+
-50% - var(--anta-slider-control-size) / 2 - 1px - var(--slider-value-line-height) / 2
|
|
183
|
+
));
|
|
184
|
+
}
|
|
185
|
+
:host([value-display="thumb"]) .thumb-value { display: block; }
|
|
186
|
+
slot[name="markers"] {
|
|
187
|
+
display: block;
|
|
188
|
+
position: relative;
|
|
189
|
+
min-block-size: var(--slider-marker-line-height);
|
|
190
|
+
}
|
|
191
|
+
slot[name="markers"]::slotted(*) {
|
|
192
|
+
position: absolute;
|
|
193
|
+
inset-inline-start: var(--slider-marker-position);
|
|
194
|
+
max-inline-size: min(12rem, 50vw);
|
|
195
|
+
color: var(--slider-marker);
|
|
196
|
+
font-family: var(--sans-serif);
|
|
197
|
+
font-feature-settings: 'ss02', 'ss05', 'tnum';
|
|
198
|
+
font-size: var(--slider-marker-size);
|
|
199
|
+
font-variant-numeric: tabular-nums;
|
|
200
|
+
line-height: var(--slider-marker-line-height);
|
|
201
|
+
text-align: center;
|
|
202
|
+
transform: translateX(-50%);
|
|
203
|
+
white-space: nowrap;
|
|
204
|
+
}
|
|
205
|
+
slot[name="markers"]::slotted([data-slider-marker-start]) { text-align: start; transform: translateX(0); }
|
|
206
|
+
slot[name="markers"]::slotted([data-slider-marker-end]) { text-align: end; transform: translateX(-100%); }
|
|
207
|
+
slot:not([name]) { display: block; }
|
|
208
|
+
:host([disabled]) .control,
|
|
209
|
+
:host(:disabled) .control { cursor: not-allowed; }
|
|
210
|
+
@media (forced-colors: active) {
|
|
211
|
+
.rail { background: Canvas; border: 1px solid CanvasText; }
|
|
212
|
+
.fill { background: Highlight; }
|
|
213
|
+
.thumb { background: Canvas; border-color: CanvasText; }
|
|
214
|
+
:host(:focus-visible) .control { outline: 2px solid Highlight; }
|
|
215
|
+
}
|
|
216
|
+
@media (prefers-reduced-motion: reduce) {
|
|
217
|
+
.rail,
|
|
218
|
+
.fill,
|
|
219
|
+
.thumb { transition: none; }
|
|
220
|
+
}
|
|
221
|
+
`;
|
|
222
|
+
this.#header = document.createElement("div");
|
|
223
|
+
this.#header.className = "header";
|
|
224
|
+
this.#header.part.add("header");
|
|
225
|
+
this.#label = document.createElement("slot");
|
|
226
|
+
this.#label.name = "label";
|
|
227
|
+
this.#label.part.add("label");
|
|
228
|
+
const separator = document.createElement("span");
|
|
229
|
+
separator.className = "inline-separator";
|
|
230
|
+
separator.textContent = ":";
|
|
231
|
+
this.#inlineValue = document.createElement("span");
|
|
232
|
+
this.#inlineValue.className = "inline-value";
|
|
233
|
+
this.#inlineValue.part.add("value");
|
|
234
|
+
this.#inlineValuePrefix = document.createElement("span");
|
|
235
|
+
this.#inlineValuePrefix.className = "value-affix";
|
|
236
|
+
this.#inlineValueSuffix = document.createElement("span");
|
|
237
|
+
this.#inlineValueSuffix.className = "value-affix";
|
|
238
|
+
this.#inlineValue.append(this.#inlineValuePrefix, this.#inlineValueSuffix);
|
|
239
|
+
this.#endValue = document.createElement("span");
|
|
240
|
+
this.#endValue.className = "end-value";
|
|
241
|
+
this.#endValue.part.add("value");
|
|
242
|
+
this.#endValuePrefix = document.createElement("span");
|
|
243
|
+
this.#endValuePrefix.className = "value-affix";
|
|
244
|
+
this.#endValueSuffix = document.createElement("span");
|
|
245
|
+
this.#endValueSuffix.className = "value-affix";
|
|
246
|
+
this.#endValue.append(this.#endValuePrefix, this.#endValueSuffix);
|
|
247
|
+
this.#header.append(this.#label, separator, this.#inlineValue, this.#endValue);
|
|
248
|
+
this.#control = document.createElement("div");
|
|
249
|
+
this.#control.className = "control";
|
|
250
|
+
this.#control.part.add("control");
|
|
251
|
+
this.#railArea = document.createElement("div");
|
|
252
|
+
this.#railArea.className = "rail-area";
|
|
253
|
+
const rail = document.createElement("div");
|
|
254
|
+
rail.className = "rail";
|
|
255
|
+
rail.part.add("track");
|
|
256
|
+
this.#fill = document.createElement("div");
|
|
257
|
+
this.#fill.className = "fill";
|
|
258
|
+
this.#fill.part.add("fill");
|
|
259
|
+
this.#thumb = document.createElement("div");
|
|
260
|
+
this.#thumb.className = "thumb";
|
|
261
|
+
this.#thumb.part.add("thumb");
|
|
262
|
+
this.#thumbValue = document.createElement("span");
|
|
263
|
+
this.#thumbValue.className = "thumb-value";
|
|
264
|
+
this.#thumbValue.part.add("thumb-value");
|
|
265
|
+
this.#thumbValuePrefix = document.createElement("span");
|
|
266
|
+
this.#thumbValuePrefix.className = "value-affix";
|
|
267
|
+
this.#thumbValueSuffix = document.createElement("span");
|
|
268
|
+
this.#thumbValueSuffix.className = "value-affix";
|
|
269
|
+
this.#thumbValue.append(this.#thumbValuePrefix, this.#thumbValueSuffix);
|
|
270
|
+
this.#railArea.append(rail, this.#fill, this.#thumb, this.#thumbValue);
|
|
271
|
+
this.#control.append(this.#railArea);
|
|
272
|
+
this.#markers = document.createElement("slot");
|
|
273
|
+
this.#markers.name = "markers";
|
|
274
|
+
this.#markers.part.add("markers");
|
|
275
|
+
this.#extras = document.createElement("slot");
|
|
276
|
+
this.#extras.part.add("extras");
|
|
277
|
+
for (const slot of [this.#label, this.#markers, this.#extras]) {
|
|
278
|
+
slot.addEventListener("slotchange", () => this.#syncSlotVisibility());
|
|
279
|
+
}
|
|
280
|
+
this.#control.addEventListener("pointerdown", (event) => this.#beginDrag(event));
|
|
281
|
+
this.#control.addEventListener("pointermove", (event) => this.#moveDrag(event));
|
|
282
|
+
this.#control.addEventListener("pointerup", (event) => this.#finishDrag(event));
|
|
283
|
+
this.#control.addEventListener("pointercancel", (event) => this.#finishDrag(event));
|
|
284
|
+
this.addEventListener("keydown", (event) => this.#handleKeydown(event));
|
|
285
|
+
this.addEventListener("blur", () => delete this.#control.dataset.pointerFocus);
|
|
286
|
+
shadow.append(style, this.#header, this.#control, this.#markers, this.#extras);
|
|
287
|
+
}
|
|
288
|
+
connectedCallback() {
|
|
289
|
+
if (!this.#seeded) {
|
|
290
|
+
this.#value = this.#initialValue();
|
|
291
|
+
this.#seeded = true;
|
|
292
|
+
}
|
|
293
|
+
this.#paint();
|
|
294
|
+
this.#syncSlotVisibility();
|
|
295
|
+
}
|
|
296
|
+
attributeChangedCallback(name) {
|
|
297
|
+
if (!this.#seeded) return;
|
|
298
|
+
if (name === "value") {
|
|
299
|
+
if (this.hasAttribute("value")) {
|
|
300
|
+
this.#value = this.#normalize(finiteNumber(this.getAttribute("value"), this.#min));
|
|
301
|
+
this.#dirty = false;
|
|
302
|
+
} else if (!this.#dirty) {
|
|
303
|
+
this.#value = this.#initialValue();
|
|
304
|
+
}
|
|
305
|
+
} else if (name === "defaultvalue" && !this.hasAttribute("value") && !this.#dirty) {
|
|
306
|
+
this.#value = this.#initialValue();
|
|
307
|
+
} else if (name === "min" || name === "max" || name === "step") {
|
|
308
|
+
this.#value = this.#normalize(this.#value);
|
|
309
|
+
}
|
|
310
|
+
this.#paint();
|
|
311
|
+
if (name === "value-display") this.#syncSlotVisibility();
|
|
312
|
+
}
|
|
313
|
+
formResetCallback() {
|
|
314
|
+
const previous = this.#value;
|
|
315
|
+
this.#value = this.#normalize(finiteNumber(this.getAttribute("defaultvalue"), this.#min));
|
|
316
|
+
this.#dirty = false;
|
|
317
|
+
this.#paint();
|
|
318
|
+
if (this.#value !== previous) this.#emitInputAndChange();
|
|
319
|
+
}
|
|
320
|
+
formStateRestoreCallback(state) {
|
|
321
|
+
if (typeof state !== "string") return;
|
|
322
|
+
this.#value = this.#normalize(finiteNumber(state, this.#min));
|
|
323
|
+
this.#dirty = true;
|
|
324
|
+
this.#paint();
|
|
325
|
+
}
|
|
326
|
+
formDisabledCallback() {
|
|
327
|
+
this.#paint();
|
|
328
|
+
}
|
|
329
|
+
get #min() {
|
|
330
|
+
return finiteNumber(this.getAttribute("min"), 0);
|
|
331
|
+
}
|
|
332
|
+
get #max() {
|
|
333
|
+
return Math.max(this.#min, finiteNumber(this.getAttribute("max"), 100));
|
|
334
|
+
}
|
|
335
|
+
get #step() {
|
|
336
|
+
const step = finiteNumber(this.getAttribute("step"), 1);
|
|
337
|
+
return step > 0 ? step : 1;
|
|
338
|
+
}
|
|
339
|
+
get #isDisabled() {
|
|
340
|
+
return this.hasAttribute("disabled") || this.matches(":disabled");
|
|
341
|
+
}
|
|
342
|
+
#initialValue() {
|
|
343
|
+
const source = this.getAttribute("value") ?? this.getAttribute("defaultvalue");
|
|
344
|
+
return this.#normalize(finiteNumber(source, this.#min));
|
|
345
|
+
}
|
|
346
|
+
#normalize(value) {
|
|
347
|
+
const min = this.#min;
|
|
348
|
+
const max = this.#max;
|
|
349
|
+
const step = this.#step;
|
|
350
|
+
const stepped = min + Math.round((Math.min(max, Math.max(min, value)) - min) / step) * step;
|
|
351
|
+
const precision = Math.min(12, Math.max(precisionOf(min), precisionOf(max), precisionOf(step)));
|
|
352
|
+
return Number(Math.min(max, Math.max(min, stepped)).toFixed(precision));
|
|
353
|
+
}
|
|
354
|
+
#percent(value = this.#value) {
|
|
355
|
+
const range = this.#max - this.#min;
|
|
356
|
+
return range > 0 ? (value - this.#min) / range * 100 : 0;
|
|
357
|
+
}
|
|
358
|
+
#paint() {
|
|
359
|
+
const percent = `${this.#percent()}%`;
|
|
360
|
+
this.#railArea.style.setProperty("--_percent", percent);
|
|
361
|
+
const value = this.#displayValue();
|
|
362
|
+
const displayedValue = String(this.#value);
|
|
363
|
+
const prefix = this.getAttribute("value-prefix") ?? "";
|
|
364
|
+
const suffix = this.getAttribute("value-suffix") ?? "";
|
|
365
|
+
for (const [element, prefixElement, suffixElement] of [
|
|
366
|
+
[this.#inlineValue, this.#inlineValuePrefix, this.#inlineValueSuffix],
|
|
367
|
+
[this.#endValue, this.#endValuePrefix, this.#endValueSuffix],
|
|
368
|
+
[this.#thumbValue, this.#thumbValuePrefix, this.#thumbValueSuffix]
|
|
369
|
+
]) {
|
|
370
|
+
element.textContent = displayedValue;
|
|
371
|
+
prefixElement.textContent = prefix;
|
|
372
|
+
suffixElement.textContent = suffix;
|
|
373
|
+
element.prepend(prefixElement);
|
|
374
|
+
element.append(suffixElement);
|
|
375
|
+
}
|
|
376
|
+
const internals = this.#internals;
|
|
377
|
+
if (!internals) return;
|
|
378
|
+
internals.ariaValueMin = String(this.#min);
|
|
379
|
+
internals.ariaValueMax = String(this.#max);
|
|
380
|
+
internals.ariaValueNow = String(this.#value);
|
|
381
|
+
internals.ariaValueText = value;
|
|
382
|
+
internals.setFormValue(this.#isDisabled ? null : String(this.#value), String(this.#value));
|
|
383
|
+
}
|
|
384
|
+
#displayValue() {
|
|
385
|
+
return `${this.getAttribute("value-prefix") ?? ""}${this.#value}${this.getAttribute("value-suffix") ?? ""}`;
|
|
386
|
+
}
|
|
387
|
+
#syncSlotVisibility() {
|
|
388
|
+
const assigned = (slot) => slot.assignedNodes({ flatten: true }).length > 0;
|
|
389
|
+
this.#header.hidden = !assigned(this.#label) && this.getAttribute("value-display") === "none";
|
|
390
|
+
this.#markers.hidden = !assigned(this.#markers);
|
|
391
|
+
this.#extras.hidden = !assigned(this.#extras);
|
|
392
|
+
}
|
|
393
|
+
#setValue(value) {
|
|
394
|
+
const next = this.#normalize(value);
|
|
395
|
+
if (next === this.#value) return false;
|
|
396
|
+
this.#value = next;
|
|
397
|
+
this.#dirty = true;
|
|
398
|
+
this.#paint();
|
|
399
|
+
this.dispatchEvent(new Event("input", { bubbles: true, composed: true }));
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
#emitInputAndChange() {
|
|
403
|
+
this.dispatchEvent(new Event("input", { bubbles: true, composed: true }));
|
|
404
|
+
this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
|
|
405
|
+
}
|
|
406
|
+
#valueAt(clientX) {
|
|
407
|
+
const rect = this.#railArea.getBoundingClientRect();
|
|
408
|
+
if (rect.width <= 0) return this.#value;
|
|
409
|
+
return this.#min + (clientX - rect.left) / rect.width * (this.#max - this.#min);
|
|
410
|
+
}
|
|
411
|
+
#beginDrag(event) {
|
|
412
|
+
if (this.#isDisabled || event.button !== 0) return;
|
|
413
|
+
const rect = this.#railArea.getBoundingClientRect();
|
|
414
|
+
if (rect.width <= 0) return;
|
|
415
|
+
this.#drag = { pointerId: event.pointerId, startX: event.clientX, startValue: this.#value };
|
|
416
|
+
this.#control.setPointerCapture(event.pointerId);
|
|
417
|
+
this.#control.dataset.dragging = "";
|
|
418
|
+
this.#control.dataset.pointerFocus = "";
|
|
419
|
+
this.focus({ preventScroll: true });
|
|
420
|
+
if (this.getAttribute("track-click") === "jump") this.#setValue(this.#valueAt(event.clientX));
|
|
421
|
+
event.preventDefault();
|
|
422
|
+
}
|
|
423
|
+
#moveDrag(event) {
|
|
424
|
+
const drag = this.#drag;
|
|
425
|
+
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
426
|
+
const next = this.getAttribute("track-click") === "jump" ? this.#valueAt(event.clientX) : drag.startValue + (event.clientX - drag.startX) / this.#railArea.getBoundingClientRect().width * (this.#max - this.#min);
|
|
427
|
+
this.#setValue(next);
|
|
428
|
+
event.preventDefault();
|
|
429
|
+
}
|
|
430
|
+
#finishDrag(event) {
|
|
431
|
+
const drag = this.#drag;
|
|
432
|
+
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
433
|
+
this.#drag = void 0;
|
|
434
|
+
delete this.#control.dataset.dragging;
|
|
435
|
+
if (this.#control.hasPointerCapture(event.pointerId)) this.#control.releasePointerCapture(event.pointerId);
|
|
436
|
+
if (this.#value !== drag.startValue) this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
|
|
437
|
+
}
|
|
438
|
+
#handleKeydown(event) {
|
|
439
|
+
if (event.target !== this || this.#isDisabled) return;
|
|
440
|
+
delete this.#control.dataset.pointerFocus;
|
|
441
|
+
const page = Math.max(this.#step, (this.#max - this.#min) / 10);
|
|
442
|
+
let next;
|
|
443
|
+
switch (event.key) {
|
|
444
|
+
case "ArrowRight":
|
|
445
|
+
case "ArrowUp":
|
|
446
|
+
next = this.#value + this.#step;
|
|
447
|
+
break;
|
|
448
|
+
case "ArrowLeft":
|
|
449
|
+
case "ArrowDown":
|
|
450
|
+
next = this.#value - this.#step;
|
|
451
|
+
break;
|
|
452
|
+
case "PageUp":
|
|
453
|
+
next = this.#value + page;
|
|
454
|
+
break;
|
|
455
|
+
case "PageDown":
|
|
456
|
+
next = this.#value - page;
|
|
457
|
+
break;
|
|
458
|
+
case "Home":
|
|
459
|
+
next = this.#min;
|
|
460
|
+
break;
|
|
461
|
+
case "End":
|
|
462
|
+
next = this.#max;
|
|
463
|
+
break;
|
|
464
|
+
default:
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
event.preventDefault();
|
|
468
|
+
if (this.#setValue(next)) this.dispatchEvent(new Event("change", { bubbles: true, composed: true }));
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
function register_a_slider() {
|
|
472
|
+
if (typeof customElements === "undefined") return;
|
|
473
|
+
if (!customElements.get("a-slider")) customElements.define("a-slider", ASliderElement);
|
|
474
|
+
}
|
|
475
|
+
register_a_slider();
|
|
476
|
+
export {
|
|
477
|
+
ASliderElement,
|
|
478
|
+
register_a_slider
|
|
479
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer anta{a-switch{--switch-gap: 8px;--switch-track-inline-size: 30px;--switch-track-block-size: 18px;--switch-thumb-size: 12px;--switch-thumb-size-off: 10px;--switch-thumb-inset: 2px;--switch-thumb-inset-off: 4px;--switch-thumb-travel: 13px;--switch-track-round: 999px;--switch-thumb-round: 999px;--switch-label-fs: 15px;--switch-label-lh: 20px;--switch-track-off-stroke-neutral: var(--border-3);--switch-track-off-stroke: var(--switch-track-off-stroke-neutral);--switch-track-off-stroke-hover: var(--border-2);--switch-track-off-stroke-active: var(--border-1);--switch-track-disabled: color-mix(in oklch, #44374b 10%, transparent);--switch-thumb: var(--bg-1);--switch-thumb-off: var(--switch-track-off-stroke);--switch-tone-source: var(--anta-seed-brand);--switch-off-tone-source: var(--anta-seed-brand);--_switch-tone-l-rest: .56;--_switch-tone-l-hover: .48;--_switch-tone-l-active: .42;--switch-track-on: oklch(from var(--switch-tone-source) var(--_switch-tone-l-rest) c h);--switch-track-on-hover: oklch(from var(--switch-tone-source) var(--_switch-tone-l-hover) c h);--switch-track-on-active: oklch(from var(--switch-tone-source) var(--_switch-tone-l-active) c h);--switch-label-color: var(--text-2);--switch-label-color-disabled: var(--text-4);--switch-hint-color: var(--text-3);--switch-hint-fs: 13px;--switch-hint-lh: 16px;display:inline-grid;grid-template-columns:auto minmax(0,1fr);align-items:start;column-gap:var(--switch-gap);min-inline-size:0;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-drag:none;outline:none;color:var(--switch-label-color);font-family:var(--sans-serif);font-size:var(--switch-label-fs);line-height:var(--switch-label-lh);font-feature-settings:"ss02","ss05","tnum";&:before,&:after{grid-column:1;grid-row:1 / -1;align-self:start;box-sizing:border-box;content:"";position:relative}&:before{z-index:0;box-sizing:border-box;inline-size:var(--switch-track-inline-size);block-size:var(--switch-track-block-size);margin-block-start:calc((var(--switch-label-lh) - var(--switch-track-block-size)) / 2);border-radius:var(--switch-track-round);background:transparent;border:1.5px solid var(--switch-track-off-stroke);transition:background-color .15s ease-out,border-color .15s ease-out}&:after{z-index:2;justify-self:start;inline-size:var(--switch-thumb-size-off);block-size:var(--switch-thumb-size-off);margin-inline-start:var(--switch-thumb-inset-off);margin-block-start:calc((var(--switch-label-lh) - var(--switch-thumb-size-off)) / 2);border-radius:var(--switch-thumb-round);background:var(--switch-thumb-off);box-shadow:none;transition:transform .15s ease-out,inline-size .15s ease-out,block-size .15s ease-out,margin-inline-start .15s ease-out,margin-block-start .15s ease-out,background-color .15s ease-out,box-shadow .15s ease-out}&[label-position=start]{grid-template-columns:minmax(0,1fr) auto;&:before,&:after{grid-column:2}a-switch-label,a-switch-hint{grid-column:1}}&[round]{--switch-track-round: var(--switch-round, attr(round type(<length>), 999px));--switch-thumb-round: max(0px, calc(var(--switch-track-round) - 3px))}&:state(checked){&:before{background:var(--switch-track-on);border-color:transparent}&:after{inline-size:var(--switch-thumb-size);block-size:var(--switch-thumb-size);margin-inline-start:var(--switch-thumb-inset);margin-block-start:calc((var(--switch-label-lh) - var(--switch-thumb-size)) / 2);transform:translate(var(--switch-thumb-travel));background:var(--switch-thumb);box-shadow:0 1px 2px color-mix(in oklch,#44374b 25%,transparent)}}@media(hover:hover)and (pointer:fine){&:not(:disabled):not(:state(checked)):hover:before{border-color:var(--switch-track-off-stroke-hover)}&:not(:disabled):hover:state(checked):before{background:var(--switch-track-on-hover)}}&:not(:disabled):not(:state(checked)):active:before{border-color:var(--switch-track-off-stroke-active)}&:not(:disabled):active:state(checked):before{background:var(--switch-track-on-active)}&:focus-visible:before{outline:1px solid var(--focus-ring);outline-offset:1px}&:disabled{cursor:not-allowed;color:var(--switch-label-color-disabled);&:before{background:var(--switch-track-disabled);border-color:var(--switch-track-disabled);transition:none}&:after{box-shadow:none;transition:none}&:state(checked){&:before{background:color-mix(in oklch,var(--switch-track-on) 50%,transparent);border-color:transparent}&:after{background:color-mix(in oklch,var(--switch-thumb) 50%,transparent);box-shadow:0 1px 2px color-mix(in oklch,#44374b 12.5%,transparent)}}a-switch-hint{color:var(--switch-label-color-disabled)}}&[size=small]{--switch-gap: 6px;--switch-track-inline-size: 26px;--switch-track-block-size: 16px;--switch-thumb-size: 10px;--switch-thumb-size-off: 8px;--switch-thumb-inset-off: 4px;--switch-thumb-travel: 11px;--switch-label-fs: 13px;--switch-label-lh: 16px;--switch-hint-fs: 12px;--switch-hint-lh: 14px}&[size=large]{--switch-track-inline-size: 34px;--switch-track-block-size: 20px;--switch-thumb-size: 14px;--switch-thumb-size-off: 11px;--switch-thumb-inset-off: 5px;--switch-thumb-travel: 15px;--switch-label-fs: 17px;--switch-label-lh: 22px;--switch-hint-fs: 15px;--switch-hint-lh: 19px}}a-switch-label,a-switch-hint{display:block;grid-column:2;min-inline-size:0}a-switch-hint{color:var(--switch-hint-color);font-size:var(--switch-hint-fs);line-height:var(--switch-hint-lh);margin-block-start:2px}a-switch[tone=brand]{--switch-tone-source: var(--anta-seed-brand);--switch-off-tone-source: var(--anta-seed-brand)}a-switch[tone=neutral]{--switch-tone-source: var(--anta-seed-neutral);--switch-off-tone-source: var(--anta-seed-neutral)}a-switch[tone=info]{--switch-tone-source: var(--anta-seed-info);--switch-off-tone-source: var(--anta-seed-info)}a-switch[tone=success]{--switch-tone-source: var(--anta-seed-success);--switch-off-tone-source: var(--anta-seed-success)}a-switch[tone=warning]{--switch-tone-source: var(--anta-seed-warning);--switch-off-tone-source: var(--anta-seed-warning)}a-switch[tone=critical]{--switch-tone-source: var(--anta-seed-critical);--switch-off-tone-source: var(--anta-seed-critical)}a-switch[tone]:not([tone=""],[tone=neutral]){--_switch-off-track: oklch(from var(--switch-off-tone-source) var(--_switch-tone-l-rest) c h);--_switch-off-chrome: color-mix(in oklch, var(--_switch-off-track) 70%, var(--switch-track-off-stroke-neutral));--switch-track-off-stroke: oklch(from var(--_switch-off-chrome) calc(l + .17) c h);--switch-track-off-stroke-hover: oklch(from var(--_switch-off-chrome) calc(l + .1) c h);--switch-track-off-stroke-active: var(--_switch-off-chrome);--switch-thumb-off: var(--_switch-off-chrome)}a-switch[tone]:not([tone=""],[tone=brand],[tone=neutral],[tone=info],[tone=success],[tone=warning],[tone=critical]){--switch-tone-source: attr(tone type(<color>), transparent);--switch-off-tone-source: attr(tone type(<color>), transparent)}a-switch[tone-selected=brand]{--switch-tone-source: var(--anta-seed-brand)}a-switch[tone-selected=neutral]{--switch-tone-source: var(--anta-seed-neutral)}a-switch[tone-selected=info]{--switch-tone-source: var(--anta-seed-info)}a-switch[tone-selected=success]{--switch-tone-source: var(--anta-seed-success)}a-switch[tone-selected=warning]{--switch-tone-source: var(--anta-seed-warning)}a-switch[tone-selected=critical]{--switch-tone-source: var(--anta-seed-critical)}a-switch[tone-selected]:not([tone-selected=""],[tone-selected=brand],[tone-selected=neutral],[tone-selected=info],[tone-selected=success],[tone-selected=warning],[tone-selected=critical]){--switch-tone-source: attr(tone-selected type(<color>), transparent)}.dark a-switch{--switch-track-disabled: color-mix(in oklch, #e4d1ef 10%, transparent);--switch-thumb: #ece9ec;--switch-thumb-off: var(--switch-track-off-stroke);--_switch-tone-l-rest: .47;--_switch-tone-l-hover: .53;--_switch-tone-l-active: .58}.dark a-switch[tone]:not([tone=""],[tone=neutral]){--switch-track-off-stroke: var(--_switch-off-chrome);--switch-track-off-stroke-hover: oklch(from var(--_switch-off-chrome) calc(l + .1) c h);--switch-track-off-stroke-active: oklch(from var(--_switch-off-chrome) calc(l + .17) c h)}@media(forced-colors:active){a-switch:before,a-switch:after{forced-color-adjust:none}a-switch:before{background-color:Canvas;border-color:CanvasText}a-switch:after{background-color:CanvasText;box-shadow:none}a-switch:state(checked):before{background-color:CanvasText;border-color:CanvasText}a-switch:state(checked):after{background-color:Canvas}a-switch:disabled:before{background-color:Canvas;border-color:GrayText}a-switch:disabled:after{background-color:GrayText}a-switch:disabled:state(checked):before{background-color:GrayText;border-color:GrayText}a-switch:disabled:state(checked):after{background-color:Canvas}}}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { HTMLElementBase } from "../anta_helpers";
|
|
2
|
+
import "./a-switch.css";
|
|
3
|
+
/**
|
|
4
|
+
* `<a-switch>` — a form-associated binary control for an immediate setting.
|
|
5
|
+
* State is held in ElementInternals, so the checked visual is available to CSS
|
|
6
|
+
* through `:state(checked)` without exposing a mutable host attribute. `state`
|
|
7
|
+
* is the controlled value; `default-state` is the uncontrolled initial value.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ASwitchElement extends HTMLElementBase {
|
|
10
|
+
#private;
|
|
11
|
+
static formAssociated: boolean;
|
|
12
|
+
static observedAttributes: string[];
|
|
13
|
+
private internals?;
|
|
14
|
+
private currentState;
|
|
15
|
+
private seeded;
|
|
16
|
+
private dirty;
|
|
17
|
+
private alive;
|
|
18
|
+
/** Current checked value. Write through the `state` attribute instead. */
|
|
19
|
+
get checked(): boolean;
|
|
20
|
+
constructor();
|
|
21
|
+
connectedCallback(): void;
|
|
22
|
+
attributeChangedCallback(name: string): void;
|
|
23
|
+
private seed;
|
|
24
|
+
private emitChange;
|
|
25
|
+
private toggle;
|
|
26
|
+
private paint;
|
|
27
|
+
formResetCallback(): void;
|
|
28
|
+
formStateRestoreCallback(state: string): void;
|
|
29
|
+
formDisabledCallback(): void;
|
|
30
|
+
}
|
|
31
|
+
export declare function register_a_switch(): void;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { HTMLElementBase } from "../anta_helpers";
|
|
2
|
+
import "./a-switch.css";
|
|
3
|
+
const parseState = (value) => value === "checked" ? "checked" : "unchecked";
|
|
4
|
+
class ASwitchElement extends HTMLElementBase {
|
|
5
|
+
static formAssociated = true;
|
|
6
|
+
static observedAttributes = ["state", "default-state", "value"];
|
|
7
|
+
internals;
|
|
8
|
+
currentState = "unchecked";
|
|
9
|
+
seeded = false;
|
|
10
|
+
dirty = false;
|
|
11
|
+
alive = false;
|
|
12
|
+
/** Current checked value. Write through the `state` attribute instead. */
|
|
13
|
+
get checked() {
|
|
14
|
+
return this.currentState === "checked";
|
|
15
|
+
}
|
|
16
|
+
constructor() {
|
|
17
|
+
super();
|
|
18
|
+
this.internals = this.attachInternals?.();
|
|
19
|
+
this.addEventListener("click", (event) => this.toggle(event));
|
|
20
|
+
this.addEventListener("keydown", (event) => {
|
|
21
|
+
if (event.key === " ") {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
this.click();
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
if (!this.seeded) {
|
|
29
|
+
this.seed();
|
|
30
|
+
this.seeded = true;
|
|
31
|
+
}
|
|
32
|
+
this.paint();
|
|
33
|
+
this.alive = true;
|
|
34
|
+
}
|
|
35
|
+
attributeChangedCallback(name) {
|
|
36
|
+
if (name === "state") {
|
|
37
|
+
const next = parseState(this.getAttribute("state"));
|
|
38
|
+
const changed = next !== this.currentState;
|
|
39
|
+
this.currentState = next;
|
|
40
|
+
this.paint();
|
|
41
|
+
if (changed && this.alive) this.emitChange();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (name === "default-state" && !this.#isControlled && !this.dirty) this.seed();
|
|
45
|
+
this.paint();
|
|
46
|
+
}
|
|
47
|
+
get #isDisabled() {
|
|
48
|
+
return this.matches(":disabled");
|
|
49
|
+
}
|
|
50
|
+
get #isControlled() {
|
|
51
|
+
return this.hasAttribute("state");
|
|
52
|
+
}
|
|
53
|
+
seed() {
|
|
54
|
+
this.currentState = parseState(
|
|
55
|
+
this.getAttribute("state") ?? this.getAttribute("default-state")
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
emitChange() {
|
|
59
|
+
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
60
|
+
}
|
|
61
|
+
toggle(_event) {
|
|
62
|
+
if (this.#isDisabled) return;
|
|
63
|
+
const prev = this.currentState;
|
|
64
|
+
const next = prev === "checked" ? "unchecked" : "checked";
|
|
65
|
+
const accepted = this.dispatchEvent(
|
|
66
|
+
new CustomEvent("statechange", {
|
|
67
|
+
cancelable: true,
|
|
68
|
+
detail: { next, prev }
|
|
69
|
+
})
|
|
70
|
+
);
|
|
71
|
+
if (this.#isControlled) return;
|
|
72
|
+
if (!accepted) return;
|
|
73
|
+
this.currentState = next;
|
|
74
|
+
this.dirty = true;
|
|
75
|
+
this.paint();
|
|
76
|
+
this.emitChange();
|
|
77
|
+
}
|
|
78
|
+
paint() {
|
|
79
|
+
const internals = this.internals;
|
|
80
|
+
if (!internals) return;
|
|
81
|
+
internals.states.delete("checked");
|
|
82
|
+
if (this.currentState === "checked") internals.states.add("checked");
|
|
83
|
+
internals.ariaChecked = this.currentState === "checked" ? "true" : "false";
|
|
84
|
+
internals.setFormValue?.(
|
|
85
|
+
this.currentState === "checked" ? this.getAttribute("value") ?? "on" : null,
|
|
86
|
+
this.currentState
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
formResetCallback() {
|
|
90
|
+
this.seed();
|
|
91
|
+
this.paint();
|
|
92
|
+
}
|
|
93
|
+
formStateRestoreCallback(state) {
|
|
94
|
+
this.currentState = parseState(state);
|
|
95
|
+
this.paint();
|
|
96
|
+
}
|
|
97
|
+
formDisabledCallback() {
|
|
98
|
+
this.paint();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function register_a_switch() {
|
|
102
|
+
if (typeof customElements === "undefined") return;
|
|
103
|
+
if (!customElements.get("a-switch")) customElements.define("a-switch", ASwitchElement);
|
|
104
|
+
}
|
|
105
|
+
register_a_switch();
|
|
106
|
+
export {
|
|
107
|
+
ASwitchElement,
|
|
108
|
+
register_a_switch
|
|
109
|
+
};
|
package/dist/elements/a-tabs.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer anta{a-tabs{--_fs: 15px;--_lh: 20px;--_pb: 1px;--tab-padding-x: 9px;--tab-height: 28px;--tab-radius: 4px;--tabs-gap: 3px;--tab-timing: .15s ease-out;--tabs-tone-source: var(--anta-seed-neutral);--tab-fg-rest: var(--text-3);--tab-selected-text: var(--text-1);--tab-text-2: var(--text-2);--_track-l: .55;--_track-c: .008;--_track-a: .06;--_sec-a: .03;--tabs-track-bg: oklch(from var(--tabs-tone-source) var(--_track-l) var(--_track-c) h / var(--_track-a));--tabs-track-border: var(--border-4);--tabs-track-shadow: inset 0 0 0px .5px var(--tabs-track-border);--tab-selected-bg: var(--bg-1);--tab-selected-border: var(--border-2);--tab-selected-shadow: inset 0 0 0px .5px var(--tab-selected-border);--tab-secondary-bg: oklch(from var(--tabs-tone-source) var(--_track-l) var(--_track-c) h / var(--_sec-a));display:flex;flex-direction:row;align-items:stretch;gap:var(--tabs-gap);padding:0;width:fit-content;align-self:flex-start;min-width:0;max-width:100%;overflow:hidden;scroll-behavior:smooth}a-tabs[size=small]{--_fs: 13px;--_lh: 16px;--_pb: .5px;--tab-padding-x: 7px;--tab-height: 24px}a-tabs[size=large]{--_fs: 17px;--_lh: 24px;--_pb: 1.5px;--tab-padding-x: 13px;--tab-height: 32px}a-tabs a-tab a-icon{--icon-size: 16px}a-tabs[size=small] a-tab a-icon{--icon-size: 14px}a-tabs[size=large] a-tab a-icon{--icon-size: 18px}a-tabs[tone=brand],a-tab[tone=brand]{--tabs-tone-source: var(--anta-seed-brand);--tab-selected-text: var(--text-1-brand);--tab-text-2: var(--text-2-brand);--tab-rest-tone: var(--text-3-brand);--tabs-track-border: var(--border-4-brand);--tab-selected-border: var(--border-2-brand)}a-tabs[tone=info],a-tab[tone=info]{--tabs-tone-source: var(--anta-seed-info);--tab-selected-text: var(--text-1-info);--tab-text-2: var(--text-2-info);--tab-rest-tone: var(--text-3-info);--tabs-track-border: var(--border-4-info);--tab-selected-border: var(--border-2-info)}a-tabs[tone=success],a-tab[tone=success]{--tabs-tone-source: var(--anta-seed-success);--tab-selected-text: var(--text-1-success);--tab-text-2: var(--text-2-success);--tab-rest-tone: var(--text-3-success);--tabs-track-border: var(--border-4-success);--tab-selected-border: var(--border-2-success)}a-tabs[tone=warning],a-tab[tone=warning]{--tabs-tone-source: var(--anta-seed-warning);--tab-selected-text: var(--text-1-warning);--tab-text-2: var(--text-2-warning);--tab-rest-tone: var(--text-3-warning);--tabs-track-border: var(--border-4-warning);--tab-selected-border: var(--border-2-warning)}a-tabs[tone=critical],a-tab[tone=critical]{--tabs-tone-source: var(--anta-seed-critical);--tab-selected-text: var(--text-1-critical);--tab-text-2: var(--text-2-critical);--tab-rest-tone: var(--text-3-critical);--tabs-track-border: var(--border-4-critical);--tab-selected-border: var(--border-2-critical)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--_track-c: .14}a-tabs:has(>a-tab[tone=brand]:state(selected)){--tabs-tone-source: var(--anta-seed-brand);--tab-selected-text: var(--text-1-brand);--tab-selected-border: var(--border-2-brand)}a-tabs:has(>a-tab[tone=info]:state(selected)){--tabs-tone-source: var(--anta-seed-info);--tab-selected-text: var(--text-1-info);--tab-selected-border: var(--border-2-info)}a-tabs:has(>a-tab[tone=success]:state(selected)){--tabs-tone-source: var(--anta-seed-success);--tab-selected-text: var(--text-1-success);--tab-selected-border: var(--border-2-success)}a-tabs:has(>a-tab[tone=warning]:state(selected)){--tabs-tone-source: var(--anta-seed-warning);--tab-selected-text: var(--text-1-warning);--tab-selected-border: var(--border-2-warning)}a-tabs:has(>a-tab[tone=critical]:state(selected)){--tabs-tone-source: var(--anta-seed-critical);--tab-selected-text: var(--text-1-critical);--tab-selected-border: var(--border-2-critical)}a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--_track-c: .14}a-tabs[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),a-tab[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--tabs-tone-source: attr(tone type(<color>), #635b65);--tab-selected-text: oklch(from var(--tabs-tone-source) .38 .13 h);--tab-text-2: oklch(from var(--tabs-tone-source) .45 .13 h);--tab-rest-tone: oklch(from var(--tabs-tone-source) .45 .13 h / .8);--tabs-track-border: oklch(from var(--tabs-tone-source) .9 .045 h);--tab-selected-border: oklch(from var(--tabs-tone-source) .8 .09 h)}a-tabs a-tab{--tab-fg: var(--tab-fg-rest);--tab-bg: transparent}a-tabs:not([orientation=vertical]) a-tab{flex:1 1 0;max-width:max-content}@media(hover:hover)and (pointer:fine){a-tabs a-tab:hover{--tab-fg: var(--tab-selected-text)}}a-tabs:not([priority=secondary],[priority=tertiary]){background:var(--tabs-track-bg);box-shadow:var(--tabs-track-shadow);border-radius:4px}a-tabs[round]{--tab-radius: 999px;--tabs-round: attr(round type(<length>), 999px)}a-tabs[round]:not([priority=secondary],[priority=tertiary]){border-radius:var(--tabs-round, 999px)}a-tabs:not([priority=secondary],[priority=tertiary]) a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-bg: var(--tab-selected-bg);box-shadow:var(--tab-selected-shadow)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--tab-fg-rest: var(--tab-rest-tone)}@media(hover:hover)and (pointer:fine){a-tabs[priority=secondary] a-tab:hover{--tab-fg: var(--tab-selected-text)}}a-tabs[priority=secondary] a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-bg: var(--tab-secondary-bg);box-shadow:var(--tab-selected-shadow)}a-tabs[priority=tertiary] a-tab{--tab-underline-size: 1px;--tab-underline-color: transparent;position:relative;border-radius:0}a-tabs[priority=tertiary] a-tab:after{content:"";position:absolute;inset:0;box-sizing:border-box;pointer-events:none;border-bottom:var(--tab-underline-size) solid var(--tab-underline-color);transition:border-width var(--tab-timing),border-color var(--tab-timing)}a-tabs[orientation=vertical][priority=tertiary] a-tab:after{border-bottom:0;border-inline-end:var(--tab-underline-size) solid var(--tab-underline-color)}@media(hover:hover)and (pointer:fine){a-tabs[priority=tertiary] a-tab:hover{--tab-fg: var(--tab-text-2)}}a-tabs[priority=tertiary] a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-underline-size: 1px;--tab-underline-color: var(--tab-selected-text)}a-tabs[orientation=vertical]{flex-direction:column;align-items:stretch;max-width:none;overflow-x:hidden;overflow-y:auto;flex-shrink:0}a-tabs[orientation=vertical] a-tab{justify-content:flex-start;flex-shrink:0}@supports (anchor-scope: all){a-tabs:not([noslide]){position:relative;anchor-scope:all}a-tabs:not([noslide]) a-tab{position:relative;z-index:1}a-tabs:not([noslide]) a-tab:state(selected){anchor-name:--tabs-active}a-tabs:not([noslide]):before{content:"";position:absolute;z-index:0;box-sizing:border-box;position-anchor:--tabs-active;top:anchor(top);right:anchor(right);bottom:anchor(bottom);left:anchor(left);transition:top var(--tab-timing),right var(--tab-timing),bottom var(--tab-timing),left var(--tab-timing)}a-tabs:not([noslide]):not(:has(a-tab:state(selected))):before{display:none}@media(prefers-reduced-motion:reduce){a-tabs:not([noslide]):before{transition:none}}a-tabs:not([noslide]) a-tab:state(selected){--tab-bg: transparent;box-shadow:none}a-tabs:not([noslide],[priority=secondary],[priority=tertiary]):before{background:var(--tab-selected-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-selected-shadow)}a-tabs:not([noslide])[priority=secondary]:before{background:var(--tab-secondary-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-selected-shadow)}a-tabs:not([noslide])[priority=tertiary] a-tab:state(selected){--tab-underline-size: 1px;--tab-underline-color: transparent}a-tabs:not([noslide])[priority=tertiary]:before{z-index:2;border-bottom:1px solid var(--tab-selected-text)}a-tabs[orientation=vertical]:not([noslide])[priority=tertiary]:before{border-bottom:0;border-inline-end:1px solid var(--tab-selected-text)}}.dark a-tabs{--_track-l: .8;--_track-a: .07;--_sec-a: .08}.dark a-tabs[tone]:not([tone=""],[tone=neutral]),.dark a-tab[tone]:not([tone=""],[tone=neutral]){--_track-c: .12}.dark a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--_track-c: .12}.dark a-tabs[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),.dark a-tab[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--tab-selected-text: oklch(from var(--tabs-tone-source) .83 .1 h);--tab-text-2: oklch(from var(--tabs-tone-source) .76 .11 h);--tab-rest-tone: oklch(from var(--tabs-tone-source) .76 .11 h / .8);--tabs-track-border: oklch(from var(--tabs-tone-source) .26 .055 h);--tab-selected-border: oklch(from var(--tabs-tone-source) .4 .11 h)}}
|
|
1
|
+
@layer anta{a-tabs{--_fs: 15px;--_lh: 20px;--_pb: 1px;--tab-padding-x: 9px;--tab-height: 28px;--tab-radius: 4px;--tabs-gap: 3px;--tab-timing: .15s ease-out;--tabs-tone-source: var(--anta-seed-neutral);--tab-fg-rest: var(--text-3);--tab-selected-text: var(--text-1);--tab-text-2: var(--text-2);--_track-l: .55;--_track-c: .008;--_track-a: .06;--_sec-a: .03;--tabs-track-bg: oklch(from var(--tabs-tone-source) var(--_track-l) var(--_track-c) h / var(--_track-a));--tabs-track-border: var(--border-4);--tabs-track-shadow: inset 0 0 0px .5px var(--tabs-track-border);--tab-selected-bg: var(--bg-1);--tab-selected-border: var(--border-2);--tab-selected-shadow: inset 0 0 0px .5px var(--tab-selected-border);--tab-secondary-bg: oklch(from var(--tabs-tone-source) var(--_track-l) var(--_track-c) h / var(--_sec-a));display:flex;flex-direction:row;align-items:stretch;gap:var(--tabs-gap);padding:0;width:fit-content;align-self:flex-start;min-width:0;max-width:100%;overflow:hidden;scroll-behavior:smooth}a-tabs[size=small]{--_fs: 13px;--_lh: 16px;--_pb: .5px;--tab-padding-x: 7px;--tab-height: 24px}a-tabs[size=large]{--_fs: 17px;--_lh: 24px;--_pb: 1.5px;--tab-padding-x: 13px;--tab-height: 32px}a-tabs a-tab a-icon{--icon-size: 16px}a-tabs[size=small] a-tab a-icon{--icon-size: 14px}a-tabs[size=large] a-tab a-icon{--icon-size: 18px}a-tabs[tone=brand],a-tab[tone=brand]{--tabs-tone-source: var(--anta-seed-brand);--tab-selected-text: var(--text-1-brand);--tab-text-2: var(--text-2-brand);--tab-rest-tone: var(--text-3-brand);--tabs-track-border: var(--border-4-brand);--tab-selected-border: var(--border-2-brand)}a-tabs[tone=info],a-tab[tone=info]{--tabs-tone-source: var(--anta-seed-info);--tab-selected-text: var(--text-1-info);--tab-text-2: var(--text-2-info);--tab-rest-tone: var(--text-3-info);--tabs-track-border: var(--border-4-info);--tab-selected-border: var(--border-2-info)}a-tabs[tone=success],a-tab[tone=success]{--tabs-tone-source: var(--anta-seed-success);--tab-selected-text: var(--text-1-success);--tab-text-2: var(--text-2-success);--tab-rest-tone: var(--text-3-success);--tabs-track-border: var(--border-4-success);--tab-selected-border: var(--border-2-success)}a-tabs[tone=warning],a-tab[tone=warning]{--tabs-tone-source: var(--anta-seed-warning);--tab-selected-text: var(--text-1-warning);--tab-text-2: var(--text-2-warning);--tab-rest-tone: var(--text-3-warning);--tabs-track-border: var(--border-4-warning);--tab-selected-border: var(--border-2-warning)}a-tabs[tone=critical],a-tab[tone=critical]{--tabs-tone-source: var(--anta-seed-critical);--tab-selected-text: var(--text-1-critical);--tab-text-2: var(--text-2-critical);--tab-rest-tone: var(--text-3-critical);--tabs-track-border: var(--border-4-critical);--tab-selected-border: var(--border-2-critical)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--_track-c: .14}a-tabs:has(>a-tab[tone=brand]:state(selected)){--tabs-tone-source: var(--anta-seed-brand);--tab-selected-text: var(--text-1-brand);--tab-selected-border: var(--border-2-brand)}a-tabs:has(>a-tab[tone=info]:state(selected)){--tabs-tone-source: var(--anta-seed-info);--tab-selected-text: var(--text-1-info);--tab-selected-border: var(--border-2-info)}a-tabs:has(>a-tab[tone=success]:state(selected)){--tabs-tone-source: var(--anta-seed-success);--tab-selected-text: var(--text-1-success);--tab-selected-border: var(--border-2-success)}a-tabs:has(>a-tab[tone=warning]:state(selected)){--tabs-tone-source: var(--anta-seed-warning);--tab-selected-text: var(--text-1-warning);--tab-selected-border: var(--border-2-warning)}a-tabs:has(>a-tab[tone=critical]:state(selected)){--tabs-tone-source: var(--anta-seed-critical);--tab-selected-text: var(--text-1-critical);--tab-selected-border: var(--border-2-critical)}a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--_track-c: .14}a-tabs[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),a-tab[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--tabs-tone-source: attr(tone type(<color>), #635b65);--tab-selected-text: oklch(from var(--tabs-tone-source) .38 .13 h);--tab-text-2: oklch(from var(--tabs-tone-source) .45 .13 h);--tab-rest-tone: oklch(from var(--tabs-tone-source) .45 .13 h / .8);--tabs-track-border: oklch(from var(--tabs-tone-source) .9 .045 h);--tab-selected-border: oklch(from var(--tabs-tone-source) .8 .09 h)}a-tabs a-tab{--tab-fg: var(--tab-fg-rest);--tab-bg: transparent}a-tabs:not([orientation=vertical]) a-tab{flex:1 1 0;max-width:max-content}@media(hover:hover)and (pointer:fine){a-tabs a-tab:hover{--tab-fg: var(--tab-selected-text)}}a-tabs:not([priority=secondary],[priority=tertiary]){background:var(--tabs-track-bg);box-shadow:var(--tabs-track-shadow);border-radius:4px}a-tabs[round]{--tab-radius: 999px;--tabs-round: attr(round type(<length>), 999px)}a-tabs[round]:not([priority=secondary],[priority=tertiary]){border-radius:var(--tabs-round, 999px)}a-tabs:not([priority=secondary],[priority=tertiary]) a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-bg: var(--tab-selected-bg);box-shadow:var(--tab-selected-shadow)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--tab-fg-rest: var(--tab-rest-tone)}@media(hover:hover)and (pointer:fine){a-tabs[priority=secondary] a-tab:hover{--tab-fg: var(--tab-selected-text)}}a-tabs[priority=secondary] a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-bg: var(--tab-secondary-bg);box-shadow:var(--tab-selected-shadow)}a-tabs[priority=tertiary] a-tab{--tab-underline-size: 1px;--tab-underline-color: transparent;position:relative;border-radius:0}a-tabs[priority=tertiary] a-tab:after{content:"";position:absolute;inset:0;box-sizing:border-box;pointer-events:none;border-bottom:var(--tab-underline-size) solid var(--tab-underline-color);transition:border-width var(--tab-timing),border-color var(--tab-timing)}a-tabs[orientation=vertical][priority=tertiary] a-tab:after{border-bottom:0;border-inline-end:var(--tab-underline-size) solid var(--tab-underline-color)}@media(hover:hover)and (pointer:fine){a-tabs[priority=tertiary] a-tab:hover{--tab-fg: var(--tab-text-2)}}a-tabs[priority=tertiary] a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-underline-size: 1px;--tab-underline-color: var(--tab-selected-text)}a-tabs[orientation=vertical]{flex-direction:column;align-items:stretch;max-width:none;overflow-x:hidden;overflow-y:auto;flex-shrink:0}a-tabs[orientation=vertical] a-tab{justify-content:flex-start;flex-shrink:0}@supports (anchor-scope: all){a-tabs:not([noslide]){position:relative;anchor-scope:all}a-tabs:not([noslide]) a-tab{position:relative;z-index:1}a-tabs:not([noslide]) a-tab:state(selected){anchor-name:--tabs-active}a-tabs:not([noslide]):before{content:"";position:absolute;z-index:0;box-sizing:border-box;position-anchor:--tabs-active;top:anchor(top);right:anchor(right);bottom:anchor(bottom);left:anchor(left);transition:top var(--tab-timing),right var(--tab-timing),bottom var(--tab-timing),left var(--tab-timing)}a-tabs:not([noslide]):not(:has(a-tab:state(selected))):before{display:none}@media(prefers-reduced-motion:reduce){a-tabs:not([noslide]):before{transition:none}}a-tabs:not([noslide]) a-tab:state(selected){--tab-bg: transparent;box-shadow:none}a-tabs:not([noslide],[priority=secondary],[priority=tertiary]):before{background:var(--tab-selected-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-selected-shadow)}a-tabs:not([noslide])[priority=secondary]:before{background:var(--tab-secondary-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-selected-shadow)}a-tabs:not([noslide])[priority=tertiary] a-tab:state(selected){--tab-underline-size: 1px;--tab-underline-color: transparent}a-tabs:not([noslide])[priority=tertiary]:before{z-index:2;border-bottom:1px solid var(--tab-selected-text)}a-tabs[orientation=vertical]:not([noslide])[priority=tertiary]:before{border-bottom:0;border-inline-end:1px solid var(--tab-selected-text)}}.dark a-tabs{--_track-l: .8;--_track-a: .07;--_sec-a: .08}.dark a-tabs[tone]:not([tone=""],[tone=neutral]),.dark a-tab[tone]:not([tone=""],[tone=neutral]){--_track-c: .12}.dark a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--_track-c: .12}.dark a-tabs[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),.dark a-tab[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--tab-selected-text: oklch(from var(--tabs-tone-source) .83 .1 h);--tab-text-2: oklch(from var(--tabs-tone-source) .76 .11 h);--tab-rest-tone: oklch(from var(--tabs-tone-source) .76 .11 h / .8);--tabs-track-border: oklch(from var(--tabs-tone-source) .26 .055 h);--tab-selected-border: oklch(from var(--tabs-tone-source) .4 .11 h)}@media(forced-colors:active){a-tabs:not([priority=secondary],[priority=tertiary]){background-color:Canvas;border:1px solid CanvasText;box-shadow:none}a-tabs[priority=tertiary] a-tab{--tab-underline-size: 0px;--tab-underline-color: transparent}a-tabs[priority=tertiary] a-tab:state(selected){--tab-underline-size: 2px;--tab-underline-color: CanvasText}a-tabs:not([priority=secondary],[priority=tertiary]) a-tab:state(selected){--anta-forced-foreground: ButtonFace;forced-color-adjust:none;color:ButtonFace;background-color:ButtonText;border:1px solid ButtonText;box-shadow:none}a-tabs[priority=secondary] a-tab:state(selected){background-color:Canvas;border:1px solid CanvasText;box-shadow:none}@supports (anchor-scope: all){a-tabs:not([noslide],[priority=tertiary]) a-tab:state(selected){background-color:transparent;border:0}a-tabs:not([noslide])[priority=tertiary] a-tab:state(selected){--tab-underline-size: 0px;--tab-underline-color: transparent}a-tabs:not([noslide],[priority=secondary],[priority=tertiary]):before{forced-color-adjust:none;background-color:ButtonText;border:1px solid ButtonText;box-shadow:none}a-tabs:not([noslide])[priority=secondary]:before{forced-color-adjust:none;background-color:Canvas;border:1px solid CanvasText;box-shadow:none}a-tabs:not([noslide])[priority=tertiary]:before{forced-color-adjust:none;border-bottom-width:2px;border-bottom-color:CanvasText}a-tabs[orientation=vertical]:not([noslide])[priority=tertiary]:before{border-inline-end-width:2px;border-inline-end-color:CanvasText}}}}
|