@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.
Files changed (54) hide show
  1. package/README.md +75 -45
  2. package/dist/anta_helpers.d.ts +8 -13
  3. package/dist/anta_helpers.js +11 -3
  4. package/dist/components/Banner.js +1 -0
  5. package/dist/components/ButtonCopy.d.ts +9 -6
  6. package/dist/components/ButtonCopy.js +5 -3
  7. package/dist/components/Card.js +1 -15
  8. package/dist/components/InputAutocomplete.js +1 -1
  9. package/dist/components/InputTime.d.ts +5 -4
  10. package/dist/components/Slider.d.ts +89 -0
  11. package/dist/components/Slider.js +144 -0
  12. package/dist/components/Switch.d.ts +68 -0
  13. package/dist/components/Switch.js +90 -0
  14. package/dist/components/copy-props.d.ts +2 -0
  15. package/dist/components/copy-props.js +2 -1
  16. package/dist/elements/a-banner.css +1 -1
  17. package/dist/elements/a-button.css +1 -1
  18. package/dist/elements/a-card.css +1 -1
  19. package/dist/elements/a-checkbox.css +1 -1
  20. package/dist/elements/a-copy.d.ts +1 -1
  21. package/dist/elements/a-copy.js +103 -69
  22. package/dist/elements/a-dialog.css +1 -1
  23. package/dist/elements/a-dialog.js +1 -1
  24. package/dist/elements/a-expander.css +1 -1
  25. package/dist/elements/a-icon.css +1 -1
  26. package/dist/elements/a-icon.shapes.css +1 -1
  27. package/dist/elements/a-icon.shapes.d.ts +3 -1
  28. package/dist/elements/a-icon.shapes.js +4 -0
  29. package/dist/elements/a-input-time.css +1 -1
  30. package/dist/elements/a-input-time.js +298 -377
  31. package/dist/elements/a-input.css +1 -1
  32. package/dist/elements/a-input.d.ts +0 -3
  33. package/dist/elements/a-input.js +16 -46
  34. package/dist/elements/a-progress.css +1 -1
  35. package/dist/elements/a-progress.js +2 -0
  36. package/dist/elements/a-radio.css +1 -1
  37. package/dist/elements/a-slider.css +1 -0
  38. package/dist/elements/a-slider.d.ts +24 -0
  39. package/dist/elements/a-slider.js +479 -0
  40. package/dist/elements/a-switch.css +1 -0
  41. package/dist/elements/a-switch.d.ts +31 -0
  42. package/dist/elements/a-switch.js +109 -0
  43. package/dist/elements/a-tabs.css +1 -1
  44. package/dist/elements/a-tag.css +1 -1
  45. package/dist/elements/a-tooltip.css +1 -1
  46. package/dist/elements/copy-behavior.d.ts +3 -3
  47. package/dist/elements/index.d.ts +2 -0
  48. package/dist/elements/index.js +6 -0
  49. package/dist/general_types.d.ts +98 -4
  50. package/dist/index.d.ts +4 -0
  51. package/dist/index.js +4 -0
  52. package/dist/jsx-runtime.d.ts +6 -1
  53. package/dist/theme-anta.css +1 -1
  54. 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
+ };
@@ -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}}}}