@antadesign/anta 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/anta_helpers.d.ts +101 -0
- package/dist/anta_helpers.js +77 -0
- package/dist/calendar-core.d.ts +126 -0
- package/dist/calendar-core.js +289 -0
- package/dist/components/Button.d.ts +9 -1
- package/dist/components/Button.js +5 -2
- package/dist/components/Calendar.d.ts +80 -0
- package/dist/components/Calendar.js +220 -0
- package/dist/components/Checkbox.d.ts +16 -11
- package/dist/components/Checkbox.js +13 -7
- package/dist/components/Expander.d.ts +7 -1
- package/dist/components/Expander.js +4 -2
- package/dist/components/Input.d.ts +13 -5
- package/dist/components/Input.js +14 -6
- package/dist/components/InputDate.d.ts +87 -0
- package/dist/components/InputDate.js +278 -0
- package/dist/components/InputDate.module.css +1 -0
- package/dist/components/Menu.d.ts +5 -1
- package/dist/components/Menu.js +6 -2
- package/dist/components/MenuItem.d.ts +48 -7
- package/dist/components/MenuItem.js +71 -7
- package/dist/components/MenuSeparator.d.ts +13 -2
- package/dist/components/MenuSeparator.js +12 -2
- package/dist/components/Progress.d.ts +4 -1
- package/dist/components/Progress.js +4 -3
- package/dist/components/RadioGroup.d.ts +12 -10
- package/dist/components/RadioGroup.js +5 -5
- package/dist/components/Select.d.ts +255 -0
- package/dist/components/Select.js +290 -0
- package/dist/components/Select.module.css +1 -0
- package/dist/components/Tab.d.ts +3 -0
- package/dist/components/Tab.js +2 -1
- package/dist/components/TabPanel.js +2 -1
- package/dist/components/Tabs.d.ts +18 -1
- package/dist/components/Tabs.js +8 -6
- package/dist/components/Tag.d.ts +10 -9
- package/dist/components/Tag.js +2 -2
- package/dist/components/Text.d.ts +6 -5
- package/dist/components/Title.d.ts +4 -2
- package/dist/components/Tooltip.d.ts +4 -1
- package/dist/components/Tooltip.js +5 -0
- package/dist/elements/a-button.css +1 -1
- package/dist/elements/a-calendar.css +1 -0
- package/dist/elements/a-calendar.d.ts +76 -0
- package/dist/elements/a-calendar.js +190 -0
- package/dist/elements/a-checkbox.css +1 -1
- package/dist/elements/a-checkbox.d.ts +1 -2
- package/dist/elements/a-checkbox.js +5 -5
- package/dist/elements/a-expander.css +1 -1
- package/dist/elements/a-expander.d.ts +16 -5
- package/dist/elements/a-expander.js +59 -8
- package/dist/elements/a-icon.shapes.css +1 -1
- package/dist/elements/a-icon.shapes.d.ts +6 -1
- package/dist/elements/a-icon.shapes.js +9 -0
- package/dist/elements/a-input.css +1 -1
- package/dist/elements/a-input.d.ts +6 -0
- package/dist/elements/a-input.js +27 -8
- package/dist/elements/a-menu-group.css +1 -1
- package/dist/elements/a-menu-item.css +1 -1
- package/dist/elements/a-menu-item.d.ts +14 -4
- package/dist/elements/a-menu-item.js +17 -0
- package/dist/elements/a-menu-separator.css +1 -1
- package/dist/elements/a-menu.css +1 -1
- package/dist/elements/a-menu.d.ts +51 -8
- package/dist/elements/a-menu.js +285 -42
- package/dist/elements/a-progress.css +1 -1
- package/dist/elements/a-radio-group.d.ts +1 -3
- package/dist/elements/a-radio-group.js +13 -13
- package/dist/elements/a-radio.css +1 -1
- package/dist/elements/a-radio.d.ts +3 -11
- package/dist/elements/a-radio.js +3 -34
- package/dist/elements/a-tab.css +1 -1
- package/dist/elements/a-tab.d.ts +3 -11
- package/dist/elements/a-tab.js +3 -34
- package/dist/elements/a-tabs.css +1 -1
- package/dist/elements/a-tabs.d.ts +1 -4
- package/dist/elements/a-tabs.js +14 -14
- package/dist/elements/a-tag.css +1 -1
- package/dist/elements/a-text.d.ts +14 -13
- package/dist/elements/a-text.js +53 -23
- package/dist/elements/a-tooltip.css +1 -1
- package/dist/elements/a-tooltip.d.ts +1 -11
- package/dist/elements/a-tooltip.js +20 -19
- package/dist/elements/index.d.ts +1 -0
- package/dist/elements/index.js +3 -0
- package/dist/general_types.d.ts +127 -31
- package/dist/index.d.ts +9 -1
- package/dist/index.js +37 -1
- package/dist/jsx-runtime.d.ts +16 -7
- package/dist/jsx-runtime.js +6 -0
- package/dist/reset.css +1 -1
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer anta{a-radio{--radio-control-size: 16px;--radio-border-width: 1.5px;--radio-dot-size: 6px;--_radio-dot-adjust: 0px;--radio-gap: 8px;--radio-bg: var(--bg-1);--radio-fill: #635b65;--radio-fill-hover: #534c57;--radio-fill-active: #49424c;--radio-border-neutral: #d4ced4;--radio-border: var(--radio-border-neutral);--radio-border-hover: #c1b9c1;--radio-border-active: #9f99a1;--radio-dot: #ffffff;--radio-dot-disabled: #c1b9c1;--radio-bg-disabled: color-mix(in oklch, #44374b 10%, transparent);--radio-border-disabled: color-mix(in oklch, #44374b 15%, transparent);--radio-label-color: var(--text-2);--radio-label-color-disabled: var(--text-4);--radio-hint-color: var(--text-3);--radio-label-fs: 15px;--radio-label-lh: 20px;--radio-hint-fs: 14px;--radio-hint-lh: 17px;display:inline-grid;grid-template-columns:auto 1fr;align-items:center;column-gap:var(--radio-gap);cursor:pointer;user-select:none;-webkit-user-drag:none;vertical-align:middle;outline:none;color:var(--radio-label-color);font-family:var(--sans-serif);font-size:var(--radio-label-fs);line-height:var(--radio-label-lh);font-feature-settings:"ss02","ss05","tnum";&:before{content:"";grid-column:1;grid-row:1 / -1;align-self:center;box-sizing:border-box;inline-size:var(--radio-control-size);block-size:var(--radio-control-size);border-radius:50%;background:var(--radio-bg);border:var(--radio-border-width) solid var(--radio-border);transition:background-color .15s ease-out,border-color .15s ease-out}&:after{content:"";grid-column:1;grid-row:1 / -1;align-self:center;justify-self:center;inline-size:calc(var(--radio-dot-size) - var(--_radio-dot-adjust));block-size:calc(var(--radio-dot-size) - var(--_radio-dot-adjust));border-radius:50%;background:var(--radio-dot);transform:scale(0);transition:transform .12s ease-out;pointer-events:none}@media(hover:hover)and (pointer:fine){&:not([disabled]):hover:before{border-color:var(--radio-border-hover);transition:background-color 75ms ease-in,border-color 75ms ease-in}&:not([disabled]):hover:state(selected):before{background:var(--radio-fill-hover);border-color:var(--radio-fill-hover)}}&:not([disabled]):active:before{border-color:var(--radio-border-active);transition:background-color 50ms linear,border-color 50ms linear}&:not([disabled]):active:state(selected):before{background:var(--radio-fill-active);border-color:var(--radio-fill-active)}&:state(selected){&:before{background:var(--radio-fill);border-color:var(--radio-fill)}&:after{transform:scale(1)}}&:focus-visible:before{outline:1px solid var(--focus-ring);outline-offset:1px}&[disabled]{cursor:not-allowed;color:var(--radio-label-color-disabled);&:before{background:var(--radio-bg-disabled);border-color:var(--radio-border-disabled);transition:none}&:state(selected):after{background:var(--radio-dot-disabled)}a-radio-hint{color:var(--radio-label-color-disabled)}}&[size=small]{--radio-control-size: 14px;--radio-dot-size: 5px;--radio-gap: 6px;--radio-label-fs: 13px;--radio-label-lh: 16px;--radio-hint-fs: 12px;--radio-hint-lh: 14px}&[size=large]{--radio-control-size: 18px;--radio-dot-size: 7px;--radio-label-fs: 17px;--radio-label-lh: 24px;--radio-hint-fs: 16px;--radio-hint-lh: 21px}}a-radio-label,a-radio-hint{display:block;grid-column:2;min-width:0}a-radio-hint{color:var(--radio-hint-color);font-size:var(--radio-hint-fs);line-height:var(--radio-hint-lh);margin-block-start:2px}a-radio-group:focus-visible a-radio:state(selected):before{outline:1px solid var(--focus-ring);outline-offset:1px}a-radio[tone=brand],a-radio-group[tone=brand] a-radio:not([tone]){--radio-fill: #5f4bc3;--radio-fill-hover: #503cb4;--radio-fill-active: #483493}a-radio[tone=neutral],a-radio-group[tone=neutral] a-radio:not([tone]){--radio-fill: #635b65;--radio-fill-hover: #534c57;--radio-fill-active: #49424c}a-radio[tone=info],a-radio-group[tone=info] a-radio:not([tone])
|
|
1
|
+
@layer anta{a-radio{--radio-control-size: 16px;--radio-border-width: 1.5px;--radio-dot-size: 6px;--_radio-dot-adjust: 0px;--radio-gap: 8px;--radio-bg: var(--bg-1);--radio-fill: #635b65;--radio-fill-hover: #534c57;--radio-fill-active: #49424c;--radio-border-neutral: #d4ced4;--radio-border: var(--radio-border-neutral);--radio-border-hover: #c1b9c1;--radio-border-active: #9f99a1;--radio-dot: #ffffff;--radio-dot-disabled: #c1b9c1;--radio-bg-disabled: color-mix(in oklch, #44374b 10%, transparent);--radio-border-disabled: color-mix(in oklch, #44374b 15%, transparent);--radio-label-color: var(--text-2);--radio-label-color-disabled: var(--text-4);--radio-hint-color: var(--text-3);--radio-label-fs: 15px;--radio-label-lh: 20px;--radio-hint-fs: 14px;--radio-hint-lh: 17px;display:inline-grid;grid-template-columns:auto 1fr;align-items:center;column-gap:var(--radio-gap);cursor:pointer;user-select:none;-webkit-user-drag:none;vertical-align:middle;outline:none;color:var(--radio-label-color);font-family:var(--sans-serif);font-size:var(--radio-label-fs);line-height:var(--radio-label-lh);font-feature-settings:"ss02","ss05","tnum";&:before{content:"";grid-column:1;grid-row:1 / -1;align-self:center;box-sizing:border-box;inline-size:var(--radio-control-size);block-size:var(--radio-control-size);border-radius:50%;background:var(--radio-bg);border:var(--radio-border-width) solid var(--radio-border);transition:background-color .15s ease-out,border-color .15s ease-out}&:after{content:"";grid-column:1;grid-row:1 / -1;align-self:center;justify-self:center;inline-size:calc(var(--radio-dot-size) - var(--_radio-dot-adjust));block-size:calc(var(--radio-dot-size) - var(--_radio-dot-adjust));border-radius:50%;background:var(--radio-dot);transform:scale(0);transition:transform .12s ease-out;pointer-events:none}@media(hover:hover)and (pointer:fine){&:not([disabled]):hover:before{border-color:var(--radio-border-hover);transition:background-color 75ms ease-in,border-color 75ms ease-in}&:not([disabled]):hover:state(selected):before{background:var(--radio-fill-hover);border-color:var(--radio-fill-hover)}}&:not([disabled]):active:before{border-color:var(--radio-border-active);transition:background-color 50ms linear,border-color 50ms linear}&:not([disabled]):active:state(selected):before{background:var(--radio-fill-active);border-color:var(--radio-fill-active)}&:state(selected){&:before{background:var(--radio-fill);border-color:var(--radio-fill)}&:after{transform:scale(1)}}&:focus-visible:before{outline:1px solid var(--focus-ring);outline-offset:1px}&[disabled]{cursor:not-allowed;color:var(--radio-label-color-disabled);&:before{background:var(--radio-bg-disabled);border-color:var(--radio-border-disabled);transition:none}&:state(selected):after{background:var(--radio-dot-disabled)}a-radio-hint{color:var(--radio-label-color-disabled)}}&[size=small]{--radio-control-size: 14px;--radio-dot-size: 5px;--radio-gap: 6px;--radio-label-fs: 13px;--radio-label-lh: 16px;--radio-hint-fs: 12px;--radio-hint-lh: 14px}&[size=large]{--radio-control-size: 18px;--radio-dot-size: 7px;--radio-label-fs: 17px;--radio-label-lh: 24px;--radio-hint-fs: 16px;--radio-hint-lh: 21px}}a-radio-label,a-radio-hint{display:block;grid-column:2;min-width:0}a-radio-hint{color:var(--radio-hint-color);font-size:var(--radio-hint-fs);line-height:var(--radio-hint-lh);margin-block-start:2px}a-radio-group:focus-visible a-radio:state(selected):before{outline:1px solid var(--focus-ring);outline-offset:1px}a-radio[tone=brand],a-radio[tone-selected=brand],a-radio-group[tone=brand] a-radio:not([tone]),a-radio-group[tone-selected=brand] a-radio:not([tone-selected]){--radio-fill: #5f4bc3;--radio-fill-hover: #503cb4;--radio-fill-active: #483493}a-radio[tone=neutral],a-radio[tone-selected=neutral],a-radio-group[tone=neutral] a-radio:not([tone]),a-radio-group[tone-selected=neutral] a-radio:not([tone-selected]){--radio-fill: #635b65;--radio-fill-hover: #534c57;--radio-fill-active: #49424c}a-radio[tone=info],a-radio[tone-selected=info],a-radio-group[tone=info] a-radio:not([tone]),a-radio-group[tone-selected=info] a-radio:not([tone-selected]){--radio-fill: #1f6eb2;--radio-fill-hover: #1a5b93;--radio-fill-active: #175082}a-radio[tone=success],a-radio[tone-selected=success],a-radio-group[tone=success] a-radio:not([tone]),a-radio-group[tone-selected=success] a-radio:not([tone-selected]){--radio-fill: #2a7e43;--radio-fill-hover: #226737;--radio-fill-active: #1f5c31}a-radio[tone=warning],a-radio[tone-selected=warning],a-radio-group[tone=warning] a-radio:not([tone]),a-radio-group[tone-selected=warning] a-radio:not([tone-selected]){--radio-fill: #c37416;--radio-fill-hover: #ae6613;--radio-fill-active: #995200}a-radio[tone=critical],a-radio[tone-selected=critical],a-radio-group[tone=critical] a-radio:not([tone]),a-radio-group[tone-selected=critical] a-radio:not([tone-selected]){--radio-fill: #c9302c;--radio-fill-hover: #b02120;--radio-fill-active: #a01c1c}a-radio[tone]:not([tone=""],[tone=neutral]),a-radio-group[tone]:not([tone=""],[tone=neutral]) a-radio:not([tone]){--_radio-border-base: color-mix(in oklch, var(--radio-fill) 70%, var(--radio-border-neutral));--radio-border: oklch(from var(--_radio-border-base) calc(l + .17) c h);--radio-border-hover: oklch(from var(--_radio-border-base) calc(l + .1) c h);--radio-border-active: var(--_radio-border-base);.dark &{--radio-border: var(--_radio-border-base);--radio-border-hover: oklch(from var(--_radio-border-base) calc(l + .1) c h);--radio-border-active: oklch(from var(--_radio-border-base) calc(l + .17) c h)}}a-radio[tone]:not([tone=""],[tone=brand],[tone=neutral],[tone=info],[tone=success],[tone=warning],[tone=critical]){--radio-tone-source: attr(tone type(<color>), transparent)}a-radio[tone-selected]:not([tone-selected=""],[tone-selected=brand],[tone-selected=neutral],[tone-selected=info],[tone-selected=success],[tone-selected=warning],[tone-selected=critical]){--radio-tone-source: attr(tone-selected type(<color>), transparent)}a-radio[tone]:not([tone=""],[tone=brand],[tone=neutral],[tone=info],[tone=success],[tone=warning],[tone=critical]),a-radio[tone-selected]:not([tone-selected=""],[tone-selected=brand],[tone-selected=neutral],[tone-selected=info],[tone-selected=success],[tone-selected=warning],[tone-selected=critical]),a-radio-group[tone]:not([tone=""],[tone=brand],[tone=neutral],[tone=info],[tone=success],[tone=warning],[tone=critical]) a-radio:not([tone]),a-radio-group[tone-selected]:not([tone-selected=""],[tone-selected=brand],[tone-selected=neutral],[tone-selected=info],[tone-selected=success],[tone-selected=warning],[tone-selected=critical]) a-radio:not([tone-selected]){--_tone-l-rest: .5;--_tone-l-hover: .45;--_tone-l-active: .4;--radio-fill: oklch(from var(--radio-tone-source) var(--_tone-l-rest) c h);--radio-fill-hover: oklch(from var(--radio-tone-source) var(--_tone-l-hover) c h);--radio-fill-active: oklch(from var(--radio-tone-source) var(--_tone-l-active) c h);.dark &{--_tone-l-rest: .45;--_tone-l-hover: .5;--_tone-l-active: .57}}.dark a-radio{--_radio-dot-adjust: 1px;&:after{box-shadow:0 0 1px 1px #000}--radio-border-neutral: #49424c;--radio-border-hover: #635b65;--radio-border-active: #776e77;--radio-fill: #534c57;--radio-fill-hover: #635b65;--radio-fill-active: #938d96;--radio-dot-disabled: #635b65;--radio-bg-disabled: color-mix(in oklch, #e4d1ef 10%, transparent);--radio-border-disabled: color-mix(in oklch, #e4d1ef 15%, transparent)}.dark a-radio[tone=brand],.dark a-radio[tone-selected=brand],.dark a-radio-group[tone=brand] a-radio:not([tone]),.dark a-radio-group[tone-selected=brand] a-radio:not([tone-selected]){--radio-fill: #503cb4;--radio-fill-hover: #5f4bc3;--radio-fill-active: #7460d7}.dark a-radio[tone=neutral],.dark a-radio[tone-selected=neutral],.dark a-radio-group[tone=neutral] a-radio:not([tone]),.dark a-radio-group[tone-selected=neutral] a-radio:not([tone-selected]){--radio-fill: #534c57;--radio-fill-hover: #635b65;--radio-fill-active: #938d96}.dark a-radio[tone=info],.dark a-radio[tone-selected=info],.dark a-radio-group[tone=info] a-radio:not([tone]),.dark a-radio-group[tone-selected=info] a-radio:not([tone-selected]){--radio-fill: #1a5b93;--radio-fill-hover: #1f6eb2;--radio-fill-active: #2686d9}.dark a-radio[tone=success],.dark a-radio[tone-selected=success],.dark a-radio-group[tone=success] a-radio:not([tone]),.dark a-radio-group[tone-selected=success] a-radio:not([tone-selected]){--radio-fill: #226737;--radio-fill-hover: #2a7e43;--radio-fill-active: #329550}.dark a-radio[tone=warning],.dark a-radio[tone-selected=warning],.dark a-radio-group[tone=warning] a-radio:not([tone]),.dark a-radio-group[tone-selected=warning] a-radio:not([tone-selected]){--radio-fill: #7f410b;--radio-fill-hover: #995200;--radio-fill-active: #ae6613}.dark a-radio[tone=critical],.dark a-radio[tone-selected=critical],.dark a-radio-group[tone=critical] a-radio:not([tone]),.dark a-radio-group[tone-selected=critical] a-radio:not([tone-selected]){--radio-fill: #b02120;--radio-fill-hover: #c9302c;--radio-fill-active: #de4545}}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SelectableChildElement } from "../anta_helpers";
|
|
2
2
|
import "./a-radio.css";
|
|
3
|
-
export declare class ARadioElement extends
|
|
4
|
-
|
|
5
|
-
private internals?;
|
|
6
|
-
constructor();
|
|
7
|
-
connectedCallback(): void;
|
|
8
|
-
attributeChangedCallback(name: string): void;
|
|
9
|
-
get selected(): boolean;
|
|
10
|
-
set selected(on: boolean);
|
|
11
|
-
get value(): string;
|
|
12
|
-
private applyState;
|
|
3
|
+
export declare class ARadioElement extends SelectableChildElement {
|
|
4
|
+
protected ariaProp: "ariaChecked";
|
|
13
5
|
}
|
|
14
6
|
export declare function register_a_radio(): void;
|
package/dist/elements/a-radio.js
CHANGED
|
@@ -1,38 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SelectableChildElement } from "../anta_helpers";
|
|
2
2
|
import "./a-radio.css";
|
|
3
|
-
class ARadioElement extends
|
|
4
|
-
|
|
5
|
-
internals;
|
|
6
|
-
constructor() {
|
|
7
|
-
super();
|
|
8
|
-
this.internals = this.attachInternals?.();
|
|
9
|
-
}
|
|
10
|
-
connectedCallback() {
|
|
11
|
-
this.applyState(this.hasAttribute("selected"));
|
|
12
|
-
}
|
|
13
|
-
attributeChangedCallback(name) {
|
|
14
|
-
if (name === "selected") this.applyState(this.hasAttribute("selected"));
|
|
15
|
-
}
|
|
16
|
-
get selected() {
|
|
17
|
-
return this.internals?.states.has("selected") ?? this.hasAttribute("selected");
|
|
18
|
-
}
|
|
19
|
-
set selected(on) {
|
|
20
|
-
this.applyState(!!on);
|
|
21
|
-
}
|
|
22
|
-
get value() {
|
|
23
|
-
return this.getAttribute("value") ?? "";
|
|
24
|
-
}
|
|
25
|
-
// `selected` is the single source: it drives the visual `:state(selected)` and
|
|
26
|
-
// publishes `aria-checked` through ElementInternals (the accessibility tree,
|
|
27
|
-
// not a DOM attribute). The group only sets `r.selected`; the radio owns how it
|
|
28
|
-
// reflects that. role="radio" comes from the wrapper, which gives ariaChecked
|
|
29
|
-
// something to attach to.
|
|
30
|
-
applyState(on) {
|
|
31
|
-
if (!this.internals) return;
|
|
32
|
-
if (on) this.internals.states.add("selected");
|
|
33
|
-
else this.internals.states.delete("selected");
|
|
34
|
-
this.internals.ariaChecked = on ? "true" : "false";
|
|
35
|
-
}
|
|
3
|
+
class ARadioElement extends SelectableChildElement {
|
|
4
|
+
ariaProp = "ariaChecked";
|
|
36
5
|
}
|
|
37
6
|
function register_a_radio() {
|
|
38
7
|
if (typeof customElements === "undefined") return;
|
package/dist/elements/a-tab.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer anta{a-tab{user-select:none;display:inline-flex;align-items:center;justify-content:center;gap:.5ch;flex-shrink:1;min-width:0;cursor:pointer;color:var(--tab-fg, var(--text-3));background-color:var(--tab-bg, transparent);border:none;border-radius:var(--tab-radius)
|
|
1
|
+
@layer anta{a-tab{user-select:none;display:inline-flex;align-items:center;justify-content:center;gap:.5ch;flex-shrink:1;min-width:0;cursor:pointer;color:var(--tab-fg, var(--text-3));background-color:var(--tab-bg, transparent);border:none;border-radius:var(--tab-radius);&[round]{--tab-radius: 999px}box-shadow:0 0 0 0 transparent;font-size:var(--_fs);font-family:var(--sans-serif);font-weight:450;font-variation-settings:"wdth" 88,"slnt" 0,"ital" 0;font-feature-settings:"ss02","ss05","tnum";line-height:var(--_lh);letter-spacing:.05ch;white-space:nowrap;text-wrap:nowrap;padding-block:var(--tab-padding-y);padding-inline:var(--tab-padding-x);transition:background-color var(--tab-timing),box-shadow var(--tab-timing);>a-tab-label{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;line-height:calc(var(--_lh) - 2px);padding-bottom:var(--_pb);&:has(>*){display:inline-flex;gap:.25ch}}>*{pointer-events:none}&:has(>a-icon:first-child):has(>a-tab-label){padding-inline-start:max(0px,var(--tab-padding-x) - 2px)}&:has(>a-icon:last-child):has(>a-tab-label){padding-inline-end:max(0px,var(--tab-padding-x) - 2px)}}a-tab:focus-visible{outline:1px solid var(--focus-ring);outline-offset:-1px}a-tab[disabled]{pointer-events:none;cursor:not-allowed;opacity:.45}}
|
package/dist/elements/a-tab.d.ts
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SelectableChildElement } from "../anta_helpers";
|
|
2
2
|
import "./a-tab.css";
|
|
3
|
-
export declare class ATabElement extends
|
|
4
|
-
|
|
5
|
-
private internals?;
|
|
6
|
-
constructor();
|
|
7
|
-
connectedCallback(): void;
|
|
8
|
-
attributeChangedCallback(name: string): void;
|
|
9
|
-
get selected(): boolean;
|
|
10
|
-
set selected(on: boolean);
|
|
11
|
-
get value(): string;
|
|
12
|
-
private applyState;
|
|
3
|
+
export declare class ATabElement extends SelectableChildElement {
|
|
4
|
+
protected ariaProp: "ariaSelected";
|
|
13
5
|
}
|
|
14
6
|
export declare function register_a_tab(): void;
|
package/dist/elements/a-tab.js
CHANGED
|
@@ -1,38 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SelectableChildElement } from "../anta_helpers";
|
|
2
2
|
import "./a-tab.css";
|
|
3
|
-
class ATabElement extends
|
|
4
|
-
|
|
5
|
-
internals;
|
|
6
|
-
constructor() {
|
|
7
|
-
super();
|
|
8
|
-
this.internals = this.attachInternals?.();
|
|
9
|
-
}
|
|
10
|
-
connectedCallback() {
|
|
11
|
-
if (this.hasAttribute("selected")) this.applyState(true);
|
|
12
|
-
}
|
|
13
|
-
attributeChangedCallback(name) {
|
|
14
|
-
if (name === "selected") this.applyState(this.hasAttribute("selected"));
|
|
15
|
-
}
|
|
16
|
-
get selected() {
|
|
17
|
-
return this.internals?.states.has("selected") ?? false;
|
|
18
|
-
}
|
|
19
|
-
set selected(on) {
|
|
20
|
-
this.applyState(!!on);
|
|
21
|
-
}
|
|
22
|
-
get value() {
|
|
23
|
-
return this.getAttribute("value") ?? "";
|
|
24
|
-
}
|
|
25
|
-
// `selected` is the single source: it drives the visual `:state(selected)` and
|
|
26
|
-
// publishes `aria-selected` through ElementInternals (the accessibility tree,
|
|
27
|
-
// not a DOM attribute). <a-tabs> only sets `t.selected`; the tab owns how it
|
|
28
|
-
// reflects that. role="tab" comes from the wrapper, which gives ariaSelected
|
|
29
|
-
// something to attach to.
|
|
30
|
-
applyState(on) {
|
|
31
|
-
if (!this.internals) return;
|
|
32
|
-
if (on) this.internals.states.add("selected");
|
|
33
|
-
else this.internals.states.delete("selected");
|
|
34
|
-
this.internals.ariaSelected = on ? "true" : "false";
|
|
35
|
-
}
|
|
3
|
+
class ATabElement extends SelectableChildElement {
|
|
4
|
+
ariaProp = "ariaSelected";
|
|
36
5
|
}
|
|
37
6
|
function register_a_tab() {
|
|
38
7
|
if (typeof customElements === "undefined") return;
|
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-padding-y: calc((10px - var(--_pb)) / 2);--tab-radius: 4px;--tabs-gap: 3px;--tab-timing: .15s ease-out;--tabs-tone-source: #635b65;--tab-fg-rest: var(--text-3);--tab-fg-hover: var(--text-1);--tab-selected-text: var(--text-1);--tab-text-2: var(--text-2);--tabs-track-bg: color-mix(in oklch, #44374b 6%, transparent);--tabs-track-border: var(--border-4);--tab-pill-bg: var(--bg-1);--tab-pill-shadow: 0 0 3px 0 var(--border-3);--tab-secondary-bg: color-mix(in oklch, #44374b 3%, transparent);--tab-secondary-border: var(--border-3);--tab-secondary-shadow: 0 0 0px 1px var(--tab-secondary-border);display:flex;flex-direction:row;align-items:stretch;gap:var(--tabs-gap);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}a-tabs[size=large]{--_fs: 17px;--_lh: 24px;--_pb: 1.5px;--tab-padding-x: 13px}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: #5f4bc3;--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-secondary-border: var(--border-3-brand)}a-tabs[tone=info],a-tab[tone=info]{--tabs-tone-source: #1f6eb2;--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-secondary-border: var(--border-3-info)}a-tabs[tone=success],a-tab[tone=success]{--tabs-tone-source: #2a7e43;--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-secondary-border: var(--border-3-success)}a-tabs[tone=warning],a-tab[tone=warning]{--tabs-tone-source: #c37416;--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-secondary-border: var(--border-3-warning)}a-tabs[tone=critical],a-tab[tone=critical]{--tabs-tone-source: #c9302c;--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-secondary-border: var(--border-3-critical)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--tabs-track-bg: oklch(from var(--tabs-tone-source) .55 .14 h / .08);--tab-secondary-bg: oklch(from var(--tabs-tone-source) .55 .14 h / .03);--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .62 .12 h / .5)}a-tabs:has(>a-tab[tone=brand]:state(selected)){--tabs-tone-source: #5f4bc3;--tab-selected-text: var(--text-1-brand);--tab-secondary-border: var(--border-3-brand)}a-tabs:has(>a-tab[tone=info]:state(selected)){--tabs-tone-source: #1f6eb2;--tab-selected-text: var(--text-1-info);--tab-secondary-border: var(--border-3-info)}a-tabs:has(>a-tab[tone=success]:state(selected)){--tabs-tone-source: #2a7e43;--tab-selected-text: var(--text-1-success);--tab-secondary-border: var(--border-3-success)}a-tabs:has(>a-tab[tone=warning]:state(selected)){--tabs-tone-source: #c37416;--tab-selected-text: var(--text-1-warning);--tab-secondary-border: var(--border-3-warning)}a-tabs:has(>a-tab[tone=critical]:state(selected)){--tabs-tone-source: #c9302c;--tab-selected-text: var(--text-1-critical);--tab-secondary-border: var(--border-3-critical)}a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .62 .12 h / .5);--tab-secondary-bg: oklch(from var(--tabs-tone-source) .55 .14 h / .03)}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);--tabs-track-border: oklch(from var(--tabs-tone-source) .9 .047 h);--tab-secondary-border: oklch(from var(--tabs-tone-source) .87 .065 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-fg-hover)}}a-tabs:not([priority=secondary],[priority=tertiary]){background:var(--tabs-track-bg);border:.5px solid var(--tabs-track-border);border-radius:6px;padding:1.5px}a-tabs:not([priority=secondary],[priority=tertiary]) a-tab:state(selected){--tab-fg: var(--tab-selected-text);--tab-bg: var(--tab-pill-bg);box-shadow:var(--tab-pill-shadow)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--tab-fg-rest: var(--tab-rest-tone);--tab-fg-hover: var(--tab-selected-text)}a-tabs[priority=secondary]{border:.5px solid transparent;padding:1.5px}@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-secondary-shadow)}a-tabs[priority=tertiary]{padding-inline:2px}a-tabs[priority=tertiary] a-tab{--tab-underline-size: 1px;--tab-underline-color: transparent;position:relative;border-radius:0}a-tabs[priority=tertiary]:not([orientation=vertical]) a-tab{padding-block:calc(var(--tab-padding-y) + 2px)}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-pill-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-pill-shadow)}a-tabs:not([noslide])[priority=secondary]:before{background:var(--tab-secondary-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-secondary-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{--tabs-track-bg: color-mix(in oklch, #e4d1ef 10%, transparent);--tab-secondary-bg: color-mix(in oklch, #e4d1ef 6%, transparent)}.dark a-tabs[tone]:not([tone=""],[tone=neutral]),.dark a-tab[tone]:not([tone=""],[tone=neutral]){--tabs-track-bg: oklch(from var(--tabs-tone-source) .8 .12 h / .12);--tab-secondary-bg: oklch(from var(--tabs-tone-source) .8 .12 h / .06);--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .8 .1 h / .45)}.dark a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--tab-secondary-bg: oklch(from var(--tabs-tone-source) .8 .12 h / .06);--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .8 .1 h / .45)}.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);--tabs-track-border: oklch(from var(--tabs-tone-source) .25 .057 h);--tab-secondary-border: oklch(from var(--tabs-tone-source) .33 .087 h)}}
|
|
1
|
+
@layer anta{a-tabs{--_fs: 15px;--_lh: 20px;--_pb: 1px;--tab-padding-x: 9px;--tab-padding-y: calc((10px - var(--_pb)) / 2);--tab-radius: 4px;--tabs-gap: 3px;--tab-timing: .15s ease-out;--tabs-tone-source: #635b65;--tab-fg-rest: var(--text-3);--tab-fg-hover: var(--text-1);--tab-selected-text: var(--text-1);--tab-text-2: var(--text-2);--tabs-track-bg: color-mix(in oklch, #44374b 6%, transparent);--tabs-track-border: var(--border-4);--tab-pill-bg: var(--bg-1);--tab-pill-shadow: 0 0 3px 0 var(--border-3);--tab-secondary-bg: color-mix(in oklch, #44374b 3%, transparent);--tab-secondary-border: var(--border-3);--tab-secondary-shadow: 0 0 0px 1px var(--tab-secondary-border);display:flex;flex-direction:row;align-items:stretch;gap:var(--tabs-gap);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}a-tabs[size=large]{--_fs: 17px;--_lh: 24px;--_pb: 1.5px;--tab-padding-x: 13px}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: #5f4bc3;--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-secondary-border: var(--border-3-brand)}a-tabs[tone=info],a-tab[tone=info]{--tabs-tone-source: #1f6eb2;--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-secondary-border: var(--border-3-info)}a-tabs[tone=success],a-tab[tone=success]{--tabs-tone-source: #2a7e43;--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-secondary-border: var(--border-3-success)}a-tabs[tone=warning],a-tab[tone=warning]{--tabs-tone-source: #c37416;--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-secondary-border: var(--border-3-warning)}a-tabs[tone=critical],a-tab[tone=critical]{--tabs-tone-source: #c9302c;--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-secondary-border: var(--border-3-critical)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--tabs-track-bg: oklch(from var(--tabs-tone-source) .55 .14 h / .08);--tab-secondary-bg: oklch(from var(--tabs-tone-source) .55 .14 h / .03);--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .62 .12 h / .5)}a-tabs:has(>a-tab[tone=brand]:state(selected)){--tabs-tone-source: #5f4bc3;--tab-selected-text: var(--text-1-brand);--tab-secondary-border: var(--border-3-brand)}a-tabs:has(>a-tab[tone=info]:state(selected)){--tabs-tone-source: #1f6eb2;--tab-selected-text: var(--text-1-info);--tab-secondary-border: var(--border-3-info)}a-tabs:has(>a-tab[tone=success]:state(selected)){--tabs-tone-source: #2a7e43;--tab-selected-text: var(--text-1-success);--tab-secondary-border: var(--border-3-success)}a-tabs:has(>a-tab[tone=warning]:state(selected)){--tabs-tone-source: #c37416;--tab-selected-text: var(--text-1-warning);--tab-secondary-border: var(--border-3-warning)}a-tabs:has(>a-tab[tone=critical]:state(selected)){--tabs-tone-source: #c9302c;--tab-selected-text: var(--text-1-critical);--tab-secondary-border: var(--border-3-critical)}a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .62 .12 h / .5);--tab-secondary-bg: oklch(from var(--tabs-tone-source) .55 .14 h / .03)}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);--tabs-track-border: oklch(from var(--tabs-tone-source) .9 .047 h);--tab-secondary-border: oklch(from var(--tabs-tone-source) .87 .065 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-fg-hover)}}a-tabs:not([priority=secondary],[priority=tertiary]){background:var(--tabs-track-bg);border:.5px solid var(--tabs-track-border);border-radius:6px;padding:1.5px}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-pill-bg);box-shadow:var(--tab-pill-shadow)}a-tabs[tone]:not([tone=""],[tone=neutral]),a-tab[tone]:not([tone=""],[tone=neutral]){--tab-fg-rest: var(--tab-rest-tone);--tab-fg-hover: var(--tab-selected-text)}a-tabs[priority=secondary]{border:.5px solid transparent;padding:1.5px}@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-secondary-shadow)}a-tabs[priority=tertiary]{padding-inline:2px}a-tabs[priority=tertiary] a-tab{--tab-underline-size: 1px;--tab-underline-color: transparent;position:relative;border-radius:0}a-tabs[priority=tertiary]:not([orientation=vertical]) a-tab{padding-block:calc(var(--tab-padding-y) + 2px)}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-pill-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-pill-shadow)}a-tabs:not([noslide])[priority=secondary]:before{background:var(--tab-secondary-bg);border-radius:var(--tab-radius);box-shadow:var(--tab-secondary-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{--tabs-track-bg: color-mix(in oklch, #e4d1ef 10%, transparent);--tab-secondary-bg: color-mix(in oklch, #e4d1ef 6%, transparent)}.dark a-tabs[tone]:not([tone=""],[tone=neutral]),.dark a-tab[tone]:not([tone=""],[tone=neutral]){--tabs-track-bg: oklch(from var(--tabs-tone-source) .8 .12 h / .12);--tab-secondary-bg: oklch(from var(--tabs-tone-source) .8 .12 h / .06);--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .8 .1 h / .45)}.dark a-tabs:has(>a-tab[tone]:state(selected):not([tone=""],[tone=neutral])){--tab-secondary-bg: oklch(from var(--tabs-tone-source) .8 .12 h / .06);--tab-pill-shadow: 0 0 3px 0 oklch(from var(--tabs-tone-source) .8 .1 h / .45)}.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);--tabs-track-border: oklch(from var(--tabs-tone-source) .25 .057 h);--tab-secondary-border: oklch(from var(--tabs-tone-source) .33 .087 h)}}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HTMLElementBase } from "../anta_helpers";
|
|
2
2
|
import "./a-tabs.css";
|
|
3
3
|
export declare class ATabsElement extends HTMLElementBase {
|
|
4
|
+
#private;
|
|
4
5
|
static observedAttributes: string[];
|
|
5
6
|
private internals?;
|
|
6
7
|
private uncontrolledValue;
|
|
@@ -15,10 +16,6 @@ export declare class ATabsElement extends HTMLElementBase {
|
|
|
15
16
|
disconnectedCallback(): void;
|
|
16
17
|
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
17
18
|
formDisabledCallback(disabled: boolean): void;
|
|
18
|
-
private get currentValue();
|
|
19
|
-
private get isDisabled();
|
|
20
|
-
private get isVertical();
|
|
21
|
-
private get tabs();
|
|
22
19
|
private sync;
|
|
23
20
|
private requestSelect;
|
|
24
21
|
private emitChange;
|
package/dist/elements/a-tabs.js
CHANGED
|
@@ -14,7 +14,7 @@ class ATabsElement extends HTMLElementBase {
|
|
|
14
14
|
alive = false;
|
|
15
15
|
/** The selected tab's value, or `null` when nothing is selected. */
|
|
16
16
|
get value() {
|
|
17
|
-
return this
|
|
17
|
+
return this.#currentValue;
|
|
18
18
|
}
|
|
19
19
|
constructor() {
|
|
20
20
|
super();
|
|
@@ -52,21 +52,21 @@ class ATabsElement extends HTMLElementBase {
|
|
|
52
52
|
this.sync();
|
|
53
53
|
}
|
|
54
54
|
// Controlled when `state` is present; otherwise the in-memory uncontrolled value.
|
|
55
|
-
get currentValue() {
|
|
55
|
+
get #currentValue() {
|
|
56
56
|
return this.hasAttribute("state") ? this.getAttribute("state") : this.uncontrolledValue;
|
|
57
57
|
}
|
|
58
|
-
get isDisabled() {
|
|
58
|
+
get #isDisabled() {
|
|
59
59
|
return this.hasAttribute("disabled") || (this.internals?.states.has("disabled") ?? false);
|
|
60
60
|
}
|
|
61
|
-
get isVertical() {
|
|
61
|
+
get #isVertical() {
|
|
62
62
|
return this.getAttribute("orientation") === "vertical";
|
|
63
63
|
}
|
|
64
|
-
get tabs() {
|
|
64
|
+
get #tabs() {
|
|
65
65
|
return Array.from(this.querySelectorAll("a-tab"));
|
|
66
66
|
}
|
|
67
67
|
sync = () => {
|
|
68
|
-
const value = this
|
|
69
|
-
const tabs = this
|
|
68
|
+
const value = this.#currentValue;
|
|
69
|
+
const tabs = this.#tabs;
|
|
70
70
|
const selectedEl = tabs.find((t) => t.value === value && value != null) ?? null;
|
|
71
71
|
for (const t of tabs) t.selected = t === selectedEl;
|
|
72
72
|
if (this.internals && "ariaActiveDescendantElement" in this.internals) {
|
|
@@ -80,7 +80,7 @@ class ATabsElement extends HTMLElementBase {
|
|
|
80
80
|
// The shared state algorithm: fire the cancelable `statechange` *before* applying.
|
|
81
81
|
// Controlled never self-applies; uncontrolled applies unless vetoed.
|
|
82
82
|
requestSelect(next) {
|
|
83
|
-
const prev = this
|
|
83
|
+
const prev = this.#currentValue;
|
|
84
84
|
if (next === prev) return;
|
|
85
85
|
const ok = this.emitStateChange(next, prev);
|
|
86
86
|
if (this.hasAttribute("state")) return;
|
|
@@ -108,15 +108,15 @@ class ATabsElement extends HTMLElementBase {
|
|
|
108
108
|
);
|
|
109
109
|
}
|
|
110
110
|
onClick = (e) => {
|
|
111
|
-
if (this
|
|
111
|
+
if (this.#isDisabled) return;
|
|
112
112
|
const tab = e.target?.closest("a-tab");
|
|
113
113
|
if (!tab || tab.hasAttribute("disabled")) return;
|
|
114
114
|
tab.focus();
|
|
115
115
|
this.requestSelect(tab.value);
|
|
116
116
|
};
|
|
117
117
|
onKeyDown = (e) => {
|
|
118
|
-
if (this
|
|
119
|
-
const enabled = this
|
|
118
|
+
if (this.#isDisabled) return;
|
|
119
|
+
const enabled = this.#tabs.filter((t) => !t.hasAttribute("disabled"));
|
|
120
120
|
if (enabled.length === 0) return;
|
|
121
121
|
const focused = e.target?.closest("a-tab");
|
|
122
122
|
if (e.key === " " || e.key === "Enter") {
|
|
@@ -133,12 +133,12 @@ class ATabsElement extends HTMLElementBase {
|
|
|
133
133
|
this.requestSelect(target.value);
|
|
134
134
|
return;
|
|
135
135
|
}
|
|
136
|
-
const forward = e.key === (this
|
|
137
|
-
const back = e.key === (this
|
|
136
|
+
const forward = e.key === (this.#isVertical ? "ArrowDown" : "ArrowRight");
|
|
137
|
+
const back = e.key === (this.#isVertical ? "ArrowUp" : "ArrowLeft");
|
|
138
138
|
if (!forward && !back) return;
|
|
139
139
|
e.preventDefault();
|
|
140
140
|
let i = focused ? enabled.indexOf(focused) : -1;
|
|
141
|
-
if (i === -1) i = enabled.findIndex((t) => t.value === this
|
|
141
|
+
if (i === -1) i = enabled.findIndex((t) => t.value === this.#currentValue);
|
|
142
142
|
if (i === -1) i = 0;
|
|
143
143
|
const next = enabled[(i + (forward ? 1 : -1) + enabled.length) % enabled.length];
|
|
144
144
|
next.focus();
|
package/dist/elements/a-tag.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer anta{a-tag{--tag-text: var(--text-3);--tag-tint: #44374b;--tag-fill: #776e77;--tag-edge: var(--tag-tint);--_tag-bg-alpha: 7%;--_tag-border-alpha: 15%;--_tag-edge-alpha: 25%;--tag-bg: color-mix(in oklch, var(--tag-tint) var(--_tag-bg-alpha), transparent);--tag-border: color-mix(in oklch, var(--tag-tint) var(--_tag-border-alpha), transparent);--tag-separator: color-mix(in oklch, var(--tag-text) 30%, transparent);--tag-padding-block: 1.5px;--tag-padding-inline: 6.5px;--tag-icon-size: 13px;--tag-label-weight: 600;--tag-gap: .6ch;display:inline-flex;align-items:center;gap:var(--tag-gap);box-sizing:border-box;max-width:100%;vertical-align:middle;overflow:hidden;white-space:nowrap;-webkit-user-drag:none;color:var(--tag-text);background:var(--tag-bg);border:.5px solid var(--tag-border);border-radius:22px;padding-block:var(--tag-padding-block);padding-inline:var(--tag-padding-inline);font-family:var(--sans-serif);font-weight:450;font-size:
|
|
1
|
+
@layer anta{a-tag{--tag-text: var(--text-3);--tag-tint: #44374b;--tag-fill: #776e77;--tag-edge: var(--tag-tint);--_tag-bg-alpha: 7%;--_tag-border-alpha: 15%;--_tag-edge-alpha: 25%;--tag-bg: color-mix(in oklch, var(--tag-tint) var(--_tag-bg-alpha), transparent);--tag-border: color-mix(in oklch, var(--tag-tint) var(--_tag-border-alpha), transparent);--tag-separator: color-mix(in oklch, var(--tag-text) 30%, transparent);--tag-padding-block: 1.5px;--tag-padding-inline: 6.5px;--tag-icon-size: 13px;--tag-label-weight: 600;--tag-gap: .6ch;display:inline-flex;align-items:center;gap:var(--tag-gap);box-sizing:border-box;max-width:100%;vertical-align:middle;overflow:hidden;white-space:nowrap;-webkit-user-drag:none;color:var(--tag-text);background:var(--tag-bg);border:.5px solid var(--tag-border);border-radius:22px;padding-block:var(--tag-padding-block);padding-inline:var(--tag-padding-inline);font-family:var(--sans-serif);font-weight:450;font-size:12px;line-height:16px;text-transform:none;letter-spacing:.02ch;font-feature-settings:"tnum" 1,"ss05" 1,"lnum","ss01","ss04","case","calt"}a-tag a-icon{--icon-size: var(--tag-icon-size);flex:none}a-tag a-tag-label,a-tag a-tag-value{display:inline-block;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}a-tag a-tag-value{font-weight:450}a-tag a-tag-label{font-weight:var(--tag-label-weight)}a-tag:has(>a-icon:first-child){padding-inline-start:max(0px,var(--tag-padding-inline) - 2px)}a-tag:has(>a-icon:last-child){padding-inline-end:max(0px,var(--tag-padding-inline) - 2px)}a-tag>:not(a-icon,a-tag-label,a-tag-value)~:not(a-icon,a-tag-label,a-tag-value){padding-left:var(--tag-gap);border-left:.5px solid var(--tag-separator)}a-tag[tone=brand]{--tag-text: var(--text-3-brand);--tag-tint: #7460d7;--tag-fill: #7460d7;--tag-edge: var(--text-2-brand);--_tag-bg-alpha: 10%;--_tag-edge-alpha: 20%}a-tag[tone=info]{--tag-text: var(--text-3-info);--tag-tint: #2686d9;--tag-fill: #2686d9;--tag-edge: var(--text-2-info);--_tag-bg-alpha: 10%;--_tag-edge-alpha: 20%}a-tag[tone=success]{--tag-text: var(--text-3-success);--tag-tint: #329550;--tag-fill: #329550;--tag-edge: var(--text-2-success);--_tag-bg-alpha: 10%;--_tag-edge-alpha: 20%}a-tag[tone=warning]{--tag-text: var(--text-3-warning);--tag-tint: #c37416;--tag-fill: #ae6613;--tag-edge: var(--text-2-warning);--_tag-bg-alpha: 10%;--_tag-edge-alpha: 20%}a-tag[tone=critical]{--tag-text: var(--text-3-critical);--tag-tint: #de4545;--tag-fill: #de4545;--tag-edge: var(--text-2-critical);--_tag-bg-alpha: 10%;--_tag-edge-alpha: 20%}.dark a-tag:not([tone]),.dark a-tag[tone=neutral]{--tag-tint: #e4d1ef;--tag-fill: #635b65;--_tag-bg-alpha: 12%}.dark a-tag[tone=brand],.dark a-tag[tone=info],.dark a-tag[tone=success],.dark a-tag[tone=warning],.dark a-tag[tone=critical]{--_tag-bg-alpha: 20%;--_tag-border-alpha: 25%;--_tag-edge-alpha: 30%}.dark a-tag[tone=brand]{--tag-fill: #5f4bc3}.dark a-tag[tone=info]{--tag-fill: #1f6eb2}.dark a-tag[tone=success]{--tag-fill: #2a7e43}.dark a-tag[tone=warning]{--tag-fill: #995200}.dark a-tag[tone=critical]{--tag-fill: #c9302c}a-tag[tone]:not([tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--tag-tone-source: attr(tone type(<color>), currentColor);--_tag-bg-alpha: 10%;--_tag-border-alpha: 15%;--_tag-edge-alpha: 20%;--_tag-tint-l: .54;--_tag-tint-c: .16;--tag-tint: oklch(from var(--tag-tone-source) var(--_tag-tint-l) var(--_tag-tint-c) h);--_tag-fill-l: .5;--tag-fill: oklch(from var(--tag-tone-source) var(--_tag-fill-l) var(--_tag-tint-c) h);--_tag-text-l: .4;--_tag-text-c: .15;--tag-text: color-mix(in oklch, oklch(from var(--tag-tone-source) var(--_tag-text-l) var(--_tag-text-c) h) 80%, transparent);--tag-edge: oklch(from var(--tag-tone-source) var(--_tag-text-l) var(--_tag-text-c) h)}.dark a-tag[tone]:not([tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--_tag-bg-alpha: 20%;--_tag-border-alpha: 25%;--_tag-edge-alpha: 30%;--_tag-tint-l: .58;--_tag-fill-l: .45;--_tag-text-l: .75;--_tag-text-c: .11}a-tag[priority=primary]{--tag-bg: var(--tag-fill);--tag-text: #fff}a-tag[priority=primary][tone]:not([tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--tag-text: #fff}a-tag[priority=tertiary]{--tag-bg: transparent;--tag-border: color-mix(in oklch, var(--tag-edge) var(--_tag-edge-alpha), transparent)}a-tag[size=small]{--tag-padding-block: .5px;--tag-padding-inline: 4.5px;--tag-icon-size: 11px;font-size:11px;line-height:14px}a-tag[size=large]{--tag-padding-block: 2.5px;--tag-padding-inline: 8.5px;--tag-icon-size: 15px;font-size:13px;line-height:18px}a-tag[allcaps]{font-size:11px;text-transform:uppercase;letter-spacing:.08ch;font-feature-settings:"tnum" 1,"ss05" 1,"ss01","case","calt"}a-tag[size=small][allcaps]{font-size:10px}a-tag[size=large][allcaps]{font-size:12px}}
|
|
@@ -22,29 +22,30 @@ import './a-text.css';
|
|
|
22
22
|
* `(hover: hover) and (pointer: fine)` to avoid sticky hover after a tap.
|
|
23
23
|
*/
|
|
24
24
|
export declare class ATextElement extends HTMLElementBase {
|
|
25
|
+
#private;
|
|
25
26
|
static observedAttributes: string[];
|
|
26
27
|
private slotEl;
|
|
27
|
-
/** The
|
|
28
|
-
* expandable (a plain `<a-text>` never creates a button or a listener).
|
|
29
|
-
* Removed when `expandable` is dropped, and when a one-way expand completes. */
|
|
28
|
+
/** The chevron — built only while expandable, removed on drop or one-way expand. */
|
|
30
29
|
private expandBtn?;
|
|
31
|
-
/** Expanded state lives
|
|
32
|
-
* it and the app DOM may be reconciled off the UI thread. */
|
|
30
|
+
/** Expanded state lives on the element — a stateless wrapper can't hold it. */
|
|
33
31
|
private expanded;
|
|
32
|
+
private overflowObserver?;
|
|
33
|
+
private contentObserver?;
|
|
34
34
|
constructor();
|
|
35
35
|
connectedCallback(): void;
|
|
36
|
+
disconnectedCallback(): void;
|
|
36
37
|
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
37
|
-
|
|
38
|
-
private get isCollapsible();
|
|
39
|
-
/** Create or remove the chevron button to match `expandable`, then refresh
|
|
40
|
-
* its label/visibility — the single place the button's lifecycle lives. */
|
|
38
|
+
/** Create or remove the chevron to match `expandable`, then refresh it. */
|
|
41
39
|
private syncExpandButton;
|
|
42
40
|
private handleToggle;
|
|
43
41
|
private setExpanded;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
*
|
|
42
|
+
private startOverflowObserver;
|
|
43
|
+
private stopOverflowObserver;
|
|
44
|
+
/** Toggle `slot.overflowing` (gates the fade + chevron) to whether the clamp
|
|
45
|
+
* clips. Frozen on while expanded; height catches wrapped text, width a long word. */
|
|
46
|
+
private measureOverflow;
|
|
47
|
+
/** Reflect state onto the button (label + `aria-expanded` + `.expanded`); a
|
|
48
|
+
* one-way expand removes it once open. */
|
|
48
49
|
private refreshButton;
|
|
49
50
|
}
|
|
50
51
|
export declare function register_a_text(): void;
|
package/dist/elements/a-text.js
CHANGED
|
@@ -20,12 +20,12 @@ const SHADOW_STYLE = `
|
|
|
20
20
|
overflow: hidden;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
:host([truncate][expandable]) slot:not(.expanded) {
|
|
23
|
+
:host([truncate][expandable]) slot.overflowing:not(.expanded) {
|
|
24
24
|
-webkit-mask-image: linear-gradient(to bottom, black calc(100% - 2em), transparent 97%);
|
|
25
25
|
mask-image: linear-gradient(to bottom, black calc(100% - 2em), transparent 97%);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
:host([truncate="1"][expandable]) slot:not(.expanded) {
|
|
28
|
+
:host([truncate="1"][expandable]) slot.overflowing:not(.expanded) {
|
|
29
29
|
-webkit-mask-image: linear-gradient(to right, black calc(100% - 7ch), transparent 97%);
|
|
30
30
|
mask-image: linear-gradient(to right, black calc(100% - 7ch), transparent 97%);
|
|
31
31
|
}
|
|
@@ -73,7 +73,7 @@ const SHADOW_STYLE = `
|
|
|
73
73
|
transition: transform 150ms ease-out;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
:host([truncate][expandable]) .expand-btn {
|
|
76
|
+
:host([truncate][expandable]) slot.overflowing ~ .expand-btn {
|
|
77
77
|
display: block;
|
|
78
78
|
left: 0;
|
|
79
79
|
right: 0;
|
|
@@ -81,15 +81,15 @@ const SHADOW_STYLE = `
|
|
|
81
81
|
height: 1.5em;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
:host([truncate="1"][expandable]) .expand-btn {
|
|
84
|
+
:host([truncate="1"][expandable]) slot.overflowing ~ .expand-btn {
|
|
85
85
|
left: auto;
|
|
86
86
|
top: 0;
|
|
87
87
|
bottom: 0;
|
|
88
88
|
width: 3em;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
:host([truncate][expandable]:hover) .expand-btn,
|
|
92
|
-
:host([truncate][expandable]:focus-within) .expand-btn,
|
|
91
|
+
:host([truncate][expandable]:hover) slot.overflowing ~ .expand-btn,
|
|
92
|
+
:host([truncate][expandable]:focus-within) slot.overflowing ~ .expand-btn,
|
|
93
93
|
.expand-btn.expanded {
|
|
94
94
|
opacity: 1;
|
|
95
95
|
}
|
|
@@ -101,13 +101,15 @@ const SHADOW_STYLE = `
|
|
|
101
101
|
class ATextElement extends HTMLElementBase {
|
|
102
102
|
static observedAttributes = ["expandable", "truncate", "collapsible"];
|
|
103
103
|
slotEl;
|
|
104
|
-
/** The
|
|
105
|
-
* expandable (a plain `<a-text>` never creates a button or a listener).
|
|
106
|
-
* Removed when `expandable` is dropped, and when a one-way expand completes. */
|
|
104
|
+
/** The chevron — built only while expandable, removed on drop or one-way expand. */
|
|
107
105
|
expandBtn;
|
|
108
|
-
/** Expanded state lives
|
|
109
|
-
* it and the app DOM may be reconciled off the UI thread. */
|
|
106
|
+
/** Expanded state lives on the element — a stateless wrapper can't hold it. */
|
|
110
107
|
expanded = false;
|
|
108
|
+
// Re-sync `slot.overflowing`: the resize observer watches the box (width),
|
|
109
|
+
// the mutation observer watches the slotted content — the clamped box never
|
|
110
|
+
// resizes as content grows, so resize alone misses added lines.
|
|
111
|
+
overflowObserver;
|
|
112
|
+
contentObserver;
|
|
111
113
|
constructor() {
|
|
112
114
|
super();
|
|
113
115
|
const shadow = this.attachShadow({ mode: "open" });
|
|
@@ -118,29 +120,37 @@ class ATextElement extends HTMLElementBase {
|
|
|
118
120
|
}
|
|
119
121
|
connectedCallback() {
|
|
120
122
|
this.syncExpandButton();
|
|
123
|
+
if (this.#isExpandable) this.startOverflowObserver();
|
|
124
|
+
}
|
|
125
|
+
disconnectedCallback() {
|
|
126
|
+
this.overflowObserver?.disconnect();
|
|
127
|
+
this.contentObserver?.disconnect();
|
|
121
128
|
}
|
|
122
129
|
attributeChangedCallback(name, oldValue, newValue) {
|
|
123
130
|
if (oldValue === newValue) return;
|
|
124
131
|
if (name === "truncate" || name === "expandable") this.setExpanded(false);
|
|
125
132
|
this.syncExpandButton();
|
|
133
|
+
if (name === "truncate" || name === "expandable") {
|
|
134
|
+
if (this.#isExpandable) this.startOverflowObserver();
|
|
135
|
+
else this.stopOverflowObserver();
|
|
136
|
+
}
|
|
126
137
|
}
|
|
127
|
-
get isExpandable() {
|
|
138
|
+
get #isExpandable() {
|
|
128
139
|
return this.hasAttribute("truncate") && this.hasAttribute("expandable");
|
|
129
140
|
}
|
|
130
|
-
get isCollapsible() {
|
|
141
|
+
get #isCollapsible() {
|
|
131
142
|
return this.hasAttribute("collapsible");
|
|
132
143
|
}
|
|
133
|
-
/** Create or remove the chevron
|
|
134
|
-
* its label/visibility — the single place the button's lifecycle lives. */
|
|
144
|
+
/** Create or remove the chevron to match `expandable`, then refresh it. */
|
|
135
145
|
syncExpandButton() {
|
|
136
|
-
if (this
|
|
146
|
+
if (this.#isExpandable && !this.expandBtn) {
|
|
137
147
|
const btn = document.createElement("button");
|
|
138
148
|
btn.className = "expand-btn";
|
|
139
149
|
btn.type = "button";
|
|
140
150
|
btn.addEventListener("click", this.handleToggle);
|
|
141
151
|
this.shadowRoot.append(btn);
|
|
142
152
|
this.expandBtn = btn;
|
|
143
|
-
} else if (!this
|
|
153
|
+
} else if (!this.#isExpandable && this.expandBtn) {
|
|
144
154
|
this.expandBtn.remove();
|
|
145
155
|
this.expandBtn = void 0;
|
|
146
156
|
}
|
|
@@ -154,15 +164,35 @@ class ATextElement extends HTMLElementBase {
|
|
|
154
164
|
this.expanded = next;
|
|
155
165
|
this.slotEl.classList.toggle("expanded", next);
|
|
156
166
|
this.refreshButton();
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
167
|
+
if (!next) this.measureOverflow();
|
|
168
|
+
}
|
|
169
|
+
startOverflowObserver() {
|
|
170
|
+
if (!this.#isExpandable) return;
|
|
171
|
+
this.overflowObserver ??= new ResizeObserver(() => this.measureOverflow());
|
|
172
|
+
this.contentObserver ??= new MutationObserver(() => this.measureOverflow());
|
|
173
|
+
this.overflowObserver.observe(this.slotEl);
|
|
174
|
+
this.contentObserver.observe(this, { childList: true, subtree: true, characterData: true });
|
|
175
|
+
this.measureOverflow();
|
|
176
|
+
}
|
|
177
|
+
stopOverflowObserver() {
|
|
178
|
+
this.overflowObserver?.disconnect();
|
|
179
|
+
this.contentObserver?.disconnect();
|
|
180
|
+
this.slotEl.classList.remove("overflowing");
|
|
181
|
+
}
|
|
182
|
+
/** Toggle `slot.overflowing` (gates the fade + chevron) to whether the clamp
|
|
183
|
+
* clips. Frozen on while expanded; height catches wrapped text, width a long word. */
|
|
184
|
+
measureOverflow() {
|
|
185
|
+
if (!this.#isExpandable || this.expanded) return;
|
|
186
|
+
const s = this.slotEl;
|
|
187
|
+
const over = s.scrollHeight > s.clientHeight + 1 || s.scrollWidth > s.clientWidth + 1;
|
|
188
|
+
s.classList.toggle("overflowing", over);
|
|
189
|
+
}
|
|
190
|
+
/** Reflect state onto the button (label + `aria-expanded` + `.expanded`); a
|
|
191
|
+
* one-way expand removes it once open. */
|
|
162
192
|
refreshButton() {
|
|
163
193
|
const btn = this.expandBtn;
|
|
164
194
|
if (!btn) return;
|
|
165
|
-
if (this.expanded && !this
|
|
195
|
+
if (this.expanded && !this.#isCollapsible) {
|
|
166
196
|
btn.remove();
|
|
167
197
|
this.expandBtn = void 0;
|
|
168
198
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer anta{a-tooltip:not(:defined){display:none}@media(hover:none)and (pointer:coarse){:where(:has(>a-tooltip)){-webkit-touch-callout:none;user-select:none}}a-tooltip{--tooltip-bg: color-mix(in oklch, var(--bg-1) 80%, transparent);--tooltip-shadow: 0 1px 8px color-mix(in oklch, var(--text-1) 15%, transparent), 0 0 1px color-mix(in oklch, var(--text-1) 50%, transparent);--tooltip-radius: 3px;--tooltip-max-width: min( calc(100vw - 20px) , 80ch);--tooltip-border: none;--tooltip-backdrop-filter: blur(8px)}.dark a-tooltip{--tooltip-bg: color-mix(in oklch, var(--bg-1) 70%, transparent);--tooltip-shadow: 0 2px 16px color-mix(in oklch, black 70%, transparent), inset 0 0 0 1px color-mix(in oklch, white 15%, transparent)}}
|
|
1
|
+
@layer anta{a-tooltip:not(:defined){display:none}@media(hover:none)and (pointer:coarse){:where(:has(>a-tooltip)){-webkit-touch-callout:none;user-select:none}}a-tooltip{--tooltip-bg: color-mix(in oklch, var(--bg-1) 80%, transparent);--tooltip-shadow: 0 1px 8px color-mix(in oklch, var(--text-1) 15%, transparent), 0 0 1px color-mix(in oklch, var(--text-1) 50%, transparent);--tooltip-radius: 3px;--tooltip-max-width: min( calc(100vw - 20px) , 80ch);--tooltip-border: none;--tooltip-backdrop-filter: blur(8px)}a-tooltip[round]{--tooltip-radius: attr(round type(<length>), 20px)}.dark a-tooltip{--tooltip-bg: color-mix(in oklch, var(--bg-1) 70%, transparent);--tooltip-shadow: 0 2px 16px color-mix(in oklch, black 70%, transparent), inset 0 0 0 1px color-mix(in oklch, white 15%, transparent)}}
|
|
@@ -28,6 +28,7 @@ import './a-tooltip.css';
|
|
|
28
28
|
* below) instead of selecting text or popping the system menu.
|
|
29
29
|
*/
|
|
30
30
|
export declare class ATooltipElement extends HTMLElementBase {
|
|
31
|
+
#private;
|
|
31
32
|
static observedAttributes: string[];
|
|
32
33
|
/** Shadow-internal popover surface — the only thing we ever mutate. */
|
|
33
34
|
private container;
|
|
@@ -60,17 +61,6 @@ export declare class ATooltipElement extends HTMLElementBase {
|
|
|
60
61
|
* fed the latest cursor event, so it shows at the cursor and so moving back
|
|
61
62
|
* onto an anchor after the tooltip was dismissed re-arms it. */
|
|
62
63
|
private makeDebouncedShow;
|
|
63
|
-
private get isInteractive();
|
|
64
|
-
/** Pinned under the anchor (no cursor-following) — the DEFAULT. Following the
|
|
65
|
-
* cursor is opt-in via the `follow` attribute. `interactive` (you can't move
|
|
66
|
-
* into a bubble that chases the cursor) and a touch long-press (a finger
|
|
67
|
-
* can't track one) force pinned regardless of `follow`. */
|
|
68
|
-
private get isPinned();
|
|
69
|
-
private get prefersTop();
|
|
70
|
-
private get delay();
|
|
71
|
-
/** When set, the tooltip only shows if its resolved target is actually
|
|
72
|
-
* truncated/clipped; a fitting label gets no tooltip. */
|
|
73
|
-
private get truncatedOnly();
|
|
74
64
|
/** The element whose overflow decides whether the tooltip shows: a
|
|
75
65
|
* `truncated-selector` resolved within the anchor wins; else the first of
|
|
76
66
|
* Anta's ellipsizing label parts inside the anchor; else the anchor itself
|