@atelier-ui/react 0.2.42 → 0.2.43

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.
Files changed (110) hide show
  1. package/CHANGELOG.md +29 -8
  2. package/package.json +1 -1
  3. package/src/lib/accordion/atl-accordion.css +2 -8
  4. package/src/lib/accordion/atl-accordion.d.ts.map +1 -1
  5. package/src/lib/accordion/atl-accordion.js +30 -8
  6. package/src/lib/accordion/atl-accordion.js.map +1 -1
  7. package/src/lib/alert/atl-alert.css +18 -4
  8. package/src/lib/alert/atl-alert.d.ts.map +1 -1
  9. package/src/lib/alert/atl-alert.js +3 -1
  10. package/src/lib/alert/atl-alert.js.map +1 -1
  11. package/src/lib/avatar/atl-avatar.css +75 -25
  12. package/src/lib/avatar/atl-avatar.d.ts.map +1 -1
  13. package/src/lib/avatar/atl-avatar.js +6 -3
  14. package/src/lib/avatar/atl-avatar.js.map +1 -1
  15. package/src/lib/badge/atl-badge.css +8 -4
  16. package/src/lib/badge/atl-badge.d.ts.map +1 -1
  17. package/src/lib/badge/atl-badge.js +3 -2
  18. package/src/lib/badge/atl-badge.js.map +1 -1
  19. package/src/lib/breadcrumbs/atl-breadcrumbs.css +5 -9
  20. package/src/lib/breadcrumbs/atl-breadcrumbs.d.ts.map +1 -1
  21. package/src/lib/breadcrumbs/atl-breadcrumbs.js +1 -1
  22. package/src/lib/breadcrumbs/atl-breadcrumbs.js.map +1 -1
  23. package/src/lib/button/atl-button.css +20 -8
  24. package/src/lib/button/atl-button.d.ts.map +1 -1
  25. package/src/lib/button/atl-button.js.map +1 -1
  26. package/src/lib/card/atl-card.css +2 -12
  27. package/src/lib/card/atl-card.d.ts.map +1 -1
  28. package/src/lib/card/atl-card.js +6 -1
  29. package/src/lib/card/atl-card.js.map +1 -1
  30. package/src/lib/chat/atl-chat.css +28 -13
  31. package/src/lib/chat/atl-chat.d.ts.map +1 -1
  32. package/src/lib/chat/atl-chat.js +11 -7
  33. package/src/lib/chat/atl-chat.js.map +1 -1
  34. package/src/lib/checkbox/atl-checkbox.css +13 -6
  35. package/src/lib/checkbox/atl-checkbox.d.ts.map +1 -1
  36. package/src/lib/checkbox/atl-checkbox.js +1 -1
  37. package/src/lib/checkbox/atl-checkbox.js.map +1 -1
  38. package/src/lib/code-block/atl-code-block.css +4 -1
  39. package/src/lib/combobox/atl-combobox.css +27 -17
  40. package/src/lib/combobox/atl-combobox.d.ts.map +1 -1
  41. package/src/lib/combobox/atl-combobox.js +4 -2
  42. package/src/lib/combobox/atl-combobox.js.map +1 -1
  43. package/src/lib/dialog/atl-dialog.css +3 -12
  44. package/src/lib/dialog/atl-dialog.d.ts.map +1 -1
  45. package/src/lib/dialog/atl-dialog.js +3 -1
  46. package/src/lib/dialog/atl-dialog.js.map +1 -1
  47. package/src/lib/drawer/atl-drawer.css +6 -5
  48. package/src/lib/drawer/atl-drawer.d.ts.map +1 -1
  49. package/src/lib/drawer/atl-drawer.js.map +1 -1
  50. package/src/lib/icon/atl-icon.d.ts.map +1 -1
  51. package/src/lib/icon/atl-icon.js +4 -2
  52. package/src/lib/icon/atl-icon.js.map +1 -1
  53. package/src/lib/icons.d.ts.map +1 -1
  54. package/src/lib/icons.js +48 -10
  55. package/src/lib/icons.js.map +1 -1
  56. package/src/lib/input/atl-input.css +9 -5
  57. package/src/lib/input/atl-input.d.ts.map +1 -1
  58. package/src/lib/input/atl-input.js +1 -1
  59. package/src/lib/input/atl-input.js.map +1 -1
  60. package/src/lib/menu/atl-menu.css +11 -14
  61. package/src/lib/menu/atl-menu.d.ts.map +1 -1
  62. package/src/lib/menu/atl-menu.js +3 -1
  63. package/src/lib/menu/atl-menu.js.map +1 -1
  64. package/src/lib/pagination/atl-pagination.d.ts.map +1 -1
  65. package/src/lib/pagination/atl-pagination.js +7 -9
  66. package/src/lib/pagination/atl-pagination.js.map +1 -1
  67. package/src/lib/progress/atl-progress.d.ts.map +1 -1
  68. package/src/lib/progress/atl-progress.js +3 -1
  69. package/src/lib/progress/atl-progress.js.map +1 -1
  70. package/src/lib/radio/atl-radio.css +5 -4
  71. package/src/lib/radio/atl-radio.d.ts +1 -1
  72. package/src/lib/radio/atl-radio.d.ts.map +1 -1
  73. package/src/lib/radio/atl-radio.js +1 -1
  74. package/src/lib/radio/atl-radio.js.map +1 -1
  75. package/src/lib/radio-group/atl-radio-group.d.ts.map +1 -1
  76. package/src/lib/radio-group/atl-radio-group.js.map +1 -1
  77. package/src/lib/select/atl-select.css +7 -3
  78. package/src/lib/select/atl-select.d.ts.map +1 -1
  79. package/src/lib/select/atl-select.js +2 -2
  80. package/src/lib/select/atl-select.js.map +1 -1
  81. package/src/lib/skeleton/atl-skeleton.d.ts.map +1 -1
  82. package/src/lib/skeleton/atl-skeleton.js +14 -4
  83. package/src/lib/skeleton/atl-skeleton.js.map +1 -1
  84. package/src/lib/spec.d.ts.map +1 -1
  85. package/src/lib/spec.js.map +1 -1
  86. package/src/lib/stepper/atl-stepper.d.ts.map +1 -1
  87. package/src/lib/stepper/atl-stepper.js +14 -7
  88. package/src/lib/stepper/atl-stepper.js.map +1 -1
  89. package/src/lib/table/atl-table.css +10 -9
  90. package/src/lib/table/atl-table.d.ts +1 -1
  91. package/src/lib/table/atl-table.d.ts.map +1 -1
  92. package/src/lib/table/atl-table.js +1 -1
  93. package/src/lib/table/atl-table.js.map +1 -1
  94. package/src/lib/tabs/atl-tabs.css +19 -5
  95. package/src/lib/tabs/atl-tabs.d.ts.map +1 -1
  96. package/src/lib/tabs/atl-tabs.js.map +1 -1
  97. package/src/lib/textarea/atl-textarea.css +4 -4
  98. package/src/lib/textarea/atl-textarea.d.ts.map +1 -1
  99. package/src/lib/textarea/atl-textarea.js +1 -1
  100. package/src/lib/textarea/atl-textarea.js.map +1 -1
  101. package/src/lib/toast/atl-toast.css +25 -13
  102. package/src/lib/toast/atl-toast.d.ts +1 -1
  103. package/src/lib/toast/atl-toast.d.ts.map +1 -1
  104. package/src/lib/toast/atl-toast.js +1 -1
  105. package/src/lib/toast/atl-toast.js.map +1 -1
  106. package/src/lib/toggle/atl-toggle.css +7 -5
  107. package/src/lib/toggle/atl-toggle.d.ts.map +1 -1
  108. package/src/lib/toggle/atl-toggle.js.map +1 -1
  109. package/src/lib/tooltip/atl-tooltip.css +6 -10
  110. package/styles/tokens.css +59 -43
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## 0.2.43 (2026-09-12)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **lint:** check:css-tokens becomes two stylelint rules ([50fea90b](https://github.com/DominikPieper/atelier-ui/commit/50fea90b))
6
+ - **stories:** a play earns its place only where jsdom cannot reach ([fc54417a](https://github.com/DominikPieper/atelier-ui/commit/fc54417a))
7
+ - **lint:** the linter is a gate, where the invariant fits in one file ([e4e6a02f](https://github.com/DominikPieper/atelier-ui/commit/e4e6a02f))
8
+ - **spec:** the contract on every Docs tab, imported by every story meta — ADR-0121 S5b ([30dd54c0](https://github.com/DominikPieper/atelier-ui/commit/30dd54c0))
9
+ - **gates:** check:contracts — the stories are the spec, stage 1 ([527a9571](https://github.com/DominikPieper/atelier-ui/commit/527a9571))
10
+ - **gates:** every story is a test — ADR-0122, S0 of ADR-0121 ([f272e1ff](https://github.com/DominikPieper/atelier-ui/commit/f272e1ff))
11
+
12
+ ### 🩹 Fixes
13
+
14
+ - **storybook:** the base path was keyed on CI, and the test server is CI too ([34863859](https://github.com/DominikPieper/atelier-ui/commit/34863859))
15
+
16
+ ### ❤️ Thank You
17
+
18
+ - Claude Fable 5.1
19
+ - Claude Opus 5 (1M context)
20
+ - Dominik Pieper @DominikPieper
21
+
1
22
  ## 0.2.42 (2026-09-10)
2
23
 
3
24
  This was a version bump only for react to align it with other projects, there were no code changes.
@@ -396,20 +417,20 @@ This was a version bump only for react to align it with other projects, there we
396
417
 
397
418
  ### 🚀 Features
398
419
 
399
- - ⚠️ **docs:** rename Llm prefix to Atl across docs, generated artifacts, and tooling docs ([965787d](https://github.com/DominikPieper/atelier-ui/commit/965787d))
400
- - ⚠️ **react:** rename Llm prefix to Atl across the React library ([ae4ea31](https://github.com/DominikPieper/atelier-ui/commit/ae4ea31))
401
- - ⚠️ **spec:** rename Llm prefix to Atl in spec contract ([6860cc4](https://github.com/DominikPieper/atelier-ui/commit/6860cc4))
420
+ - ⚠️ **docs:** rename Llm prefix to Atl across docs, generated artifacts, and tooling docs ([965787d](https://github.com/DominikPieper/atelier-ui/commit/965787d))
421
+ - ⚠️ **react:** rename Llm prefix to Atl across the React library ([ae4ea31](https://github.com/DominikPieper/atelier-ui/commit/ae4ea31))
422
+ - ⚠️ **spec:** rename Llm prefix to Atl in spec contract ([6860cc4](https://github.com/DominikPieper/atelier-ui/commit/6860cc4))
402
423
 
403
- ### ⚠️ Breaking Changes
424
+ ### ⚠️ Breaking Changes
404
425
 
405
- - **docs:** rename Llm prefix to Atl across docs, generated artifacts, and tooling docs ([965787d](https://github.com/DominikPieper/atelier-ui/commit/965787d))
406
- - **react:** rename Llm prefix to Atl across the React library ([ae4ea31](https://github.com/DominikPieper/atelier-ui/commit/ae4ea31))
426
+ - **docs:** rename Llm prefix to Atl across docs, generated artifacts, and tooling docs ([965787d](https://github.com/DominikPieper/atelier-ui/commit/965787d))
427
+ - **react:** rename Llm prefix to Atl across the React library ([ae4ea31](https://github.com/DominikPieper/atelier-ui/commit/ae4ea31))
407
428
  every React component, prop type, and CSS class
408
429
  renamed Llm/llm- -> Atl/atl- (ADR-0029), including the mid-word
409
430
  Toast case (useLlmToast -> useAtlToast, LlmToastProvider ->
410
431
  AtlToastProvider, LlmToastContainer -> AtlToastContainer).
411
432
  nx lint/test/build react all green (392/392 tests).
412
- - **spec:** rename Llm prefix to Atl in spec contract ([6860cc4](https://github.com/DominikPieper/atelier-ui/commit/6860cc4))
433
+ - **spec:** rename Llm prefix to Atl in spec contract ([6860cc4](https://github.com/DominikPieper/atelier-ui/commit/6860cc4))
413
434
  every exported spec type/interface renamed
414
435
  Llm* -> Atl* (ADR-0029). Framework libs will fail to typecheck
415
436
  until each is renamed in turn (next commits) — expected mid-migration.
@@ -793,4 +814,4 @@ This was a version bump only for react to align it with other projects, there we
793
814
 
794
815
  ## 0.0.12 (2026-04-22)
795
816
 
796
- This was a version bump only for react to align it with other projects, there were no code changes.
817
+ This was a version bump only for react to align it with other projects, there were no code changes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atelier-ui/react",
3
- "version": "0.2.42",
3
+ "version": "0.2.43",
4
4
  "description": "Atelier component library for React — LLM-optimised, accessible, design-token-driven",
5
5
  "keywords": [
6
6
  "react",
@@ -3,14 +3,8 @@
3
3
  * same file as the sizes it governs and no consuming app has to supply one.
4
4
  * Gated by check:box-sizing; the resulting boxes are measured by check:geometry.
5
5
  * See ADR-0043. */
6
- :is(
7
- .atl-accordion-group,
8
- .atl-accordion-item
9
- ),
10
- :is(
11
- .atl-accordion-group,
12
- .atl-accordion-item
13
- ) * {
6
+ :is(.atl-accordion-group, .atl-accordion-item),
7
+ :is(.atl-accordion-group, .atl-accordion-item) * {
14
8
  box-sizing: border-box;
15
9
  }
16
10
 
@@ -1 +1 @@
1
- {"version":3,"file":"atl-accordion.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/accordion/atl-accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,SAAS,EACT,cAAc,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AACjB,OAAO,qBAAqB,CAAC;AAqB7B;;GAEG;AACH,MAAM,WAAW,sBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,qBAAqB;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAa,EACb,OAAmB,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,sBAAsB,+BA+DxB;AAED;;GAEG;AACH,MAAM,WAAW,qBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,oBAAoB;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,gBAAgB,EAC1B,gBAAgB,EAChB,QAAgB,EAChB,YAAgB,EAChB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,qBAAqB,+BAsFvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BASA"}
1
+ {"version":3,"file":"atl-accordion.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/accordion/atl-accordion.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,SAAS,EACT,cAAc,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,qBAAqB,CAAC;AAiC7B;;GAEG;AACH,MAAM,WAAW,sBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,qBAAqB;IAC7D;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAa,EACb,OAAmB,EACnB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,sBAAsB,+BAyFxB;AAED;;GAEG;AACH,MAAM,WAAW,qBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,oBAAoB;IAC5D;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,gBAAgB,EAC1B,gBAAgB,EAChB,QAAgB,EAChB,YAAgB,EAChB,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,qBAAqB,+BA4FvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,eAAe,CAAC,GAAG;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAWA"}
@@ -5,10 +5,18 @@ import { AtlIcon } from '../icon/atl-icon';
5
5
  const AccordionGroupContext = createContext({
6
6
  multi: false,
7
7
  openItems: new Set(),
8
- toggleItem: () => { },
9
- registerItem: () => { },
10
- unregisterItem: () => { },
11
- handleKeydown: () => { },
8
+ toggleItem: () => {
9
+ /* noop */
10
+ },
11
+ registerItem: () => {
12
+ /* noop */
13
+ },
14
+ unregisterItem: () => {
15
+ /* noop */
16
+ },
17
+ handleKeydown: () => {
18
+ /* noop */
19
+ },
12
20
  });
13
21
  /**
14
22
  * A container component that manages a group of accordion items.
@@ -34,7 +42,10 @@ export function AtlAccordionGroup({ multi = false, variant = 'default', children
34
42
  });
35
43
  }, [multi]);
36
44
  const registerItem = useCallback((id, ref, disabled) => {
37
- itemsRef.current = [...itemsRef.current.filter((i) => i.id !== id), { id, triggerRef: ref, disabled }];
45
+ itemsRef.current = [
46
+ ...itemsRef.current.filter((i) => i.id !== id),
47
+ { id, triggerRef: ref, disabled },
48
+ ];
38
49
  }, []);
39
50
  const unregisterItem = useCallback((id) => {
40
51
  itemsRef.current = itemsRef.current.filter((i) => i.id !== id);
@@ -64,7 +75,14 @@ export function AtlAccordionGroup({ multi = false, variant = 'default', children
64
75
  }
65
76
  target?.triggerRef.current?.focus();
66
77
  }, []);
67
- return (_jsx(AccordionGroupContext.Provider, { value: { multi, openItems, toggleItem, registerItem, unregisterItem, handleKeydown }, children: _jsx("div", { className: classes, role: "presentation", ...rest, children: children }) }));
78
+ return (_jsx(AccordionGroupContext.Provider, { value: {
79
+ multi,
80
+ openItems,
81
+ toggleItem,
82
+ registerItem,
83
+ unregisterItem,
84
+ handleKeydown,
85
+ }, children: _jsx("div", { className: classes, role: "presentation", ...rest, children: children }) }));
68
86
  }
69
87
  /**
70
88
  * An individual item within an accordion group.
@@ -112,7 +130,9 @@ export function AtlAccordionItem({ expanded: externalExpanded, onExpandedChange,
112
130
  const Heading = `h${headingLevel}`;
113
131
  return (_jsxs("div", { className: classes, ...rest, children: [_jsx(Heading, { className: "accordion-heading", children: _jsxs("button", { ref: triggerRef, type: "button", id: triggerId, className: ['accordion-trigger', disabled && 'is-disabled']
114
132
  .filter(Boolean)
115
- .join(' '), "aria-expanded": isExpanded, "aria-controls": panelId, "aria-disabled": disabled || undefined, disabled: disabled, onClick: toggle, onKeyDown: (e) => ctx.handleKeydown(e, id), children: [headerNode, _jsx(AtlIcon, { name: "chevron-down", size: "sm", className: ['chevron', isExpanded && 'is-expanded'].filter(Boolean).join(' ') })] }) }), _jsx("div", { className: ['accordion-panel-wrapper', isExpanded && 'is-expanded']
133
+ .join(' '), "aria-expanded": isExpanded, "aria-controls": panelId, "aria-disabled": disabled || undefined, disabled: disabled, onClick: toggle, onKeyDown: (e) => ctx.handleKeydown(e, id), children: [headerNode, _jsx(AtlIcon, { name: "chevron-down", size: "sm", className: ['chevron', isExpanded && 'is-expanded']
134
+ .filter(Boolean)
135
+ .join(' ') })] }) }), _jsx("div", { className: ['accordion-panel-wrapper', isExpanded && 'is-expanded']
116
136
  .filter(Boolean)
117
137
  .join(' '), children: _jsx("div", { id: panelId, role: "region", "aria-labelledby": triggerId, className: "accordion-panel", children: bodyNodes }) })] }));
118
138
  }
@@ -120,6 +140,8 @@ export function AtlAccordionItem({ expanded: externalExpanded, onExpandedChange,
120
140
  * The header component for an AtlAccordionItem.
121
141
  */
122
142
  export function AtlAccordionHeader({ children, className, ...rest }) {
123
- return (_jsx("span", { className: ['accordion-header-content', className].filter(Boolean).join(' '), ...rest, children: children }));
143
+ return (_jsx("span", { className: ['accordion-header-content', className]
144
+ .filter(Boolean)
145
+ .join(' '), ...rest, children: children }));
124
146
  }
125
147
  //# sourceMappingURL=atl-accordion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"atl-accordion.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/accordion/atl-accordion.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useRef,\n useId,\n useLayoutEffect,\n useCallback,\n ReactNode,\n HTMLAttributes,\n KeyboardEvent,\n} from 'react';\nimport type {\n AtlAccordionGroupSpec,\n AtlAccordionItemSpec,\n} from '../spec';\nimport './atl-accordion.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\ninterface AccordionGroupContextValue {\n multi: boolean;\n openItems: Set<string>;\n toggleItem: (id: string) => void;\n registerItem: (id: string, ref: React.RefObject<HTMLButtonElement | null>, disabled: boolean) => void;\n unregisterItem: (id: string) => void;\n handleKeydown: (e: KeyboardEvent, id: string) => void;\n}\n\nconst AccordionGroupContext = createContext<AccordionGroupContextValue>({\n multi: false,\n openItems: new Set(),\n toggleItem: () => { /* noop */ },\n registerItem: () => { /* noop */ },\n unregisterItem: () => { /* noop */ },\n handleKeydown: () => { /* noop */ },\n});\n\n/**\n * Properties for the AtlAccordionGroup component.\n */\nexport interface AtlAccordionGroupProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlAccordionGroupSpec {\n /**\n * Whether multiple items can be expanded simultaneously.\n */\n multi?: boolean;\n /**\n * The visual style variant of the accordion.\n */\n variant?: 'default' | 'bordered' | 'separated';\n /**\n * The accordion items to be rendered.\n */\n children?: ReactNode;\n}\n\n/**\n * A container component that manages a group of accordion items.\n */\nexport function AtlAccordionGroup({\n multi = false,\n variant = 'default',\n children,\n className,\n ...rest\n}: AtlAccordionGroupProps) {\n const [openItems, setOpenItems] = useState<Set<string>>(new Set());\n const itemsRef = useRef<{ id: string; triggerRef: React.RefObject<HTMLButtonElement | null>; disabled: boolean }[]>([]);\n\n const classes = ['atl-accordion-group', `variant-${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n const toggleItem = useCallback((id: string) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n if (!multi) next.clear();\n next.add(id);\n }\n return next;\n });\n }, [multi]);\n\n const registerItem = useCallback((id: string, ref: React.RefObject<HTMLButtonElement | null>, disabled: boolean) => {\n itemsRef.current = [...itemsRef.current.filter((i) => i.id !== id), { id, triggerRef: ref, disabled }];\n }, []);\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n }, []);\n\n const handleKeydown = useCallback((e: KeyboardEvent, currentId: string) => {\n const enabled = itemsRef.current.filter((i) => !i.disabled);\n if (enabled.length === 0) return;\n\n const pos = enabled.findIndex((i) => i.id === currentId);\n const n = enabled.length;\n let target: (typeof enabled)[0] | null = null;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n target = enabled[(pos + 1) % n];\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n target = enabled[(pos - 1 + n) % n];\n } else if (e.key === 'Home') {\n e.preventDefault();\n target = enabled[0];\n } else if (e.key === 'End') {\n e.preventDefault();\n target = enabled[n - 1];\n }\n\n target?.triggerRef.current?.focus();\n }, []);\n\n return (\n <AccordionGroupContext.Provider\n value={{ multi, openItems, toggleItem, registerItem, unregisterItem, handleKeydown }}\n >\n <div className={classes} role=\"presentation\" {...rest}>\n {children}\n </div>\n </AccordionGroupContext.Provider>\n );\n}\n\n/**\n * Properties for the AtlAccordionItem component.\n */\nexport interface AtlAccordionItemProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlAccordionItemSpec {\n /**\n * Whether the item is currently expanded.\n */\n expanded?: boolean;\n /**\n * Callback triggered when the expanded state changes.\n */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Whether the accordion item is disabled.\n */\n disabled?: boolean;\n /**\n * HTML heading level wrapping the trigger button. Default `3`.\n * Match your page's heading outline so heading order stays valid.\n */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * The content of the accordion item, typically including an AtlAccordionHeader.\n */\n children?: ReactNode;\n}\n\n/**\n * An individual item within an accordion group.\n */\nexport function AtlAccordionItem({\n expanded: externalExpanded,\n onExpandedChange,\n disabled = false,\n headingLevel = 3,\n children,\n className,\n ...rest\n}: AtlAccordionItemProps) {\n const ctx = useContext(AccordionGroupContext);\n const id = useId();\n const triggerId = `${id}-trigger`;\n const panelId = `${id}-panel`;\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const { registerItem, unregisterItem } = ctx;\n\n // Register/unregister with parent\n useLayoutEffect(() => {\n registerItem(id, triggerRef, disabled);\n return () => unregisterItem(id);\n }, [id, triggerRef, disabled, registerItem, unregisterItem]);\n\n const isControlled = externalExpanded !== undefined;\n const isExpanded = isControlled ? externalExpanded : ctx.openItems.has(id);\n\n const toggle = () => {\n if (disabled) return;\n const next = !isExpanded;\n if (!isControlled) ctx.toggleItem(id);\n onExpandedChange?.(next);\n };\n\n const classes = [\n 'atl-accordion-item',\n isExpanded && 'is-expanded',\n disabled && 'is-disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Separate header child from body children\n const childArray = Array.isArray(children) ? children : [children];\n const headerNode = childArray.find(\n (c): c is React.ReactElement =>\n typeof c === 'object' &&\n c !== null &&\n 'type' in (c as object) &&\n (c as React.ReactElement).type === AtlAccordionHeader\n );\n const bodyNodes = childArray.filter((c) => c !== headerNode);\n\n // Render the heading wrapper at the level the consumer asked for.\n // We can't use a JSX expression as a tag, so React.createElement is\n // the cleanest path here.\n const Heading = `h${headingLevel}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n return (\n <div className={classes} {...rest}>\n <Heading className=\"accordion-heading\">\n <button\n ref={triggerRef}\n type=\"button\"\n id={triggerId}\n className={['accordion-trigger', disabled && 'is-disabled']\n .filter(Boolean)\n .join(' ')}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onClick={toggle}\n onKeyDown={(e) => ctx.handleKeydown(e, id)}\n >\n {headerNode}\n <AtlIcon name=\"chevron-down\" size=\"sm\" className={['chevron', isExpanded && 'is-expanded'].filter(Boolean).join(' ')} />\n </button>\n </Heading>\n <div\n className={['accordion-panel-wrapper', isExpanded && 'is-expanded']\n .filter(Boolean)\n .join(' ')}\n >\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"accordion-panel\"\n >\n {bodyNodes}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * The header component for an AtlAccordionItem.\n */\nexport function AtlAccordionHeader({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLSpanElement> & {\n /**\n * The content to be rendered in the header.\n */\n children?: ReactNode;\n}) {\n return (\n <span\n className={['accordion-header-content', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </span>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-accordion.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/accordion/atl-accordion.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n createContext,\n useContext,\n useState,\n useRef,\n useId,\n useLayoutEffect,\n useCallback,\n ReactNode,\n HTMLAttributes,\n KeyboardEvent,\n} from 'react';\nimport type { AtlAccordionGroupSpec, AtlAccordionItemSpec } from '../spec';\nimport './atl-accordion.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\ninterface AccordionGroupContextValue {\n multi: boolean;\n openItems: Set<string>;\n toggleItem: (id: string) => void;\n registerItem: (\n id: string,\n ref: React.RefObject<HTMLButtonElement | null>,\n disabled: boolean,\n ) => void;\n unregisterItem: (id: string) => void;\n handleKeydown: (e: KeyboardEvent, id: string) => void;\n}\n\nconst AccordionGroupContext = createContext<AccordionGroupContextValue>({\n multi: false,\n openItems: new Set(),\n toggleItem: () => {\n /* noop */\n },\n registerItem: () => {\n /* noop */\n },\n unregisterItem: () => {\n /* noop */\n },\n handleKeydown: () => {\n /* noop */\n },\n});\n\n/**\n * Properties for the AtlAccordionGroup component.\n */\nexport interface AtlAccordionGroupProps\n extends HTMLAttributes<HTMLDivElement>, AtlAccordionGroupSpec {\n /**\n * Whether multiple items can be expanded simultaneously.\n */\n multi?: boolean;\n /**\n * The visual style variant of the accordion.\n */\n variant?: 'default' | 'bordered' | 'separated';\n /**\n * The accordion items to be rendered.\n */\n children?: ReactNode;\n}\n\n/**\n * A container component that manages a group of accordion items.\n */\nexport function AtlAccordionGroup({\n multi = false,\n variant = 'default',\n children,\n className,\n ...rest\n}: AtlAccordionGroupProps) {\n const [openItems, setOpenItems] = useState<Set<string>>(new Set());\n const itemsRef = useRef<\n {\n id: string;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n disabled: boolean;\n }[]\n >([]);\n\n const classes = ['atl-accordion-group', `variant-${variant}`, className]\n .filter(Boolean)\n .join(' ');\n\n const toggleItem = useCallback(\n (id: string) => {\n setOpenItems((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n if (!multi) next.clear();\n next.add(id);\n }\n return next;\n });\n },\n [multi],\n );\n\n const registerItem = useCallback(\n (\n id: string,\n ref: React.RefObject<HTMLButtonElement | null>,\n disabled: boolean,\n ) => {\n itemsRef.current = [\n ...itemsRef.current.filter((i) => i.id !== id),\n { id, triggerRef: ref, disabled },\n ];\n },\n [],\n );\n\n const unregisterItem = useCallback((id: string) => {\n itemsRef.current = itemsRef.current.filter((i) => i.id !== id);\n }, []);\n\n const handleKeydown = useCallback((e: KeyboardEvent, currentId: string) => {\n const enabled = itemsRef.current.filter((i) => !i.disabled);\n if (enabled.length === 0) return;\n\n const pos = enabled.findIndex((i) => i.id === currentId);\n const n = enabled.length;\n let target: (typeof enabled)[0] | null = null;\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n target = enabled[(pos + 1) % n];\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n target = enabled[(pos - 1 + n) % n];\n } else if (e.key === 'Home') {\n e.preventDefault();\n target = enabled[0];\n } else if (e.key === 'End') {\n e.preventDefault();\n target = enabled[n - 1];\n }\n\n target?.triggerRef.current?.focus();\n }, []);\n\n return (\n <AccordionGroupContext.Provider\n value={{\n multi,\n openItems,\n toggleItem,\n registerItem,\n unregisterItem,\n handleKeydown,\n }}\n >\n <div className={classes} role=\"presentation\" {...rest}>\n {children}\n </div>\n </AccordionGroupContext.Provider>\n );\n}\n\n/**\n * Properties for the AtlAccordionItem component.\n */\nexport interface AtlAccordionItemProps\n extends HTMLAttributes<HTMLDivElement>, AtlAccordionItemSpec {\n /**\n * Whether the item is currently expanded.\n */\n expanded?: boolean;\n /**\n * Callback triggered when the expanded state changes.\n */\n onExpandedChange?: (expanded: boolean) => void;\n /**\n * Whether the accordion item is disabled.\n */\n disabled?: boolean;\n /**\n * HTML heading level wrapping the trigger button. Default `3`.\n * Match your page's heading outline so heading order stays valid.\n */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;\n /**\n * The content of the accordion item, typically including an AtlAccordionHeader.\n */\n children?: ReactNode;\n}\n\n/**\n * An individual item within an accordion group.\n */\nexport function AtlAccordionItem({\n expanded: externalExpanded,\n onExpandedChange,\n disabled = false,\n headingLevel = 3,\n children,\n className,\n ...rest\n}: AtlAccordionItemProps) {\n const ctx = useContext(AccordionGroupContext);\n const id = useId();\n const triggerId = `${id}-trigger`;\n const panelId = `${id}-panel`;\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const { registerItem, unregisterItem } = ctx;\n\n // Register/unregister with parent\n useLayoutEffect(() => {\n registerItem(id, triggerRef, disabled);\n return () => unregisterItem(id);\n }, [id, triggerRef, disabled, registerItem, unregisterItem]);\n\n const isControlled = externalExpanded !== undefined;\n const isExpanded = isControlled ? externalExpanded : ctx.openItems.has(id);\n\n const toggle = () => {\n if (disabled) return;\n const next = !isExpanded;\n if (!isControlled) ctx.toggleItem(id);\n onExpandedChange?.(next);\n };\n\n const classes = [\n 'atl-accordion-item',\n isExpanded && 'is-expanded',\n disabled && 'is-disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Separate header child from body children\n const childArray = Array.isArray(children) ? children : [children];\n const headerNode = childArray.find(\n (c): c is React.ReactElement =>\n typeof c === 'object' &&\n c !== null &&\n 'type' in (c as object) &&\n (c as React.ReactElement).type === AtlAccordionHeader,\n );\n const bodyNodes = childArray.filter((c) => c !== headerNode);\n\n // Render the heading wrapper at the level the consumer asked for.\n // We can't use a JSX expression as a tag, so React.createElement is\n // the cleanest path here.\n const Heading = `h${headingLevel}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n return (\n <div className={classes} {...rest}>\n <Heading className=\"accordion-heading\">\n <button\n ref={triggerRef}\n type=\"button\"\n id={triggerId}\n className={['accordion-trigger', disabled && 'is-disabled']\n .filter(Boolean)\n .join(' ')}\n aria-expanded={isExpanded}\n aria-controls={panelId}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onClick={toggle}\n onKeyDown={(e) => ctx.handleKeydown(e, id)}\n >\n {headerNode}\n <AtlIcon\n name=\"chevron-down\"\n size=\"sm\"\n className={['chevron', isExpanded && 'is-expanded']\n .filter(Boolean)\n .join(' ')}\n />\n </button>\n </Heading>\n <div\n className={['accordion-panel-wrapper', isExpanded && 'is-expanded']\n .filter(Boolean)\n .join(' ')}\n >\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n className=\"accordion-panel\"\n >\n {bodyNodes}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * The header component for an AtlAccordionItem.\n */\nexport function AtlAccordionHeader({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLSpanElement> & {\n /**\n * The content to be rendered in the header.\n */\n children?: ReactNode;\n}) {\n return (\n <span\n className={['accordion-header-content', className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {children}\n </span>\n );\n}\n"]}
@@ -34,19 +34,31 @@
34
34
  .atl-alert.variant-success {
35
35
  background-color: var(--ui-color-success-bg);
36
36
  color: var(--ui-color-success-text);
37
- border-color: color-mix(in srgb, var(--ui-color-success-text) 20%, transparent);
37
+ border-color: color-mix(
38
+ in srgb,
39
+ var(--ui-color-success-text) 20%,
40
+ transparent
41
+ );
38
42
  }
39
43
 
40
44
  .atl-alert.variant-warning {
41
45
  background-color: var(--ui-color-warning-bg);
42
46
  color: var(--ui-color-warning-text);
43
- border-color: color-mix(in srgb, var(--ui-color-warning-text) 20%, transparent);
47
+ border-color: color-mix(
48
+ in srgb,
49
+ var(--ui-color-warning-text) 20%,
50
+ transparent
51
+ );
44
52
  }
45
53
 
46
54
  .atl-alert.variant-danger {
47
55
  background-color: var(--ui-color-danger-bg);
48
56
  color: var(--ui-color-danger-text);
49
- border-color: color-mix(in srgb, var(--ui-color-danger-text) 20%, transparent);
57
+ border-color: color-mix(
58
+ in srgb,
59
+ var(--ui-color-danger-text) 20%,
60
+ transparent
61
+ );
50
62
  }
51
63
 
52
64
  /* Dismiss button */
@@ -64,7 +76,9 @@
64
76
  cursor: pointer;
65
77
  color: inherit;
66
78
  opacity: 0.7;
67
- transition: opacity var(--ui-transition-fast), background-color var(--ui-transition-fast);
79
+ transition:
80
+ opacity var(--ui-transition-fast),
81
+ background-color var(--ui-transition-fast);
68
82
  line-height: 1;
69
83
  }
70
84
 
@@ -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;AACzD,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,+BAwBf"}
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;AACzD,OAAO,iBAAiB,CAAC;AAazB,KAAK,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,YAAY;IACpD;;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,+BA+Bf"}
@@ -14,7 +14,9 @@ const VARIANT_ICON_NAMES = {
14
14
  * An alert component for displaying important messages.
15
15
  */
16
16
  export function AtlAlert({ variant = 'info', dismissible = false, onDismissed, children, className, ...rest }) {
17
- const classes = ['atl-alert', `variant-${variant}`, className].filter(Boolean).join(' ');
17
+ const classes = ['atl-alert', `variant-${variant}`, className]
18
+ .filter(Boolean)
19
+ .join(' ');
18
20
  const ariaLive = variant === 'danger' || variant === 'warning' ? 'assertive' : 'polite';
19
21
  return (_jsxs("div", { className: classes, role: "alert", "aria-live": ariaLive, ...rest, children: [_jsxs("span", { className: "content", children: [VARIANT_ICON_NAMES[variant] && (_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" }) }))] }));
20
22
  }
@@ -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;AAE3C;;wBAEwB;AACxB,MAAM,kBAAkB,GAAkD;IACxE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AA6BF;;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,aACtB,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAC9B,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,EAAC,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,IAAI,EAAC,IAAI,GAAG,CAClF,EACA,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, AtlIconName } 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:icon-duplication\n * missed (ADR-0050). */\nconst VARIANT_ICON_NAMES: Partial<Record<AtlAlertVariant, AtlIconName>> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n};\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 {VARIANT_ICON_NAMES[variant] && (\n <AtlIcon className=\"variant-icon\" name={VARIANT_ICON_NAMES[variant]} size=\"sm\" />\n )}\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,GAAkD;IACxE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AA2BF;;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;SAC3D,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,QAAQ,GACZ,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEzE,OAAO,CACL,eAAK,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,eAAY,QAAQ,KAAM,IAAI,aACjE,gBAAM,SAAS,EAAC,SAAS,aACtB,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAC9B,KAAC,OAAO,IACN,SAAS,EAAC,cAAc,EACxB,IAAI,EAAE,kBAAkB,CAAC,OAAO,CAAC,EACjC,IAAI,EAAC,IAAI,GACT,CACH,EACA,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, AtlIconName } 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:icon-duplication\n * missed (ADR-0050). */\nconst VARIANT_ICON_NAMES: Partial<Record<AtlAlertVariant, AtlIconName>> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n};\n\ntype AtlAlertVariant = 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * Properties for the AtlAlert component.\n */\nexport interface AtlAlertProps\n extends HTMLAttributes<HTMLDivElement>, 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]\n .filter(Boolean)\n .join(' ');\n const ariaLive =\n variant === 'danger' || variant === 'warning' ? 'assertive' : 'polite';\n\n return (\n <div className={classes} role=\"alert\" aria-live={ariaLive} {...rest}>\n <span className=\"content\">\n {VARIANT_ICON_NAMES[variant] && (\n <AtlIcon\n className=\"variant-icon\"\n name={VARIANT_ICON_NAMES[variant]}\n size=\"sm\"\n />\n )}\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"]}
@@ -3,14 +3,8 @@
3
3
  * same file as the sizes it governs and no consuming app has to supply one.
4
4
  * Gated by check:box-sizing; the resulting boxes are measured by check:geometry.
5
5
  * See ADR-0043. */
6
- :is(
7
- .atl-avatar,
8
- .atl-avatar-group
9
- ),
10
- :is(
11
- .atl-avatar,
12
- .atl-avatar-group
13
- ) * {
6
+ :is(.atl-avatar, .atl-avatar-group),
7
+ :is(.atl-avatar, .atl-avatar-group) * {
14
8
  box-sizing: border-box;
15
9
  }
16
10
 
@@ -30,21 +24,49 @@
30
24
  Storybook page and in a docs page (ADR-0052). Single-line chrome, so tight. */
31
25
  line-height: var(--ui-line-height-tight);
32
26
  font-weight: var(--ui-font-weight-semibold);
33
- background-color: color-mix(in srgb, var(--ui-color-primary) 12%, var(--ui-color-surface-sunken));
27
+ background-color: color-mix(
28
+ in srgb,
29
+ var(--ui-color-primary) 12%,
30
+ var(--ui-color-surface-sunken)
31
+ );
34
32
  color: var(--ui-color-primary);
35
33
  user-select: none;
36
34
  }
37
35
 
38
36
  /* Sizes */
39
- .atl-avatar.size-xs { width: 24px; height: 24px; font-size: var(--ui-font-size-2xs); }
40
- .atl-avatar.size-sm { width: 32px; height: 32px; font-size: var(--ui-font-size-xs); }
41
- .atl-avatar.size-md { width: 40px; height: 40px; font-size: var(--ui-font-size-sm); }
42
- .atl-avatar.size-lg { width: 48px; height: 48px; font-size: var(--ui-font-size-md); }
43
- .atl-avatar.size-xl { width: 64px; height: 64px; font-size: var(--ui-font-size-lg); }
37
+ .atl-avatar.size-xs {
38
+ width: 24px;
39
+ height: 24px;
40
+ font-size: var(--ui-font-size-2xs);
41
+ }
42
+ .atl-avatar.size-sm {
43
+ width: 32px;
44
+ height: 32px;
45
+ font-size: var(--ui-font-size-xs);
46
+ }
47
+ .atl-avatar.size-md {
48
+ width: 40px;
49
+ height: 40px;
50
+ font-size: var(--ui-font-size-sm);
51
+ }
52
+ .atl-avatar.size-lg {
53
+ width: 48px;
54
+ height: 48px;
55
+ font-size: var(--ui-font-size-md);
56
+ }
57
+ .atl-avatar.size-xl {
58
+ width: 64px;
59
+ height: 64px;
60
+ font-size: var(--ui-font-size-lg);
61
+ }
44
62
 
45
63
  /* Shapes */
46
- .atl-avatar.shape-circle { border-radius: var(--ui-radius-full); }
47
- .atl-avatar.shape-square { border-radius: var(--ui-radius-md); }
64
+ .atl-avatar.shape-circle {
65
+ border-radius: var(--ui-radius-full);
66
+ }
67
+ .atl-avatar.shape-square {
68
+ border-radius: var(--ui-radius-md);
69
+ }
48
70
 
49
71
  /* Image */
50
72
  .atl-avatar img {
@@ -83,10 +105,18 @@
83
105
  box-sizing: content-box;
84
106
  }
85
107
 
86
- .atl-avatar .status-dot.status-online { background-color: var(--ui-color-success); }
87
- .atl-avatar .status-dot.status-offline { background-color: var(--ui-color-text-muted); }
88
- .atl-avatar .status-dot.status-away { background-color: var(--ui-color-warning); }
89
- .atl-avatar .status-dot.status-busy { background-color: var(--ui-color-danger); }
108
+ .atl-avatar .status-dot.status-online {
109
+ background-color: var(--ui-color-success);
110
+ }
111
+ .atl-avatar .status-dot.status-offline {
112
+ background-color: var(--ui-color-text-muted);
113
+ }
114
+ .atl-avatar .status-dot.status-away {
115
+ background-color: var(--ui-color-warning);
116
+ }
117
+ .atl-avatar .status-dot.status-busy {
118
+ background-color: var(--ui-color-danger);
119
+ }
90
120
 
91
121
  /* === AtlAvatarGroup === */
92
122
 
@@ -124,8 +154,28 @@
124
154
  margin-inline-start: -8px;
125
155
  }
126
156
 
127
- .overflow-badge.size-xs { width: 24px; height: 24px; font-size: var(--ui-font-size-2xs); }
128
- .overflow-badge.size-sm { width: 32px; height: 32px; font-size: var(--ui-font-size-xs); }
129
- .overflow-badge.size-md { width: 40px; height: 40px; font-size: var(--ui-font-size-sm); }
130
- .overflow-badge.size-lg { width: 48px; height: 48px; font-size: var(--ui-font-size-sm); }
131
- .overflow-badge.size-xl { width: 64px; height: 64px; font-size: var(--ui-font-size-md); }
157
+ .overflow-badge.size-xs {
158
+ width: 24px;
159
+ height: 24px;
160
+ font-size: var(--ui-font-size-2xs);
161
+ }
162
+ .overflow-badge.size-sm {
163
+ width: 32px;
164
+ height: 32px;
165
+ font-size: var(--ui-font-size-xs);
166
+ }
167
+ .overflow-badge.size-md {
168
+ width: 40px;
169
+ height: 40px;
170
+ font-size: var(--ui-font-size-sm);
171
+ }
172
+ .overflow-badge.size-lg {
173
+ width: 48px;
174
+ height: 48px;
175
+ font-size: var(--ui-font-size-sm);
176
+ }
177
+ .overflow-badge.size-xl {
178
+ width: 64px;
179
+ height: 64px;
180
+ font-size: var(--ui-font-size-md);
181
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"atl-avatar.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/avatar/atl-avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAsB,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,cACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,aAAa;IACf;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;CACtD;AAWD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,GAAQ,EACR,GAAQ,EACR,IAAS,EACT,IAAW,EACX,KAAgB,EAChB,MAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,+BA4BhB;AAED;;GAEG;AACH,MAAM,WAAW,mBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EACpC,kBAAkB;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAO,EACP,IAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,mBAAmB,+BAoBrB"}
1
+ {"version":3,"file":"atl-avatar.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/avatar/atl-avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAsB,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,kBAAkB,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,cACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,aAAa;IACrD;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;CACtD;AAWD;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,GAAQ,EACR,GAAQ,EACR,IAAS,EACT,IAAW,EACX,KAAgB,EAChB,MAAW,EACX,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,+BAiChB;AAED;;GAEG;AACH,MAAM,WAAW,mBACf,SAAQ,cAAc,CAAC,cAAc,CAAC,EAAE,kBAAkB;IAC1D;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC9B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAO,EACP,IAAW,EACX,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,mBAAmB,+BAsBrB"}
@@ -22,10 +22,11 @@ export function AtlAvatar({ src = '', alt = '', name = '', size = 'md', shape =
22
22
  setImgError(false);
23
23
  }
24
24
  const classes = ['atl-avatar', `size-${size}`, `shape-${shape}`, className]
25
- .filter(Boolean).join(' ');
25
+ .filter(Boolean)
26
+ .join(' ');
26
27
  const initials = name ? getInitials(name) : '';
27
28
  const ariaLabel = alt || name || 'Avatar';
28
- return (_jsxs("div", { className: classes, "aria-label": ariaLabel, role: "img", ...rest, children: [src && !imgError ? (_jsx("img", { src: src, alt: alt || name, onError: () => setImgError(true) })) : initials ? (_jsx("span", { className: "initials", "aria-hidden": "true", children: initials })) : (_jsx(AtlIcon, { name: "person", size: "sm", className: "icon" })), status && _jsx("span", { className: `status-dot status-${status}`, "aria-hidden": "true" })] }));
29
+ return (_jsxs("div", { className: classes, "aria-label": ariaLabel, role: "img", ...rest, children: [src && !imgError ? (_jsx("img", { src: src, alt: alt || name, onError: () => setImgError(true) })) : initials ? (_jsx("span", { className: "initials", "aria-hidden": "true", children: initials })) : (_jsx(AtlIcon, { name: "person", size: "sm", className: "icon" })), status && (_jsx("span", { className: `status-dot status-${status}`, "aria-hidden": "true" }))] }));
29
30
  }
30
31
  /**
31
32
  * A container for grouping multiple avatars.
@@ -34,7 +35,9 @@ export function AtlAvatarGroup({ max = 5, size = 'md', children, className, ...r
34
35
  const childArray = Children.toArray(children);
35
36
  const visible = childArray.slice(0, max);
36
37
  const overflow = childArray.length - max;
37
- const classes = ['atl-avatar-group', `size-${size}`, className].filter(Boolean).join(' ');
38
+ const classes = ['atl-avatar-group', `size-${size}`, className]
39
+ .filter(Boolean)
40
+ .join(' ');
38
41
  return (_jsxs("div", { className: classes, ...rest, children: [visible, overflow > 0 && (_jsxs("div", { className: `overflow-badge size-${size}`, "aria-label": `+${overflow} more`, children: ["+", overflow] }))] }));
39
42
  }
40
43
  //# sourceMappingURL=atl-avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"atl-avatar.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/avatar/atl-avatar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HTMLAttributes, ReactNode, Children, useState } from 'react';\nimport type {\n AtlAvatarSpec,\n AtlAvatarGroupSpec,\n} from '../spec';\nimport './atl-avatar.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/**\n * Properties for the AtlAvatar component.\n */\nexport interface AtlAvatarProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlAvatarSpec {\n /**\n * The URL of the image to display.\n */\n src?: string;\n /**\n * Accessible text for the avatar image.\n */\n alt?: string;\n /**\n * The name of the person/entity, used for initials if no image is provided.\n */\n name?: string;\n /**\n * The size of the avatar.\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /**\n * The shape of the avatar.\n */\n shape?: 'circle' | 'square';\n /**\n * The status indicator to display on the avatar.\n */\n status?: 'online' | 'offline' | 'away' | 'busy' | '';\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .filter(Boolean)\n .slice(0, 2)\n .map((w) => w[0].toUpperCase())\n .join('');\n}\n\n/**\n * An avatar component for displaying user profile pictures or initials.\n */\nexport function AtlAvatar({\n src = '',\n alt = '',\n name = '',\n size = 'md',\n shape = 'circle',\n status = '',\n className,\n ...rest\n}: AtlAvatarProps) {\n const [imgError, setImgError] = useState(false);\n const [prevSrc, setPrevSrc] = useState(src);\n\n // Reset imgError when src changes\n if (src !== prevSrc) {\n setPrevSrc(src);\n setImgError(false);\n }\n\n const classes = ['atl-avatar', `size-${size}`, `shape-${shape}`, className]\n .filter(Boolean).join(' ');\n\n const initials = name ? getInitials(name) : '';\n const ariaLabel = alt || name || 'Avatar';\n\n return (\n <div className={classes} aria-label={ariaLabel} role=\"img\" {...rest}>\n {src && !imgError ? (\n <img src={src} alt={alt || name} onError={() => setImgError(true)} />\n ) : initials ? (\n <span className=\"initials\" aria-hidden=\"true\">{initials}</span>\n ) : (\n <AtlIcon name=\"person\" size=\"sm\" className=\"icon\" />\n )}\n {status && <span className={`status-dot status-${status}`} aria-hidden=\"true\" />}\n </div>\n );\n}\n\n/**\n * Properties for the AtlAvatarGroup component.\n */\nexport interface AtlAvatarGroupProps\n extends HTMLAttributes<HTMLDivElement>,\n AtlAvatarGroupSpec {\n /**\n * The maximum number of avatars to show before displaying an overflow badge.\n */\n max?: number;\n /**\n * The size of the avatars in the group.\n */\n size?: AtlAvatarProps['size'];\n /**\n * The avatars to be rendered in the group.\n */\n children?: ReactNode;\n}\n\n/**\n * A container for grouping multiple avatars.\n */\nexport function AtlAvatarGroup({\n max = 5,\n size = 'md',\n children,\n className,\n ...rest\n}: AtlAvatarGroupProps) {\n const childArray = Children.toArray(children);\n const visible = childArray.slice(0, max);\n const overflow = childArray.length - max;\n\n const classes = ['atl-avatar-group', `size-${size}`, className].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...rest}>\n {visible}\n {overflow > 0 && (\n <div\n className={`overflow-badge size-${size}`}\n aria-label={`+${overflow} more`}\n >\n +{overflow}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-avatar.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/avatar/atl-avatar.tsx"],"names":[],"mappings":"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","sourcesContent":["import { HTMLAttributes, ReactNode, Children, useState } from 'react';\nimport type { AtlAvatarSpec, AtlAvatarGroupSpec } from '../spec';\nimport './atl-avatar.css';\nimport { AtlIcon } from '../icon/atl-icon';\n\n/**\n * Properties for the AtlAvatar component.\n */\nexport interface AtlAvatarProps\n extends HTMLAttributes<HTMLDivElement>, AtlAvatarSpec {\n /**\n * The URL of the image to display.\n */\n src?: string;\n /**\n * Accessible text for the avatar image.\n */\n alt?: string;\n /**\n * The name of the person/entity, used for initials if no image is provided.\n */\n name?: string;\n /**\n * The size of the avatar.\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n /**\n * The shape of the avatar.\n */\n shape?: 'circle' | 'square';\n /**\n * The status indicator to display on the avatar.\n */\n status?: 'online' | 'offline' | 'away' | 'busy' | '';\n}\n\nfunction getInitials(name: string): string {\n return name\n .split(' ')\n .filter(Boolean)\n .slice(0, 2)\n .map((w) => w[0].toUpperCase())\n .join('');\n}\n\n/**\n * An avatar component for displaying user profile pictures or initials.\n */\nexport function AtlAvatar({\n src = '',\n alt = '',\n name = '',\n size = 'md',\n shape = 'circle',\n status = '',\n className,\n ...rest\n}: AtlAvatarProps) {\n const [imgError, setImgError] = useState(false);\n const [prevSrc, setPrevSrc] = useState(src);\n\n // Reset imgError when src changes\n if (src !== prevSrc) {\n setPrevSrc(src);\n setImgError(false);\n }\n\n const classes = ['atl-avatar', `size-${size}`, `shape-${shape}`, className]\n .filter(Boolean)\n .join(' ');\n\n const initials = name ? getInitials(name) : '';\n const ariaLabel = alt || name || 'Avatar';\n\n return (\n <div className={classes} aria-label={ariaLabel} role=\"img\" {...rest}>\n {src && !imgError ? (\n <img src={src} alt={alt || name} onError={() => setImgError(true)} />\n ) : initials ? (\n <span className=\"initials\" aria-hidden=\"true\">\n {initials}\n </span>\n ) : (\n <AtlIcon name=\"person\" size=\"sm\" className=\"icon\" />\n )}\n {status && (\n <span className={`status-dot status-${status}`} aria-hidden=\"true\" />\n )}\n </div>\n );\n}\n\n/**\n * Properties for the AtlAvatarGroup component.\n */\nexport interface AtlAvatarGroupProps\n extends HTMLAttributes<HTMLDivElement>, AtlAvatarGroupSpec {\n /**\n * The maximum number of avatars to show before displaying an overflow badge.\n */\n max?: number;\n /**\n * The size of the avatars in the group.\n */\n size?: AtlAvatarProps['size'];\n /**\n * The avatars to be rendered in the group.\n */\n children?: ReactNode;\n}\n\n/**\n * A container for grouping multiple avatars.\n */\nexport function AtlAvatarGroup({\n max = 5,\n size = 'md',\n children,\n className,\n ...rest\n}: AtlAvatarGroupProps) {\n const childArray = Children.toArray(children);\n const visible = childArray.slice(0, max);\n const overflow = childArray.length - max;\n\n const classes = ['atl-avatar-group', `size-${size}`, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={classes} {...rest}>\n {visible}\n {overflow > 0 && (\n <div\n className={`overflow-badge size-${size}`}\n aria-label={`+${overflow} more`}\n >\n +{overflow}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -41,25 +41,29 @@
41
41
  .atl-badge.variant-success {
42
42
  background-color: var(--ui-color-success-bg);
43
43
  color: var(--ui-color-success-text);
44
- border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-color-success-text) 25%, transparent);
44
+ border: var(--ui-border-width) solid
45
+ color-mix(in srgb, var(--ui-color-success-text) 25%, transparent);
45
46
  }
46
47
 
47
48
  .atl-badge.variant-warning {
48
49
  background-color: var(--ui-color-warning-bg);
49
50
  color: var(--ui-color-warning-text);
50
- border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-color-warning-text) 25%, transparent);
51
+ border: var(--ui-border-width) solid
52
+ color-mix(in srgb, var(--ui-color-warning-text) 25%, transparent);
51
53
  }
52
54
 
53
55
  .atl-badge.variant-danger {
54
56
  background-color: var(--ui-color-danger-bg);
55
57
  color: var(--ui-color-danger-text);
56
- border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-color-danger-text) 25%, transparent);
58
+ border: var(--ui-border-width) solid
59
+ color-mix(in srgb, var(--ui-color-danger-text) 25%, transparent);
57
60
  }
58
61
 
59
62
  .atl-badge.variant-info {
60
63
  background-color: var(--ui-color-info-bg);
61
64
  color: var(--ui-color-info-text);
62
- border: var(--ui-border-width) solid color-mix(in srgb, var(--ui-color-info-text) 25%, transparent);
65
+ border: var(--ui-border-width) solid
66
+ color-mix(in srgb, var(--ui-color-info-text) 25%, transparent);
63
67
  }
64
68
 
65
69
  /* Semantic indicator glyph — non-color differentiation (WCAG 1.4.1). */
@@ -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;AACzD,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
+ {"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;AACzD,OAAO,iBAAiB,CAAC;AAazB,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,aACf,SAAQ,cAAc,CAAC,eAAe,CAAC,EAAE,YAAY;IACrD;;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,+BAaf"}
@@ -15,8 +15,9 @@ const VARIANT_ICON_NAMES = {
15
15
  */
16
16
  export function AtlBadge({ variant = 'default', size = 'md', children, className, ...rest }) {
17
17
  const classes = ['atl-badge', `variant-${variant}`, `size-${size}`, className]
18
- .filter(Boolean).join(' ');
18
+ .filter(Boolean)
19
+ .join(' ');
19
20
  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] }));
21
+ return (_jsxs("span", { className: classes, role: "status", ...rest, children: [iconName && (_jsx(AtlIcon, { className: "variant-icon", name: iconName, size: "sm" })), children] }));
21
22
  }
22
23
  //# 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;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C;;wBAEwB;AACxB,MAAM,kBAAkB,GAAkD;IACxE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAyBF;;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,OAAO,CAAC,CAAC;IAC7C,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, AtlIconName } 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:icon-duplication\n * missed (ADR-0050). */\nconst VARIANT_ICON_NAMES: Partial<Record<AtlBadgeVariant, AtlIconName>> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\n};\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];\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"]}
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,GAAkD;IACxE,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAuBF;;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;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;IACb,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,CACL,gBAAM,SAAS,EAAE,OAAO,EAAE,IAAI,EAAC,QAAQ,KAAK,IAAI,aAC7C,QAAQ,IAAI,CACX,KAAC,OAAO,IAAC,SAAS,EAAC,cAAc,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,IAAI,GAAG,CAC/D,EACA,QAAQ,IACJ,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { HTMLAttributes, ReactNode } from 'react';\nimport type { AtlBadgeSpec, AtlIconName } 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:icon-duplication\n * missed (ADR-0050). */\nconst VARIANT_ICON_NAMES: Partial<Record<AtlBadgeVariant, AtlIconName>> = {\n info: 'info',\n success: 'success',\n warning: 'warning',\n danger: 'danger',\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>, 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)\n .join(' ');\n const iconName = VARIANT_ICON_NAMES[variant];\n return (\n <span className={classes} role=\"status\" {...rest}>\n {iconName && (\n <AtlIcon className=\"variant-icon\" name={iconName} size=\"sm\" />\n )}\n {children}\n </span>\n );\n}\n"]}