ui-foundations 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -7
- package/dist/core/index.css +1 -0
- package/dist/macros/ui.njk +61 -0
- package/dist/main.css +528 -89
- package/dist/react/accordion.js +36 -0
- package/dist/react/avatar.js +34 -0
- package/dist/react/button.js +1 -12
- package/dist/react/checkbox.js +3 -20
- package/dist/react/divider.js +31 -0
- package/dist/react/icon.js +1 -12
- package/dist/react/index.js +6 -0
- package/dist/react/radio.js +3 -20
- package/dist/react/switch.js +3 -20
- package/dist/react/tabs.js +72 -0
- package/dist/react/textarea.js +38 -0
- package/dist/react/tooltip.js +25 -0
- package/dist/react/warn-dev.js +15 -0
- package/dist/tokens/css/appearance-modes.tokens.mode-dark.css +6 -6
- package/dist/tokens/css/appearance-modes.tokens.mode-light.css +1 -1
- package/dist/tokens/css/components-ui.tokens.css +66 -68
- package/dist/tokens/css/core-primitives.tokens.css +72 -1
- package/dist/tokens/css/semantics-roles.tokens.css +1 -1
- package/dist/tokens/css/themes-brands.tokens.brand-a.css +11 -11
- package/dist/tokens/css/themes-brands.tokens.brand-b.css +1 -1
- package/dist/tokens/css/themes-brands.tokens.brand-c.css +22 -0
- package/dist/tokens/json/components-ui.tokens.json +275 -277
- package/dist/tokens/json/core-primitives.tokens.json +302 -0
- package/dist/tokens/json/themes-brands.tokens.brand-a.json +10 -10
- package/dist/tokens/json/themes-brands.tokens.brand-b.json +10 -10
- package/dist/tokens/json/themes-brands.tokens.brand-c.json +81 -0
- package/dist/tokens/tokens.yaml +1701 -583
- package/dist/tokens/ts/appearance-modes.tokens.mode-dark.ts +6 -6
- package/dist/tokens/ts/appearance-modes.tokens.mode-light.ts +1 -1
- package/dist/tokens/ts/components-ui.tokens.ts +67 -69
- package/dist/tokens/ts/core-primitives.tokens.ts +73 -2
- package/dist/tokens/ts/semantics-roles.tokens.ts +1 -1
- package/dist/tokens/ts/themes-brands.tokens.brand-a.ts +11 -11
- package/dist/tokens/ts/themes-brands.tokens.brand-b.ts +1 -1
- package/dist/tokens/ts/themes-brands.tokens.brand-c.ts +32 -0
- package/dist/ui/index.css +6 -0
- package/dist/ui/patterns/accordion.css +81 -0
- package/dist/ui/patterns/avatar.css +57 -0
- package/dist/ui/patterns/divider.css +25 -0
- package/dist/ui/patterns/tabs.css +71 -0
- package/dist/ui/patterns/textarea.css +50 -0
- package/dist/ui/patterns/tooltip.css +64 -0
- package/docs/agentic/README.md +1 -0
- package/docs/agentic/skills/component-accessibility-audit.md +132 -0
- package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +1 -1
- package/package.json +2 -1
- package/dist/tokens/missing-tokens.json +0 -43
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Accordion — expandable/collapsible content sections using native details/summary.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} props
|
|
7
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
8
|
+
*/
|
|
9
|
+
export function Accordion({ className = "", children, ...props }) {
|
|
10
|
+
const classes = ["accordion"];
|
|
11
|
+
if (className) classes.push(className);
|
|
12
|
+
|
|
13
|
+
return React.createElement("div", { className: classes.join(" "), ...props }, children);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* AccordionItem — single expandable section.
|
|
18
|
+
*
|
|
19
|
+
* @param {object} props
|
|
20
|
+
* @param {string} props.title - Summary/trigger text
|
|
21
|
+
* @param {boolean} [props.open=false] - Whether expanded
|
|
22
|
+
* @param {boolean} [props.disabled=false] - Whether disabled
|
|
23
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
24
|
+
*/
|
|
25
|
+
export function AccordionItem({ title, open = false, disabled = false, className = "", children, ...props }) {
|
|
26
|
+
const classes = ["accordion-item"];
|
|
27
|
+
if (disabled) classes.push("is-disabled");
|
|
28
|
+
if (className) classes.push(className);
|
|
29
|
+
|
|
30
|
+
return React.createElement(
|
|
31
|
+
"details",
|
|
32
|
+
{ className: classes.join(" "), open, ...props },
|
|
33
|
+
React.createElement("summary", null, title),
|
|
34
|
+
React.createElement("div", { className: "accordion-item__content" }, children)
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Avatar — thumbnail representation of a user or entity.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} props
|
|
7
|
+
* @param {string} [props.src] - Image URL
|
|
8
|
+
* @param {string} [props.alt=""] - Alt text for image
|
|
9
|
+
* @param {string} [props.initials=""] - Fallback initials when no image
|
|
10
|
+
* @param {"xs"|"sm"|"md"|"lg"|"xl"} [props.size="md"] - Size variant
|
|
11
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
12
|
+
*/
|
|
13
|
+
export function Avatar({
|
|
14
|
+
src,
|
|
15
|
+
alt = "",
|
|
16
|
+
initials = "",
|
|
17
|
+
size = "md",
|
|
18
|
+
className = "",
|
|
19
|
+
...props
|
|
20
|
+
}) {
|
|
21
|
+
const classes = ["avatar"];
|
|
22
|
+
if (size && size !== "md") classes.push(size);
|
|
23
|
+
if (className) classes.push(className);
|
|
24
|
+
|
|
25
|
+
const children = src
|
|
26
|
+
? React.createElement("img", { src, alt })
|
|
27
|
+
: React.createElement("span", { className: "avatar__initials" }, initials);
|
|
28
|
+
|
|
29
|
+
return React.createElement(
|
|
30
|
+
"span",
|
|
31
|
+
{ className: classes.join(" "), role: "img", "aria-label": alt || initials, ...props },
|
|
32
|
+
children
|
|
33
|
+
);
|
|
34
|
+
}
|
package/dist/react/button.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { LabelContent, hasTextContent } from "./label.js";
|
|
3
|
+
import { warnDev } from "./warn-dev.js";
|
|
3
4
|
|
|
4
5
|
function normalizeOrientation(value) {
|
|
5
6
|
return value === "vertical" ? "vertical" : "horizontal";
|
|
@@ -9,18 +10,6 @@ function normalizeJustify(value) {
|
|
|
9
10
|
return value === "stretch" ? "stretch" : "start";
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
function warnDev(message) {
|
|
13
|
-
if (
|
|
14
|
-
typeof process !== "undefined" &&
|
|
15
|
-
process.env &&
|
|
16
|
-
process.env.NODE_ENV === "production"
|
|
17
|
-
) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
console.warn(message);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
13
|
export function Button({
|
|
25
14
|
variant = "solid",
|
|
26
15
|
className = "",
|
package/dist/react/checkbox.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (value === null || value === undefined || value === false) return false;
|
|
5
|
-
if (typeof value === "string") return value.trim().length > 0;
|
|
6
|
-
if (Array.isArray(value)) return value.some(hasLabelContent);
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function warnDev(message) {
|
|
11
|
-
if (
|
|
12
|
-
typeof process !== "undefined" &&
|
|
13
|
-
process.env &&
|
|
14
|
-
process.env.NODE_ENV === "production"
|
|
15
|
-
) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
console.warn(message);
|
|
20
|
-
}
|
|
2
|
+
import { hasTextContent } from "./label.js";
|
|
3
|
+
import { warnDev } from "./warn-dev.js";
|
|
21
4
|
|
|
22
5
|
export function Checkbox({
|
|
23
6
|
className = "",
|
|
@@ -32,7 +15,7 @@ export function Checkbox({
|
|
|
32
15
|
if (className) classes.push(className);
|
|
33
16
|
|
|
34
17
|
const content = children ?? label;
|
|
35
|
-
const hasLabel =
|
|
18
|
+
const hasLabel = hasTextContent(content);
|
|
36
19
|
const disabled = Boolean(props.disabled);
|
|
37
20
|
const inputRef = React.useRef(null);
|
|
38
21
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Divider — visual separator between content sections.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} props
|
|
7
|
+
* @param {"horizontal"|"vertical"} [props.orientation="horizontal"] - Orientation
|
|
8
|
+
* @param {"subtle"|""} [props.variant=""] - Color variant
|
|
9
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
10
|
+
*/
|
|
11
|
+
export function Divider({
|
|
12
|
+
orientation = "horizontal",
|
|
13
|
+
variant = "",
|
|
14
|
+
className = "",
|
|
15
|
+
...props
|
|
16
|
+
}) {
|
|
17
|
+
const classes = ["divider"];
|
|
18
|
+
if (variant) classes.push(variant);
|
|
19
|
+
if (className) classes.push(className);
|
|
20
|
+
|
|
21
|
+
const elementProps = {
|
|
22
|
+
className: classes.join(" "),
|
|
23
|
+
...props,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
if (orientation === "vertical") {
|
|
27
|
+
elementProps["aria-orientation"] = "vertical";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return React.createElement("hr", elementProps);
|
|
31
|
+
}
|
package/dist/react/icon.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { warnDev } from "./warn-dev.js";
|
|
2
3
|
|
|
3
4
|
function resolveIconUrl(name, folder, src) {
|
|
4
5
|
if (src) return src;
|
|
@@ -11,18 +12,6 @@ function humanizeName(name) {
|
|
|
11
12
|
.trim();
|
|
12
13
|
}
|
|
13
14
|
|
|
14
|
-
function warnDev(message) {
|
|
15
|
-
if (
|
|
16
|
-
typeof process !== "undefined" &&
|
|
17
|
-
process.env &&
|
|
18
|
-
process.env.NODE_ENV === "production"
|
|
19
|
-
) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
console.warn(message);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
15
|
export function Icon({
|
|
27
16
|
name,
|
|
28
17
|
src,
|
package/dist/react/index.js
CHANGED
|
@@ -6,3 +6,9 @@ export { LabelContent, FieldLabel } from "./label.js";
|
|
|
6
6
|
export { Radio } from "./radio.js";
|
|
7
7
|
export { Switch } from "./switch.js";
|
|
8
8
|
export { Badge } from "./badge.js";
|
|
9
|
+
export { Divider } from "./divider.js";
|
|
10
|
+
export { TextArea } from "./textarea.js";
|
|
11
|
+
export { Avatar } from "./avatar.js";
|
|
12
|
+
export { Accordion, AccordionItem } from "./accordion.js";
|
|
13
|
+
export { TabList, Tab, TabPanel } from "./tabs.js";
|
|
14
|
+
export { Tooltip } from "./tooltip.js";
|
package/dist/react/radio.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (value === null || value === undefined || value === false) return false;
|
|
5
|
-
if (typeof value === "string") return value.trim().length > 0;
|
|
6
|
-
if (Array.isArray(value)) return value.some(hasLabelContent);
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function warnDev(message) {
|
|
11
|
-
if (
|
|
12
|
-
typeof process !== "undefined" &&
|
|
13
|
-
process.env &&
|
|
14
|
-
process.env.NODE_ENV === "production"
|
|
15
|
-
) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
console.warn(message);
|
|
20
|
-
}
|
|
2
|
+
import { hasTextContent } from "./label.js";
|
|
3
|
+
import { warnDev } from "./warn-dev.js";
|
|
21
4
|
|
|
22
5
|
export function Radio({
|
|
23
6
|
className = "",
|
|
@@ -30,7 +13,7 @@ export function Radio({
|
|
|
30
13
|
if (className) classes.push(className);
|
|
31
14
|
|
|
32
15
|
const content = children ?? label;
|
|
33
|
-
const hasLabel =
|
|
16
|
+
const hasLabel = hasTextContent(content);
|
|
34
17
|
const disabled = Boolean(props.disabled);
|
|
35
18
|
|
|
36
19
|
const input = React.createElement("input", {
|
package/dist/react/switch.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (value === null || value === undefined || value === false) return false;
|
|
5
|
-
if (typeof value === "string") return value.trim().length > 0;
|
|
6
|
-
if (Array.isArray(value)) return value.some(hasLabelContent);
|
|
7
|
-
return true;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function warnDev(message) {
|
|
11
|
-
if (
|
|
12
|
-
typeof process !== "undefined" &&
|
|
13
|
-
process.env &&
|
|
14
|
-
process.env.NODE_ENV === "production"
|
|
15
|
-
) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
console.warn(message);
|
|
20
|
-
}
|
|
2
|
+
import { hasTextContent } from "./label.js";
|
|
3
|
+
import { warnDev } from "./warn-dev.js";
|
|
21
4
|
|
|
22
5
|
export function Switch({
|
|
23
6
|
className = "",
|
|
@@ -31,7 +14,7 @@ export function Switch({
|
|
|
31
14
|
if (className) classes.push(className);
|
|
32
15
|
|
|
33
16
|
const content = children ?? label;
|
|
34
|
-
const hasLabel =
|
|
17
|
+
const hasLabel = hasTextContent(content);
|
|
35
18
|
const disabled = Boolean(props.disabled);
|
|
36
19
|
const input = React.createElement("input", {
|
|
37
20
|
type: "checkbox",
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TabList — container for tab buttons.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} props
|
|
7
|
+
* @param {"horizontal"|"vertical"} [props.orientation="horizontal"]
|
|
8
|
+
* @param {string} [props.ariaLabel=""] - Accessible label
|
|
9
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
10
|
+
*/
|
|
11
|
+
export function TabList({ orientation = "horizontal", ariaLabel = "", className = "", children, ...props }) {
|
|
12
|
+
const classes = ["tab-list"];
|
|
13
|
+
if (className) classes.push(className);
|
|
14
|
+
|
|
15
|
+
const elementProps = {
|
|
16
|
+
className: classes.join(" "),
|
|
17
|
+
role: "tablist",
|
|
18
|
+
"aria-orientation": orientation,
|
|
19
|
+
...props,
|
|
20
|
+
};
|
|
21
|
+
if (ariaLabel) elementProps["aria-label"] = ariaLabel;
|
|
22
|
+
|
|
23
|
+
return React.createElement("div", elementProps, children);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Tab — individual tab button.
|
|
28
|
+
*
|
|
29
|
+
* @param {object} props
|
|
30
|
+
* @param {string} props.label - Tab label text
|
|
31
|
+
* @param {boolean} [props.selected=false] - Whether active
|
|
32
|
+
* @param {boolean} [props.disabled=false] - Whether disabled
|
|
33
|
+
* @param {string} [props.controls=""] - ID of controlled panel
|
|
34
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
35
|
+
*/
|
|
36
|
+
export function Tab({ label, selected = false, disabled = false, controls = "", className = "", ...props }) {
|
|
37
|
+
const classes = ["tab"];
|
|
38
|
+
if (className) classes.push(className);
|
|
39
|
+
|
|
40
|
+
return React.createElement("button", {
|
|
41
|
+
className: classes.join(" "),
|
|
42
|
+
role: "tab",
|
|
43
|
+
type: "button",
|
|
44
|
+
"aria-selected": String(selected),
|
|
45
|
+
"aria-controls": controls || undefined,
|
|
46
|
+
disabled,
|
|
47
|
+
tabIndex: selected ? 0 : -1,
|
|
48
|
+
...props,
|
|
49
|
+
}, label);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* TabPanel — content panel associated with a tab.
|
|
54
|
+
*
|
|
55
|
+
* @param {object} props
|
|
56
|
+
* @param {string} [props.id=""] - Panel ID (referenced by tab's aria-controls)
|
|
57
|
+
* @param {boolean} [props.hidden=false] - Whether hidden
|
|
58
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
59
|
+
*/
|
|
60
|
+
export function TabPanel({ id = "", hidden = false, className = "", children, ...props }) {
|
|
61
|
+
const classes = ["tab-panel"];
|
|
62
|
+
if (className) classes.push(className);
|
|
63
|
+
|
|
64
|
+
return React.createElement("div", {
|
|
65
|
+
className: classes.join(" "),
|
|
66
|
+
role: "tabpanel",
|
|
67
|
+
id: id || undefined,
|
|
68
|
+
hidden,
|
|
69
|
+
tabIndex: 0,
|
|
70
|
+
...props,
|
|
71
|
+
}, children);
|
|
72
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* TextArea — multi-line text input.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} props
|
|
7
|
+
* @param {string} [props.placeholder=""] - Placeholder text
|
|
8
|
+
* @param {string} [props.value] - Controlled value
|
|
9
|
+
* @param {boolean} [props.disabled=false] - Disabled state
|
|
10
|
+
* @param {boolean} [props.readonly=false] - Readonly state
|
|
11
|
+
* @param {number} [props.rows] - Visible rows
|
|
12
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
13
|
+
*/
|
|
14
|
+
export function TextArea({
|
|
15
|
+
placeholder = "",
|
|
16
|
+
value,
|
|
17
|
+
disabled = false,
|
|
18
|
+
readonly = false,
|
|
19
|
+
rows,
|
|
20
|
+
className = "",
|
|
21
|
+
...props
|
|
22
|
+
}) {
|
|
23
|
+
const classes = ["textarea"];
|
|
24
|
+
if (className) classes.push(className);
|
|
25
|
+
|
|
26
|
+
const elementProps = {
|
|
27
|
+
className: classes.join(" "),
|
|
28
|
+
placeholder,
|
|
29
|
+
disabled,
|
|
30
|
+
readOnly: readonly,
|
|
31
|
+
...props,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
if (value !== undefined) elementProps.value = value;
|
|
35
|
+
if (rows) elementProps.rows = rows;
|
|
36
|
+
|
|
37
|
+
return React.createElement("textarea", elementProps);
|
|
38
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tooltip — contextual help text on hover/focus.
|
|
5
|
+
*
|
|
6
|
+
* @param {object} props
|
|
7
|
+
* @param {string} props.text - Tooltip content
|
|
8
|
+
* @param {"top"|"bottom"|"left"|"right"} [props.placement="top"] - Position
|
|
9
|
+
* @param {string} [props.className=""] - Additional CSS classes
|
|
10
|
+
*/
|
|
11
|
+
export function Tooltip({ text, placement = "top", className = "", children, ...props }) {
|
|
12
|
+
const triggerClasses = ["tooltip-trigger"];
|
|
13
|
+
if (className) triggerClasses.push(className);
|
|
14
|
+
|
|
15
|
+
return React.createElement(
|
|
16
|
+
"span",
|
|
17
|
+
{ className: triggerClasses.join(" "), ...props },
|
|
18
|
+
children,
|
|
19
|
+
React.createElement(
|
|
20
|
+
"span",
|
|
21
|
+
{ className: "tooltip", role: "tooltip", "data-placement": placement },
|
|
22
|
+
text
|
|
23
|
+
)
|
|
24
|
+
);
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log a warning in non-production environments.
|
|
3
|
+
* Shared across React wrappers to avoid copy-pasting the same guard.
|
|
4
|
+
*/
|
|
5
|
+
export function warnDev(message) {
|
|
6
|
+
if (
|
|
7
|
+
typeof process !== "undefined" &&
|
|
8
|
+
process.env &&
|
|
9
|
+
process.env.NODE_ENV === "production"
|
|
10
|
+
) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
console.warn(message);
|
|
15
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Auto-generated design tokens from Figma */
|
|
2
|
-
/* Generated on 2026-
|
|
2
|
+
/* Generated on 2026-05-22T09:23:10.603Z */
|
|
3
3
|
|
|
4
4
|
:root[data-mode="dark"] {
|
|
5
5
|
--color-text-default: var(--color-neutral-800);
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
--color-text-success: var(--brand-color-functional-success);
|
|
13
13
|
--color-fill-surface: var(--color-neutral-1000);
|
|
14
14
|
--color-fill-disabled: var(--color-neutral-300);
|
|
15
|
-
--color-fill-hover: var(--color-neutral-alpha-
|
|
15
|
+
--color-fill-hover: var(--color-neutral-alpha-inverse-100);
|
|
16
16
|
--color-fill-brand: var(--brand-color-primary);
|
|
17
17
|
--color-fill-subtle: var(--brand-color-subtle);
|
|
18
18
|
--color-fill-active: var(--brand-color-accent);
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
--color-border-brand: var(--brand-color-primary);
|
|
25
25
|
--color-border-disabled: var(--color-neutral-500);
|
|
26
26
|
--color-border-danger: var(--brand-color-functional-danger);
|
|
27
|
-
--color-overlay-backdrop: var(--color-neutral-alpha-400);
|
|
28
|
-
--color-overlay-hover: var(--color-neutral-alpha-
|
|
29
|
-
--color-overlay-active: var(--color-neutral-alpha-
|
|
30
|
-
--color-overlay-selected: var(--color-neutral-alpha-
|
|
27
|
+
--color-overlay-backdrop: var(--color-neutral-alpha-inverse-400);
|
|
28
|
+
--color-overlay-hover: var(--color-neutral-alpha-inverse-100);
|
|
29
|
+
--color-overlay-active: var(--color-neutral-alpha-inverse-200);
|
|
30
|
+
--color-overlay-selected: var(--color-neutral-alpha-inverse-300);
|
|
31
31
|
--color-focus: var(--brand-color-primary-dark);
|
|
32
32
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* Auto-generated design tokens from Figma */
|
|
2
|
-
/* Generated on 2026-
|
|
2
|
+
/* Generated on 2026-05-22T09:23:10.611Z */
|
|
3
3
|
|
|
4
4
|
:root {
|
|
5
5
|
--button-border-size-hover: var(--size-border-100);
|
|
@@ -61,102 +61,100 @@
|
|
|
61
61
|
--input-text-text-color-default: var(--color-text-default);
|
|
62
62
|
--input-text-text-color-hover: var(--color-text-default);
|
|
63
63
|
--input-text-text-color-active: var(--color-text-default);
|
|
64
|
-
--input-text-
|
|
65
|
-
--input-text-border-color-hover: var(--color-border-brand);
|
|
66
|
-
--input-text-border-color-active: var(--color-border-brand);
|
|
67
|
-
--input-text-border-color-focus: var(--color-border-brand);
|
|
68
|
-
--input-text-border-color-invalid: var(--color-border-danger);
|
|
69
|
-
--input-text-border-color-valid: var(--color-border-strong);
|
|
70
|
-
--input-text-container-background-default: var(--color-fill-surface);
|
|
71
|
-
--input-text-container-background-hover: var(--color-fill-surface);
|
|
72
|
-
--input-text-container-background-focus: var(--color-fill-surface);
|
|
73
|
-
--input-text-container-background-active: var(--color-fill-surface);
|
|
64
|
+
--input-text-text-color-disabled: var(--color-text-disabled);
|
|
74
65
|
--input-text-text-color-placeholder: var(--color-text-subtle);
|
|
75
|
-
--input-
|
|
66
|
+
--input-border-border-color-default: var(--color-border-default);
|
|
67
|
+
--input-border-border-color-hover: var(--color-border-brand);
|
|
68
|
+
--input-border-border-color-active: var(--color-border-brand);
|
|
69
|
+
--input-border-border-color-focus: var(--color-border-brand);
|
|
70
|
+
--input-border-border-size-default: var(--size-border-100);
|
|
71
|
+
--input-border-border-size-hover: var(--size-border-100);
|
|
72
|
+
--input-border-border-size-active: var(--size-border-200);
|
|
73
|
+
--input-border-border-radius: var(--brand-corner-input);
|
|
74
|
+
--input-border-border-color-disabled: var(--color-border-disabled);
|
|
75
|
+
--input-border-border-color-invalid: var(--color-border-danger);
|
|
76
|
+
--input-border-border-color-valid: var(--color-border-strong);
|
|
76
77
|
--input-font-family: var(--brand-font-base);
|
|
77
78
|
--input-font-weight: var(--typography-body-font-weight);
|
|
78
79
|
--input-font-size: var(--typography-label-font-size);
|
|
79
80
|
--input-line-height: var(--typography-body-line-height);
|
|
80
|
-
--input-
|
|
81
|
-
--input-
|
|
82
|
-
--input-
|
|
83
|
-
--input-
|
|
81
|
+
--input-container-background-default: var(--color-fill-surface);
|
|
82
|
+
--input-container-background-hover: var(--color-fill-surface);
|
|
83
|
+
--input-container-background-focus: var(--color-fill-surface);
|
|
84
|
+
--input-container-background-active: var(--color-fill-surface);
|
|
85
|
+
--input-container-background-disabled: var(--color-fill-disabled);
|
|
84
86
|
--input-padding-inline: var(--size-spacing-200);
|
|
85
87
|
--input-padding-inline-icon-only: var(--size-spacing-200);
|
|
86
88
|
--input-padding-block: var(--size-spacing-200);
|
|
87
89
|
--input-gap: var(--size-spacing-200);
|
|
88
|
-
--input-text-color-disabled: var(--color-text-disabled);
|
|
89
|
-
--input-border-color-disabled: var(--color-border-disabled);
|
|
90
|
-
--input-container-background-disabled: var(--color-fill-disabled);
|
|
91
90
|
--input-overlay-hover: var(--color-transparent);
|
|
92
91
|
--input-overlay-active: var(--color-transparent);
|
|
93
92
|
--input-height: 2.5rem;
|
|
94
|
-
--input-
|
|
95
|
-
--
|
|
96
|
-
--
|
|
97
|
-
--
|
|
98
|
-
--
|
|
99
|
-
--
|
|
100
|
-
--
|
|
101
|
-
--
|
|
102
|
-
--
|
|
103
|
-
--
|
|
104
|
-
--
|
|
105
|
-
--
|
|
106
|
-
--
|
|
107
|
-
--
|
|
108
|
-
--
|
|
109
|
-
--
|
|
93
|
+
--input-height-min: 2.5rem;
|
|
94
|
+
--form-group-gap: var(--size-spacing-400);
|
|
95
|
+
--form-group-title-color: var(--color-text-default);
|
|
96
|
+
--form-padding-inline: var(--size-spacing-400);
|
|
97
|
+
--form-padding-block: var(--size-spacing-400);
|
|
98
|
+
--form-border-radius: var(--brand-corner-card);
|
|
99
|
+
--form-gap: var(--size-spacing-400);
|
|
100
|
+
--form-field-gap: var(--size-spacing-200);
|
|
101
|
+
--form-field-helper-text-color-default: var(--color-text-subtle);
|
|
102
|
+
--form-field-helper-text-color-invalid: var(--color-text-danger);
|
|
103
|
+
--form-container-background: var(--color-fill-surface);
|
|
104
|
+
--form-container-border-color: var(--color-border-subtle);
|
|
105
|
+
--form-border-size: var(--size-border-100);
|
|
106
|
+
--checkbox-text-color-default: var(--color-text-default);
|
|
107
|
+
--checkbox-text-color-hover: var(--color-text-strong);
|
|
108
|
+
--checkbox-text-color-active: var(--color-text-inverse);
|
|
109
|
+
--checkbox-border-color-default: var(--color-border-subtle);
|
|
110
|
+
--checkbox-border-color-hover: var(--color-border-strong);
|
|
111
|
+
--checkbox-border-color-active: var(--color-border-brand);
|
|
112
|
+
--checkbox-border-color-focus: var(--color-border-brand);
|
|
113
|
+
--checkbox-border-color-invalid: var(--color-border-danger);
|
|
114
|
+
--checkbox-border-color-valid: var(--color-border-strong);
|
|
115
|
+
--checkbox-border-color-disabled: var(--color-border-disabled);
|
|
110
116
|
--checkbox-border-size-hover: var(--size-border-200);
|
|
111
117
|
--checkbox-border-size-disabled: var(--size-border-000);
|
|
112
118
|
--checkbox-border-size-default: var(--size-border-100);
|
|
119
|
+
--checkbox-container-background-default: var(--color-fill-surface);
|
|
120
|
+
--checkbox-container-background-hover: var(--color-fill-surface);
|
|
121
|
+
--checkbox-container-background-focus: var(--color-fill-surface);
|
|
122
|
+
--checkbox-container-background-active: var(--color-fill-brand);
|
|
123
|
+
--checkbox-container-background-disabled: var(--color-fill-disabled);
|
|
124
|
+
--checkbox-text-color-disabled: var(--color-text-disabled);
|
|
113
125
|
--input-radio-text-color-default: var(--color-text-default);
|
|
114
|
-
--input-radio-text-color-hover: var(--color-text-strong);
|
|
115
|
-
--input-radio-text-color-active: var(--color-text-inverse);
|
|
116
126
|
--input-radio-text-color-disabled: var(--color-text-disabled);
|
|
117
127
|
--input-radio-border-color-default: var(--color-border-subtle);
|
|
118
128
|
--input-radio-border-color-hover: var(--color-border-strong);
|
|
119
129
|
--input-radio-border-color-active: var(--color-border-brand);
|
|
120
|
-
--input-radio-border-color-focus: var(--color-border-brand);
|
|
121
130
|
--input-radio-border-color-disabled: var(--color-border-disabled);
|
|
122
131
|
--input-radio-container-background-default: var(--color-fill-surface);
|
|
123
|
-
--input-radio-container-background-hover: var(--color-fill-surface);
|
|
124
|
-
--input-radio-container-background-focus: var(--color-fill-surface);
|
|
125
|
-
--input-radio-container-background-active: var(--color-fill-brand);
|
|
126
132
|
--input-radio-container-background-disabled: var(--color-fill-disabled);
|
|
127
133
|
--radio-border-size-default: var(--size-border-100);
|
|
128
134
|
--radio-border-size-hover: var(--size-border-200);
|
|
129
135
|
--radio-border-size-disabled: var(--size-border-000);
|
|
130
|
-
--form-group-gap: var(--size-spacing-400);
|
|
131
|
-
--form-group-title-color: var(--color-text-default);
|
|
132
|
-
--form-padding-inline: var(--size-spacing-400);
|
|
133
|
-
--form-padding-block: var(--size-spacing-400);
|
|
134
|
-
--form-border-radius: var(--brand-corner-card);
|
|
135
|
-
--form-gap: var(--size-spacing-400);
|
|
136
|
-
--form-field-gap: var(--size-spacing-200);
|
|
137
|
-
--form-field-helper-text-color-default: var(--color-text-subtle);
|
|
138
|
-
--form-field-helper-text-color-invalid: var(--color-text-danger);
|
|
139
|
-
--form-container-background: var(--color-fill-surface);
|
|
140
|
-
--form-container-border-color: var(--color-border-subtle);
|
|
141
|
-
--form-border-size: var(--size-border-100);
|
|
142
|
-
--badge-default-container-background: var(--color-fill-subtle);
|
|
143
136
|
--badge-default-text-color: var(--color-text-default);
|
|
144
|
-
--badge-
|
|
137
|
+
--badge-default-border-color: var(--color-transparent);
|
|
138
|
+
--badge-default-container-background: var(--color-fill-subtle);
|
|
145
139
|
--badge-brand-text-color: var(--color-text-inverse);
|
|
146
|
-
--badge-
|
|
140
|
+
--badge-brand-border-color: var(--color-transparent);
|
|
141
|
+
--badge-brand-container-background: var(--color-fill-brand);
|
|
147
142
|
--badge-success-text-color: var(--color-text-inverse);
|
|
143
|
+
--badge-success-border-color: var(--color-transparent);
|
|
144
|
+
--badge-success-container-background: var(--color-fill-success);
|
|
145
|
+
--badge-font-family: var(--brand-font-lead);
|
|
146
|
+
--badge-font-weight: var(--typography-label-font-weight);
|
|
147
|
+
--badge-font-size: var(--typography-label-font-size);
|
|
148
|
+
--badge-line-height: var(--typography-label-line-height);
|
|
149
|
+
--badge-border-size-default: var(--size-border-100);
|
|
150
|
+
--badge-border-radius: var(--brand-corner-input);
|
|
151
|
+
--badge-padding-inline: var(--size-spacing-400);
|
|
152
|
+
--badge-padding-inline-icon-only: var(--size-spacing-200);
|
|
153
|
+
--badge-padding-block: var(--size-spacing-200);
|
|
154
|
+
--badge-gap: var(--size-spacing-200);
|
|
155
|
+
--badge-height-min: 2.5rem;
|
|
156
|
+
--badge-width-min: 2.5rem;
|
|
148
157
|
--badge-danger-container-background: var(--color-fill-danger);
|
|
158
|
+
--badge-danger-border-color: var(--color-transparent);
|
|
149
159
|
--badge-danger-text-color: var(--color-text-inverse);
|
|
150
|
-
--badge-border-radius: var(--size-radius-full);
|
|
151
|
-
--badge-font-family: var(--typography-label-font-family);
|
|
152
|
-
--badge-font-weight: var(--font-weight-700);
|
|
153
|
-
--badge-font-size-sm: var(--font-size-xs);
|
|
154
|
-
--badge-font-size-md: var(--font-size-sm);
|
|
155
|
-
--badge-line-height-sm: var(--line-height-xs);
|
|
156
|
-
--badge-line-height-md: var(--line-height-sm);
|
|
157
|
-
--badge-padding-inline-sm: var(--size-spacing-200);
|
|
158
|
-
--badge-padding-inline-md: var(--size-spacing-300);
|
|
159
|
-
--badge-padding-block-sm: var(--size-spacing-000);
|
|
160
|
-
--badge-padding-block-md: var(--size-spacing-100);
|
|
161
|
-
--badge-gap: var(--size-spacing-100);
|
|
162
160
|
}
|