@atelier-ui/react 0.1.12 → 0.2.1

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 (160) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +3 -3
  3. package/package.json +1 -1
  4. package/src/index.d.ts +29 -29
  5. package/src/index.js +29 -29
  6. package/src/index.js.map +1 -1
  7. package/src/lib/accordion/{llm-accordion.css → atl-accordion.css} +8 -8
  8. package/src/lib/accordion/{llm-accordion.d.ts → atl-accordion.d.ts} +12 -12
  9. package/src/lib/accordion/{llm-accordion.d.ts.map → atl-accordion.d.ts.map} +1 -1
  10. package/src/lib/accordion/{llm-accordion.js → atl-accordion.js} +9 -9
  11. package/src/lib/accordion/{llm-accordion.js.map → atl-accordion.js.map} +1 -1
  12. package/src/lib/alert/{llm-alert.css → atl-alert.css} +10 -10
  13. package/src/lib/alert/{llm-alert.d.ts → atl-alert.d.ts} +8 -8
  14. package/src/lib/alert/{llm-alert.d.ts.map → atl-alert.d.ts.map} +1 -1
  15. package/src/lib/alert/{llm-alert.js → atl-alert.js} +4 -4
  16. package/src/lib/alert/{llm-alert.js.map → atl-alert.js.map} +1 -1
  17. package/src/lib/avatar/{llm-avatar.css → atl-avatar.css} +20 -20
  18. package/src/lib/avatar/{llm-avatar.d.ts → atl-avatar.d.ts} +10 -10
  19. package/src/lib/avatar/{llm-avatar.d.ts.map → atl-avatar.d.ts.map} +1 -1
  20. package/src/lib/avatar/{llm-avatar.js → atl-avatar.js} +6 -6
  21. package/src/lib/avatar/{llm-avatar.js.map → atl-avatar.js.map} +1 -1
  22. package/src/lib/badge/{llm-badge.css → atl-badge.css} +9 -9
  23. package/src/lib/badge/atl-badge.d.ts +27 -0
  24. package/src/lib/badge/{llm-badge.d.ts.map → atl-badge.d.ts.map} +1 -1
  25. package/src/lib/badge/{llm-badge.js → atl-badge.js} +4 -4
  26. package/src/lib/badge/{llm-badge.js.map → atl-badge.js.map} +1 -1
  27. package/src/lib/breadcrumbs/{llm-breadcrumbs.css → atl-breadcrumbs.css} +11 -11
  28. package/src/lib/breadcrumbs/atl-breadcrumbs.d.ts +38 -0
  29. package/src/lib/breadcrumbs/{llm-breadcrumbs.d.ts.map → atl-breadcrumbs.d.ts.map} +1 -1
  30. package/src/lib/breadcrumbs/{llm-breadcrumbs.js → atl-breadcrumbs.js} +7 -7
  31. package/src/lib/breadcrumbs/{llm-breadcrumbs.js.map → atl-breadcrumbs.js.map} +1 -1
  32. package/src/lib/button/{llm-button.css → atl-button.css} +20 -20
  33. package/src/lib/button/{llm-button.d.ts → atl-button.d.ts} +7 -7
  34. package/src/lib/button/{llm-button.d.ts.map → atl-button.d.ts.map} +1 -1
  35. package/src/lib/button/{llm-button.js → atl-button.js} +4 -4
  36. package/src/lib/button/{llm-button.js.map → atl-button.js.map} +1 -1
  37. package/src/lib/card/{llm-card.css → atl-card.css} +20 -20
  38. package/src/lib/card/{llm-card.d.ts → atl-card.d.ts} +13 -13
  39. package/src/lib/card/{llm-card.d.ts.map → atl-card.d.ts.map} +1 -1
  40. package/src/lib/card/atl-card.js +30 -0
  41. package/src/lib/card/{llm-card.js.map → atl-card.js.map} +1 -1
  42. package/src/lib/chat/{llm-chat.css → atl-chat.css} +55 -55
  43. package/src/lib/chat/{llm-chat.d.ts → atl-chat.d.ts} +26 -26
  44. package/src/lib/chat/{llm-chat.d.ts.map → atl-chat.d.ts.map} +1 -1
  45. package/src/lib/chat/{llm-chat.js → atl-chat.js} +21 -21
  46. package/src/lib/chat/{llm-chat.js.map → atl-chat.js.map} +1 -1
  47. package/src/lib/checkbox/{llm-checkbox.css → atl-checkbox.css} +19 -19
  48. package/src/lib/checkbox/{llm-checkbox.d.ts → atl-checkbox.d.ts} +6 -6
  49. package/src/lib/checkbox/{llm-checkbox.d.ts.map → atl-checkbox.d.ts.map} +1 -1
  50. package/src/lib/checkbox/{llm-checkbox.js → atl-checkbox.js} +4 -4
  51. package/src/lib/checkbox/{llm-checkbox.js.map → atl-checkbox.js.map} +1 -1
  52. package/src/lib/code-block/{llm-code-block.css → atl-code-block.css} +2 -2
  53. package/src/lib/code-block/{llm-code-block.d.ts → atl-code-block.d.ts} +4 -4
  54. package/src/lib/code-block/{llm-code-block.d.ts.map → atl-code-block.d.ts.map} +1 -1
  55. package/src/lib/code-block/{llm-code-block.js → atl-code-block.js} +4 -4
  56. package/src/lib/code-block/{llm-code-block.js.map → atl-code-block.js.map} +1 -1
  57. package/src/lib/combobox/{llm-combobox.css → atl-combobox.css} +24 -24
  58. package/src/lib/combobox/{llm-combobox.d.ts → atl-combobox.d.ts} +7 -7
  59. package/src/lib/combobox/{llm-combobox.d.ts.map → atl-combobox.d.ts.map} +1 -1
  60. package/src/lib/combobox/{llm-combobox.js → atl-combobox.js} +8 -8
  61. package/src/lib/combobox/{llm-combobox.js.map → atl-combobox.js.map} +1 -1
  62. package/src/lib/dialog/{llm-dialog.css → atl-dialog.css} +18 -18
  63. package/src/lib/dialog/{llm-dialog.d.ts → atl-dialog.d.ts} +12 -12
  64. package/src/lib/dialog/{llm-dialog.d.ts.map → atl-dialog.d.ts.map} +1 -1
  65. package/src/lib/dialog/{llm-dialog.js → atl-dialog.js} +13 -13
  66. package/src/lib/dialog/{llm-dialog.js.map → atl-dialog.js.map} +1 -1
  67. package/src/lib/drawer/{llm-drawer.css → atl-drawer.css} +35 -35
  68. package/src/lib/drawer/{llm-drawer.d.ts → atl-drawer.d.ts} +12 -12
  69. package/src/lib/drawer/{llm-drawer.d.ts.map → atl-drawer.d.ts.map} +1 -1
  70. package/src/lib/drawer/{llm-drawer.js → atl-drawer.js} +13 -13
  71. package/src/lib/drawer/{llm-drawer.js.map → atl-drawer.js.map} +1 -1
  72. package/src/lib/icon/{llm-icon.css → atl-icon.css} +4 -4
  73. package/src/lib/icon/atl-icon.d.ts +24 -0
  74. package/src/lib/icon/{llm-icon.d.ts.map → atl-icon.d.ts.map} +1 -1
  75. package/src/lib/icon/{llm-icon.js → atl-icon.js} +5 -5
  76. package/src/lib/icon/{llm-icon.js.map → atl-icon.js.map} +1 -1
  77. package/src/lib/input/{llm-input.css → atl-input.css} +14 -14
  78. package/src/lib/input/{llm-input.d.ts → atl-input.d.ts} +6 -6
  79. package/src/lib/input/{llm-input.d.ts.map → atl-input.d.ts.map} +1 -1
  80. package/src/lib/input/{llm-input.js → atl-input.js} +4 -4
  81. package/src/lib/input/{llm-input.js.map → atl-input.js.map} +1 -1
  82. package/src/lib/menu/{llm-menu.css → atl-menu.css} +11 -11
  83. package/src/lib/menu/{llm-menu.d.ts → atl-menu.d.ts} +13 -13
  84. package/src/lib/menu/{llm-menu.d.ts.map → atl-menu.d.ts.map} +1 -1
  85. package/src/lib/menu/{llm-menu.js → atl-menu.js} +10 -10
  86. package/src/lib/menu/{llm-menu.js.map → atl-menu.js.map} +1 -1
  87. package/src/lib/pagination/{llm-pagination.css → atl-pagination.css} +1 -1
  88. package/src/lib/pagination/{llm-pagination.d.ts → atl-pagination.d.ts} +6 -6
  89. package/src/lib/pagination/{llm-pagination.d.ts.map → atl-pagination.d.ts.map} +1 -1
  90. package/src/lib/pagination/{llm-pagination.js → atl-pagination.js} +4 -4
  91. package/src/lib/pagination/{llm-pagination.js.map → atl-pagination.js.map} +1 -1
  92. package/src/lib/progress/{llm-progress.css → atl-progress.css} +9 -9
  93. package/src/lib/progress/{llm-progress.d.ts → atl-progress.d.ts} +6 -6
  94. package/src/lib/progress/{llm-progress.d.ts.map → atl-progress.d.ts.map} +1 -1
  95. package/src/lib/progress/{llm-progress.js → atl-progress.js} +4 -4
  96. package/src/lib/progress/{llm-progress.js.map → atl-progress.js.map} +1 -1
  97. package/src/lib/radio/{llm-radio.css → atl-radio.css} +11 -11
  98. package/src/lib/radio/{llm-radio.d.ts → atl-radio.d.ts} +7 -7
  99. package/src/lib/radio/{llm-radio.d.ts.map → atl-radio.d.ts.map} +1 -1
  100. package/src/lib/radio/{llm-radio.js → atl-radio.js} +6 -6
  101. package/src/lib/radio/{llm-radio.js.map → atl-radio.js.map} +1 -1
  102. package/src/lib/radio-group/{llm-radio-group.css → atl-radio-group.css} +6 -6
  103. package/src/lib/radio-group/{llm-radio-group.d.ts → atl-radio-group.d.ts} +6 -6
  104. package/src/lib/radio-group/{llm-radio-group.d.ts.map → atl-radio-group.d.ts.map} +1 -1
  105. package/src/lib/radio-group/{llm-radio-group.js → atl-radio-group.js} +4 -4
  106. package/src/lib/radio-group/{llm-radio-group.js.map → atl-radio-group.js.map} +1 -1
  107. package/src/lib/select/{llm-select.css → atl-select.css} +11 -11
  108. package/src/lib/select/{llm-select.d.ts → atl-select.d.ts} +10 -10
  109. package/src/lib/select/{llm-select.d.ts.map → atl-select.d.ts.map} +1 -1
  110. package/src/lib/select/{llm-select.js → atl-select.js} +6 -6
  111. package/src/lib/select/{llm-select.js.map → atl-select.js.map} +1 -1
  112. package/src/lib/skeleton/{llm-skeleton.css → atl-skeleton.css} +6 -6
  113. package/src/lib/skeleton/{llm-skeleton.d.ts → atl-skeleton.d.ts} +6 -6
  114. package/src/lib/skeleton/{llm-skeleton.d.ts.map → atl-skeleton.d.ts.map} +1 -1
  115. package/src/lib/skeleton/{llm-skeleton.js → atl-skeleton.js} +4 -4
  116. package/src/lib/skeleton/{llm-skeleton.js.map → atl-skeleton.js.map} +1 -1
  117. package/src/lib/spec.d.ts +120 -120
  118. package/src/lib/spec.js.map +1 -1
  119. package/src/lib/stepper/{llm-stepper.css → atl-stepper.css} +5 -5
  120. package/src/lib/stepper/{llm-stepper.d.ts → atl-stepper.d.ts} +9 -9
  121. package/src/lib/stepper/{llm-stepper.d.ts.map → atl-stepper.d.ts.map} +1 -1
  122. package/src/lib/stepper/{llm-stepper.js → atl-stepper.js} +11 -11
  123. package/src/lib/stepper/{llm-stepper.js.map → atl-stepper.js.map} +1 -1
  124. package/src/lib/table/{llm-table.css → atl-table.css} +30 -30
  125. package/src/lib/table/atl-table.d.ts +40 -0
  126. package/src/lib/table/{llm-table.d.ts.map → atl-table.d.ts.map} +1 -1
  127. package/src/lib/table/{llm-table.js → atl-table.js} +14 -14
  128. package/src/lib/table/{llm-table.js.map → atl-table.js.map} +1 -1
  129. package/src/lib/tabs/{llm-tabs.css → atl-tabs.css} +17 -17
  130. package/src/lib/tabs/{llm-tabs.d.ts → atl-tabs.d.ts} +12 -12
  131. package/src/lib/tabs/{llm-tabs.d.ts.map → atl-tabs.d.ts.map} +1 -1
  132. package/src/lib/tabs/{llm-tabs.js → atl-tabs.js} +11 -11
  133. package/src/lib/tabs/{llm-tabs.js.map → atl-tabs.js.map} +1 -1
  134. package/src/lib/textarea/{llm-textarea.css → atl-textarea.css} +15 -15
  135. package/src/lib/textarea/{llm-textarea.d.ts → atl-textarea.d.ts} +6 -6
  136. package/src/lib/textarea/{llm-textarea.d.ts.map → atl-textarea.d.ts.map} +1 -1
  137. package/src/lib/textarea/{llm-textarea.js → atl-textarea.js} +4 -4
  138. package/src/lib/textarea/{llm-textarea.js.map → atl-textarea.js.map} +1 -1
  139. package/src/lib/toast/{llm-toast.css → atl-toast.css} +16 -16
  140. package/src/lib/toast/atl-toast.d.ts +54 -0
  141. package/src/lib/toast/{llm-toast.d.ts.map → atl-toast.d.ts.map} +1 -1
  142. package/src/lib/toast/{llm-toast.js → atl-toast.js} +12 -12
  143. package/src/lib/toast/{llm-toast.js.map → atl-toast.js.map} +1 -1
  144. package/src/lib/toggle/{llm-toggle.css → atl-toggle.css} +16 -16
  145. package/src/lib/toggle/{llm-toggle.d.ts → atl-toggle.d.ts} +6 -6
  146. package/src/lib/toggle/{llm-toggle.d.ts.map → atl-toggle.d.ts.map} +1 -1
  147. package/src/lib/toggle/{llm-toggle.js → atl-toggle.js} +4 -4
  148. package/src/lib/toggle/{llm-toggle.js.map → atl-toggle.js.map} +1 -1
  149. package/src/lib/tooltip/{llm-tooltip.css → atl-tooltip.css} +12 -12
  150. package/src/lib/tooltip/atl-tooltip.d.ts +17 -0
  151. package/src/lib/tooltip/{llm-tooltip.d.ts.map → atl-tooltip.d.ts.map} +1 -1
  152. package/src/lib/tooltip/{llm-tooltip.js → atl-tooltip.js} +7 -7
  153. package/src/lib/tooltip/{llm-tooltip.js.map → atl-tooltip.js.map} +1 -1
  154. package/src/lib/badge/llm-badge.d.ts +0 -27
  155. package/src/lib/breadcrumbs/llm-breadcrumbs.d.ts +0 -38
  156. package/src/lib/card/llm-card.js +0 -30
  157. package/src/lib/icon/llm-icon.d.ts +0 -24
  158. package/src/lib/table/llm-table.d.ts +0 -40
  159. package/src/lib/toast/llm-toast.d.ts +0 -54
  160. package/src/lib/tooltip/llm-tooltip.d.ts +0 -17
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useId, useMemo, useRef, useState } from 'react';
3
- import './llm-combobox.css';
3
+ import './atl-combobox.css';
4
4
  /**
5
5
  * Filterable autocomplete combobox. Accepts an `options` array and emits the
6
6
  * selected option's `value`. The user types to narrow the list; selecting an
@@ -8,7 +8,7 @@ import './llm-combobox.css';
8
8
  *
9
9
  * Usage:
10
10
  * ```tsx
11
- * <LlmCombobox
11
+ * <AtlCombobox
12
12
  * value={country}
13
13
  * onValueChange={setCountry}
14
14
  * options={countryOptions}
@@ -16,7 +16,7 @@ import './llm-combobox.css';
16
16
  * />
17
17
  * ```
18
18
  */
