@atelier-ui/react 0.2.38 → 0.2.40

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,19 @@
1
+ ## 0.2.40 (2026-09-07)
2
+
3
+ This was a version bump only for react to align it with other projects, there were no code changes.
4
+
5
+ ## 0.2.39 (2026-09-07)
6
+
7
+ ### 🩹 Fixes
8
+
9
+ - **pagination,stepper:** the active state was bolder than any role allows ([1eea2f0](https://github.com/DominikPieper/atelier-ui/commit/1eea2f0))
10
+ - **breadcrumbs:** the fallback separator named a glyph nothing ships ([910e77c](https://github.com/DominikPieper/atelier-ui/commit/910e77c))
11
+
12
+ ### ❤️ Thank You
13
+
14
+ - Claude Opus 5 (1M context)
15
+ - Dominik Pieper @DominikPieper
16
+
1
17
  ## 0.2.38 (2026-09-07)
2
18
 
3
19
  ### 🩹 Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atelier-ui/react",
3
- "version": "0.2.38",
3
+ "version": "0.2.40",
4
4
  "description": "Atelier component library for React — LLM-optimised, accessible, design-token-driven",
5
5
  "keywords": [
6
6
  "react",
@@ -47,9 +47,17 @@
47
47
  the CSS Generated Content alt-text pair: an explicit empty alternative
48
48
  text, which keeps the glyph out of the accessibility tree in Chromium,
49
49
  Firefox and WebKit alike (verified; a bare `content: '…'` is NOT excluded
50
- by default — it renders as its own accessible text node). See ADR-0100. */
50
+ by default — it renders as its own accessible text node). See ADR-0100.
51
+ The fallback matches the component's own default ('/', not '›'): all
52
+ three adapters always set --atl-separator inline before first paint (in
53
+ SSR-rendered markup, not just post-hydration), so this value is unreached
54
+ in every documented usage — it exists only so a stray '.atl-breadcrumb-
55
+ item::after' rendered without the component (hand-authored markup that
56
+ imports the CSS but skips AtlBreadcrumbs/atl-breadcrumbs/AtlBreadcrumbs.vue)
57
+ degrades to the shipped default rather than to a glyph the spec's
58
+ `separator` option list ('/', '>') never offers. */
51
59
  .atl-breadcrumb-item::after {
52
- content: var(--atl-separator, '') / '';
60
+ content: var(--atl-separator, '/') / '';
53
61
  margin: 0 var(--ui-spacing-2);
54
62
  color: var(--ui-color-border-hover);
55
63
  font-size: var(--ui-font-size-md);
@@ -80,7 +88,15 @@
80
88
  box-shadow: var(--ui-focus-ring);
81
89
  }
82
90
 
83
- /* Current item (plain text) */
91
+ /* Current item (plain text). Deliberately no padding: `.breadcrumb-link`'s
92
+ padding is exactly cancelled by its own negative margin (a hit/hover-area
93
+ enlargement, invisible in the flow), so its text occupies exactly the same
94
+ box a padding-less element would — measured in a real browser, both items'
95
+ rows come out the same height and the link's text starts at the same
96
+ offset within its row as this span's. Adding matching padding here would
97
+ not reproduce that; without a compensating negative margin it would make
98
+ this row taller than a link row, which is the regression this note exists
99
+ to head off. */
84
100
  .atl-breadcrumb-item .breadcrumb-current {
85
101
  color: var(--ui-color-text);
86
102
  font-weight: var(--ui-font-weight-semibold);
@@ -16,10 +16,10 @@ export interface AtlIconProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'ari
16
16
  label?: string;
17
17
  }
18
18
  /**
19
- * Vector icon. 23 named variants, drawn from the geometry in `icons.ts` so the
20
- * same shape is used everywhere it appears. Matches the Figma `AtlIcon`
21
- * component set. Decorative by default; pass `label` to announce a meaning
22
- * to assistive tech.
19
+ * Vector icon. Renders whichever `AtlIconName` variant is passed, drawn from
20
+ * the geometry in `icons.ts` so the same shape is used everywhere it appears.
21
+ * Matches the Figma `AtlIcon` component set. Decorative by default; pass
22
+ * `label` to announce a meaning to assistive tech.
23
23
  */
24
24
  export declare function AtlIcon({ name, size, label, className, ...rest }: AtlIconProps): import("react").JSX.Element;
25
25
  //# sourceMappingURL=atl-icon.d.ts.map
@@ -2,10 +2,10 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { ATL_ICON_GEOMETRY, ATL_ICON_STROKE_WIDTH, ATL_ICON_VIEWBOX } from '../icons';
3
3
  import './atl-icon.css';
4
4
  /**
5
- * Vector icon. 23 named variants, drawn from the geometry in `icons.ts` so the
6
- * same shape is used everywhere it appears. Matches the Figma `AtlIcon`
7
- * component set. Decorative by default; pass `label` to announce a meaning
8
- * to assistive tech.
5
+ * Vector icon. Renders whichever `AtlIconName` variant is passed, drawn from
6
+ * the geometry in `icons.ts` so the same shape is used everywhere it appears.
7
+ * Matches the Figma `AtlIcon` component set. Decorative by default; pass
8
+ * `label` to announce a meaning to assistive tech.
9
9
  */
10
10
  export function AtlIcon({ name, size = 'md', label, className, ...rest }) {
11
11
  const classes = ['atl-icon', `size-${size}`, className].filter(Boolean).join(' ');
@@ -1 +1 @@
1
- {"version":3,"file":"atl-icon.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/icon/atl-icon.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,gBAAgB,CAAC;AAoBxB;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,KAAK,EACL,SAAS,EACT,GAAG,IAAI,EACM;IACb,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,MAAM,kBAAkB,GAAG,KAAK;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;QACtC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAa,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC1C,OAAO,CACL,eAAM,SAAS,EAAE,OAAO,KAAM,kBAAkB,KAAM,IAAI,YACxD,cACE,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EACtC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAC3C,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,EACvD,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC3C,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,iBAChC,MAAM,EAClB,SAAS,EAAC,OAAO,YAEhB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACzB,eAAc,CAAC,EAAE,CAAC,IAAP,CAAC,CAAU,CACvB,CAAC,GACE,GACD,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes } from 'react';\nimport type { AtlIconName, AtlIconSize, AtlIconSpec } from '../spec';\nimport { ATL_ICON_GEOMETRY, ATL_ICON_STROKE_WIDTH, ATL_ICON_VIEWBOX } from '../icons';\nimport './atl-icon.css';\n\n\n/**\n * Properties for the AtlIcon component.\n */\nexport interface AtlIconProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'aria-label'>,\n AtlIconSpec {\n /** The icon name. */\n name: AtlIconName;\n /** The icon size. */\n size?: AtlIconSize;\n /**\n * Accessible label. When provided, the icon is announced as an image with\n * this label. When omitted, the icon is hidden from assistive tech.\n */\n label?: string;\n}\n\n/**\n * Vector icon. 23 named variants, drawn from the geometry in `icons.ts` so the\n * same shape is used everywhere it appears. Matches the Figma `AtlIcon`\n * component set. Decorative by default; pass `label` to announce a meaning\n * to assistive tech.\n */\nexport function AtlIcon({\n name,\n size = 'md',\n label,\n className,\n ...rest\n}: AtlIconProps) {\n const classes = ['atl-icon', `size-${size}`, className].filter(Boolean).join(' ');\n const accessibilityProps = label\n ? { role: 'img', 'aria-label': label }\n : { 'aria-hidden': true as const };\n const geometry = ATL_ICON_GEOMETRY[name];\n const stroke = geometry.kind === 'stroke';\n return (\n <span className={classes} {...accessibilityProps} {...rest}>\n <svg\n viewBox={ATL_ICON_VIEWBOX}\n fill={stroke ? 'none' : 'currentColor'}\n stroke={stroke ? 'currentColor' : undefined}\n strokeWidth={stroke ? ATL_ICON_STROKE_WIDTH : undefined}\n strokeLinecap={stroke ? 'round' : undefined}\n strokeLinejoin={stroke ? 'round' : undefined}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {geometry.paths.map((d) => (\n <path key={d} d={d} />\n ))}\n </svg>\n </span>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-icon.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/icon/atl-icon.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,gBAAgB,CAAC;AAoBxB;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,KAAK,EACL,SAAS,EACT,GAAG,IAAI,EACM;IACb,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClF,MAAM,kBAAkB,GAAG,KAAK;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE;QACtC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAa,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;IAC1C,OAAO,CACL,eAAM,SAAS,EAAE,OAAO,KAAM,kBAAkB,KAAM,IAAI,YACxD,cACE,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EACtC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAC3C,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,EACvD,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC3C,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,iBAChC,MAAM,EAClB,SAAS,EAAC,OAAO,YAEhB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACzB,eAAc,CAAC,EAAE,CAAC,IAAP,CAAC,CAAU,CACvB,CAAC,GACE,GACD,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes } from 'react';\nimport type { AtlIconName, AtlIconSize, AtlIconSpec } from '../spec';\nimport { ATL_ICON_GEOMETRY, ATL_ICON_STROKE_WIDTH, ATL_ICON_VIEWBOX } from '../icons';\nimport './atl-icon.css';\n\n\n/**\n * Properties for the AtlIcon component.\n */\nexport interface AtlIconProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, 'aria-label'>,\n AtlIconSpec {\n /** The icon name. */\n name: AtlIconName;\n /** The icon size. */\n size?: AtlIconSize;\n /**\n * Accessible label. When provided, the icon is announced as an image with\n * this label. When omitted, the icon is hidden from assistive tech.\n */\n label?: string;\n}\n\n/**\n * Vector icon. Renders whichever `AtlIconName` variant is passed, drawn from\n * the geometry in `icons.ts` so the same shape is used everywhere it appears.\n * Matches the Figma `AtlIcon` component set. Decorative by default; pass\n * `label` to announce a meaning to assistive tech.\n */\nexport function AtlIcon({\n name,\n size = 'md',\n label,\n className,\n ...rest\n}: AtlIconProps) {\n const classes = ['atl-icon', `size-${size}`, className].filter(Boolean).join(' ');\n const accessibilityProps = label\n ? { role: 'img', 'aria-label': label }\n : { 'aria-hidden': true as const };\n const geometry = ATL_ICON_GEOMETRY[name];\n const stroke = geometry.kind === 'stroke';\n return (\n <span className={classes} {...accessibilityProps} {...rest}>\n <svg\n viewBox={ATL_ICON_VIEWBOX}\n fill={stroke ? 'none' : 'currentColor'}\n stroke={stroke ? 'currentColor' : undefined}\n strokeWidth={stroke ? ATL_ICON_STROKE_WIDTH : undefined}\n strokeLinecap={stroke ? 'round' : undefined}\n strokeLinejoin={stroke ? 'round' : undefined}\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n {geometry.paths.map((d) => (\n <path key={d} d={d} />\n ))}\n </svg>\n </span>\n );\n}\n"]}
@@ -65,12 +65,14 @@
65
65
  box-shadow: var(--ui-focus-ring);
66
66
  }
67
67
 
68
- /* Active (current) page — primary fill */
68
+ /* Active (current) page — primary fill. Weight stays the resting --ui-type-control
69
+ * medium (ADR-0074): the Figma master renders this label Medium in every state, and
70
+ * .atl-tab-group's own .is-active — the other stateful member of the same six-rule
71
+ * consumer list — changes only colour, never weight, on its current item. */
69
72
  .page-btn.is-active {
70
73
  background-color: var(--ui-color-primary);
71
74
  border-color: var(--ui-color-primary);
72
75
  color: var(--ui-color-text-on-primary);
73
- font-weight: var(--ui-font-weight-semibold);
74
76
  }
75
77
 
76
78
  .page-btn.is-active:hover {
@@ -104,14 +104,14 @@
104
104
  .step-description {
105
105
  font-size: var(--ui-font-size-xs);
106
106
  color: var(--ui-color-text-muted);
107
- margin-top: 2px;
107
+ margin-top: var(--ui-spacing-1);
108
108
  }
109
109
 
110
110
  .step-optional {
111
111
  font-size: var(--ui-font-size-xs);
112
112
  color: var(--ui-color-text-muted);
113
113
  font-style: italic;
114
- margin-top: 2px;
114
+ margin-top: var(--ui-spacing-1);
115
115
  }
116
116
 
117
117
  /* ─── Content ─── */
@@ -130,8 +130,11 @@
130
130
  }
131
131
 
132
132
  .step-item.is-active .step-label {
133
+ /* Weight stays the resting --ui-type-control medium (ADR-0074): the Figma master
134
+ * renders this label Medium in every state, and .atl-tab-group's own .is-active —
135
+ * the other stateful member of the same six-rule consumer list — changes only
136
+ * colour, never weight, on its current item. */
133
137
  color: var(--ui-color-text);
134
- font-weight: var(--ui-font-weight-semibold);
135
138
  }
136
139
 
137
140
  /* ─── Completed state ─── */