@atelier-ui/react 0.2.15 → 0.2.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,27 @@
1
+ ## 0.2.17 (2026-08-26)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **design:** batch E artboards; a reset was undoing the geometry contract ([6c3788d](https://github.com/DominikPieper/atelier-ui/commit/6c3788d))
6
+ - **icons:** AtlAlert and AtlBadge stop drawing glyphs; batch C artboards ([c16c5c5](https://github.com/DominikPieper/atelier-ui/commit/c16c5c5))
7
+ - **design:** bind the hand-written danger rings, batch A of the redesign artboards ([ffdf8f7](https://github.com/DominikPieper/atelier-ui/commit/ffdf8f7))
8
+
9
+ ### ❤️ Thank You
10
+
11
+ - Claude Opus 5
12
+ - Dominik Pieper @DominikPieper
13
+
14
+ ## 0.2.16 (2026-08-26)
15
+
16
+ ### 🩹 Fixes
17
+
18
+ - **typography:** every component states its typeface ([8fb67f1](https://github.com/DominikPieper/atelier-ui/commit/8fb67f1))
19
+
20
+ ### ❤️ Thank You
21
+
22
+ - Claude Opus 5
23
+ - Dominik Pieper @DominikPieper
24
+
1
25
  ## 0.2.15 (2026-08-26)
2
26
 
3
27
  ### 🚀 Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atelier-ui/react",
3
- "version": "0.2.15",
3
+ "version": "0.2.17",
4
4
  "description": "Atelier component library for React — LLM-optimised, accessible, design-token-driven",
5
5
  "keywords": [
6
6
  "react",
@@ -62,6 +62,10 @@
62
62
  /* ── Heading reset ─────────────────────────────────────────────────────────── */
63
63
  .accordion-heading {
64
64
  all: unset;
65
+ /* Restated after `all: unset`, which resets the box model too — the component's
66
+ * geometry contract has the same specificity and loses on source order, so this
67
+ * element was content-box and 2px taller than its own CSS said (ADR-0051). */
68
+ box-sizing: border-box;
65
69
  display: block;
66
70
  }
67
71
 
@@ -1 +1 @@
1
- {"version":3,"file":"atl-alert.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/alert/atl-alert.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,iBAAiB,CAAC;AAGzB,KAAK,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AASjE;;GAEG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,YAAY;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAgB,EAChB,WAAmB,EACnB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,aAAa,+BAsBf"}
1
+ {"version":3,"file":"atl-alert.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/alert/atl-alert.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,iBAAiB,CAAC;AAczB,KAAK,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,YAAY;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAgB,EAChB,WAAmB,EACnB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,aAAa,+BAsBf"}
@@ -1,11 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import './atl-alert.css';
3
3
  import { AtlIcon } from '../icon/atl-icon';
4
- const VARIANT_ICONS = {
5
- info: 'ℹ',
6
- success: '✓',
7
- warning: '⚠',
8
- danger: '',
4
+ /** Which AtlIcon each variant carries. Names, not glyphs: a glyph in a string map
5
+ * was the fifth way this library drew an icon, and the one check:iconography
6
+ * missed (ADR-0050). */
7
+ const VARIANT_ICON_NAMES = {
8
+ info: 'info',
9
+ success: 'success',
10
+ warning: 'warning',
11
+ danger: 'danger',
9
12
  };
10
13
  /**
11
14
  * An alert component for displaying important messages.
@@ -13,6 +16,6 @@ const VARIANT_ICONS = {
13
16
  export function AtlAlert({ variant = 'info', dismissible = false, onDismissed, children, className, ...rest }) {
14
17
  const classes = ['atl-alert', `variant-${variant}`, className].filter(Boolean).join(' ');
15
18
  const ariaLive = variant === 'danger' || variant === 'warning' ? 'assertive' : 'polite';
16
- return (_jsxs("div", { className: classes, role: "alert", "aria-live": ariaLive, ...rest, children: [_jsxs("span", { className: "content", children: [_jsx("span", { className: "variant-icon", "aria-hidden": "true", children: VARIANT_ICONS[variant] }), children] }), dismissible && (_jsx("button", { className: "dismiss", type: "button", "aria-label": "Dismiss", onClick: onDismissed, children: _jsx(AtlIcon, { name: "close", size: "sm" }) }))] }));
19
+ return (_jsxs("div", { className: classes, role: "alert", "aria-live": ariaLive, ...rest, children: [_jsxs("span", { className: "content", children: [_jsx(AtlIcon, { className: "variant-icon", name: VARIANT_ICON_NAMES[variant], size: "sm" }), children] }), dismissible && (_jsx("button", { className: "dismiss", type: "button", "aria-label": "Dismiss", onClick: onDismissed, children: _jsx(AtlIcon, { name: "close", size: "sm" }) }))] }));
17
20
  }
18
21
  //# sourceMappingURL=atl-alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"atl-alert.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/alert/atl-alert.tsx"],"names":[],"mappings":";AAEA,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C,MAAM,aAAa,GAAoC;IACrD,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;CACZ,CAAC;AA0BF;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,GAAG,MAAM,EAChB,WAAW,GAAG,KAAK,EACnB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACO;IACd,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExF,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,eAAY,QAAQ,KAAM,IAAI,aACjE,gBAAM,SAAS,EAAC,SAAS,aACvB,eAAM,SAAS,EAAC,cAAc,iBAAa,MAAM,YAAE,aAAa,CAAC,OAAO,CAAC,GAAQ,EAChF,QAAQ,IACJ,EACN,WAAW,IAAI,CACd,iBACE,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,QAAQ,gBACF,SAAS,EACpB,OAAO,EAAE,WAAW,YAEpB,KAAC,OAAO,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,GAAG,GAC3B,CACV,IACG,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport type { AtlAlertSpec } from '../spec';\nimport './atl-alert.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\ntype AtlAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\nconst VARIANT_ICONS: Record<AtlAlertVariant, string> = {\n info: '',\n success: '',\n warning: '',\n danger: '',\n};\n\n/**\n * Properties for the AtlAlert component.\n */\nexport interface AtlAlertProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlAlertSpec {\n /**\n * The visual style variant of the alert.\n */\n variant?: AtlAlertVariant;\n /**\n * Whether the alert can be dismissed by the user.\n */\n dismissible?: boolean;\n /**\n * Callback triggered when the alert is dismissed.\n */\n onDismissed?: () => void;\n /**\n * The content to be rendered inside the alert.\n */\n children?: ReactNode;\n}\n\n/**\n * An alert component for displaying important messages.\n */\nexport function AtlAlert({\n variant = 'info',\n dismissible = false,\n onDismissed,\n children,\n className,\n ...rest\n}: AtlAlertProps) {\n const classes = ['atl-alert', `variant-${variant}`, className].filter(Boolean).join(' ');\n const ariaLive = variant === 'danger' || variant === 'warning' ? 'assertive' : 'polite';\n\n return (\n <div className={classes} role=\"alert\" aria-live={ariaLive} {...rest}>\n <span className=\"content\">\n <span className=\"variant-icon\" aria-hidden=\"true\">{VARIANT_ICONS[variant]}</span>\n {children}\n </span>\n {dismissible && (\n <button\n className=\"dismiss\"\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismissed}\n >\n <AtlIcon name=\"close\" size=\"sm\" />\n </button>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-alert.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/alert/atl-alert.tsx"],"names":[],"mappings":";AAEA,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;wBAEwB;AACxB,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC;AA6BX;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,GAAG,MAAM,EAChB,WAAW,GAAG,KAAK,EACnB,WAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACO;IACd,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAExF,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,eAAY,QAAQ,KAAM,IAAI,aACjE,gBAAM,SAAS,EAAC,SAAS,aACvB,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,EAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAC,IAAI,GAAG,EAChF,QAAQ,IACJ,EACN,WAAW,IAAI,CACd,iBACE,SAAS,EAAC,SAAS,EACnB,IAAI,EAAC,QAAQ,gBACF,SAAS,EACpB,OAAO,EAAE,WAAW,YAEpB,KAAC,OAAO,IAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,GAAG,GAC3B,CACV,IACG,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport type { AtlAlertSpec } from '../spec';\nimport './atl-alert.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/** Which AtlIcon each variant carries. Names, not glyphs: a glyph in a string map\n * was the fifth way this library drew an icon, and the one check:iconography\n * missed (ADR-0050). */\nconst VARIANT_ICON_NAMES = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n} as const;\n\n\ntype AtlAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * Properties for the AtlAlert component.\n */\nexport interface AtlAlertProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlAlertSpec {\n /**\n * The visual style variant of the alert.\n */\n variant?: AtlAlertVariant;\n /**\n * Whether the alert can be dismissed by the user.\n */\n dismissible?: boolean;\n /**\n * Callback triggered when the alert is dismissed.\n */\n onDismissed?: () => void;\n /**\n * The content to be rendered inside the alert.\n */\n children?: ReactNode;\n}\n\n/**\n * An alert component for displaying important messages.\n */\nexport function AtlAlert({\n variant = 'info',\n dismissible = false,\n onDismissed,\n children,\n className,\n ...rest\n}: AtlAlertProps) {\n const classes = ['atl-alert', `variant-${variant}`, className].filter(Boolean).join(' ');\n const ariaLive = variant === 'danger' || variant === 'warning' ? 'assertive' : 'polite';\n\n return (\n <div className={classes} role=\"alert\" aria-live={ariaLive} {...rest}>\n <span className=\"content\">\n <AtlIcon className=\"variant-icon\" name={VARIANT_ICON_NAMES[variant]} size=\"sm\" />\n {children}\n </span>\n {dismissible && (\n <button\n className=\"dismiss\"\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismissed}\n >\n <AtlIcon name=\"close\" size=\"sm\" />\n </button>\n )}\n </div>\n );\n}\n"]}
@@ -86,6 +86,11 @@
86
86
  /* === AtlAvatarGroup === */
87
87
 
88
88
  .atl-avatar-group {
89
+ /* The library states its own typeface (ADR-0035). Without this the component
90
+ * renders in the consuming app's font while its neighbours render Instrument
91
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
92
+ * per component root, never on a descendant (ADR-0049). */
93
+ font-family: var(--ui-font-family);
89
94
  display: inline-flex;
90
95
  align-items: center;
91
96
  background: none;
@@ -109,7 +114,6 @@
109
114
  color: var(--ui-color-text-muted);
110
115
  border: var(--ui-border-width) solid var(--ui-color-border);
111
116
  border-radius: var(--ui-radius-full);
112
- font-family: var(--ui-font-family);
113
117
  font-weight: var(--ui-font-weight-semibold);
114
118
  box-shadow: 0 0 0 2px var(--ui-color-surface);
115
119
  margin-inline-start: -8px;
@@ -1 +1 @@
1
- {"version":3,"file":"atl-badge.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/badge/atl-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,iBAAiB,CAAC;AAEzB,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAU7E;;GAEG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,eAAe,CAAC,EACrC,YAAY;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAmB,EACnB,IAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,aAAa,+BAUf"}
1
+ {"version":3,"file":"atl-badge.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/badge/atl-badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,iBAAiB,CAAC;AAczB,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,eAAe,CAAC,EACrC,YAAY;IACd;;OAEG;IACH,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAmB,EACnB,IAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,aAAa,+BAUf"}
@@ -1,11 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import './atl-badge.css';
3
- const VARIANT_ICONS = {
4
- default: null,
5
- success: '✓',
6
- warning: '⚠',
7
- danger: '✕',
8
- info: '',
3
+ import { AtlIcon } from '../icon/atl-icon';
4
+ /** Which AtlIcon each variant carries. Names, not glyphs: a glyph in a string map
5
+ * was the fifth way this library drew an icon, and the one check:iconography
6
+ * missed (ADR-0050). */
7
+ const VARIANT_ICON_NAMES = {
8
+ info: 'info',
9
+ success: 'success',
10
+ warning: 'warning',
11
+ danger: 'danger',
9
12
  };
10
13
  /**
11
14
  * A badge component for displaying small amounts of information or status.
@@ -13,7 +16,7 @@ const VARIANT_ICONS = {
13
16
  export function AtlBadge({ variant = 'default', size = 'md', children, className, ...rest }) {
14
17
  const classes = ['atl-badge', `variant-${variant}`, `size-${size}`, className]
15
18
  .filter(Boolean).join(' ');
16
- const icon = VARIANT_ICONS[variant];
17
- return (_jsxs("span", { className: classes, role: "status", ...rest, children: [icon && _jsx("span", { className: "variant-icon", "aria-hidden": "true", children: icon }), children] }));
19
+ const iconName = VARIANT_ICON_NAMES[variant];
20
+ return (_jsxs("span", { className: classes, role: "status", ...rest, children: [iconName && _jsx(AtlIcon, { className: "variant-icon", name: iconName, size: "sm" }), children] }));
18
21
  }
19
22
  //# sourceMappingURL=atl-badge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"atl-badge.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/badge/atl-badge.tsx"],"names":[],"mappings":";AAEA,OAAO,iBAAiB,CAAC;AAIzB,MAAM,aAAa,GAA2C;IAC5D,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,GAAG;CACV,CAAC;AAsBF;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACO;IACd,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,OAAO,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,SAAS,CAAC;SAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,CACL,gBAAM,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,KAAK,IAAI,aAC7C,IAAI,IAAI,eAAM,SAAS,EAAC,cAAc,iBAAa,MAAM,YAAE,IAAI,GAAQ,EACvE,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport type { AtlBadgeSpec } from '../spec';\nimport './atl-badge.css';\n\ntype AtlBadgeVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nconst VARIANT_ICONS: Record<AtlBadgeVariant, string | null> = {\n default: null,\n success: '',\n warning: '',\n danger: '',\n info: '',\n};\n\n/**\n * Properties for the AtlBadge component.\n */\nexport interface AtlBadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n AtlBadgeSpec {\n /**\n * The visual style variant of the badge.\n */\n variant?: AtlBadgeVariant;\n /**\n * The size of the badge.\n */\n size?: 'sm' | 'md';\n /**\n * The content to be rendered inside the badge.\n */\n children?: ReactNode;\n}\n\n/**\n * A badge component for displaying small amounts of information or status.\n */\nexport function AtlBadge({\n variant = 'default',\n size = 'md',\n children,\n className,\n ...rest\n}: AtlBadgeProps) {\n const classes = ['atl-badge', `variant-${variant}`, `size-${size}`, className]\n .filter(Boolean).join(' ');\n const icon = VARIANT_ICONS[variant];\n return (\n <span className={classes} role=\"status\" {...rest}>\n {icon && <span className=\"variant-icon\" aria-hidden=\"true\">{icon}</span>}\n {children}\n </span>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-badge.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/badge/atl-badge.tsx"],"names":[],"mappings":";AAEA,OAAO,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;wBAEwB;AACxB,MAAM,kBAAkB,GAAG;IACzB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACR,CAAC;AAyBX;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EACvB,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACO;IACd,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,WAAW,OAAO,EAAE,EAAE,QAAQ,IAAI,EAAE,EAAE,SAAS,CAAC;SAC3E,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAA0C,CAAC,CAAC;IAChF,OAAO,CACL,gBAAM,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,KAAK,IAAI,aAC7C,QAAQ,IAAI,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,IAAI,GAAG,EAC1E,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport type { AtlBadgeSpec } from '../spec';\nimport './atl-badge.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/** Which AtlIcon each variant carries. Names, not glyphs: a glyph in a string map\n * was the fifth way this library drew an icon, and the one check:iconography\n * missed (ADR-0050). */\nconst VARIANT_ICON_NAMES = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n} as const;\n\n\ntype AtlBadgeVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\n/**\n * Properties for the AtlBadge component.\n */\nexport interface AtlBadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n AtlBadgeSpec {\n /**\n * The visual style variant of the badge.\n */\n variant?: AtlBadgeVariant;\n /**\n * The size of the badge.\n */\n size?: 'sm' | 'md';\n /**\n * The content to be rendered inside the badge.\n */\n children?: ReactNode;\n}\n\n/**\n * A badge component for displaying small amounts of information or status.\n */\nexport function AtlBadge({\n variant = 'default',\n size = 'md',\n children,\n className,\n ...rest\n}: AtlBadgeProps) {\n const classes = ['atl-badge', `variant-${variant}`, `size-${size}`, className]\n .filter(Boolean).join(' ');\n const iconName = VARIANT_ICON_NAMES[variant as keyof typeof VARIANT_ICON_NAMES];\n return (\n <span className={classes} role=\"status\" {...rest}>\n {iconName && <AtlIcon className=\"variant-icon\" name={iconName} size=\"sm\" />}\n {children}\n </span>\n );\n}\n"]}
@@ -19,6 +19,11 @@
19
19
  }
20
20
 
21
21
  .atl-card {
22
+ /* The library states its own typeface (ADR-0035). Without this the component
23
+ * renders in the consuming app's font while its neighbours render Instrument
24
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
25
+ * per component root, never on a descendant (ADR-0049). */
26
+ font-family: var(--ui-font-family);
22
27
  display: block;
23
28
  border-radius: var(--ui-radius-xl);
24
29
  background-color: var(--ui-color-surface-raised);
@@ -26,6 +26,11 @@
26
26
 
27
27
  /* ── Host wrapper ──────────────────────────────────────────────────────────── */
28
28
  .atl-chat {
29
+ /* The library states its own typeface (ADR-0035). Without this the component
30
+ * renders in the consuming app's font while its neighbours render Instrument
31
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
32
+ * per component root, never on a descendant (ADR-0049). */
33
+ font-family: var(--ui-font-family);
29
34
  display: contents;
30
35
  }
31
36
 
@@ -43,6 +48,12 @@
43
48
  /* ═══════════════════════════════════════════════════════════════════════════ */
44
49
  .atl-chat.variant-drawer dialog {
45
50
  all: unset;
51
+ /* Restated after `all: unset`, which resets the box model too — the component's
52
+ * geometry contract has the same specificity and loses on source order, so this
53
+ * element was content-box and 2px taller than its own CSS said (ADR-0051). */
54
+ box-sizing: border-box;
55
+ /* After `all: unset`, which would otherwise reset it (ADR-0049). */
56
+ font-family: var(--ui-font-family);
46
57
  position: fixed;
47
58
  inset: 0 0 0 auto;
48
59
  height: 100dvh;
@@ -109,7 +120,6 @@
109
120
  background: var(--ui-color-brand-ai, #b5e61c);
110
121
  color: var(--ui-color-text);
111
122
  border: none;
112
- font-family: var(--ui-font-family);
113
123
  font-size: var(--ui-font-size-lg);
114
124
  font-weight: var(--ui-font-weight-semibold);
115
125
  cursor: pointer;
@@ -338,7 +348,6 @@
338
348
  color: var(--ui-color-text);
339
349
  border: var(--ui-border-width) solid var(--ui-color-border);
340
350
  border-radius: var(--ui-radius-lg);
341
- font-family: var(--ui-font-family);
342
351
  text-align: left;
343
352
  cursor: pointer;
344
353
  transition:
@@ -388,7 +397,6 @@
388
397
  border-radius: var(--ui-radius-md);
389
398
  background: var(--ui-color-surface-sunken);
390
399
  color: var(--ui-color-text);
391
- font-family: var(--ui-font-family);
392
400
  font-size: var(--ui-font-size-sm);
393
401
  line-height: var(--ui-line-height-normal);
394
402
  resize: none;
@@ -422,7 +430,6 @@
422
430
  padding: var(--ui-spacing-2) var(--ui-spacing-4);
423
431
  border: var(--ui-border-width) solid transparent;
424
432
  border-radius: var(--ui-radius-md);
425
- font-family: var(--ui-font-family);
426
433
  font-size: var(--ui-font-size-sm);
427
434
  font-weight: var(--ui-font-weight-medium);
428
435
  cursor: pointer;
@@ -96,7 +96,7 @@
96
96
 
97
97
  .atl-checkbox.is-invalid input[type='checkbox']:focus-visible {
98
98
  border-color: var(--ui-color-input-border-invalid);
99
- box-shadow: 0 0 0 2px var(--ui-color-surface), 0 0 0 4px var(--ui-color-danger);
99
+ box-shadow: var(--ui-focus-ring-danger);
100
100
  }
101
101
 
102
102
  /* Disabled state */
@@ -44,7 +44,7 @@
44
44
  }
45
45
 
46
46
  .code-block-label {
47
- font-family: var(--ui-font-mono, 'Menlo', 'Monaco', 'Courier New', monospace);
47
+ font-family: var(--ui-font-mono);
48
48
  font-size: 0.72rem;
49
49
  font-weight: 600;
50
50
  letter-spacing: 0.03em;
@@ -97,7 +97,7 @@
97
97
  .code-block-pre {
98
98
  margin: 0;
99
99
  padding: var(--ui-spacing-4);
100
- font-family: var(--ui-font-mono, 'Menlo', 'Monaco', 'Courier New', monospace);
100
+ font-family: var(--ui-font-mono);
101
101
  font-size: var(--ui-font-size-sm);
102
102
  line-height: 1.65;
103
103
  color: var(--ui-color-text);
@@ -100,7 +100,7 @@
100
100
 
101
101
  .atl-combobox.is-invalid .atl-combobox-input:focus-visible {
102
102
  border-color: var(--ui-color-input-border-invalid);
103
- box-shadow: 0 0 0 2px var(--ui-color-surface), 0 0 0 4px var(--ui-color-danger);
103
+ box-shadow: var(--ui-focus-ring-danger);
104
104
  }
105
105
 
106
106
  .atl-combobox.is-disabled {
@@ -21,6 +21,14 @@
21
21
  /* ── Native <dialog> reset + base ──────────────────────────────────────────── */
22
22
  .atl-dialog {
23
23
  all: unset;
24
+ /* Restated after `all: unset`, which resets the box model too — the component's
25
+ * geometry contract has the same specificity and loses on source order, so this
26
+ * element was content-box and 2px taller than its own CSS said (ADR-0051). */
27
+ box-sizing: border-box;
28
+ /* After `all: unset`, which would otherwise reset it. The library states its own
29
+ * typeface (ADR-0035); without this the dialog renders in the consuming app's
30
+ * font while its neighbours render Instrument Sans (ADR-0049). */
31
+ font-family: var(--ui-font-family);
24
32
  position: fixed;
25
33
  inset: 0;
26
34
  margin: auto;
@@ -20,12 +20,23 @@
20
20
 
21
21
  /* ── Host wrapper ──────────────────────────────────────────────────────────── */
22
22
  .atl-drawer-host {
23
+ /* The library states its own typeface (ADR-0035). Without this the component
24
+ * renders in the consuming app's font while its neighbours render Instrument
25
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
26
+ * per component root, never on a descendant (ADR-0049). */
27
+ font-family: var(--ui-font-family);
23
28
  display: contents;
24
29
  }
25
30
 
26
31
  /* ── Native <dialog> base ──────────────────────────────────────────────────── */
27
32
  .atl-drawer-host dialog {
28
33
  all: unset;
34
+ /* Restated after `all: unset`, which resets the box model too — the component's
35
+ * geometry contract has the same specificity and loses on source order, so this
36
+ * element was content-box and 2px taller than its own CSS said (ADR-0051). */
37
+ box-sizing: border-box;
38
+ /* After `all: unset`, which would otherwise reset it (ADR-0049). */
39
+ font-family: var(--ui-font-family);
29
40
  position: fixed;
30
41
  display: none;
31
42
  flex-direction: column;
@@ -26,6 +26,10 @@
26
26
  /* Page button */
27
27
  .page-btn {
28
28
  all: unset;
29
+ /* Restated after `all: unset`, which resets the box model too — the component's
30
+ * geometry contract has the same specificity and loses on source order, so this
31
+ * element was content-box and 2px taller than its own CSS said (ADR-0051). */
32
+ box-sizing: border-box;
29
33
  display: inline-flex;
30
34
  align-items: center;
31
35
  justify-content: center;
@@ -72,7 +72,7 @@
72
72
 
73
73
  .atl-radio.is-invalid input[type='radio']:focus-visible {
74
74
  border-color: var(--ui-color-input-border-invalid);
75
- box-shadow: 0 0 0 2px var(--ui-color-surface), 0 0 0 4px var(--ui-color-danger);
75
+ box-shadow: var(--ui-focus-ring-danger);
76
76
  }
77
77
 
78
78
  /* Disabled state */
@@ -9,6 +9,11 @@
9
9
  }
10
10
 
11
11
  .atl-skeleton {
12
+ /* The library states its own typeface (ADR-0035). Without this the component
13
+ * renders in the consuming app's font while its neighbours render Instrument
14
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
15
+ * per component root, never on a descendant (ADR-0049). */
16
+ font-family: var(--ui-font-family);
12
17
  display: block;
13
18
  background: var(--ui-color-border);
14
19
  overflow: hidden;
@@ -60,7 +60,7 @@
60
60
 
61
61
  .atl-textarea.is-invalid textarea:focus {
62
62
  border-color: var(--ui-color-input-border-invalid);
63
- box-shadow: 0 0 0 2px var(--ui-color-surface), 0 0 0 4px var(--ui-color-danger);
63
+ box-shadow: var(--ui-focus-ring-danger);
64
64
  }
65
65
 
66
66
  /* Non-color invalid indicator (WCAG 1.4.1). A real AtlIcon rather than a CSS
@@ -16,6 +16,11 @@
16
16
 
17
17
  /* ── Toast Container ── */
18
18
  .atl-toast-container {
19
+ /* The library states its own typeface (ADR-0035). Without this the component
20
+ * renders in the consuming app's font while its neighbours render Instrument
21
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
22
+ * per component root, never on a descendant (ADR-0049). */
23
+ font-family: var(--ui-font-family);
19
24
  position: fixed;
20
25
  z-index: var(--ui-z-toast, 400);
21
26
  display: flex;
@@ -98,7 +98,7 @@
98
98
 
99
99
  .atl-toggle.is-invalid input[type='checkbox']:focus-visible + .track {
100
100
  border-color: var(--ui-color-input-border-invalid);
101
- box-shadow: 0 0 0 2px var(--ui-color-surface), 0 0 0 4px var(--ui-color-danger);
101
+ box-shadow: var(--ui-focus-ring-danger);
102
102
  }
103
103
 
104
104
  /* Disabled state */
@@ -16,6 +16,11 @@
16
16
 
17
17
  /* Tooltip wrapper — inline container */
18
18
  .atl-tooltip-wrapper {
19
+ /* The library states its own typeface (ADR-0035). Without this the component
20
+ * renders in the consuming app's font while its neighbours render Instrument
21
+ * Sans — measured: a card next to a button showed two typefaces. Declared once
22
+ * per component root, never on a descendant (ADR-0049). */
23
+ font-family: var(--ui-font-family);
19
24
  display: inline-block;
20
25
  position: relative;
21
26
  }