19
- export function LlmCombobox({ value = '', onValueChange, options = [], placeholder = '', disabled = false, readonly = false, invalid = false, required = false, name, errors = [], }) {
19
+ export function AtlCombobox({ value = '', onValueChange, options = [], placeholder = '', disabled = false, readonly = false, invalid = false, required = false, name, errors = [], }) {
20
20
  const [query, setQuery] = useState('');
21
21
  const [isOpen, setIsOpen] = useState(false);
22
22
  const [activeIndex, setActiveIndex] = useState(-1);
@@ -119,7 +119,7 @@ export function LlmCombobox({ value = '', onValueChange, options = [], placehold
119
119
  }
120
120
  }
121
121
  const classes = [
122
- 'llm-combobox',
122
+ 'atl-combobox',
123
123
  isOpen && 'is-open',
124
124
  disabled && 'is-disabled',
125
125
  invalid && 'is-invalid',
@@ -127,13 +127,13 @@ export function LlmCombobox({ value = '', onValueChange, options = [], placehold
127
127
  .filter(Boolean)
128
128
  .join(' ');
129
129
  const activeOptionId = activeIndex >= 0 ? `${panelId}-option-${activeIndex}` : undefined;
130
- return (_jsxs("div", { className: classes, ref: containerRef, children: [_jsxs("div", { className: "llm-combobox-wrapper", children: [_jsx("input", { ref: inputRef, className: "llm-combobox-input", type: "text", autoComplete: "off", role: "combobox", id: inputId, "aria-expanded": isOpen, "aria-controls": panelId, "aria-autocomplete": "list", "aria-activedescendant": activeOptionId, "aria-invalid": invalid || undefined, disabled: disabled, readOnly: readonly, required: required, name: name, placeholder: placeholder, value: displayValue, onChange: handleInput, onFocus: handleFocus, onBlur: handleBlur, onKeyDown: handleKeydown }), _jsx("span", { className: "llm-combobox-icon", "aria-hidden": "true", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: _jsx("path", { d: "M2 4l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), isOpen && (_jsx("ul", { id: panelId, className: "llm-combobox-panel", role: "listbox", "aria-labelledby": inputId, children: filteredOptions.length > 0 ? (filteredOptions.map((option, i) => (_jsxs("li", { id: `${panelId}-option-${i}`, role: "option", className: [
131
- 'llm-combobox-option',
130
+ return (_jsxs("div", { className: classes, ref: containerRef, children: [_jsxs("div", { className: "atl-combobox-wrapper", children: [_jsx("input", { ref: inputRef, className: "atl-combobox-input", type: "text", autoComplete: "off", role: "combobox", id: inputId, "aria-expanded": isOpen, "aria-controls": panelId, "aria-autocomplete": "list", "aria-activedescendant": activeOptionId, "aria-invalid": invalid || undefined, disabled: disabled, readOnly: readonly, required: required, name: name, placeholder: placeholder, value: displayValue, onChange: handleInput, onFocus: handleFocus, onBlur: handleBlur, onKeyDown: handleKeydown }), _jsx("span", { className: "atl-combobox-icon", "aria-hidden": "true", children: _jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", children: _jsx("path", { d: "M2 4l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })] }), isOpen && (_jsx("ul", { id: panelId, className: "atl-combobox-panel", role: "listbox", "aria-labelledby": inputId, children: filteredOptions.length > 0 ? (filteredOptions.map((option, i) => (_jsxs("li", { id: `${panelId}-option-${i}`, role: "option", className: [
131
+ 'atl-combobox-option',
132
132
  activeIndex === i && 'is-active',
133
133
  option.value === value && 'is-selected',
134
134
  option.disabled && 'is-disabled',
135
135
  ]
136
136
  .filter(Boolean)
137
- .join(' '), "aria-selected": option.value === value, "aria-disabled": option.disabled || undefined, onMouseDown: () => selectOption(option), onMouseEnter: () => setActiveIndex(i), children: [_jsx("span", { children: option.label }), option.value === value && (_jsx("svg", { className: "llm-combobox-check", width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M2 7l4 4 6-7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))] }, option.value)))) : (_jsx("li", { className: "llm-combobox-no-results", role: "option", "aria-selected": false, "aria-disabled": "true", children: "No results found." })) })), invalid && errors.length > 0 && (_jsx("div", { className: "llm-combobox-errors", role: "alert", "aria-live": "polite", children: errors.map((e, i) => (_jsx("p", { className: "llm-combobox-error-message", children: e }, i))) }))] }));
137
+ .join(' '), "aria-selected": option.value === value, "aria-disabled": option.disabled || undefined, onMouseDown: () => selectOption(option), onMouseEnter: () => setActiveIndex(i), children: [_jsx("span", { children: option.label }), option.value === value && (_jsx("svg", { className: "atl-combobox-check", width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M2 7l4 4 6-7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))] }, option.value)))) : (_jsx("li", { className: "atl-combobox-no-results", role: "option", "aria-selected": false, "aria-disabled": "true", children: "No results found." })) })), invalid && errors.length > 0 && (_jsx("div", { className: "atl-combobox-errors", role: "alert", "aria-live": "polite", children: errors.map((e, i) => (_jsx("p", { className: "atl-combobox-error-message", children: e }, i))) }))] }));
138
138
  }
139
- //# sourceMappingURL=llm-combobox.js.map
139
+ //# sourceMappingURL=atl-combobox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-combobox.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/combobox/llm-combobox.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { LlmComboboxOption, LlmComboboxSpec } from '../spec';\nimport './llm-combobox.css';\n\nexport type { LlmComboboxOption };\n\nexport interface LlmComboboxProps extends LlmComboboxSpec {\n value?: string;\n onValueChange?: (value: string) => void;\n errors?: string[];\n}\n\n/**\n * Filterable autocomplete combobox. Accepts an `options` array and emits the\n * selected option's `value`. The user types to narrow the list; selecting an\n * option commits the value and displays its label.\n *\n * Usage:\n * ```tsx\n * <LlmCombobox\n * value={country}\n * onValueChange={setCountry}\n * options={countryOptions}\n * placeholder=\"Search country…\"\n * />\n * ```\n */\nexport function LlmCombobox({\n value = '',\n onValueChange,\n options = [],\n placeholder = '',\n disabled = false,\n readonly = false,\n invalid = false,\n required = false,\n name,\n errors = [],\n}: LlmComboboxProps) {\n const [query, setQuery] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const inputId = useId();\n const panelId = useId();\n\n const selectedLabel = useMemo(\n () => options.find((o) => o.value === value)?.label ?? '',\n [options, value],\n );\n\n const filteredOptions = useMemo(() => {\n if (!query) return options;\n const q = query.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [options, query]);\n\n const displayValue = isOpen ? query : selectedLabel;\n\n // Outside-click closes panel\n useEffect(() => {\n if (!isOpen) return;\n function handleClick(e: MouseEvent) {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false);\n setQuery(selectedLabel);\n }\n }\n document.addEventListener('click', handleClick);\n return () => document.removeEventListener('click', handleClick);\n }, [isOpen, selectedLabel]);\n\n function open() {\n if (disabled || readonly) return;\n setQuery(selectedLabel);\n setIsOpen(true);\n setActiveIndex(-1);\n }\n\n function close() {\n setIsOpen(false);\n setActiveIndex(-1);\n }\n\n function selectOption(option: LlmComboboxOption) {\n if (option.disabled || disabled || readonly) return;\n onValueChange?.(option.value);\n setQuery(option.label);\n close();\n inputRef.current?.focus();\n }\n\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const q = e.target.value;\n setQuery(q);\n setActiveIndex(-1);\n if (q === '') onValueChange?.('');\n if (!isOpen) open();\n }\n\n function handleFocus() {\n open();\n }\n\n function handleBlur() {\n setQuery(selectedLabel);\n }\n\n function handleKeydown(e: React.KeyboardEvent) {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (!isOpen) { open(); return; }\n setActiveIndex((i) => (i + 1 >= filteredOptions.length ? 0 : i + 1));\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (!isOpen) { open(); return; }\n setActiveIndex((i) => (i - 1 < 0 ? filteredOptions.length - 1 : i - 1));\n break;\n }\n case 'Enter': {\n e.preventDefault();\n if (isOpen && activeIndex >= 0 && activeIndex < filteredOptions.length) {\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n setQuery(selectedLabel);\n close();\n break;\n }\n case 'Tab': {\n close();\n break;\n }\n }\n }\n\n const classes = [\n 'llm-combobox',\n isOpen && 'is-open',\n disabled && 'is-disabled',\n invalid && 'is-invalid',\n ]\n .filter(Boolean)\n .join(' ');\n\n const activeOptionId =\n activeIndex >= 0 ? `${panelId}-option-${activeIndex}` : undefined;\n\n return (\n <div className={classes} ref={containerRef}>\n <div className=\"llm-combobox-wrapper\">\n <input\n ref={inputRef}\n className=\"llm-combobox-input\"\n type=\"text\"\n autoComplete=\"off\"\n role=\"combobox\"\n id={inputId}\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOptionId}\n aria-invalid={invalid || undefined}\n disabled={disabled}\n readOnly={readonly}\n required={required}\n name={name}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeydown}\n />\n <span className=\"llm-combobox-icon\" aria-hidden=\"true\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 4l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </div>\n\n {isOpen && (\n <ul\n id={panelId}\n className=\"llm-combobox-panel\"\n role=\"listbox\"\n aria-labelledby={inputId}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, i) => (\n <li\n key={option.value}\n id={`${panelId}-option-${i}`}\n role=\"option\"\n className={[\n 'llm-combobox-option',\n activeIndex === i && 'is-active',\n option.value === value && 'is-selected',\n option.disabled && 'is-disabled',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-selected={option.value === value}\n aria-disabled={option.disabled || undefined}\n onMouseDown={() => selectOption(option)}\n onMouseEnter={() => setActiveIndex(i)}\n >\n <span>{option.label}</span>\n {option.value === value && (\n <svg className=\"llm-combobox-check\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 7l4 4 6-7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </li>\n ))\n ) : (\n <li className=\"llm-combobox-no-results\" role=\"option\" aria-selected={false} aria-disabled=\"true\">\n No results found.\n </li>\n )}\n </ul>\n )}\n\n {invalid && errors.length > 0 && (\n <div className=\"llm-combobox-errors\" role=\"alert\" aria-live=\"polite\">\n {errors.map((e, i) => (\n <p key={i} className=\"llm-combobox-error-message\">{e}</p>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-combobox.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/combobox/atl-combobox.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { AtlComboboxOption, AtlComboboxSpec } from '../spec';\nimport './atl-combobox.css';\n\nexport type { AtlComboboxOption };\n\nexport interface AtlComboboxProps extends AtlComboboxSpec {\n value?: string;\n onValueChange?: (value: string) => void;\n errors?: string[];\n}\n\n/**\n * Filterable autocomplete combobox. Accepts an `options` array and emits the\n * selected option's `value`. The user types to narrow the list; selecting an\n * option commits the value and displays its label.\n *\n * Usage:\n * ```tsx\n * <AtlCombobox\n * value={country}\n * onValueChange={setCountry}\n * options={countryOptions}\n * placeholder=\"Search country…\"\n * />\n * ```\n */\nexport function AtlCombobox({\n value = '',\n onValueChange,\n options = [],\n placeholder = '',\n disabled = false,\n readonly = false,\n invalid = false,\n required = false,\n name,\n errors = [],\n}: AtlComboboxProps) {\n const [query, setQuery] = useState('');\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n\n const inputRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const inputId = useId();\n const panelId = useId();\n\n const selectedLabel = useMemo(\n () => options.find((o) => o.value === value)?.label ?? '',\n [options, value],\n );\n\n const filteredOptions = useMemo(() => {\n if (!query) return options;\n const q = query.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(q));\n }, [options, query]);\n\n const displayValue = isOpen ? query : selectedLabel;\n\n // Outside-click closes panel\n useEffect(() => {\n if (!isOpen) return;\n function handleClick(e: MouseEvent) {\n if (!containerRef.current?.contains(e.target as Node)) {\n setIsOpen(false);\n setQuery(selectedLabel);\n }\n }\n document.addEventListener('click', handleClick);\n return () => document.removeEventListener('click', handleClick);\n }, [isOpen, selectedLabel]);\n\n function open() {\n if (disabled || readonly) return;\n setQuery(selectedLabel);\n setIsOpen(true);\n setActiveIndex(-1);\n }\n\n function close() {\n setIsOpen(false);\n setActiveIndex(-1);\n }\n\n function selectOption(option: AtlComboboxOption) {\n if (option.disabled || disabled || readonly) return;\n onValueChange?.(option.value);\n setQuery(option.label);\n close();\n inputRef.current?.focus();\n }\n\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const q = e.target.value;\n setQuery(q);\n setActiveIndex(-1);\n if (q === '') onValueChange?.('');\n if (!isOpen) open();\n }\n\n function handleFocus() {\n open();\n }\n\n function handleBlur() {\n setQuery(selectedLabel);\n }\n\n function handleKeydown(e: React.KeyboardEvent) {\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (!isOpen) { open(); return; }\n setActiveIndex((i) => (i + 1 >= filteredOptions.length ? 0 : i + 1));\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (!isOpen) { open(); return; }\n setActiveIndex((i) => (i - 1 < 0 ? filteredOptions.length - 1 : i - 1));\n break;\n }\n case 'Enter': {\n e.preventDefault();\n if (isOpen && activeIndex >= 0 && activeIndex < filteredOptions.length) {\n selectOption(filteredOptions[activeIndex]);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n setQuery(selectedLabel);\n close();\n break;\n }\n case 'Tab': {\n close();\n break;\n }\n }\n }\n\n const classes = [\n 'atl-combobox',\n isOpen && 'is-open',\n disabled && 'is-disabled',\n invalid && 'is-invalid',\n ]\n .filter(Boolean)\n .join(' ');\n\n const activeOptionId =\n activeIndex >= 0 ? `${panelId}-option-${activeIndex}` : undefined;\n\n return (\n <div className={classes} ref={containerRef}>\n <div className=\"atl-combobox-wrapper\">\n <input\n ref={inputRef}\n className=\"atl-combobox-input\"\n type=\"text\"\n autoComplete=\"off\"\n role=\"combobox\"\n id={inputId}\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeOptionId}\n aria-invalid={invalid || undefined}\n disabled={disabled}\n readOnly={readonly}\n required={required}\n name={name}\n placeholder={placeholder}\n value={displayValue}\n onChange={handleInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeydown}\n />\n <span className=\"atl-combobox-icon\" aria-hidden=\"true\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M2 4l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n </div>\n\n {isOpen && (\n <ul\n id={panelId}\n className=\"atl-combobox-panel\"\n role=\"listbox\"\n aria-labelledby={inputId}\n >\n {filteredOptions.length > 0 ? (\n filteredOptions.map((option, i) => (\n <li\n key={option.value}\n id={`${panelId}-option-${i}`}\n role=\"option\"\n className={[\n 'atl-combobox-option',\n activeIndex === i && 'is-active',\n option.value === value && 'is-selected',\n option.disabled && 'is-disabled',\n ]\n .filter(Boolean)\n .join(' ')}\n aria-selected={option.value === value}\n aria-disabled={option.disabled || undefined}\n onMouseDown={() => selectOption(option)}\n onMouseEnter={() => setActiveIndex(i)}\n >\n <span>{option.label}</span>\n {option.value === value && (\n <svg className=\"atl-combobox-check\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 7l4 4 6-7\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </li>\n ))\n ) : (\n <li className=\"atl-combobox-no-results\" role=\"option\" aria-selected={false} aria-disabled=\"true\">\n No results found.\n </li>\n )}\n </ul>\n )}\n\n {invalid && errors.length > 0 && (\n <div className=\"atl-combobox-errors\" role=\"alert\" aria-live=\"polite\">\n {errors.map((e, i) => (\n <p key={i} className=\"atl-combobox-error-message\">{e}</p>\n ))}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /* ── Native <dialog> reset + base ──────────────────────────────────────────── */
2
- .llm-dialog {
2
+ .atl-dialog {
3
3
  all: unset;
4
4
  position: fixed;
5
5
  inset: 0;
@@ -26,21 +26,21 @@
26
26
  overlay var(--ui-duration-slow) allow-discrete;
27
27
  }
28
28
 
29
- .llm-dialog[open] {
29
+ .atl-dialog[open] {
30
30
  display: flex;
31
31
  opacity: 1;
32
32
  transform: scale(1);
33
33
  }
34
34
 
35
35
  @starting-style {
36
- .llm-dialog[open] {
36
+ .atl-dialog[open] {
37
37
  opacity: 0;
38
38
  transform: scale(0.95);
39
39
  }
40
40
  }
41
41
 
42
42
  /* ── Backdrop ────────────────────────────────────────────────────────────── */
43
- .llm-dialog::backdrop {
43
+ .atl-dialog::backdrop {
44
44
  background: var(--ui-color-overlay);
45
45
  backdrop-filter: blur(2px);
46
46
  transition:
@@ -50,18 +50,18 @@
50
50
  }
51
51
 
52
52
  @starting-style {
53
- .llm-dialog[open]::backdrop {
53
+ .atl-dialog[open]::backdrop {
54
54
  opacity: 0;
55
55
  }
56
56
  }
57
57
 
58
58
  @media (prefers-color-scheme: dark) {
59
- .llm-dialog::backdrop {
59
+ .atl-dialog::backdrop {
60
60
  background: var(--ui-color-overlay);
61
61
  }
62
62
  }
63
63
 
64
- [data-theme='dark'] .llm-dialog::backdrop {
64
+ [data-theme='dark'] .atl-dialog::backdrop {
65
65
  background: var(--ui-color-overlay);
66
66
  }
67
67
 
@@ -75,32 +75,32 @@
75
75
  }
76
76
 
77
77
  /* ── Size variants ───────────────────────────────────────────────────────────
78
- * Scoped to the dialog. React applies size-* on the <dialog class="llm-dialog">
78
+ * Scoped to the dialog. React applies size-* on the <dialog class="atl-dialog">
79
79
  * itself; Angular/Vue apply it on the inner .panel — hence the selector pair
80
80
  * (`dialog > .panel` covers both, including Angular's emulated-scoped template,
81
- * which never carries the `llm-dialog` class). Bare `.size-*` selectors leaked
82
- * globally and resized unrelated elements (e.g. `llm-button size-md`). */
83
- .llm-dialog.size-sm,
81
+ * which never carries the `atl-dialog` class). Bare `.size-*` selectors leaked
82
+ * globally and resized unrelated elements (e.g. `atl-button size-md`). */
83
+ .atl-dialog.size-sm,
84
84
  dialog > .panel.size-sm {
85
85
  width: min(24rem, 90vw);
86
86
  }
87
87
 
88
- .llm-dialog.size-md,
88
+ .atl-dialog.size-md,
89
89
  dialog > .panel.size-md {
90
90
  width: min(36rem, 90vw);
91
91
  }
92
92
 
93
- .llm-dialog.size-lg,
93
+ .atl-dialog.size-lg,
94
94
  dialog > .panel.size-lg {
95
95
  width: min(48rem, 90vw);
96
96
  }
97
97
 
98
- .llm-dialog.size-xl,
98
+ .atl-dialog.size-xl,
99
99
  dialog > .panel.size-xl {
100
100
  width: min(64rem, 90vw);
101
101
  }
102
102
 
103
- .llm-dialog.size-full,
103
+ .atl-dialog.size-full,
104
104
  dialog > .panel.size-full {
105
105
  width: 100vw;
106
106
  height: 100dvh;
@@ -111,7 +111,7 @@ dialog > .panel.size-full {
111
111
  }
112
112
 
113
113
  /* ── Sub-components ──────────────────────────────────────────────────────── */
114
- .llm-dialog-header {
114
+ .atl-dialog-header {
115
115
  display: flex;
116
116
  align-items: center;
117
117
  justify-content: space-between;
@@ -124,7 +124,7 @@ dialog > .panel.size-full {
124
124
  flex-shrink: 0;
125
125
  }
126
126
 
127
- .llm-dialog-content {
127
+ .atl-dialog-content {
128
128
  display: block;
129
129
  padding: var(--ui-spacing-6);
130
130
  overflow-y: auto;
@@ -132,7 +132,7 @@ dialog > .panel.size-full {
132
132
  color: var(--ui-color-text);
133
133
  }
134
134
 
135
- .llm-dialog-footer {
135
+ .atl-dialog-footer {
136
136
  display: flex;
137
137
  align-items: center;
138
138
  justify-content: flex-end;
@@ -1,10 +1,10 @@
1
1
  import { ReactNode, HTMLAttributes } from 'react';
2
- import type { LlmDialogSpec } from '../spec';
3
- import './llm-dialog.css';
2
+ import type { AtlDialogSpec } from '../spec';
3
+ import './atl-dialog.css';
4
4
  /**
5
- * Properties for the LlmDialog component.
5
+ * Properties for the AtlDialog component.
6
6
  */
7
- export interface LlmDialogProps extends LlmDialogSpec {
7
+ export interface AtlDialogProps extends AtlDialogSpec {
8
8
  /**
9
9
  * Whether the dialog is open.
10
10
  */
@@ -37,32 +37,32 @@ export interface LlmDialogProps extends LlmDialogSpec {
37
37
  /**
38
38
  * A dialog (modal) component for displaying content on top of the main UI.
39
39
  */
40
- export declare function LlmDialog({ open, onOpenChange, closeOnBackdrop, size, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, children, }: LlmDialogProps): import("react").JSX.Element;
40
+ export declare function AtlDialog({ open, onOpenChange, closeOnBackdrop, size, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, children, }: AtlDialogProps): import("react").JSX.Element;
41
41
  /**
42
- * The header component for an LlmDialog.
42
+ * The header component for an AtlDialog.
43
43
  */
44
- export declare function LlmDialogHeader({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
44
+ export declare function AtlDialogHeader({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
45
45
  /**
46
46
  * The content of the dialog header.
47
47
  */
48
48
  children?: ReactNode;
49
49
  }): import("react").JSX.Element;
50
50
  /**
51
- * The main content component for an LlmDialog.
51
+ * The main content component for an AtlDialog.
52
52
  */
53
- export declare function LlmDialogContent({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
53
+ export declare function AtlDialogContent({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
54
54
  /**
55
55
  * The main content of the dialog.
56
56
  */
57
57
  children?: ReactNode;
58
58
  }): import("react").JSX.Element;
59
59
  /**
60
- * The footer component for an LlmDialog.
60
+ * The footer component for an AtlDialog.
61
61
  */
62
- export declare function LlmDialogFooter({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
62
+ export declare function AtlDialogFooter({ children, className, ...rest }: HTMLAttributes<HTMLDivElement> & {
63
63
  /**
64
64
  * The content of the dialog footer.
65
65
  */
66
66
  children?: ReactNode;
67
67
  }): import("react").JSX.Element;
68
- //# sourceMappingURL=llm-dialog.d.ts.map
68
+ //# sourceMappingURL=atl-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-dialog.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/dialog/llm-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACT,cAAc,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,kBAAkB,CAAC;AAY1B;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC1C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAY,EACZ,YAAY,EACZ,eAAsB,EACtB,IAAW,EACX,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,QAAQ,GACT,EAAE,cAAc,+BA2DhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAiCA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BASA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BASA"}
1
+ {"version":3,"file":"atl-dialog.d.ts","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/dialog/atl-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACT,cAAc,EAEf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,kBAAkB,CAAC;AAY1B;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC1C;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAY,EACZ,YAAY,EACZ,eAAsB,EACtB,IAAW,EACX,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,EACjC,QAAQ,GACT,EAAE,cAAc,+BA2DhB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAiCA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BASA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BASA"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useRef, useId, createContext, useContext, } from 'react';
3
- import './llm-dialog.css';
3
+ import './atl-dialog.css';
4
4
  const DialogContext = createContext({
5
5
  headerId: '',
6
6
  close: () => undefined,
@@ -8,7 +8,7 @@ const DialogContext = createContext({
8
8
  /**
9
9
  * A dialog (modal) component for displaying content on top of the main UI.
10
10
  */
11
- export function LlmDialog({ open = false, onOpenChange, closeOnBackdrop = true, size = 'md', 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, children, }) {
11
+ export function AtlDialog({ open = false, onOpenChange, closeOnBackdrop = true, size = 'md', 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, children, }) {
12
12
  const dialogRef = useRef(null);
13
13
  const headerId = useId();
14
14
  const triggerElRef = useRef(null);
@@ -52,25 +52,25 @@ export function LlmDialog({ open = false, onOpenChange, closeOnBackdrop = true,
52
52
  }
53
53
  };
54
54
  const effectiveAriaLabelledby = ariaLabel ? undefined : (ariaLabelledby ?? headerId);
55
- return (_jsx(DialogContext.Provider, { value: { headerId, close: () => onOpenChange?.(false) }, children: _jsx("dialog", { ref: dialogRef, className: `llm-dialog size-${size}${open ? ' is-open' : ''}`, "aria-label": ariaLabel || undefined, "aria-labelledby": effectiveAriaLabelledby, "aria-modal": "true", onClick: handleBackdropClick, children: _jsx("div", { className: "panel", onClick: (e) => e.stopPropagation(), children: children }) }) }));
55
+ return (_jsx(DialogContext.Provider, { value: { headerId, close: () => onOpenChange?.(false) }, children: _jsx("dialog", { ref: dialogRef, className: `atl-dialog size-${size}${open ? ' is-open' : ''}`, "aria-label": ariaLabel || undefined, "aria-labelledby": effectiveAriaLabelledby, "aria-modal": "true", onClick: handleBackdropClick, children: _jsx("div", { className: "panel", onClick: (e) => e.stopPropagation(), children: children }) }) }));
56
56
  }
57
57
  /**
58
- * The header component for an LlmDialog.
58
+ * The header component for an AtlDialog.
59
59
  */
60
- export function LlmDialogHeader({ children, className, ...rest }) {
60
+ export function AtlDialogHeader({ children, className, ...rest }) {
61
61
  const ctx = useContext(DialogContext);
62
- return (_jsxs("div", { id: ctx.headerId, className: ['llm-dialog-header', className].filter(Boolean).join(' '), ...rest, children: [children, _jsx("button", { className: "close-btn", type: "button", "aria-label": "Close dialog", onClick: ctx.close, children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }));
62
+ return (_jsxs("div", { id: ctx.headerId, className: ['atl-dialog-header', className].filter(Boolean).join(' '), ...rest, children: [children, _jsx("button", { className: "close-btn", type: "button", "aria-label": "Close dialog", onClick: ctx.close, children: _jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }), _jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })] }) })] }));
63
63
  }
64
64
  /**
65
- * The main content component for an LlmDialog.
65
+ * The main content component for an AtlDialog.
66
66
  */
67
- export function LlmDialogContent({ children, className, ...rest }) {
68
- return (_jsx("div", { className: ['llm-dialog-content', className].filter(Boolean).join(' '), ...rest, children: children }));
67
+ export function AtlDialogContent({ children, className, ...rest }) {
68
+ return (_jsx("div", { className: ['atl-dialog-content', className].filter(Boolean).join(' '), ...rest, children: children }));
69
69
  }
70
70
  /**
71
- * The footer component for an LlmDialog.
71
+ * The footer component for an AtlDialog.
72
72
  */
73
- export function LlmDialogFooter({ children, className, ...rest }) {
74
- return (_jsx("div", { className: ['llm-dialog-footer', className].filter(Boolean).join(' '), ...rest, children: children }));
73
+ export function AtlDialogFooter({ children, className, ...rest }) {
74
+ return (_jsx("div", { className: ['atl-dialog-footer', className].filter(Boolean).join(' '), ...rest, children: children }));
75
75
  }
76
- //# sourceMappingURL=llm-dialog.js.map
76
+ //# sourceMappingURL=atl-dialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"llm-dialog.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/dialog/llm-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useEffect,\n useRef,\n useId,\n createContext,\n useContext,\n ReactNode,\n HTMLAttributes,\n MouseEvent,\n} from 'react';\nimport type { LlmDialogSpec } from '../spec';\nimport './llm-dialog.css';\n\ninterface DialogContextValue {\n headerId: string;\n close: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue>({\n headerId: '',\n close: () => undefined,\n});\n\n/**\n * Properties for the LlmDialog component.\n */\nexport interface LlmDialogProps extends LlmDialogSpec {\n /**\n * Whether the dialog is open.\n */\n open?: boolean;\n /**\n * Callback triggered when the open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Whether to close the dialog when clicking on the backdrop.\n */\n closeOnBackdrop?: boolean;\n /**\n * The size of the dialog.\n */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /**\n * Accessible label for the dialog.\n */\n 'aria-label'?: string;\n /**\n * Accessible label provided by another element.\n */\n 'aria-labelledby'?: string;\n /**\n * The content of the dialog.\n */\n children?: ReactNode;\n}\n\n/**\n * A dialog (modal) component for displaying content on top of the main UI.\n */\nexport function LlmDialog({\n open = false,\n onOpenChange,\n closeOnBackdrop = true,\n size = 'md',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n children,\n}: LlmDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const headerId = useId();\n const triggerElRef = useRef<Element | null>(null);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n if (open) {\n triggerElRef.current = document.activeElement;\n if (!dialog.open) dialog.showModal();\n } else {\n if (dialog.open) dialog.close();\n (triggerElRef.current as HTMLElement | null)?.focus();\n triggerElRef.current = null;\n }\n }, [open]);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n const onClose = () => onOpenChange?.(false);\n const onCancel = (e: Event) => {\n e.preventDefault();\n onOpenChange?.(false);\n };\n dialog.addEventListener('close', onClose);\n dialog.addEventListener('cancel', onCancel);\n return () => {\n dialog.removeEventListener('close', onClose);\n dialog.removeEventListener('cancel', onCancel);\n };\n }, [onOpenChange]);\n\n const handleBackdropClick = (e: MouseEvent<HTMLDialogElement>) => {\n if (!closeOnBackdrop) return;\n if (e.target === dialogRef.current) {\n onOpenChange?.(false);\n }\n };\n\n const effectiveAriaLabelledby = ariaLabel ? undefined : (ariaLabelledby ?? headerId);\n\n return (\n <DialogContext.Provider value={{ headerId, close: () => onOpenChange?.(false) }}>\n <dialog\n ref={dialogRef}\n className={`llm-dialog size-${size}${open ? ' is-open' : ''}`}\n aria-label={ariaLabel || undefined}\n aria-labelledby={effectiveAriaLabelledby}\n aria-modal=\"true\"\n onClick={handleBackdropClick}\n >\n <div className=\"panel\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </dialog>\n </DialogContext.Provider>\n );\n}\n\n/**\n * The header component for an LlmDialog.\n */\nexport function LlmDialogHeader({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * The content of the dialog header.\n */\n children?: ReactNode;\n}) {\n const ctx = useContext(DialogContext);\n return (\n <div\n id={ctx.headerId}\n className={['llm-dialog-header', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n <button\n className=\"close-btn\"\n type=\"button\"\n aria-label=\"Close dialog\"\n onClick={ctx.close}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n );\n}\n\n/**\n * The main content component for an LlmDialog.\n */\nexport function LlmDialogContent({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * The main content of the dialog.\n */\n children?: ReactNode;\n}) {\n return (\n <div\n className={['llm-dialog-content', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/**\n * The footer component for an LlmDialog.\n */\nexport function LlmDialogFooter({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * The content of the dialog footer.\n */\n children?: ReactNode;\n}) {\n return (\n <div\n className={['llm-dialog-footer', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"atl-dialog.js","sourceRoot":"","sources":["../../../../../../libs/react/src/lib/dialog/atl-dialog.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n useEffect,\n useRef,\n useId,\n createContext,\n useContext,\n ReactNode,\n HTMLAttributes,\n MouseEvent,\n} from 'react';\nimport type { AtlDialogSpec } from '../spec';\nimport './atl-dialog.css';\n\ninterface DialogContextValue {\n headerId: string;\n close: () => void;\n}\n\nconst DialogContext = createContext<DialogContextValue>({\n headerId: '',\n close: () => undefined,\n});\n\n/**\n * Properties for the AtlDialog component.\n */\nexport interface AtlDialogProps extends AtlDialogSpec {\n /**\n * Whether the dialog is open.\n */\n open?: boolean;\n /**\n * Callback triggered when the open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n /**\n * Whether to close the dialog when clicking on the backdrop.\n */\n closeOnBackdrop?: boolean;\n /**\n * The size of the dialog.\n */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n /**\n * Accessible label for the dialog.\n */\n 'aria-label'?: string;\n /**\n * Accessible label provided by another element.\n */\n 'aria-labelledby'?: string;\n /**\n * The content of the dialog.\n */\n children?: ReactNode;\n}\n\n/**\n * A dialog (modal) component for displaying content on top of the main UI.\n */\nexport function AtlDialog({\n open = false,\n onOpenChange,\n closeOnBackdrop = true,\n size = 'md',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n children,\n}: AtlDialogProps) {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const headerId = useId();\n const triggerElRef = useRef<Element | null>(null);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n if (open) {\n triggerElRef.current = document.activeElement;\n if (!dialog.open) dialog.showModal();\n } else {\n if (dialog.open) dialog.close();\n (triggerElRef.current as HTMLElement | null)?.focus();\n triggerElRef.current = null;\n }\n }, [open]);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n const onClose = () => onOpenChange?.(false);\n const onCancel = (e: Event) => {\n e.preventDefault();\n onOpenChange?.(false);\n };\n dialog.addEventListener('close', onClose);\n dialog.addEventListener('cancel', onCancel);\n return () => {\n dialog.removeEventListener('close', onClose);\n dialog.removeEventListener('cancel', onCancel);\n };\n }, [onOpenChange]);\n\n const handleBackdropClick = (e: MouseEvent<HTMLDialogElement>) => {\n if (!closeOnBackdrop) return;\n if (e.target === dialogRef.current) {\n onOpenChange?.(false);\n }\n };\n\n const effectiveAriaLabelledby = ariaLabel ? undefined : (ariaLabelledby ?? headerId);\n\n return (\n <DialogContext.Provider value={{ headerId, close: () => onOpenChange?.(false) }}>\n <dialog\n ref={dialogRef}\n className={`atl-dialog size-${size}${open ? ' is-open' : ''}`}\n aria-label={ariaLabel || undefined}\n aria-labelledby={effectiveAriaLabelledby}\n aria-modal=\"true\"\n onClick={handleBackdropClick}\n >\n <div className=\"panel\" onClick={(e) => e.stopPropagation()}>\n {children}\n </div>\n </dialog>\n </DialogContext.Provider>\n );\n}\n\n/**\n * The header component for an AtlDialog.\n */\nexport function AtlDialogHeader({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * The content of the dialog header.\n */\n children?: ReactNode;\n}) {\n const ctx = useContext(DialogContext);\n return (\n <div\n id={ctx.headerId}\n className={['atl-dialog-header', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n <button\n className=\"close-btn\"\n type=\"button\"\n aria-label=\"Close dialog\"\n onClick={ctx.close}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n );\n}\n\n/**\n * The main content component for an AtlDialog.\n */\nexport function AtlDialogContent({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * The main content of the dialog.\n */\n children?: ReactNode;\n}) {\n return (\n <div\n className={['atl-dialog-content', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/**\n * The footer component for an AtlDialog.\n */\nexport function AtlDialogFooter({\n children,\n className,\n ...rest\n}: HTMLAttributes<HTMLDivElement> & {\n /**\n * The content of the dialog footer.\n */\n children?: ReactNode;\n}) {\n return (\n <div\n className={['atl-dialog-footer', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n );\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  /* ── Host wrapper ──────────────────────────────────────────────────────────── */
2
- .llm-drawer-host {
2
+ .atl-drawer-host {
3
3
  display: contents;
4
4
  }
5
5
 
6
6
  /* ── Native <dialog> base ──────────────────────────────────────────────────── */
7
- .llm-drawer-host dialog {
7
+ .atl-drawer-host dialog {
8
8
  all: unset;
9
9
  position: fixed;
10
10
  display: none;
@@ -19,13 +19,13 @@
19
19
  overlay var(--ui-duration-slow) allow-discrete;
20
20
  }
21
21
 
22
- .llm-drawer-host dialog[open] {
22
+ .atl-drawer-host dialog[open] {
23
23
  display: flex;
24
24
  transform: translate(0, 0) !important;
25
25
  }
26
26
 
27
27
  /* ── Backdrop ──────────────────────────────────────────────────────────────── */
28
- .llm-drawer-host dialog::backdrop {
28
+ .atl-drawer-host dialog::backdrop {
29
29
  background: var(--ui-color-overlay);
30
30
  backdrop-filter: blur(2px);
31
31
  transition:
@@ -35,23 +35,23 @@
35
35
  }
36
36
 
37
37
  @starting-style {
38
- .llm-drawer-host dialog[open]::backdrop {
38
+ .atl-drawer-host dialog[open]::backdrop {
39
39
  opacity: 0;
40
40
  }
41
41
  }
42
42
 
43
43
  @media (prefers-color-scheme: dark) {
44
- .llm-drawer-host dialog::backdrop {
44
+ .atl-drawer-host dialog::backdrop {
45
45
  background: var(--ui-color-overlay);
46
46
  }
47
47
  }
48
48
 
49
- [data-theme='dark'] .llm-drawer-host dialog::backdrop {
49
+ [data-theme='dark'] .atl-drawer-host dialog::backdrop {
50
50
  background: var(--ui-color-overlay);
51
51
  }
52
52
 
53
53
  /* ── Panel (inner wrapper) ─────────────────────────────────────────────────── */
54
- .llm-drawer-host .panel {
54
+ .atl-drawer-host .panel {
55
55
  display: flex;
56
56
  flex-direction: column;
57
57
  width: 100%;
@@ -64,53 +64,53 @@
64
64
  /* ═══════════════════════════════════════════════════════════════════════════ */
65
65
 
66
66
  /* ── Right ─────────────────────────────────────────────────────────────────── */
67
- .llm-drawer-host.position-right dialog {
67
+ .atl-drawer-host.position-right dialog {
68
68
  inset: 0 0 0 auto;
69
69
  height: 100dvh;
70
70
  transform: translateX(100%);
71
71
  }
72
72
 
73
73
  @starting-style {
74
- .llm-drawer-host.position-right dialog[open] {
74
+ .atl-drawer-host.position-right dialog[open] {
75
75
  transform: translateX(100%);
76
76
  }
77
77
  }
78
78
 
79
79
  /* ── Left ──────────────────────────────────────────────────────────────────── */
80
- .llm-drawer-host.position-left dialog {
80
+ .atl-drawer-host.position-left dialog {
81
81
  inset: 0 auto 0 0;
82
82
  height: 100dvh;
83
83
  transform: translateX(-100%);
84
84
  }
85
85
 
86
86
  @starting-style {
87
- .llm-drawer-host.position-left dialog[open] {
87
+ .atl-drawer-host.position-left dialog[open] {
88
88
  transform: translateX(-100%);
89
89
  }
90
90
  }
91
91
 
92
92
  /* ── Top ───────────────────────────────────────────────────────────────────── */
93
- .llm-drawer-host.position-top dialog {
93
+ .atl-drawer-host.position-top dialog {
94
94
  inset: 0 0 auto 0;
95
95
  width: 100vw;
96
96
  transform: translateY(-100%);
97
97
  }
98
98
 
99
99
  @starting-style {
100
- .llm-drawer-host.position-top dialog[open] {
100
+ .atl-drawer-host.position-top dialog[open] {
101
101
  transform: translateY(-100%);
102
102
  }
103
103
  }
104
104
 
105
105
  /* ── Bottom ────────────────────────────────────────────────────────────────── */
106
- .llm-drawer-host.position-bottom dialog {
106
+ .atl-drawer-host.position-bottom dialog {
107
107
  inset: auto 0 0 0;
108
108
  width: 100vw;
109
109
  transform: translateY(100%);
110
110
  }
111
111
 
112
112
  @starting-style {
113
- .llm-drawer-host.position-bottom dialog[open] {
113
+ .atl-drawer-host.position-bottom dialog[open] {
114
114
  transform: translateY(100%);
115
115
  }
116
116
  }
@@ -120,44 +120,44 @@
120
120
  /* ═══════════════════════════════════════════════════════════════════════════ */
121
121
 
122
122
  /* Left / Right widths */
123
- .llm-drawer-host.position-right.size-sm dialog,
124
- .llm-drawer-host.position-left.size-sm dialog {
123
+ .atl-drawer-host.position-right.size-sm dialog,
124
+ .atl-drawer-host.position-left.size-sm dialog {
125
125
  width: 20rem;
126
126
  }
127
127
 
128
- .llm-drawer-host.position-right.size-md dialog,
129
- .llm-drawer-host.position-left.size-md dialog {
128
+ .atl-drawer-host.position-right.size-md dialog,
129
+ .atl-drawer-host.position-left.size-md dialog {
130
130
  width: 28rem;
131
131
  }
132
132
 
133
- .llm-drawer-host.position-right.size-lg dialog,
134
- .llm-drawer-host.position-left.size-lg dialog {
133
+ .atl-drawer-host.position-right.size-lg dialog,
134
+ .atl-drawer-host.position-left.size-lg dialog {
135
135
  width: 40rem;
136
136
  }
137
137
 
138
- .llm-drawer-host.position-right.size-full dialog,
139
- .llm-drawer-host.position-left.size-full dialog {
138
+ .atl-drawer-host.position-right.size-full dialog,
139
+ .atl-drawer-host.position-left.size-full dialog {
140
140
  width: 100vw;
141
141
  }
142
142
 
143
143
  /* Top / Bottom heights */
144
- .llm-drawer-host.position-top.size-sm dialog,
145
- .llm-drawer-host.position-bottom.size-sm dialog {
144
+ .atl-drawer-host.position-top.size-sm dialog,
145
+ .atl-drawer-host.position-bottom.size-sm dialog {
146
146
  height: 12rem;
147
147
  }
148
148
 
149
- .llm-drawer-host.position-top.size-md dialog,
150
- .llm-drawer-host.position-bottom.size-md dialog {
149
+ .atl-drawer-host.position-top.size-md dialog,
150
+ .atl-drawer-host.position-bottom.size-md dialog {
151
151
  height: 20rem;
152
152
  }
153
153
 
154
- .llm-drawer-host.position-top.size-lg dialog,
155
- .llm-drawer-host.position-bottom.size-lg dialog {
154
+ .atl-drawer-host.position-top.size-lg dialog,
155
+ .atl-drawer-host.position-bottom.size-lg dialog {
156
156
  height: 32rem;
157
157
  }
158
158
 
159
- .llm-drawer-host.position-top.size-full dialog,
160
- .llm-drawer-host.position-bottom.size-full dialog {
159
+ .atl-drawer-host.position-top.size-full dialog,
160
+ .atl-drawer-host.position-bottom.size-full dialog {
161
161
  height: 100dvh;
162
162
  }
163
163
 
@@ -165,7 +165,7 @@
165
165
  /* SUB-COMPONENTS */
166
166
  /* ═══════════════════════════════════════════════════════════════════════════ */
167
167
 
168
- .llm-drawer-header {
168
+ .atl-drawer-header {
169
169
  display: flex;
170
170
  align-items: center;
171
171
  justify-content: space-between;
@@ -178,7 +178,7 @@
178
178
  flex-shrink: 0;
179
179
  }
180
180
 
181
- .llm-drawer-content {
181
+ .atl-drawer-content {
182
182
  display: block;
183
183
  padding: var(--ui-spacing-6);
184
184
  overflow-y: auto;
@@ -186,7 +186,7 @@
186
186
  color: var(--ui-color-text);
187
187
  }
188
188
 
189
- .llm-drawer-footer {
189
+ .atl-drawer-footer {
190
190
  display: flex;
191
191
  align-items: center;
192
192
  justify-content: flex-end;