@antadesign/anta 0.3.33 → 0.3.35
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/LICENSE.md +14 -1
- package/README.md +9 -0
- package/dist/anta_helpers.d.ts +46 -30
- package/dist/anta_helpers.js +66 -25
- package/dist/bundle.css +1 -1
- package/dist/bundle.js +2 -1353
- package/dist/components/Banner.d.ts +25 -40
- package/dist/components/Banner.js +15 -17
- package/dist/components/Breadcrumbs.d.ts +0 -1
- package/dist/components/Breadcrumbs.js +0 -1
- package/dist/components/Button.d.ts +2 -3
- package/dist/components/Button.js +1 -0
- package/dist/components/ButtonCopy.js +3 -2
- package/dist/components/Calendar.js +13 -13
- package/dist/components/Card.d.ts +9 -17
- package/dist/components/Card.js +50 -46
- package/dist/components/Dialog.d.ts +1 -0
- package/dist/components/Dialog.js +16 -10
- package/dist/components/Expander.d.ts +6 -21
- package/dist/components/Expander.js +24 -23
- package/dist/components/Icon.d.ts +8 -14
- package/dist/components/Input.d.ts +77 -96
- package/dist/components/Input.js +23 -27
- package/dist/components/InputAutocomplete.d.ts +29 -10
- package/dist/components/InputAutocomplete.js +25 -8
- package/dist/components/InputDate.d.ts +0 -1
- package/dist/components/InputDate.js +2 -3
- package/dist/components/InputTime.d.ts +10 -4
- package/dist/components/InputTime.js +20 -16
- package/dist/components/Loader.d.ts +2 -2
- package/dist/components/Menu.d.ts +5 -4
- package/dist/components/Menu.js +13 -8
- package/dist/components/MenuItem.js +1 -14
- package/dist/components/MenuItemCopy.js +2 -2
- package/dist/components/Panel.d.ts +3 -1
- package/dist/components/Panel.js +17 -11
- package/dist/components/Progress.d.ts +21 -23
- package/dist/components/Progress.js +13 -9
- package/dist/components/RadioGroup.js +6 -8
- package/dist/components/{select-parts.css → Select.css} +1 -1
- package/dist/components/Select.d.ts +53 -36
- package/dist/components/Select.js +53 -98
- package/dist/components/SelectFaceted.d.ts +7 -4
- package/dist/components/SelectFaceted.js +21 -10
- package/dist/components/Slider.d.ts +28 -11
- package/dist/components/Slider.js +20 -20
- package/dist/components/Steps.css +1 -1
- package/dist/components/Steps.d.ts +0 -1
- package/dist/components/Steps.js +1 -12
- package/dist/components/Tabs.d.ts +17 -20
- package/dist/components/Tabs.js +7 -9
- package/dist/components/Text.d.ts +55 -36
- package/dist/components/Text.js +35 -22
- package/dist/components/Title.d.ts +19 -27
- package/dist/components/Title.js +2 -1
- package/dist/components/Toaster.js +9 -2
- package/dist/components/Tooltip.d.ts +10 -15
- package/dist/components/copy-props.d.ts +14 -3
- package/dist/components/copy-props.js +14 -3
- package/dist/components/select-tree.d.ts +24 -0
- package/dist/components/select-tree.js +35 -0
- package/dist/element-base.d.ts +10 -0
- package/dist/element-base.js +15 -0
- package/dist/elements/a-avatar.css +1 -1
- package/dist/elements/a-avatar.js +2 -28
- package/dist/elements/a-banner.css +1 -1
- package/dist/elements/a-banner.d.ts +4 -1
- package/dist/elements/a-banner.js +22 -112
- package/dist/elements/a-breadcrumbs.d.ts +1 -0
- package/dist/elements/a-breadcrumbs.js +1 -0
- package/dist/elements/a-button.css +1 -1
- package/dist/elements/a-button.d.ts +10 -7
- package/dist/elements/a-button.js +18 -1
- package/dist/elements/a-calendar.d.ts +14 -13
- package/dist/elements/a-calendar.js +29 -24
- package/dist/elements/a-card.css +1 -1
- package/dist/elements/a-card.d.ts +0 -9
- package/dist/elements/a-card.js +0 -184
- package/dist/elements/a-checkbox.css +1 -1
- package/dist/elements/a-copy.css +1 -1
- package/dist/elements/a-copy.d.ts +1 -5
- package/dist/elements/a-copy.js +129 -108
- package/dist/elements/a-dialog.css +1 -1
- package/dist/elements/a-dialog.d.ts +1 -1
- package/dist/elements/a-dialog.js +68 -194
- package/dist/elements/a-expander.css +1 -1
- package/dist/elements/a-expander.d.ts +4 -30
- package/dist/elements/a-expander.js +85 -344
- package/dist/elements/a-icon.d.ts +5 -23
- package/dist/elements/a-icon.js +1 -2
- package/dist/elements/a-input-date.d.ts +1 -0
- package/dist/elements/a-input-date.js +1 -0
- package/dist/elements/a-input-time.css +1 -1
- package/dist/elements/a-input-time.d.ts +2 -1
- package/dist/elements/a-input-time.js +101 -168
- package/dist/elements/a-input.css +1 -1
- package/dist/elements/a-input.d.ts +10 -8
- package/dist/elements/a-input.js +155 -230
- package/dist/elements/a-loader.d.ts +5 -8
- package/dist/elements/a-loader.js +1 -2
- package/dist/elements/a-menu-item.css +1 -1
- package/dist/elements/a-menu-item.d.ts +5 -3
- package/dist/elements/a-menu-item.js +5 -1
- package/dist/elements/a-menu.css +1 -1
- package/dist/elements/a-menu.d.ts +5 -7
- package/dist/elements/a-menu.js +383 -299
- package/dist/elements/a-panel.css +1 -1
- package/dist/elements/a-panel.js +19 -37
- package/dist/elements/a-progress.css +1 -1
- package/dist/elements/a-progress.d.ts +0 -22
- package/dist/elements/a-progress.js +0 -100
- package/dist/elements/a-radio-group.d.ts +1 -1
- package/dist/elements/a-radio-group.js +6 -4
- package/dist/elements/a-select-faceted.d.ts +1 -0
- package/dist/elements/a-select-faceted.js +1 -0
- package/dist/elements/a-select.d.ts +1 -0
- package/dist/elements/a-select.js +1 -0
- package/dist/elements/a-slider.css +1 -1
- package/dist/elements/a-slider.d.ts +11 -3
- package/dist/elements/a-slider.js +244 -242
- package/dist/elements/a-steps.d.ts +1 -0
- package/dist/elements/a-steps.js +1 -0
- package/dist/elements/a-switch.css +1 -1
- package/dist/elements/a-tab.css +1 -1
- package/dist/elements/a-tabpanel.d.ts +2 -2
- package/dist/elements/a-tabpanel.js +13 -3
- package/dist/elements/a-tabs.css +1 -1
- package/dist/elements/a-tabs.d.ts +1 -1
- package/dist/elements/a-tabs.js +6 -4
- package/dist/elements/a-tag.css +1 -1
- package/dist/elements/a-tag.d.ts +1 -0
- package/dist/elements/a-tag.js +1 -0
- package/dist/elements/a-text.css +1 -1
- package/dist/elements/a-text.d.ts +6 -43
- package/dist/elements/a-text.js +110 -193
- package/dist/elements/a-title.css +1 -1
- package/dist/elements/a-title.d.ts +1 -0
- package/dist/elements/a-title.js +1 -0
- package/dist/elements/a-toast.css +1 -1
- package/dist/elements/a-toast.d.ts +10 -45
- package/dist/elements/a-toast.js +80 -66
- package/dist/elements/a-toaster.css +1 -1
- package/dist/elements/a-toaster.js +9 -44
- package/dist/elements/a-tooltip.css +1 -1
- package/dist/elements/a-tooltip.d.ts +1 -1
- package/dist/elements/a-tooltip.js +142 -136
- package/dist/elements/copy-behavior.d.ts +1 -1
- package/dist/elements/copy-behavior.js +21 -21
- package/dist/elements/index.d.ts +9 -3
- package/dist/elements/index.js +6 -6
- package/dist/elements/input-focus-modality.d.ts +15 -0
- package/dist/elements/input-focus-modality.js +44 -0
- package/dist/elements/input-trailing-actions.d.ts +5 -0
- package/dist/elements/input-trailing-actions.js +38 -0
- package/dist/elements/shadow-aria.d.ts +2 -0
- package/dist/elements/shadow-aria.js +2 -1
- package/dist/elements/value-input.d.ts +3 -0
- package/dist/elements/value-input.js +12 -0
- package/dist/general_types.d.ts +103 -96
- package/dist/index.d.ts +1 -1
- package/dist/input-events.d.ts +4 -0
- package/dist/input-events.js +15 -0
- package/dist/jsx-runtime.d.ts +70 -23
- package/dist/jsx-runtime.js +26 -19
- package/dist/native-event-props.d.ts +2 -0
- package/dist/native-event-props.js +10 -0
- package/dist/reset.css +1 -1
- package/dist/theme-antithesis.css +10 -1
- package/dist/theme-antune.css +1 -1
- package/docs/accessibility.md +17 -3
- package/docs/changelog.md +384 -2
- package/docs/comparison.md +2 -2
- package/docs/components/avatar.md +5 -0
- package/docs/components/banner.md +117 -187
- package/docs/components/breadcrumbs.md +9 -6
- package/docs/components/button.md +22 -0
- package/docs/components/card.md +74 -28
- package/docs/components/checkbox.md +9 -10
- package/docs/components/dialog.md +83 -32
- package/docs/components/expander.md +198 -435
- package/docs/components/icon.md +11 -17
- package/docs/components/input-autocomplete.md +152 -52
- package/docs/components/input-date.md +175 -148
- package/docs/components/input-time.md +81 -38
- package/docs/components/input.md +343 -349
- package/docs/components/loader.md +2 -1
- package/docs/components/menu.md +35 -6
- package/docs/components/panel.md +18 -0
- package/docs/components/progress.md +83 -49
- package/docs/components/radio.md +39 -43
- package/docs/components/select-faceted.md +54 -7
- package/docs/components/select.md +390 -386
- package/docs/components/slider.md +136 -19
- package/docs/components/steps.md +6 -3
- package/docs/components/switch.md +8 -9
- package/docs/components/tabs.md +110 -104
- package/docs/components/text.md +110 -86
- package/docs/components/title.md +47 -33
- package/docs/components/toaster.md +242 -84
- package/docs/components/tooltip.md +204 -113
- package/docs/install-config.md +461 -96
- package/docs/packages/plot.md +228 -143
- package/docs/theming.md +29 -13
- package/package.json +43 -4
- package/theme-antithesis-license.md +66 -0
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { BaseProps } from "../general_types";
|
|
2
2
|
export interface TooltipProps extends BaseProps {
|
|
3
|
-
/**
|
|
4
|
-
* Lives in the light DOM, so it's styleable with your own plain CSS. */
|
|
3
|
+
/** Supplementary text or markup. Content stays in light DOM for application CSS. */
|
|
5
4
|
children?: React.ReactNode;
|
|
6
|
-
/**
|
|
7
|
-
* ~`50` for a near-instant tooltip (0 has caused issues in practice).
|
|
5
|
+
/** Wait in milliseconds after hover or keyboard focus. Use `50` for a short delay.
|
|
8
6
|
* @defaultValue 300 */
|
|
9
7
|
delay?: number;
|
|
10
8
|
/** Which side of the anchor the bubble prefers. Auto-flips to the other
|
|
@@ -18,10 +16,9 @@ export interface TooltipProps extends BaseProps {
|
|
|
18
16
|
* pinned (anchored beneath the target) by default; pass `follow` for the
|
|
19
17
|
* cursor-tracking behavior, which fades by distance as the cursor leaves. */
|
|
20
18
|
follow?: boolean;
|
|
21
|
-
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* can't follow the cursor, even with `follow`). */
|
|
19
|
+
/** Keep content available while the pointer or keyboard focus is inside it.
|
|
20
|
+
* Enables pointer events and pins the bubble even with `follow`. Essential
|
|
21
|
+
* actions belong in a Menu or Dialog with an explicit trigger. */
|
|
25
22
|
interactive?: boolean;
|
|
26
23
|
/** Only show when the target is actually truncated (its text overflows and is
|
|
27
24
|
* ellipsized); a label that fits gets no tooltip. The check is a UI-thread
|
|
@@ -49,13 +46,12 @@ export interface TooltipProps extends BaseProps {
|
|
|
49
46
|
*
|
|
50
47
|
* @example Basic usage
|
|
51
48
|
* ```tsx
|
|
52
|
-
* import { Tooltip } from '@antadesign/anta'
|
|
49
|
+
* import { Tooltip, Button } from '@antadesign/anta'
|
|
53
50
|
* import '@antadesign/anta/elements'
|
|
54
51
|
*
|
|
55
|
-
* <
|
|
56
|
-
* Save
|
|
52
|
+
* <Button label="Save">
|
|
57
53
|
* <Tooltip>Saves your work</Tooltip>
|
|
58
|
-
* </
|
|
54
|
+
* </Button>
|
|
59
55
|
* ```
|
|
60
56
|
*
|
|
61
57
|
* @example Above the anchor, rich content
|
|
@@ -70,10 +66,9 @@ export interface TooltipProps extends BaseProps {
|
|
|
70
66
|
*
|
|
71
67
|
* @example Follow the cursor
|
|
72
68
|
* ```tsx
|
|
73
|
-
* <
|
|
74
|
-
* Hover me
|
|
69
|
+
* <Button label="Hover me">
|
|
75
70
|
* <Tooltip follow>Tracks the pointer</Tooltip>
|
|
76
|
-
* </
|
|
71
|
+
* </Button>
|
|
77
72
|
* ```
|
|
78
73
|
*/
|
|
79
74
|
export declare const Tooltip: ({ delay, placement, round, follow, interactive, truncatedOnly, truncatedSelector, className, style, children, ...rest }: TooltipProps) => any;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The copy target for a copy preset (`ButtonCopy` / `MenuItemCopy`) — exactly
|
|
3
3
|
* one of a literal string, a DOM region, or the page URL. The write itself is
|
|
4
4
|
* performed by the slotted `<a-copy>` element; these props map to its attributes
|
|
5
|
-
* via `
|
|
5
|
+
* via `useCopyElementProps`. `copyWithUrl` / `onCopyRequest` are only meaningful for
|
|
6
6
|
* the string target, so the union pins them `never` elsewhere.
|
|
7
7
|
*/
|
|
8
8
|
export type CopyTarget = {
|
|
@@ -40,7 +40,7 @@ export type CopyTarget = {
|
|
|
40
40
|
copyWithUrl?: never;
|
|
41
41
|
onCopyRequest?: never;
|
|
42
42
|
};
|
|
43
|
-
/** Everything `
|
|
43
|
+
/** Everything `useCopyElementProps` reads: the target plus the resolved `onCopied`
|
|
44
44
|
* (the preset passes its feedback-wrapped handler) and the `toast` opt-in. */
|
|
45
45
|
type CopyElementInput = {
|
|
46
46
|
copy?: string;
|
|
@@ -63,7 +63,18 @@ export declare function copyElementProps(p: CopyElementInput): {
|
|
|
63
63
|
readonly toast: "" | undefined;
|
|
64
64
|
readonly 'copied-label': string | undefined;
|
|
65
65
|
readonly oncopydone: ((e: any) => void) | undefined;
|
|
66
|
-
readonly oncopyrequest: (() => void) | undefined;
|
|
66
|
+
readonly oncopyrequest: ((e: any) => void) | undefined;
|
|
67
|
+
};
|
|
68
|
+
/** @internal Apply the shared browser hydration option to copy event props. */
|
|
69
|
+
export declare function useCopyElementProps(p: CopyElementInput): {
|
|
70
|
+
copy: string | undefined;
|
|
71
|
+
'copy-node': string | undefined;
|
|
72
|
+
'copy-url': "" | undefined;
|
|
73
|
+
'copy-with-url': "" | undefined;
|
|
74
|
+
toast: "" | undefined;
|
|
75
|
+
'copied-label': string | undefined;
|
|
76
|
+
oncopydone?: ((e: any) => void) | undefined;
|
|
77
|
+
oncopyrequest?: ((e: any) => void) | undefined;
|
|
67
78
|
};
|
|
68
79
|
/** True when these props copy a DOM node — the host control must then be marked
|
|
69
80
|
* `data-copy-node-button` so the serializer strips it from the copied region. */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { nativeStateChange } from "../anta_helpers";
|
|
2
|
+
import { useNativeEventProps } from "../native-event-props";
|
|
2
3
|
function copyElementProps(p) {
|
|
3
4
|
const { copy, copyNode, copyUrl, copyWithUrl, onCopyRequest, onCopied, toast, copiedLabel } = p;
|
|
4
5
|
return {
|
|
@@ -8,14 +9,24 @@ function copyElementProps(p) {
|
|
|
8
9
|
"copy-with-url": copyWithUrl ? "" : void 0,
|
|
9
10
|
toast: toast ? "" : void 0,
|
|
10
11
|
"copied-label": copiedLabel,
|
|
11
|
-
oncopydone: onCopied ? (e) =>
|
|
12
|
-
|
|
12
|
+
oncopydone: onCopied ? (e) => {
|
|
13
|
+
const result = nativeStateChange(e);
|
|
14
|
+
if (result.isOwn) onCopied(result.detail?.ok ?? false);
|
|
15
|
+
} : void 0,
|
|
16
|
+
oncopyrequest: onCopyRequest ? (e) => {
|
|
17
|
+
if (nativeStateChange(e).isOwn) onCopyRequest();
|
|
18
|
+
} : void 0
|
|
13
19
|
};
|
|
14
20
|
}
|
|
21
|
+
function useCopyElementProps(p) {
|
|
22
|
+
const { oncopydone, oncopyrequest, ...attributes } = copyElementProps(p);
|
|
23
|
+
return { ...attributes, ...useNativeEventProps({ oncopydone, oncopyrequest }) };
|
|
24
|
+
}
|
|
15
25
|
function isNodeCopy(p) {
|
|
16
26
|
return p.copyNode != null && p.copyNode !== false;
|
|
17
27
|
}
|
|
18
28
|
export {
|
|
19
29
|
copyElementProps,
|
|
20
|
-
isNodeCopy
|
|
30
|
+
isNodeCopy,
|
|
31
|
+
useCopyElementProps
|
|
21
32
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { OptionValue, SelectGroup, SelectItem, SelectOption, SelectSubmenu } from './Select';
|
|
2
|
+
interface Leaf<V extends OptionValue> {
|
|
3
|
+
kind: 'option';
|
|
4
|
+
opt: SelectOption<V>;
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
group?: string;
|
|
7
|
+
}
|
|
8
|
+
export type SelectNode<V extends OptionValue> = Leaf<V> | ({
|
|
9
|
+
key: string;
|
|
10
|
+
disabled: boolean;
|
|
11
|
+
children: SelectNode<V>[];
|
|
12
|
+
} & ({
|
|
13
|
+
kind: 'group';
|
|
14
|
+
source: SelectGroup<V>;
|
|
15
|
+
} | {
|
|
16
|
+
kind: 'submenu';
|
|
17
|
+
source: SelectSubmenu<V>;
|
|
18
|
+
}));
|
|
19
|
+
export declare function prepareSelectOptions<V extends OptionValue>(items: SelectItem<V>[], matches?: (option: SelectOption<V>) => boolean): {
|
|
20
|
+
tree: SelectNode<V>[];
|
|
21
|
+
allLeaves: Leaf<V>[];
|
|
22
|
+
visibleLeaves: Leaf<V>[];
|
|
23
|
+
};
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { normalizeOpt } from "./select-options";
|
|
2
|
+
function prepareSelectOptions(items, matches) {
|
|
3
|
+
const allLeaves = [];
|
|
4
|
+
const visibleLeaves = [];
|
|
5
|
+
const walk = (items2, group, disabled = false) => {
|
|
6
|
+
const nodes = [];
|
|
7
|
+
items2.forEach((raw, index) => {
|
|
8
|
+
if (typeof raw !== "string" && Array.isArray(raw.submenu)) {
|
|
9
|
+
const source = raw;
|
|
10
|
+
const effectiveDisabled = disabled || !!source.disabled;
|
|
11
|
+
const children = walk(source.submenu, source.label, effectiveDisabled);
|
|
12
|
+
if (children.length) nodes.push({ kind: "submenu", source, disabled: effectiveDisabled, children, key: `sub-${index}-${source.label}` });
|
|
13
|
+
} else if (typeof raw !== "string" && Array.isArray(raw.options)) {
|
|
14
|
+
const source = raw;
|
|
15
|
+
const effectiveDisabled = disabled || !!source.disabled;
|
|
16
|
+
const children = walk(source.options, source.label, effectiveDisabled);
|
|
17
|
+
if (children.length) nodes.push({ kind: "group", source, disabled: effectiveDisabled, children, key: `grp-${index}-${source.label}` });
|
|
18
|
+
} else {
|
|
19
|
+
const opt = normalizeOpt(raw);
|
|
20
|
+
const leaf = { kind: "option", opt, disabled: disabled || !!opt.disabled, group };
|
|
21
|
+
allLeaves.push(leaf);
|
|
22
|
+
if (!matches || matches(opt)) {
|
|
23
|
+
visibleLeaves.push(leaf);
|
|
24
|
+
nodes.push(leaf);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
return nodes;
|
|
29
|
+
};
|
|
30
|
+
const tree = walk(items);
|
|
31
|
+
return { tree, allLeaves, visibleLeaves };
|
|
32
|
+
}
|
|
33
|
+
export {
|
|
34
|
+
prepareSelectOptions
|
|
35
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Use a harmless base when importing element classes without a browser DOM. */
|
|
2
|
+
declare const NativeHTMLElement: typeof HTMLElement;
|
|
3
|
+
/** Base for custom elements that can live in a different document or iframe. */
|
|
4
|
+
export declare class HTMLElementBase extends NativeHTMLElement {
|
|
5
|
+
/** This element's own window, including when rendered in an iframe. */
|
|
6
|
+
protected get view(): Window & typeof globalThis;
|
|
7
|
+
/** This element's own document. */
|
|
8
|
+
protected get doc(): Document;
|
|
9
|
+
}
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const NativeHTMLElement = typeof HTMLElement !== "undefined" ? HTMLElement : class {
|
|
2
|
+
};
|
|
3
|
+
class HTMLElementBase extends NativeHTMLElement {
|
|
4
|
+
/** This element's own window, including when rendered in an iframe. */
|
|
5
|
+
get view() {
|
|
6
|
+
return this.ownerDocument?.defaultView ?? window;
|
|
7
|
+
}
|
|
8
|
+
/** This element's own document. */
|
|
9
|
+
get doc() {
|
|
10
|
+
return this.ownerDocument ?? document;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export {
|
|
14
|
+
HTMLElementBase
|
|
15
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-avatar{--avatar-size: 44px;--avatar-radius: 22%;--avatar-placeholder-bg: var(--bg-3);--avatar-badge-ratio: .24;--avatar-badge-size: calc(var(--avatar-size) * var(--avatar-badge-ratio));--avatar-badge-inset: 0px;--avatar-badge-gap: 2px;--avatar-badge-mask: none;--avatar-badge-tone-source: var(--anta-seed-neutral);--avatar-badge-chroma: .17;--avatar-badge-color: light-dark( oklch(from var(--avatar-badge-tone-source) .62 var(--avatar-badge-chroma) h), oklch(from var(--avatar-badge-tone-source) .68 var(--avatar-badge-chroma) h) );display:inline-block;inline-size:var(--avatar-size);block-size:var(--avatar-size);vertical-align:middle}a-avatar[round]{--avatar-radius: var(--avatar-round, 50%);--avatar-badge-inset: calc(var(--avatar-size) * .03);@supports (border-radius: attr(probe type(<length>),1px)){--avatar-round: attr(round type(<length>))}}a-avatar[size=small]{--avatar-size: 32px;--avatar-badge-gap: 1.5px}a-avatar[size=large]{--avatar-size: 64px;--avatar-badge-gap: 2.5px}a-avatar[badge]:not([badge=""],[badge=none]){--avatar-badge-mask: radial-gradient( circle calc(var(--avatar-badge-size) / 2 + var(--avatar-badge-gap)) at calc(100% - var(--avatar-badge-inset) - var(--avatar-badge-size) / 2) calc(100% - var(--avatar-badge-inset) - var(--avatar-badge-size) / 2), transparent 99%, #000 100% )}a-avatar:not(:defined){display:inline-block;inline-size:var(--avatar-size);block-size:var(--avatar-size);border-radius:var(--avatar-radius);background:var(--avatar-placeholder-bg);vertical-align:middle}a-avatar[badge=neutral]{--avatar-badge-chroma: .005}a-avatar[badge=brand]{--avatar-badge-tone-source: var(--anta-seed-brand)}a-avatar[badge=info]{--avatar-badge-tone-source: var(--anta-seed-info)}a-avatar[badge=success]{--avatar-badge-tone-source: var(--anta-seed-success)}a-avatar[badge=warning]{--avatar-badge-tone-source: var(--anta-seed-warning)}a-avatar[badge=critical]{--avatar-badge-tone-source: var(--anta-seed-critical)}@supports (color: attr(badge type(<color>),transparent)){a-avatar[badge]:not([badge=""],[badge=neutral],[badge=brand],[badge=info],[badge=success],[badge=warning],[badge=critical]){--avatar-badge-tone-source: attr(badge type(<color>), transparent)}}}
|
|
1
|
+
@layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-avatar{--avatar-size: 44px;--avatar-radius: 22%;--avatar-placeholder-bg: var(--bg-3);--avatar-badge-ratio: .24;--avatar-badge-size: calc(var(--avatar-size) * var(--avatar-badge-ratio));--avatar-badge-inset: 0px;--avatar-badge-gap: 2px;--avatar-badge-mask: none;--avatar-badge-tone-source: var(--anta-seed-neutral);--avatar-badge-chroma: .17;--avatar-badge-color: light-dark( oklch(from var(--avatar-badge-tone-source) .62 var(--avatar-badge-chroma) h), oklch(from var(--avatar-badge-tone-source) .68 var(--avatar-badge-chroma) h) );display:inline-block;position:relative;inline-size:var(--avatar-size);block-size:var(--avatar-size);vertical-align:middle}a-avatar::part(frame){display:block;inline-size:100%;block-size:100%;border-radius:var(--avatar-radius);background:var(--avatar-placeholder-bg);mask-image:var(--avatar-badge-mask)}a-avatar::part(image){object-fit:cover}a-avatar::part(badge){display:none;position:absolute;right:var(--avatar-badge-inset);bottom:var(--avatar-badge-inset);inline-size:var(--avatar-badge-size);block-size:var(--avatar-badge-size);border-radius:50%;background:var(--avatar-badge-color)}a-avatar[badge]:not([badge=""],[badge=none])::part(badge){display:block}a-avatar[round]{--avatar-radius: var(--avatar-round, 50%);--avatar-badge-inset: calc(var(--avatar-size) * .03);@supports (border-radius: attr(probe type(<length>),1px)){--avatar-round: attr(round type(<length>))}}a-avatar[size=small]{--avatar-size: 32px;--avatar-badge-gap: 1.5px}a-avatar[size=large]{--avatar-size: 64px;--avatar-badge-gap: 2.5px}a-avatar[badge]:not([badge=""],[badge=none]){--avatar-badge-mask: radial-gradient( circle calc(var(--avatar-badge-size) / 2 + var(--avatar-badge-gap)) at calc(100% - var(--avatar-badge-inset) - var(--avatar-badge-size) / 2) calc(100% - var(--avatar-badge-inset) - var(--avatar-badge-size) / 2), transparent 99%, #000 100% )}a-avatar:not(:defined){display:inline-block;inline-size:var(--avatar-size);block-size:var(--avatar-size);border-radius:var(--avatar-radius);background:var(--avatar-placeholder-bg);vertical-align:middle}a-avatar[badge=neutral]{--avatar-badge-chroma: .005}a-avatar[badge=brand]{--avatar-badge-tone-source: var(--anta-seed-brand)}a-avatar[badge=info]{--avatar-badge-tone-source: var(--anta-seed-info)}a-avatar[badge=success]{--avatar-badge-tone-source: var(--anta-seed-success)}a-avatar[badge=warning]{--avatar-badge-tone-source: var(--anta-seed-warning)}a-avatar[badge=critical]{--avatar-badge-tone-source: var(--anta-seed-critical)}@supports (color: attr(badge type(<color>),transparent)){a-avatar[badge]:not([badge=""],[badge=neutral],[badge=brand],[badge=info],[badge=success],[badge=warning],[badge=critical]){--avatar-badge-tone-source: attr(badge type(<color>), transparent)}}}
|
|
@@ -8,15 +8,12 @@ class AAvatarElement extends HTMLElementBase {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
super();
|
|
10
10
|
const shadow = this.attachShadow({ mode: "open" });
|
|
11
|
-
const style = document.createElement("style");
|
|
12
|
-
style.textContent = SHADOW_STYLE;
|
|
13
11
|
this.#badge = document.createElement("span");
|
|
14
12
|
this.#badge.className = "badge";
|
|
15
13
|
this.#badge.setAttribute("part", "badge");
|
|
16
|
-
this.#badge
|
|
17
|
-
shadow.append(style, this.#badge);
|
|
14
|
+
shadow.append(this.#badge);
|
|
18
15
|
}
|
|
19
|
-
/** Swap in the picture, keeping it
|
|
16
|
+
/** Swap in the picture, keeping it before the indicator. */
|
|
20
17
|
#setPicture(node) {
|
|
21
18
|
if (this.#picture) this.#picture.replaceWith(node);
|
|
22
19
|
else this.#badge.before(node);
|
|
@@ -40,8 +37,6 @@ class AAvatarElement extends HTMLElementBase {
|
|
|
40
37
|
}
|
|
41
38
|
}
|
|
42
39
|
#render() {
|
|
43
|
-
const badge = this.getAttribute("badge");
|
|
44
|
-
this.#badge.style.display = badge && badge !== "none" ? "" : "none";
|
|
45
40
|
const name = this.getAttribute("name") ?? void 0;
|
|
46
41
|
const src = this.getAttribute("src");
|
|
47
42
|
if (src) {
|
|
@@ -64,27 +59,6 @@ class AAvatarElement extends HTMLElementBase {
|
|
|
64
59
|
}
|
|
65
60
|
}
|
|
66
61
|
}
|
|
67
|
-
const SHADOW_STYLE = `
|
|
68
|
-
:host { display: inline-block; position: relative; vertical-align: middle; }
|
|
69
|
-
svg, img {
|
|
70
|
-
display: block;
|
|
71
|
-
inline-size: 100%;
|
|
72
|
-
block-size: 100%;
|
|
73
|
-
border-radius: var(--avatar-radius);
|
|
74
|
-
background: var(--avatar-placeholder-bg);
|
|
75
|
-
mask-image: var(--avatar-badge-mask);
|
|
76
|
-
}
|
|
77
|
-
img { object-fit: cover; }
|
|
78
|
-
.badge {
|
|
79
|
-
position: absolute;
|
|
80
|
-
right: var(--avatar-badge-inset);
|
|
81
|
-
bottom: var(--avatar-badge-inset);
|
|
82
|
-
inline-size: var(--avatar-badge-size);
|
|
83
|
-
block-size: var(--avatar-badge-size);
|
|
84
|
-
border-radius: 50%;
|
|
85
|
-
background: var(--avatar-badge-color);
|
|
86
|
-
}
|
|
87
|
-
`;
|
|
88
62
|
function register_a_avatar() {
|
|
89
63
|
if (typeof customElements === "undefined") return;
|
|
90
64
|
if (!customElements.get("a-avatar")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-banner{--banner-bg: var(--bg-4);--banner-border: var(--border-4);--banner-text: var(--text-2);display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:4px 1ch;position:relative;box-sizing:border-box;width:100%;min-height:40px;padding-block:6px;padding-inline:16px 48px;color:var(--banner-text);background:var(--banner-bg);border:0 solid var(--banner-border);border-radius:0;overflow:clip;overflow-clip-margin:3px;interpolate-size:allow-keywords;transition:opacity .16s ease,block-size .2s ease,padding-block .2s ease,border-block-width .2s ease,display .2s allow-discrete}a-banner[align=center]{justify-content:center;padding-inline:48px}a-banner[round]{border-radius:var(--banner-round, 999px);@supports (border-radius: attr(probe type(<length>),1px)){--banner-round: attr(round type(<length>))}}a-banner
|
|
1
|
+
@layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-banner{--banner-bg: var(--bg-4);--banner-border: var(--border-4);--banner-text: var(--text-2);--banner-round: initial;--banner-tone-source: initial;display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:4px 1ch;position:relative;box-sizing:border-box;width:100%;min-height:40px;padding-block:6px;padding-inline:16px 48px;color:var(--banner-text);background:var(--banner-bg);border:0 solid var(--banner-border);border-radius:0;overflow:clip;overflow-clip-margin:3px;interpolate-size:allow-keywords;transition:opacity .16s ease,block-size .2s ease,padding-block .2s ease,border-block-width .2s ease,display .2s allow-discrete}a-banner[align=center]{justify-content:center;padding-inline:48px}a-banner[round]{border-radius:var(--banner-round, 999px);@supports (border-radius: attr(probe type(<length>),1px)){--banner-round: attr(round type(<length>))}}a-banner>a-banner-content{display:contents}a-banner>a-banner-actions{display:flex;align-items:center;gap:4px;flex-shrink:0}a-banner>a-banner-actions:empty{display:none}a-banner>a-banner-message:empty,a-banner>:is(a-banner-message,a-banner-content,a-banner-actions,a-banner-close)[hidden]{display:none}a-banner>a-banner-close{position:absolute;inset-inline-end:0;inset-block:0;display:grid;place-items:center;opacity:.65;transition:opacity .15s ease}a-banner>a-banner-close:hover,a-banner>a-banner-close:focus-within{opacity:1}a-banner>a-banner-close>a-button{height:100%;width:40px}a-banner-message{font-size:14px;line-height:20px;font-weight:475;text-align:start}a-banner[align=center]>a-banner-message{text-align:center}a-banner[tone=brand]{--banner-bg: var(--bg-4-brand);--banner-border: var(--border-4-brand);--banner-text: var(--text-2-brand)}a-banner[tone=info]{--banner-bg: var(--bg-4-info);--banner-border: var(--border-4-info);--banner-text: var(--text-2-info)}a-banner[tone=success]{--banner-bg: var(--bg-4-success);--banner-border: var(--border-4-success);--banner-text: var(--text-2-success)}a-banner[tone=warning]{--banner-bg: var(--bg-4-warning);--banner-border: var(--border-4-warning);--banner-text: var(--text-2-warning)}a-banner[tone=critical]{--banner-bg: var(--bg-4-critical);--banner-border: var(--border-4-critical);--banner-text: var(--text-2-critical)}a-banner[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--banner-tone-source: currentColor;--banner-text: light-dark( oklch(from var(--banner-tone-source) .5 .125 h), oklch(from var(--banner-tone-source) .77 .11 h) );--banner-bg: light-dark( oklch(from var(--banner-tone-source) .955 .02 h), oklch(from var(--banner-tone-source) .185 .05 h) );--banner-border: light-dark( oklch(from var(--banner-tone-source) .9 .04 h), oklch(from var(--banner-tone-source) .26 .06 h) );@supports (color: attr(probe type(<color>),red)){--banner-tone-source: attr(tone type(<color>), currentColor)}}a-banner[state]:not([state=open]),a-banner:not([state])[default-state=closed]:not(:state(open)),a-banner:not([state]):state(closed){display:none;block-size:0;min-block-size:0;padding-block:0;border-block-width:0;opacity:0}@media(forced-colors:active){a-banner{border-width:1px;border-color:CanvasText}}@media(prefers-reduced-motion:reduce){a-banner,a-banner>a-banner-close{transition:none}}}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { HTMLElementBase } from '../anta_helpers';
|
|
2
2
|
import './a-banner.css';
|
|
3
|
+
/** Light-DOM notice with declarative regions and external styling. The element
|
|
4
|
+
* owns dismissal through ElementInternals, without changing
|
|
5
|
+
* application-owned markup, attributes, styles, or ARIA. */
|
|
3
6
|
export declare class ABannerElement extends HTMLElementBase {
|
|
4
7
|
#private;
|
|
5
8
|
static observedAttributes: string[];
|
|
6
9
|
constructor();
|
|
7
10
|
connectedCallback(): void;
|
|
8
|
-
attributeChangedCallback(name: string): void;
|
|
11
|
+
attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
|
|
9
12
|
}
|
|
10
13
|
export declare function register_a_banner(): void;
|
|
@@ -1,145 +1,55 @@
|
|
|
1
1
|
import { HTMLElementBase, installDismissTrigger, parseOpenState } from "../anta_helpers";
|
|
2
2
|
import "./a-banner.css";
|
|
3
|
-
const DISMISS_TRIGGER = "dismissrequest";
|
|
4
|
-
const DISMISS_ATTR = "data-banner-dismiss";
|
|
5
|
-
const SHADOW_STYLE = `
|
|
6
|
-
slot[name="message"], slot:not([name]) { display: contents; }
|
|
7
|
-
|
|
8
|
-
slot[name="actions"] {
|
|
9
|
-
display: flex;
|
|
10
|
-
align-items: center;
|
|
11
|
-
gap: 4px;
|
|
12
|
-
flex-shrink: 0;
|
|
13
|
-
}
|
|
14
|
-
slot[name="actions"][hidden] { display: none; }
|
|
15
|
-
|
|
16
|
-
slot[name="close"] {
|
|
17
|
-
position: absolute;
|
|
18
|
-
inset-inline-end: 0;
|
|
19
|
-
inset-block: 0;
|
|
20
|
-
display: grid;
|
|
21
|
-
place-items: center;
|
|
22
|
-
opacity: 0.65;
|
|
23
|
-
transition: opacity 150ms ease;
|
|
24
|
-
}
|
|
25
|
-
slot[name="close"]:hover,
|
|
26
|
-
slot[name="close"]:focus-within {
|
|
27
|
-
opacity: 1;
|
|
28
|
-
}
|
|
29
|
-
`;
|
|
30
|
-
const parseState = parseOpenState;
|
|
31
3
|
class ABannerElement extends HTMLElementBase {
|
|
32
4
|
static observedAttributes = ["state"];
|
|
33
|
-
// Visibility is held here as a custom state (`:state(open)` / `:state(closed)`),
|
|
34
|
-
// NOT a host attribute — declarative-DOM safe (no host mutation, no reconcile
|
|
35
|
-
// churn). This is the ONLY declarative-safe self-hide channel, so a runtime
|
|
36
|
-
// (uncontrolled) ✕ dismiss needs CustomStateSet + the CSS `:state()` selector
|
|
37
|
-
// (Chrome 90+, Safari 17.4+, Firefox 126+); below that the ✕ can't self-hide (an
|
|
38
|
-
// attribute fallback would violate the no-host-mutation rule). Controlled mode
|
|
39
|
-
// degrades everywhere — the `state="closed"` attribute the wrapper sets has the
|
|
40
|
-
// `[state="closed"]` CSS fallback, which needs no custom-state support.
|
|
41
5
|
#internals;
|
|
42
|
-
// `default-state` seeds the uncontrolled intent ONCE, on the first connect; a
|
|
43
|
-
// re-parent (disconnect → reconnect) then keeps the applied state (which lives
|
|
44
|
-
// off-DOM in #internals and survives the move) instead of re-seeding `open` over a
|
|
45
|
-
// banner the user already dismissed. Mirrors a-dialog's #seeded.
|
|
46
6
|
#seeded = false;
|
|
47
7
|
constructor() {
|
|
48
8
|
super();
|
|
49
|
-
this.#internals =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
messageSlot.name = "message";
|
|
55
|
-
messageSlot.setAttribute("part", "message");
|
|
56
|
-
const contentSlot = document.createElement("slot");
|
|
57
|
-
contentSlot.setAttribute("part", "content");
|
|
58
|
-
const actionsSlot = document.createElement("slot");
|
|
59
|
-
actionsSlot.name = "actions";
|
|
60
|
-
actionsSlot.setAttribute("part", "actions");
|
|
61
|
-
const syncActionsSlot = () => {
|
|
62
|
-
actionsSlot.hidden = !actionsSlot.assignedNodes({ flatten: true }).some((node) => {
|
|
63
|
-
if (node.nodeType === Node.TEXT_NODE) return node.textContent?.trim() !== "";
|
|
64
|
-
if (node.nodeType !== Node.ELEMENT_NODE) return false;
|
|
65
|
-
const element = node;
|
|
66
|
-
return !element.hasAttribute("data-anta-banner-actions-wrapper") || !element.matches(":empty");
|
|
67
|
-
});
|
|
68
|
-
};
|
|
69
|
-
actionsSlot.hidden = true;
|
|
70
|
-
actionsSlot.addEventListener("slotchange", syncActionsSlot);
|
|
71
|
-
const closeSlot = document.createElement("slot");
|
|
72
|
-
closeSlot.name = "close";
|
|
73
|
-
closeSlot.setAttribute("part", "close");
|
|
74
|
-
shadow.append(style, messageSlot, contentSlot, actionsSlot, closeSlot);
|
|
75
|
-
syncActionsSlot();
|
|
76
|
-
this.addEventListener(DISMISS_TRIGGER, (e) => {
|
|
77
|
-
e.stopPropagation();
|
|
9
|
+
this.#internals = this.attachInternals();
|
|
10
|
+
this.addEventListener("dismissrequest", (event) => {
|
|
11
|
+
const banner = event.composedPath().find((node) => node.nodeType === 1 && node.localName === "a-banner");
|
|
12
|
+
if (banner !== this) return;
|
|
13
|
+
event.stopPropagation();
|
|
78
14
|
this.#requestDismiss();
|
|
79
15
|
});
|
|
80
|
-
installDismissTrigger(this,
|
|
16
|
+
installDismissTrigger(this, "data-banner-dismiss", () => this.#requestDismiss());
|
|
81
17
|
}
|
|
82
|
-
/** Controlled mode: the `state` attribute is present and owns visibility. */
|
|
83
18
|
get #controlled() {
|
|
84
19
|
return this.hasAttribute("state");
|
|
85
20
|
}
|
|
86
|
-
/** The currently *applied* state (read from the custom state — the source of
|
|
87
|
-
* truth for what's painted). Reads open until the element has applied a state.
|
|
88
|
-
* Both `?.` guard engines with ElementInternals but no CustomStateSet (`.states`
|
|
89
|
-
* undefined), where reading it would otherwise throw inside the ✕ click. */
|
|
90
21
|
get #current() {
|
|
91
|
-
return this.#internals
|
|
22
|
+
return this.#internals.states.has("closed") ? "closed" : "open";
|
|
92
23
|
}
|
|
93
24
|
connectedCallback() {
|
|
94
25
|
if (this.#controlled) {
|
|
95
|
-
this.#applyState(
|
|
26
|
+
this.#applyState(parseOpenState(this.getAttribute("state")));
|
|
96
27
|
} else if (!this.#seeded) {
|
|
97
|
-
this.#applyState(this
|
|
98
|
-
this.#seeded = true;
|
|
28
|
+
this.#applyState(this.getAttribute("default-state") === "closed" ? "closed" : "open");
|
|
99
29
|
}
|
|
30
|
+
this.#seeded = true;
|
|
100
31
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
* `parseState` here. A hand-authored `<a-banner>` with no attributes shows.) */
|
|
105
|
-
#seedState() {
|
|
106
|
-
return this.getAttribute("default-state") === "closed" ? "closed" : "open";
|
|
32
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
33
|
+
if (oldValue === newValue) return;
|
|
34
|
+
if (name === "state" && this.#controlled) this.#applyState(parseOpenState(newValue));
|
|
107
35
|
}
|
|
108
|
-
attributeChangedCallback(name) {
|
|
109
|
-
if (name === "state" && this.#controlled) this.#applyState(parseState(this.getAttribute("state")));
|
|
110
|
-
}
|
|
111
|
-
/** Mirror the state to `:state(open)` / `:state(closed)` (idempotent). The
|
|
112
|
-
* external sheet collapses the host on `:state(closed)`. Off-DOM only. */
|
|
113
36
|
#applyState(state) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (state === "closed") {
|
|
117
|
-
this.#internals?.states?.add("closed");
|
|
118
|
-
this.#internals?.states?.delete("open");
|
|
119
|
-
} else {
|
|
120
|
-
this.#internals?.states?.add("open");
|
|
121
|
-
this.#internals?.states?.delete("closed");
|
|
122
|
-
}
|
|
123
|
-
} catch {
|
|
124
|
-
}
|
|
37
|
+
this.#internals.states.delete(state === "closed" ? "open" : "closed");
|
|
38
|
+
this.#internals.states.add(state);
|
|
125
39
|
}
|
|
126
|
-
/** Announce a requested dismiss (cancelable, before applying), then — uncontrolled
|
|
127
|
-
* and un-vetoed — apply it. Controlled: never self-apply; the consumer answers
|
|
128
|
-
* via `state`. See STATEFUL-COMPONENTS.md. */
|
|
129
40
|
#requestDismiss() {
|
|
130
41
|
if (this.#current === "closed") return;
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
42
|
+
const controlled = this.#controlled;
|
|
43
|
+
const accepted = this.dispatchEvent(new this.view.CustomEvent("statechange", {
|
|
44
|
+
cancelable: true,
|
|
45
|
+
detail: { next: "closed", prev: "open" }
|
|
46
|
+
}));
|
|
47
|
+
if (!controlled && !this.#controlled && accepted) this.#applyState("closed");
|
|
136
48
|
}
|
|
137
49
|
}
|
|
138
50
|
function register_a_banner() {
|
|
139
51
|
if (typeof customElements === "undefined") return;
|
|
140
|
-
if (!customElements.get("a-banner"))
|
|
141
|
-
customElements.define("a-banner", ABannerElement);
|
|
142
|
-
}
|
|
52
|
+
if (!customElements.get("a-banner")) customElements.define("a-banner", ABannerElement);
|
|
143
53
|
}
|
|
144
54
|
register_a_banner();
|
|
145
55
|
export {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import '../components/Breadcrumbs.css';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "../components/Breadcrumbs.css";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]){--button-primary-fg: #ffffff;--bg-primary-disabled: light-dark(#ece9ec, #272329);--bg-secondary-disabled: light-dark(#f6f4f6, #1d1a1e);--fg-disabled-primary: light-dark(#afa9b1, #776e77);--fg-disabled: light-dark(#afa9b1, #635b65);--button-loading-stripe: 14px;--button-loading-stripe-gap: 16px;--button-loading-period: calc( var(--button-loading-stripe) + var(--button-loading-stripe-gap) );--button-loading-angle: 125deg;--button-loading-x-period: calc( var(--button-loading-period) / cos(var(--button-loading-angle) - 90deg) );--button-loading-opacity: .15;--button-loading-blur: 5px;--_src: var(--anta-seed-neutral);--button-bg-primary-rest: light-dark(oklch(from var(--_src) .5 .02 h), oklch(from var(--_src) .4 .015 h));--button-bg-primary-hover: light-dark(oklch(from var(--_src) .45 .02 h), oklch(from var(--_src) .44 .015 h));--button-bg-primary-active: light-dark(oklch(from var(--_src) .4 .02 h), oklch(from var(--_src) .48 .015 h));--button-fg-primary-rest: var(--button-primary-fg);--button-fg-secondary-rest: light-dark(oklch(from var(--_src) .46 .008 h), oklch(from var(--_src) .86 .015 h));--button-fg-secondary-hover: light-dark(oklch(from var(--_src) .4 .008 h), oklch(from var(--_src) .86 .015 h));--button-fg-tertiary-rest: var(--button-fg-secondary-rest);--button-fg-tertiary-hover: var(--button-fg-secondary-hover);--button-bg-tertiary-hover: light-dark(oklch(from var(--_src) .54 .03 h / .1), oklch(from var(--_src) .44 .01 h / .24));--button-bg-tertiary-active: light-dark(oklch(from var(--_src) .54 .03 h / .15), oklch(from var(--_src) .44 .01 h / .34));--button-fg-quaternary-rest: light-dark(oklch(from var(--_src) .46 .008 h / .85), oklch(from var(--_src) .86 .015 h / .85));--button-fg-quaternary-hover: light-dark(oklch(from var(--_src) .38 .008 h), oklch(from var(--_src) .9 .015 h));--button-bg-secondary-rest: light-dark(oklch(from var(--_src) .54 .03 h / .1), oklch(from var(--_src) .44 .01 h / .24));--button-bg-secondary-hover: light-dark(oklch(from var(--_src) .54 .03 h / .15), oklch(from var(--_src) .44 .01 h / .34));--button-bg-secondary-active: light-dark(oklch(from var(--_src) .54 .03 h / .2), oklch(from var(--_src) .44 .01 h / .44));--_fs: 15px;--_lh: 20px;--_pb: 1px;--_radius: 4px;--button-padding-x: 9px;--button-padding-y: calc((8px - var(--_pb)) / 2);--button-timing-in: 75ms ease-in;--button-timing-active: 50ms linear;--button-timing-out: .15s ease-out;--button-loading-duration: .5s}a-button[round],a[role=button][data-anta][round],button[data-anta][round],input[data-anta]:is([type=reset],[type=submit])[round]{--button-round: 999px;--_radius: var(--button-round, 999px);@supports (border-radius: attr(probe type(<length>),1px)){--button-round: attr(round type(<length>), 999px)}}a-button[tone]:not([tone=""],[tone=neutral]),a[role=button][data-anta][tone]:not([tone=""],[tone=neutral]),button[data-anta][tone]:not([tone=""],[tone=neutral]),input[data-anta]:is([type=reset],[type=submit])[tone]:not([tone=""],[tone=neutral]){--button-bg-primary-rest: light-dark(oklch(from var(--_src) .51 .17 h), oklch(from var(--_src) .4 .16 h));--button-bg-primary-hover: light-dark(oklch(from var(--_src) .46 .17 h), oklch(from var(--_src) .44 .16 h));--button-bg-primary-active: light-dark(oklch(from var(--_src) .41 .17 h), oklch(from var(--_src) .48 .16 h));--button-fg-secondary-rest: light-dark(oklch(from var(--_src) .46 .17 h), oklch(from var(--_src) .86 .13 h));--button-fg-secondary-hover: light-dark(oklch(from var(--_src) .4 .17 h), oklch(from var(--_src) .86 .13 h));--button-fg-tertiary-rest: var(--button-fg-secondary-rest);--button-fg-tertiary-hover: var(--button-fg-secondary-hover);--button-bg-tertiary-hover: light-dark(oklch(from var(--_src) .54 .17 h / .1), oklch(from var(--_src) .58 .16 h / .215));--button-bg-tertiary-active: light-dark(oklch(from var(--_src) .54 .17 h / .15), oklch(from var(--_src) .58 .16 h / .29));--button-fg-quaternary-rest: light-dark(oklch(from var(--_src) .46 .17 h / .85), oklch(from var(--_src) .86 .13 h / .85));--button-fg-quaternary-hover: light-dark(oklch(from var(--_src) .38 .17 h), oklch(from var(--_src) .9 .13 h));--button-bg-secondary-rest: light-dark(oklch(from var(--_src) .54 .17 h / .1), oklch(from var(--_src) .58 .16 h / .215));--button-bg-secondary-hover: light-dark(oklch(from var(--_src) .54 .17 h / .15), oklch(from var(--_src) .58 .16 h / .29));--button-bg-secondary-active: light-dark(oklch(from var(--_src) .54 .17 h / .2), oklch(from var(--_src) .58 .16 h / .34))}a-button[tone=brand],a[role=button][data-anta][tone=brand],button[data-anta][tone=brand],input[data-anta]:is([type=reset],[type=submit])[tone=brand]{--_src: var(--anta-seed-brand)}a-button[tone=info],a[role=button][data-anta][tone=info],button[data-anta][tone=info],input[data-anta]:is([type=reset],[type=submit])[tone=info]{--_src: var(--anta-seed-info)}a-button[tone=success],a[role=button][data-anta][tone=success],button[data-anta][tone=success],input[data-anta]:is([type=reset],[type=submit])[tone=success]{--_src: var(--anta-seed-success)}a-button[tone=warning],a[role=button][data-anta][tone=warning],button[data-anta][tone=warning],input[data-anta]:is([type=reset],[type=submit])[tone=warning]{--_src: var(--anta-seed-warning)}a-button[tone=critical],a[role=button][data-anta][tone=critical],button[data-anta][tone=critical],input[data-anta]:is([type=reset],[type=submit])[tone=critical]{--_src: var(--anta-seed-critical)}a-button[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),a[role=button][data-anta][tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),button[data-anta][tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),input[data-anta]:is([type=reset],[type=submit])[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--_src: var(--button-tone-source, transparent);@supports (color: attr(probe type(<color>),red)){--_src: var(--button-tone-source, attr(tone type(<color>), transparent))}}button[data-anta],input[data-anta]:is([type=reset],[type=submit]){box-sizing:border-box;margin:0;appearance:none;-webkit-appearance:none;border:none}a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]){user-select:none;display:inline-flex;align-items:center;gap:.5ch;cursor:pointer;&:has(>a-copy):not(:has(>a-icon)){cursor:copy}flex-shrink:0;color:var(--button-fg);background-color:var(--button-bg);border-radius:var(--_radius);text-decoration:none;box-shadow:inset 0 0 1px color-mix(in oklch,currentColor,transparent 90%);font-size:var(--_fs);font-family:var(--sans-serif);font-weight:450;font-stretch:normal;line-height:var(--_lh);letter-spacing:.025ch;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;max-width:100%;padding-inline:var(--button-padding-x);padding-block:var(--button-padding-y);min-height:28px;>a-button-label{display:inline-block;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;overflow:hidden;min-width:0;line-height:var(--_lh);padding-bottom:var(--_pb);&:has(>*){display:inline-flex;gap:.25ch}}>*{pointer-events:none}& a-icon{transition:color var(--button-timing-out)}transition:color var(--button-timing-out),background-color var(--button-timing-out);&:hover,&:focus-visible{transition:color var(--button-timing-in),background-color var(--button-timing-in);& a-icon{transition:color var(--button-timing-in)}}&:active,&[selected]{transition:color var(--button-timing-active),background-color var(--button-timing-active);& a-icon{transition:color var(--button-timing-active)}}&[disabled]{pointer-events:none;cursor:not-allowed;transition:none;& a-icon{transition:none}}&:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}&[priority=quaternary]{--button-timing-in: 0s;--button-timing-active: 0s;--button-timing-out: 0s}&[size=small]{--button-padding-x: 7px;--_fs: 13px;--_lh: 16px;--_pb: .5px;min-height:24px;& a-icon{--icon-size: 14px}}&[size=large]{--button-padding-x: 13px;--_fs: 17px;--_lh: 24px;--_pb: 1.5px;min-height:32px;& a-icon{--icon-size: 18px}}&[priority=tertiary],&[priority=quaternary]{&[underline=solid]{text-decoration:underline solid}&[underline=dashed]{text-decoration:underline dashed}&[underline=dotted]{text-decoration:underline dotted}&[underline]{text-decoration-color:color-mix(in oklch,currentColor 75%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;&[selected]{text-decoration-color:var(--button-fg);text-decoration-thickness:1px}@media(hover:hover)and (pointer:fine){&:hover{text-decoration-color:var(--button-fg);text-decoration-thickness:1px}}}&[underline][underline-on-hover]{text-decoration-color:transparent;&[selected]{text-decoration-color:transparent}@media(hover:hover)and (pointer:fine){&:hover{text-decoration-color:var(--button-fg)}}}}&[priority=quaternary][paddingless]{--button-padding-x: 0;--button-padding-y: 0;min-height:0}&:has(>a-icon):not(:has(>a-icon~a-icon)):not(:has(>:not(a-icon):not(a-tooltip):not(a-copy))){--button-padding-y: 5px;--button-padding-x: 5px;min-width:28px;justify-content:center;&[size=small]{--button-padding-y: 3px;--button-padding-x: 3px;min-width:24px}&[size=large]{--button-padding-y: 7px;--button-padding-x: 7px;min-width:32px}}&:is(:has(>a-icon:first-child),:has(>a-tooltip:first-child+a-icon)):is(:has(>a-icon~a-icon),:has(>:not(a-icon):not(a-tooltip):not(a-copy))){padding-inline-start:max(0px,var(--button-padding-x) - 2px)}&:is(:has(>a-icon:last-child),:has(>a-icon+a-tooltip:last-child)):is(:has(>a-icon~a-icon),:has(>:not(a-icon):not(a-tooltip):not(a-copy))){padding-inline-end:max(0px,var(--button-padding-x) - 2px)}&[loading]{position:relative;pointer-events:none;cursor:wait;&:before{content:"";position:absolute;top:0;bottom:0;left:calc(0px - var(--button-loading-x-period));width:calc(100% + var(--button-loading-x-period));pointer-events:none;clip-path:inset(0 0 0 var(--button-loading-x-period) round var(--_radius));background:repeating-linear-gradient(var(--button-loading-angle),transparent 0,transparent var(--button-loading-stripe-gap),currentColor var(--button-loading-stripe-gap),currentColor calc(var(--button-loading-stripe-gap) + var(--button-loading-stripe)));opacity:var(--button-loading-opacity);filter:blur(var(--button-loading-blur));will-change:transform,clip-path;animation:btn-loading-slide var(--button-loading-duration) linear infinite;animation-delay:-9999s}}--button-fg: light-dark( oklch(from var(--button-fg-secondary-rest) calc(l - .05) c h), var(--button-fg-secondary-rest) );--button-bg: var(--button-bg-secondary-rest);@media(hover:hover)and (pointer:fine){&:hover{--button-fg: var(--button-fg-secondary-hover);--button-bg: var(--button-bg-secondary-hover)}}&:active{--button-fg: var(--button-fg-secondary-hover);--button-bg: var(--button-bg-secondary-active)}&[selected]{--button-fg: var(--button-fg-secondary-hover);--button-bg: var(--button-bg-secondary-hover)}&[priority=primary]{--button-fg: var(--button-fg-primary-rest);--button-bg: var(--button-bg-primary-rest);box-shadow:none;@media(hover:hover)and (pointer:fine){&:hover{--button-bg: var(--button-bg-primary-hover)}}&:active{--button-bg: var(--button-bg-primary-active)}&[selected]{--button-bg: var(--button-bg-primary-hover)}}&[priority=tertiary]{--button-fg: var(--button-fg-tertiary-rest);--button-bg: transparent;box-shadow:none;@media(hover:hover)and (pointer:fine){&:hover{--button-fg: var(--button-fg-tertiary-hover);--button-bg: var(--button-bg-tertiary-hover)}}&:active{--button-fg: var(--button-fg-tertiary-hover);--button-bg: var(--button-bg-tertiary-active)}&[selected]{--button-fg: var(--button-fg-tertiary-hover);--button-bg: var(--button-bg-tertiary-hover)}}&[priority=quaternary]{--button-fg: var(--button-fg-quaternary-rest);--button-bg: transparent;box-shadow:none;font-weight:400;@media(hover:hover)and (pointer:fine){&:hover{--button-fg: var(--button-fg-quaternary-hover)}}&:active{--button-fg: var(--button-fg-quaternary-rest)}&[selected]{--button-fg: var(--button-fg-quaternary-hover)}}&[selected]{box-shadow:inset 0 0 0 .5px currentColor}&[disabled]{background-color:var(--bg-secondary-disabled);color:var(--fg-disabled);&[priority=primary]{background-color:var(--bg-primary-disabled);color:var(--fg-disabled-primary)}&[priority=tertiary],&[priority=quaternary]{background-color:transparent;color:var(--fg-disabled)}}}@media(forced-colors:active){:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit])){--anta-forced-foreground: ButtonText;color:ButtonText;background-color:ButtonFace;border:1px solid ButtonText;box-shadow:none}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=primary]{--anta-forced-foreground: ButtonFace;color:ButtonFace;background-color:ButtonText;border-color:ButtonText}a-button:is([priority=primary],[selected]){forced-color-adjust:none}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=tertiary]{--anta-forced-foreground: CanvasText;color:CanvasText;background-color:Canvas;border:0}@media(hover:hover)and (pointer:fine){:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=tertiary]:hover:not(:focus-visible){outline:1px solid ButtonText;outline-offset:0}}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=quaternary]{--anta-forced-foreground: LinkText;color:LinkText;background-color:ButtonFace;border:0;text-decoration:none}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[selected]{--anta-forced-foreground: HighlightText;color:HighlightText;background-color:Highlight;border-color:Highlight}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[disabled]{--anta-forced-foreground: GrayText;color:GrayText;background-color:Canvas;border-color:GrayText;text-decoration-color:GrayText}}}@keyframes btn-loading-slide{to{transform:translate(var(--button-loading-x-period));clip-path:inset(0 var(--button-loading-x-period) 0 0 round var(--_radius))}}
|
|
1
|
+
@layer base,anta,components,utilities;@layer anta.reset,anta.components,anta.theme;@layer anta.components{a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]){--button-primary-fg: #ffffff;--bg-primary-disabled: light-dark(#ece9ec, #272329);--bg-secondary-disabled: light-dark(#f6f4f6, #1d1a1e);--fg-disabled-primary: light-dark(#afa9b1, #776e77);--fg-disabled: light-dark(#afa9b1, #635b65);--button-loading-stripe: 14px;--button-loading-stripe-gap: 16px;--button-loading-period: calc( var(--button-loading-stripe) + var(--button-loading-stripe-gap) );--button-loading-angle: 125deg;--button-loading-x-period: calc( var(--button-loading-period) / cos(var(--button-loading-angle) - 90deg) );--button-loading-opacity: .15;--button-loading-blur: 5px;--_src: var(--anta-seed-neutral);--button-bg-primary-rest: light-dark(oklch(from var(--_src) .5 .02 h), oklch(from var(--_src) .4 .015 h));--button-bg-primary-hover: light-dark(oklch(from var(--_src) .45 .02 h), oklch(from var(--_src) .44 .015 h));--button-bg-primary-active: light-dark(oklch(from var(--_src) .4 .02 h), oklch(from var(--_src) .48 .015 h));--button-fg-primary-rest: var(--button-primary-fg);--button-fg-secondary-rest: light-dark(oklch(from var(--_src) .46 .008 h), oklch(from var(--_src) .86 .015 h));--button-fg-secondary-hover: light-dark(oklch(from var(--_src) .4 .008 h), oklch(from var(--_src) .86 .015 h));--button-fg-tertiary-rest: var(--button-fg-secondary-rest);--button-fg-tertiary-hover: var(--button-fg-secondary-hover);--button-bg-tertiary-hover: light-dark(oklch(from var(--_src) .54 .03 h / .1), oklch(from var(--_src) .44 .01 h / .24));--button-bg-tertiary-active: light-dark(oklch(from var(--_src) .54 .03 h / .15), oklch(from var(--_src) .44 .01 h / .34));--button-fg-quaternary-rest: light-dark(oklch(from var(--_src) .46 .008 h / .85), oklch(from var(--_src) .86 .015 h / .85));--button-fg-quaternary-hover: light-dark(oklch(from var(--_src) .38 .008 h), oklch(from var(--_src) .9 .015 h));--button-bg-secondary-rest: light-dark(oklch(from var(--_src) .54 .03 h / .1), oklch(from var(--_src) .44 .01 h / .24));--button-bg-secondary-hover: light-dark(oklch(from var(--_src) .54 .03 h / .15), oklch(from var(--_src) .44 .01 h / .34));--button-bg-secondary-active: light-dark(oklch(from var(--_src) .54 .03 h / .2), oklch(from var(--_src) .44 .01 h / .44));--_fs: 15px;--_lh: 20px;--_pb: 1px;--_radius: 4px;--_padding-x-text: round( calc(.8em - 2px) , 1px);--button-padding-x: var(--_padding-x-text);--button-padding-y: calc((8px - var(--_pb)) / 2);--button-timing-in: 75ms ease-in;--button-timing-active: 50ms linear;--button-timing-out: .15s ease-out;--button-loading-duration: .5s}a-button[round],a[role=button][data-anta][round],button[data-anta][round],input[data-anta]:is([type=reset],[type=submit])[round]{--button-round: 999px;--_radius: var(--button-round, 999px);@supports (border-radius: attr(probe type(<length>),1px)){--button-round: attr(round type(<length>), 999px)}}a-button[tone]:not([tone=""],[tone=neutral]),a[role=button][data-anta][tone]:not([tone=""],[tone=neutral]),button[data-anta][tone]:not([tone=""],[tone=neutral]),input[data-anta]:is([type=reset],[type=submit])[tone]:not([tone=""],[tone=neutral]){--button-bg-primary-rest: light-dark(oklch(from var(--_src) .51 .17 h), oklch(from var(--_src) .4 .16 h));--button-bg-primary-hover: light-dark(oklch(from var(--_src) .46 .17 h), oklch(from var(--_src) .44 .16 h));--button-bg-primary-active: light-dark(oklch(from var(--_src) .41 .17 h), oklch(from var(--_src) .48 .16 h));--button-fg-secondary-rest: light-dark(oklch(from var(--_src) .46 .17 h), oklch(from var(--_src) .86 .13 h));--button-fg-secondary-hover: light-dark(oklch(from var(--_src) .4 .17 h), oklch(from var(--_src) .86 .13 h));--button-fg-tertiary-rest: var(--button-fg-secondary-rest);--button-fg-tertiary-hover: var(--button-fg-secondary-hover);--button-bg-tertiary-hover: light-dark(oklch(from var(--_src) .54 .17 h / .1), oklch(from var(--_src) .58 .16 h / .215));--button-bg-tertiary-active: light-dark(oklch(from var(--_src) .54 .17 h / .15), oklch(from var(--_src) .58 .16 h / .29));--button-fg-quaternary-rest: light-dark(oklch(from var(--_src) .46 .17 h / .85), oklch(from var(--_src) .86 .13 h / .85));--button-fg-quaternary-hover: light-dark(oklch(from var(--_src) .38 .17 h), oklch(from var(--_src) .9 .13 h));--button-bg-secondary-rest: light-dark(oklch(from var(--_src) .54 .17 h / .1), oklch(from var(--_src) .58 .16 h / .215));--button-bg-secondary-hover: light-dark(oklch(from var(--_src) .54 .17 h / .15), oklch(from var(--_src) .58 .16 h / .29));--button-bg-secondary-active: light-dark(oklch(from var(--_src) .54 .17 h / .2), oklch(from var(--_src) .58 .16 h / .34))}a-button[tone=brand],a[role=button][data-anta][tone=brand],button[data-anta][tone=brand],input[data-anta]:is([type=reset],[type=submit])[tone=brand]{--_src: var(--anta-seed-brand)}a-button[tone=info],a[role=button][data-anta][tone=info],button[data-anta][tone=info],input[data-anta]:is([type=reset],[type=submit])[tone=info]{--_src: var(--anta-seed-info)}a-button[tone=success],a[role=button][data-anta][tone=success],button[data-anta][tone=success],input[data-anta]:is([type=reset],[type=submit])[tone=success]{--_src: var(--anta-seed-success)}a-button[tone=warning],a[role=button][data-anta][tone=warning],button[data-anta][tone=warning],input[data-anta]:is([type=reset],[type=submit])[tone=warning]{--_src: var(--anta-seed-warning)}a-button[tone=critical],a[role=button][data-anta][tone=critical],button[data-anta][tone=critical],input[data-anta]:is([type=reset],[type=submit])[tone=critical]{--_src: var(--anta-seed-critical)}a-button[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),a[role=button][data-anta][tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),button[data-anta][tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]),input[data-anta]:is([type=reset],[type=submit])[tone]:not([tone=""],[tone=neutral],[tone=brand],[tone=info],[tone=success],[tone=warning],[tone=critical]){--_src: var(--button-tone-source, transparent);@supports (color: attr(probe type(<color>),red)){--_src: var(--button-tone-source, attr(tone type(<color>), transparent))}}button[data-anta],input[data-anta]:is([type=reset],[type=submit]){box-sizing:border-box;margin:0;appearance:none;-webkit-appearance:none;border:none}a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]){user-select:none;display:inline-flex;align-items:center;gap:.5ch;cursor:pointer;&:has(>a-copy):not(:has(>a-icon)){cursor:copy}flex-shrink:0;color:var(--button-fg);background-color:var(--button-bg);border-radius:var(--_radius);text-decoration:none;box-shadow:inset 0 0 1px color-mix(in oklch,currentColor,transparent 90%);font-size:var(--_fs);font-family:var(--sans-serif);font-weight:450;font-stretch:normal;line-height:var(--_lh);letter-spacing:.025ch;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;max-width:100%;padding-inline:var(--button-padding-x);padding-block:var(--button-padding-y);min-height:28px;>a-button-label{display:inline-block;text-overflow:ellipsis;text-wrap:nowrap;white-space:nowrap;overflow:hidden;min-width:0;line-height:var(--_lh);padding-bottom:var(--_pb);&:has(>*){display:inline-flex;gap:.25ch}}>*{pointer-events:none}& a-icon{transition:color var(--button-timing-out)}transition:color var(--button-timing-out),background-color var(--button-timing-out);&:hover,&:focus-visible{transition:color var(--button-timing-in),background-color var(--button-timing-in);& a-icon{transition:color var(--button-timing-in)}}&:active,&[selected]{transition:color var(--button-timing-active),background-color var(--button-timing-active);& a-icon{transition:color var(--button-timing-active)}}&[disabled]{pointer-events:none;cursor:not-allowed;transition:none;& a-icon{transition:none}}&:focus-visible{outline:1px solid var(--focus-ring);outline-offset:1px}&[priority=quaternary]{--button-timing-in: 0s;--button-timing-active: 0s;--button-timing-out: 0s}&[size=small]{--_fs: 13px;--_lh: 16px;--_pb: .5px;min-height:24px;& a-icon{--icon-size: 14px}}&[size=large]{--_fs: 17px;--_lh: 24px;--_pb: 1.5px;min-height:32px;& a-icon{--icon-size: 18px}}&[priority=tertiary],&[priority=quaternary]{&[underline=solid]{text-decoration:underline solid}&[underline=dashed]{text-decoration:underline dashed}&[underline=dotted]{text-decoration:underline dotted}&[underline]{text-decoration-color:color-mix(in oklch,currentColor 75%,transparent);text-decoration-thickness:1px;text-underline-offset:3px;&[selected]{text-decoration-color:var(--button-fg);text-decoration-thickness:1px}@media(hover:hover)and (pointer:fine){&:hover{text-decoration-color:var(--button-fg);text-decoration-thickness:1px}}}&[underline][underline-on-hover]{text-decoration-color:transparent;&[selected]{text-decoration-color:transparent}@media(hover:hover)and (pointer:fine){&:hover{text-decoration-color:var(--button-fg)}}}}&[priority=quaternary][paddingless]{--button-padding-x: 0;--button-padding-y: 0;border-radius:min(var(--_radius),3px);min-height:0;&[loading]:before{clip-path:inset(0 0 0 var(--button-loading-x-period) round min(var(--_radius),3px));animation-name:btn-loading-slide-paddingless}}&:has(>a-icon):not(:has(>a-icon~a-icon)):not(:has(>:not(a-icon):not(a-tooltip):not(a-copy))){--button-padding-y: calc(.5em - 1.5px) ;--button-padding-x: var(--button-padding-y);min-height:0;justify-content:center}&:is(:has(>a-icon:first-child),:has(>a-tooltip:first-child+a-icon)):is(:has(>a-icon~a-icon),:has(>:not(a-icon):not(a-tooltip):not(a-copy))){padding-inline-start:max(0px,var(--button-padding-x) - 2px)}&:is(:has(>a-icon:last-child),:has(>a-icon+a-tooltip:last-child)):is(:has(>a-icon~a-icon),:has(>:not(a-icon):not(a-tooltip):not(a-copy))){padding-inline-end:max(0px,var(--button-padding-x) - 2px)}&[loading]{position:relative;pointer-events:none;cursor:wait;&:before{content:"";position:absolute;top:0;bottom:0;left:calc(0px - var(--button-loading-x-period));width:calc(100% + var(--button-loading-x-period));pointer-events:none;clip-path:inset(0 0 0 var(--button-loading-x-period) round var(--_radius));background:repeating-linear-gradient(var(--button-loading-angle),transparent 0,transparent var(--button-loading-stripe-gap),currentColor var(--button-loading-stripe-gap),currentColor calc(var(--button-loading-stripe-gap) + var(--button-loading-stripe)));opacity:var(--button-loading-opacity);filter:blur(var(--button-loading-blur));will-change:transform,clip-path;animation:btn-loading-slide var(--button-loading-duration) linear infinite;animation-delay:-9999s}}--button-fg: light-dark( oklch(from var(--button-fg-secondary-rest) calc(l - .05) c h), var(--button-fg-secondary-rest) );--button-bg: var(--button-bg-secondary-rest);@media(hover:hover)and (pointer:fine){&:hover{--button-fg: var(--button-fg-secondary-hover);--button-bg: var(--button-bg-secondary-hover)}}&:active{--button-fg: var(--button-fg-secondary-hover);--button-bg: var(--button-bg-secondary-active)}&[selected]{--button-fg: var(--button-fg-secondary-hover);--button-bg: var(--button-bg-secondary-hover)}&[priority=primary]{--button-fg: var(--button-fg-primary-rest);--button-bg: var(--button-bg-primary-rest);box-shadow:none;@media(hover:hover)and (pointer:fine){&:hover{--button-bg: var(--button-bg-primary-hover)}}&:active{--button-bg: var(--button-bg-primary-active)}&[selected]{--button-bg: var(--button-bg-primary-hover)}}&[priority=tertiary]{--button-fg: var(--button-fg-tertiary-rest);--button-bg: transparent;box-shadow:none;@media(hover:hover)and (pointer:fine){&:hover{--button-fg: var(--button-fg-tertiary-hover);--button-bg: var(--button-bg-tertiary-hover)}}&:active{--button-fg: var(--button-fg-tertiary-hover);--button-bg: var(--button-bg-tertiary-active)}&[selected]{--button-fg: var(--button-fg-tertiary-hover);--button-bg: var(--button-bg-tertiary-hover)}}&[priority=quaternary]{--button-fg: var(--button-fg-quaternary-rest);--button-bg: transparent;box-shadow:none;font-weight:400;@media(hover:hover)and (pointer:fine){&:hover{--button-fg: var(--button-fg-quaternary-hover)}}&:active{--button-fg: var(--button-fg-quaternary-rest)}&[selected]{--button-fg: var(--button-fg-quaternary-hover)}}&[selected]{box-shadow:inset 0 0 0 1px color-mix(in oklch,currentColor 50%,transparent);&[priority=quaternary][paddingless]{box-shadow:0 0 0 1px color-mix(in oklch,currentColor 50%,transparent)}}&[disabled]{background-color:var(--bg-secondary-disabled);color:var(--fg-disabled);&[priority=primary]{background-color:var(--bg-primary-disabled);color:var(--fg-disabled-primary)}&[priority=tertiary],&[priority=quaternary]{background-color:transparent;color:var(--fg-disabled)}}}@media(forced-colors:active){:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit])){--anta-forced-foreground: ButtonText;color:ButtonText;background-color:ButtonFace;border:1px solid ButtonText;box-shadow:none}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=primary]{--anta-forced-foreground: ButtonFace;color:ButtonFace;background-color:ButtonText;border-color:ButtonText}a-button:is([priority=primary],[selected]){forced-color-adjust:none}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=tertiary]{--anta-forced-foreground: CanvasText;color:CanvasText;background-color:Canvas;border:0}@media(hover:hover)and (pointer:fine){:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=tertiary]:hover:not(:focus-visible){outline:1px solid ButtonText;outline-offset:0}}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[priority=quaternary]{--anta-forced-foreground: LinkText;color:LinkText;background-color:ButtonFace;border:0;text-decoration:none}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[selected]{--anta-forced-foreground: HighlightText;color:HighlightText;background-color:Highlight;border-color:Highlight}:is(a-button,a[role=button][data-anta],button[data-anta],input[data-anta]:is([type=reset],[type=submit]))[disabled]{--anta-forced-foreground: GrayText;color:GrayText;background-color:Canvas;border-color:GrayText;text-decoration-color:GrayText}}}@keyframes btn-loading-slide{to{transform:translate(var(--button-loading-x-period));clip-path:inset(0 var(--button-loading-x-period) 0 0 round var(--_radius))}}@keyframes btn-loading-slide-paddingless{to{transform:translate(var(--button-loading-x-period));clip-path:inset(0 var(--button-loading-x-period) 0 0 round min(var(--_radius),3px))}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { HTMLElementBase, SYNC_POPUP_ARIA, type PopupAriaRelations } from "../anta_helpers";
|
|
1
|
+
import { HTMLElementBase, SYNC_POPUP_ARIA, type PopupAriaRelations, SYNC_TEXT_TOGGLE, type TextToggleAria } from "../anta_helpers";
|
|
2
2
|
import "./a-button.css";
|
|
3
3
|
declare global {
|
|
4
4
|
interface Document {
|
|
@@ -22,8 +22,9 @@ declare global {
|
|
|
22
22
|
* covers named and custom tones alike; secondary also carries a 1px
|
|
23
23
|
* hairline box-shadow in the current fg tone at 50% alpha, which the
|
|
24
24
|
* other priorities cancel in their own blocks. `[selected]` adds a 1px
|
|
25
|
-
* inset ring
|
|
26
|
-
* survives their `box-shadow: none` cancels.
|
|
25
|
+
* inset ring at 50% `currentColor`, declared after the priority blocks so it
|
|
26
|
+
* survives their `box-shadow: none` cancels. Paddingless uses an outside ring
|
|
27
|
+
* so the selection mark stays clear of the label.
|
|
27
28
|
* - **Dark mode** re-tunes with heavier alphas (30/40% vs 10/15%) and flips
|
|
28
29
|
* neutral's anchor to a lilac — mixing dark gray into a dark bg yields no
|
|
29
30
|
* contrast.
|
|
@@ -43,10 +44,11 @@ declare global {
|
|
|
43
44
|
* - **Layout gotchas:** `flex-shrink: 0` (shrinking + `overflow: hidden`
|
|
44
45
|
* would clip the label silently); the label uses a 17px line box + 1px
|
|
45
46
|
* bottom padding for optical vertical centering at an unchanged 18px box.
|
|
46
|
-
* - **Icon-only** is purely structural
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* - **Icon-only** is purely structural: one direct icon, with optional
|
|
48
|
+
* tooltip or copy helpers, gets equal font-relative padding on both axes
|
|
49
|
+
* and no size floor. The default icons produce 24/28/32px square boxes.
|
|
50
|
+
* A non-only edge icon trims 2px off its side's padding; `max(0px, …)`
|
|
51
|
+
* keeps paddingless at 0.
|
|
50
52
|
* - **Underline** renders only on tertiary/quaternary: 0.5px hairline at 75%
|
|
51
53
|
* alpha at rest, 1px at full alpha on hover/`[selected]`, mirroring the
|
|
52
54
|
* prose-link rule in `<Text>`.
|
|
@@ -71,6 +73,7 @@ export declare class AButtonElement extends HTMLElementBase {
|
|
|
71
73
|
connectedCallback(): void;
|
|
72
74
|
disconnectedCallback(): void;
|
|
73
75
|
attributeChangedCallback(): void;
|
|
76
|
+
[SYNC_TEXT_TOGGLE](state: TextToggleAria): void;
|
|
74
77
|
[SYNC_POPUP_ARIA](relations: PopupAriaRelations): void;
|
|
75
78
|
}
|
|
76
79
|
export declare function register_a_button(): void;
|