@mieweb/ui 0.7.3-dev.2 → 0.7.3-dev.20

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 (215) hide show
  1. package/README.md +45 -24
  2. package/agent/README.md +20 -0
  3. package/agent/init-agent.mjs +61 -0
  4. package/agent/mieweb-ui.instructions.md +169 -0
  5. package/dist/ag-grid.cjs +11 -0
  6. package/dist/ag-grid.cjs.map +1 -1
  7. package/dist/ag-grid.d.cts +4 -0
  8. package/dist/ag-grid.d.ts +4 -0
  9. package/dist/ag-grid.js +11 -0
  10. package/dist/ag-grid.js.map +1 -1
  11. package/dist/brands/index.cjs +17 -17
  12. package/dist/brands/index.js +4 -4
  13. package/dist/chunk-3IMM2PM4.js +259 -0
  14. package/dist/chunk-3IMM2PM4.js.map +1 -0
  15. package/dist/{chunk-CVZYOMEW.js → chunk-3Z7CLG4U.js} +184 -3
  16. package/dist/chunk-3Z7CLG4U.js.map +1 -0
  17. package/dist/{chunk-Z4PECE5S.js → chunk-4PJ24GQ4.js} +2 -2
  18. package/dist/{chunk-Z4PECE5S.js.map → chunk-4PJ24GQ4.js.map} +1 -1
  19. package/dist/{chunk-ZBI52NP2.cjs → chunk-56QJHQ5C.cjs} +156 -39
  20. package/dist/chunk-56QJHQ5C.cjs.map +1 -0
  21. package/dist/{chunk-KRGKPUJH.js → chunk-5D253OQS.js} +7 -7
  22. package/dist/{chunk-KRGKPUJH.js.map → chunk-5D253OQS.js.map} +1 -1
  23. package/dist/chunk-6NZXWKUE.js +3 -0
  24. package/dist/chunk-6NZXWKUE.js.map +1 -0
  25. package/dist/{chunk-KFLDXJEE.js → chunk-753Z3NXL.js} +46 -15
  26. package/dist/chunk-753Z3NXL.js.map +1 -0
  27. package/dist/{chunk-S3MKIDYG.cjs → chunk-7AECNMYV.cjs} +46 -15
  28. package/dist/chunk-7AECNMYV.cjs.map +1 -0
  29. package/dist/{chunk-LC7YHZXM.js → chunk-A5YOIJKL.js} +5 -5
  30. package/dist/{chunk-LC7YHZXM.js.map → chunk-A5YOIJKL.js.map} +1 -1
  31. package/dist/{chunk-RBS3GHDZ.cjs → chunk-BOW7ZGI2.cjs} +4 -4
  32. package/dist/{chunk-RBS3GHDZ.cjs.map → chunk-BOW7ZGI2.cjs.map} +1 -1
  33. package/dist/{chunk-WUNWHOLA.cjs → chunk-BSDBI6H7.cjs} +116 -26
  34. package/dist/chunk-BSDBI6H7.cjs.map +1 -0
  35. package/dist/chunk-ELYGV32O.cjs +230 -0
  36. package/dist/chunk-ELYGV32O.cjs.map +1 -0
  37. package/dist/{chunk-QUUBTNMH.js → chunk-EPSB4WTL.js} +45 -15
  38. package/dist/chunk-EPSB4WTL.js.map +1 -0
  39. package/dist/chunk-F57VRLKP.js +708 -0
  40. package/dist/chunk-F57VRLKP.js.map +1 -0
  41. package/dist/{chunk-5IDYOJHO.cjs → chunk-G7EQ3JPX.cjs} +45 -15
  42. package/dist/chunk-G7EQ3JPX.cjs.map +1 -0
  43. package/dist/{chunk-FKLUSYFP.cjs → chunk-GQVL2JKQ.cjs} +4 -4
  44. package/dist/{chunk-FKLUSYFP.cjs.map → chunk-GQVL2JKQ.cjs.map} +1 -1
  45. package/dist/{chunk-3D4ITDLO.js → chunk-GXODR6V4.js} +3 -3
  46. package/dist/{chunk-3D4ITDLO.js.map → chunk-GXODR6V4.js.map} +1 -1
  47. package/dist/{chunk-AFGADE3B.js → chunk-H3YO5GBM.js} +117 -27
  48. package/dist/chunk-H3YO5GBM.js.map +1 -0
  49. package/dist/chunk-I44YNYI6.cjs +4 -0
  50. package/dist/chunk-I44YNYI6.cjs.map +1 -0
  51. package/dist/{chunk-EGWWTIWS.js → chunk-IILJGFI5.js} +125 -95
  52. package/dist/chunk-IILJGFI5.js.map +1 -0
  53. package/dist/{chunk-6J7UGYT5.cjs → chunk-JHGMZX4I.cjs} +47 -7
  54. package/dist/chunk-JHGMZX4I.cjs.map +1 -0
  55. package/dist/{chunk-JDHIBJ5K.cjs → chunk-JWTCEWQ4.cjs} +2 -2
  56. package/dist/{chunk-JDHIBJ5K.cjs.map → chunk-JWTCEWQ4.cjs.map} +1 -1
  57. package/dist/{chunk-GTHNWP4P.js → chunk-KGS7BL5T.js} +2 -2
  58. package/dist/{chunk-GTHNWP4P.js.map → chunk-KGS7BL5T.js.map} +1 -1
  59. package/dist/{chunk-URHXR5SC.cjs → chunk-KVE7PQ5P.cjs} +7 -7
  60. package/dist/{chunk-URHXR5SC.cjs.map → chunk-KVE7PQ5P.cjs.map} +1 -1
  61. package/dist/{chunk-LJBWCUKP.cjs → chunk-LGYGKLJL.cjs} +2 -2
  62. package/dist/{chunk-LJBWCUKP.cjs.map → chunk-LGYGKLJL.cjs.map} +1 -1
  63. package/dist/{chunk-SYIFEJSF.cjs → chunk-LQHI44OZ.cjs} +13 -13
  64. package/dist/{chunk-SYIFEJSF.cjs.map → chunk-LQHI44OZ.cjs.map} +1 -1
  65. package/dist/{chunk-HIDV32ZX.js → chunk-LZU7YBXG.js} +3 -3
  66. package/dist/{chunk-HIDV32ZX.js.map → chunk-LZU7YBXG.js.map} +1 -1
  67. package/dist/chunk-NMBYU7D7.cjs +31 -0
  68. package/dist/chunk-NMBYU7D7.cjs.map +1 -0
  69. package/dist/{chunk-P6L74SKG.js → chunk-QGZC43L7.js} +47 -7
  70. package/dist/chunk-QGZC43L7.js.map +1 -0
  71. package/dist/{chunk-FTRGZOVJ.js → chunk-QHTDWIED.js} +3 -3
  72. package/dist/{chunk-FTRGZOVJ.js.map → chunk-QHTDWIED.js.map} +1 -1
  73. package/dist/chunk-RUGHNFQG.js +28 -0
  74. package/dist/chunk-RUGHNFQG.js.map +1 -0
  75. package/dist/{chunk-MO65V64I.js → chunk-TXRQQMG5.js} +2 -2
  76. package/dist/{chunk-MO65V64I.js.map → chunk-TXRQQMG5.js.map} +1 -1
  77. package/dist/{chunk-OAHORW4N.cjs → chunk-U5TTXN45.cjs} +127 -97
  78. package/dist/chunk-U5TTXN45.cjs.map +1 -0
  79. package/dist/{chunk-MJFF4AXH.cjs → chunk-VNNFI5DQ.cjs} +184 -3
  80. package/dist/chunk-VNNFI5DQ.cjs.map +1 -0
  81. package/dist/{chunk-XB54G7WS.cjs → chunk-WG6MPHWK.cjs} +2 -2
  82. package/dist/{chunk-XB54G7WS.cjs.map → chunk-WG6MPHWK.cjs.map} +1 -1
  83. package/dist/{chunk-NQ2D2V6O.cjs → chunk-X5OS45WZ.cjs} +36 -36
  84. package/dist/{chunk-NQ2D2V6O.cjs.map → chunk-X5OS45WZ.cjs.map} +1 -1
  85. package/dist/{chunk-DLBV42JD.js → chunk-XBKOZRDO.js} +156 -39
  86. package/dist/chunk-XBKOZRDO.js.map +1 -0
  87. package/dist/chunk-XMECP2MD.js +208 -0
  88. package/dist/chunk-XMECP2MD.js.map +1 -0
  89. package/dist/chunk-YVIH26FG.cjs +736 -0
  90. package/dist/chunk-YVIH26FG.cjs.map +1 -0
  91. package/dist/chunk-Z5S5JEJD.cjs +286 -0
  92. package/dist/chunk-Z5S5JEJD.cjs.map +1 -0
  93. package/dist/{collabKit-QZL4P5T5.js → collabKit-A643VH2I.js} +7 -3
  94. package/dist/collabKit-A643VH2I.js.map +1 -0
  95. package/dist/{collabKit-UF7E6V3N.cjs → collabKit-Q4A36LDA.cjs} +7 -3
  96. package/dist/collabKit-Q4A36LDA.cjs.map +1 -0
  97. package/dist/components/Alert/index.d.cts +1 -1
  98. package/dist/components/Alert/index.d.ts +1 -1
  99. package/dist/components/Autocomplete/index.cjs +4 -3
  100. package/dist/components/Autocomplete/index.d.cts +20 -3
  101. package/dist/components/Autocomplete/index.d.ts +20 -3
  102. package/dist/components/Autocomplete/index.js +3 -2
  103. package/dist/components/Badge/index.d.cts +1 -1
  104. package/dist/components/Badge/index.d.ts +1 -1
  105. package/dist/components/Card/index.d.cts +1 -1
  106. package/dist/components/Card/index.d.ts +1 -1
  107. package/dist/components/Checkbox/index.cjs +5 -4
  108. package/dist/components/Checkbox/index.d.cts +9 -1
  109. package/dist/components/Checkbox/index.d.ts +9 -1
  110. package/dist/components/Checkbox/index.js +2 -1
  111. package/dist/components/CustomizableDashboard/index.cjs +43 -0
  112. package/dist/components/CustomizableDashboard/index.cjs.map +1 -0
  113. package/dist/components/CustomizableDashboard/index.d.cts +195 -0
  114. package/dist/components/CustomizableDashboard/index.d.ts +195 -0
  115. package/dist/components/CustomizableDashboard/index.js +10 -0
  116. package/dist/components/CustomizableDashboard/index.js.map +1 -0
  117. package/dist/components/DateInput/index.cjs +4 -3
  118. package/dist/components/DateInput/index.d.cts +1 -0
  119. package/dist/components/DateInput/index.d.ts +1 -0
  120. package/dist/components/DateInput/index.js +3 -2
  121. package/dist/components/Dropdown/index.cjs +9 -8
  122. package/dist/components/Dropdown/index.js +3 -2
  123. package/dist/components/Input/index.cjs +20 -3
  124. package/dist/components/Input/index.d.cts +37 -2
  125. package/dist/components/Input/index.d.ts +37 -2
  126. package/dist/components/Input/index.js +2 -1
  127. package/dist/components/Markdown/index.cjs +10 -10
  128. package/dist/components/Markdown/index.js +2 -2
  129. package/dist/components/MediaEditor/index.cjs +10 -9
  130. package/dist/components/MediaEditor/index.js +5 -4
  131. package/dist/components/PhoneInput/index.cjs +5 -4
  132. package/dist/components/PhoneInput/index.js +3 -2
  133. package/dist/components/Progress/index.d.cts +1 -1
  134. package/dist/components/Progress/index.d.ts +1 -1
  135. package/dist/components/Radio/index.cjs +5 -4
  136. package/dist/components/Radio/index.d.cts +9 -1
  137. package/dist/components/Radio/index.d.ts +9 -1
  138. package/dist/components/Radio/index.js +2 -1
  139. package/dist/components/RichTextEditor/index.cjs +7 -6
  140. package/dist/components/RichTextEditor/index.js +4 -3
  141. package/dist/components/Select/index.cjs +5 -3
  142. package/dist/components/Select/index.d.cts +56 -9
  143. package/dist/components/Select/index.d.ts +56 -9
  144. package/dist/components/Select/index.js +3 -1
  145. package/dist/components/Slider/index.d.cts +2 -2
  146. package/dist/components/Slider/index.d.ts +2 -2
  147. package/dist/components/SourceTip/index.cjs +15 -0
  148. package/dist/components/SourceTip/index.cjs.map +1 -0
  149. package/dist/components/SourceTip/index.d.cts +58 -0
  150. package/dist/components/SourceTip/index.d.ts +58 -0
  151. package/dist/components/SourceTip/index.js +6 -0
  152. package/dist/components/SourceTip/index.js.map +1 -0
  153. package/dist/components/Spinner/index.d.cts +1 -1
  154. package/dist/components/Spinner/index.d.ts +1 -1
  155. package/dist/components/SuperChat/index.cjs +7 -6
  156. package/dist/components/SuperChat/index.cjs.map +1 -1
  157. package/dist/components/SuperChat/index.js +3 -2
  158. package/dist/components/SuperChat/index.js.map +1 -1
  159. package/dist/components/SuperChat/plugins/index.cjs +2 -22
  160. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  161. package/dist/components/SuperChat/plugins/index.js +1 -21
  162. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  163. package/dist/components/Text/index.d.cts +1 -1
  164. package/dist/components/Text/index.d.ts +1 -1
  165. package/dist/components/Textarea/index.cjs +5 -3
  166. package/dist/components/Textarea/index.d.cts +19 -1
  167. package/dist/components/Textarea/index.d.ts +19 -1
  168. package/dist/components/Textarea/index.js +3 -1
  169. package/dist/esheet.cjs +10 -9
  170. package/dist/esheet.cjs.map +1 -1
  171. package/dist/esheet.js +7 -6
  172. package/dist/esheet.js.map +1 -1
  173. package/dist/hooks/index.cjs +23 -14
  174. package/dist/hooks/index.d.cts +16 -1
  175. package/dist/hooks/index.d.ts +16 -1
  176. package/dist/hooks/index.js +2 -1
  177. package/dist/index.cjs +753 -445
  178. package/dist/index.cjs.map +1 -1
  179. package/dist/index.d.cts +73 -10
  180. package/dist/index.d.ts +73 -10
  181. package/dist/index.js +291 -40
  182. package/dist/index.js.map +1 -1
  183. package/dist/kerebron.cjs +200 -68
  184. package/dist/kerebron.cjs.map +1 -1
  185. package/dist/kerebron.css +129 -0
  186. package/dist/kerebron.d.cts +52 -3
  187. package/dist/kerebron.d.ts +52 -3
  188. package/dist/kerebron.js +201 -69
  189. package/dist/kerebron.js.map +1 -1
  190. package/dist/styles.css +1 -1
  191. package/dist/tailwind-preset.cjs +4 -4
  192. package/dist/tailwind-preset.js +1 -1
  193. package/dist/utils/index.cjs +9 -9
  194. package/dist/utils/index.js +1 -1
  195. package/package.json +11 -4
  196. package/dist/chunk-5IDYOJHO.cjs.map +0 -1
  197. package/dist/chunk-6ECKH4DJ.cjs +0 -147
  198. package/dist/chunk-6ECKH4DJ.cjs.map +0 -1
  199. package/dist/chunk-6J7UGYT5.cjs.map +0 -1
  200. package/dist/chunk-AFGADE3B.js.map +0 -1
  201. package/dist/chunk-CVZYOMEW.js.map +0 -1
  202. package/dist/chunk-DLBV42JD.js.map +0 -1
  203. package/dist/chunk-EGWWTIWS.js.map +0 -1
  204. package/dist/chunk-KFLDXJEE.js.map +0 -1
  205. package/dist/chunk-MJFF4AXH.cjs.map +0 -1
  206. package/dist/chunk-OAHORW4N.cjs.map +0 -1
  207. package/dist/chunk-P6L74SKG.js.map +0 -1
  208. package/dist/chunk-QUUBTNMH.js.map +0 -1
  209. package/dist/chunk-S3MKIDYG.cjs.map +0 -1
  210. package/dist/chunk-WUNWHOLA.cjs.map +0 -1
  211. package/dist/chunk-YXCE2HSK.js +0 -124
  212. package/dist/chunk-YXCE2HSK.js.map +0 -1
  213. package/dist/chunk-ZBI52NP2.cjs.map +0 -1
  214. package/dist/collabKit-QZL4P5T5.js.map +0 -1
  215. package/dist/collabKit-UF7E6V3N.cjs.map +0 -1
@@ -1,5 +1,6 @@
1
1
  'use strict';
2
2
 
3
+ var chunkZ5S5JEJD_cjs = require('./chunk-Z5S5JEJD.cjs');
3
4
  var chunkFHY3K6PL_cjs = require('./chunk-FHY3K6PL.cjs');
4
5
  var chunkFSGEDDF2_cjs = require('./chunk-FSGEDDF2.cjs');
5
6
  var chunkMYFZYUPR_cjs = require('./chunk-MYFZYUPR.cjs');
@@ -48,37 +49,97 @@ var selectTriggerVariants = classVarianceAuthority.cva(
48
49
  hasError: {
49
50
  true: "border-destructive focus:ring-destructive",
50
51
  false: ""
52
+ },
53
+ labelVariant: {
54
+ stacked: "",
55
+ floating: "peer"
56
+ }
57
+ },
58
+ compoundVariants: [
59
+ { labelVariant: "floating", size: "sm", className: "h-11" },
60
+ { labelVariant: "floating", size: "md", className: "h-14" },
61
+ { labelVariant: "floating", size: "lg", className: "h-16" }
62
+ ],
63
+ defaultVariants: {
64
+ size: "md",
65
+ hasError: false,
66
+ labelVariant: "stacked"
67
+ }
68
+ }
69
+ );
70
+ var floatingLabelVariants = classVarianceAuthority.cva(
71
+ [
72
+ "absolute start-3 pointer-events-none select-none",
73
+ "transition-all duration-200 ease-out"
74
+ ],
75
+ {
76
+ variants: {
77
+ size: {
78
+ sm: [
79
+ "peer-focus:top-0.5 peer-focus:translate-y-0 peer-focus:text-[0.65rem]"
80
+ ],
81
+ md: ["peer-focus:top-1 peer-focus:translate-y-0 peer-focus:text-xs"],
82
+ lg: ["peer-focus:top-1.5 peer-focus:translate-y-0 peer-focus:text-sm"]
83
+ },
84
+ floated: {
85
+ true: "",
86
+ false: "top-1/2 -translate-y-1/2"
87
+ },
88
+ hasError: {
89
+ true: "text-destructive",
90
+ false: "text-muted-foreground"
51
91
  }
52
92
  },
93
+ compoundVariants: [
94
+ { size: "sm", floated: false, className: "text-sm" },
95
+ { size: "md", floated: false, className: "text-base" },
96
+ { size: "lg", floated: false, className: "text-lg" },
97
+ {
98
+ size: "sm",
99
+ floated: true,
100
+ className: "top-0.5 translate-y-0 text-[0.65rem]"
101
+ },
102
+ { size: "md", floated: true, className: "top-1 translate-y-0 text-xs" },
103
+ { size: "lg", floated: true, className: "top-1.5 translate-y-0 text-sm" }
104
+ ],
53
105
  defaultVariants: {
54
106
  size: "md",
107
+ floated: false,
55
108
  hasError: false
56
109
  }
57
110
  }
58
111
  );
59
- function Select({
60
- options,
61
- value: controlledValue,
62
- defaultValue,
63
- onValueChange,
64
- placeholder = "Select an option",
65
- disabled = false,
66
- label,
67
- hideLabel = false,
68
- error,
69
- helperText,
70
- size,
71
- hasError,
72
- "aria-label": ariaLabel,
73
- searchable = false,
74
- searchPlaceholder = "Search...",
75
- noResultsText = "No results found",
76
- className,
77
- id
78
- }) {
112
+ var floatingValuePadding = {
113
+ sm: "pt-4 pb-1",
114
+ md: "pt-5 pb-1.5",
115
+ lg: "pt-6 pb-2"
116
+ };
117
+ function Select(props) {
118
+ const {
119
+ options,
120
+ placeholder = "Select an option",
121
+ disabled = false,
122
+ label,
123
+ hideLabel = false,
124
+ labelVariant = "stacked",
125
+ error,
126
+ helperText,
127
+ required = false,
128
+ requiredVariant,
129
+ size,
130
+ hasError,
131
+ "aria-label": ariaLabel,
132
+ searchable = false,
133
+ searchPlaceholder = "Search...",
134
+ noResultsText = "No results found",
135
+ className,
136
+ id
137
+ } = props;
138
+ const multiple = props.multiple === true;
139
+ const onValueChange = props.onValueChange;
79
140
  const [isOpen, setIsOpen] = React__namespace.useState(false);
80
- const [uncontrolledValue, setUncontrolledValue] = React__namespace.useState(
81
- defaultValue || ""
141
+ const [uncontrolledValues, setUncontrolledValues] = React__namespace.useState(
142
+ () => toValueArray(props.defaultValue)
82
143
  );
83
144
  const [searchQuery, setSearchQuery] = React__namespace.useState("");
84
145
  const [highlightedIndex, setHighlightedIndex] = React__namespace.useState(-1);
@@ -96,8 +157,13 @@ function Select({
96
157
  const listboxId = `${selectId}-listbox`;
97
158
  const errorId = `${selectId}-error`;
98
159
  const helperId = `${selectId}-helper`;
99
- const isControlled = controlledValue !== void 0;
100
- const value = isControlled ? controlledValue : uncontrolledValue;
160
+ const isControlled = props.value !== void 0;
161
+ const controlledValue = props.value;
162
+ const controlledValues = React__namespace.useMemo(
163
+ () => toValueArray(controlledValue),
164
+ [controlledValue]
165
+ );
166
+ const selectedValues = isControlled ? controlledValues : uncontrolledValues;
101
167
  const flatOptions = React__namespace.useMemo(() => {
102
168
  const result = [];
103
169
  for (const item of options) {
@@ -140,7 +206,9 @@ function Select({
140
206
  }
141
207
  return result;
142
208
  }, [filteredOptions]);
143
- const selectedOption = flatOptions.find((opt) => opt.value === value);
209
+ const selectedOptions = selectedValues.map((v) => flatOptions.find((opt) => opt.value === v)).filter((opt) => opt !== void 0);
210
+ const hasSelection = selectedOptions.length > 0;
211
+ const displayLabel = selectedOptions.map((opt) => opt.label).join(", ");
144
212
  const outsideRefs = React__namespace.useMemo(() => [containerRef, dropdownRef], []);
145
213
  chunkFSGEDDF2_cjs.useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);
146
214
  chunkFHY3K6PL_cjs.useEscapeKey(() => {
@@ -159,16 +227,29 @@ function Select({
159
227
  maxHeight: 300
160
228
  });
161
229
  const handleValueChange = React__namespace.useCallback(
162
- (newValue) => {
230
+ (optionValue) => {
231
+ if (multiple) {
232
+ const next = selectedValues.includes(optionValue) ? selectedValues.filter((v) => v !== optionValue) : [...selectedValues, optionValue];
233
+ if (!isControlled) {
234
+ setUncontrolledValues(next);
235
+ }
236
+ onValueChange?.(next);
237
+ if (searchable) {
238
+ searchInputRef.current?.focus();
239
+ } else {
240
+ triggerRef.current?.focus();
241
+ }
242
+ return;
243
+ }
163
244
  if (!isControlled) {
164
- setUncontrolledValue(newValue);
245
+ setUncontrolledValues([optionValue]);
165
246
  }
166
- onValueChange?.(newValue);
247
+ onValueChange?.(optionValue);
167
248
  setIsOpen(false);
168
249
  setSearchQuery("");
169
250
  triggerRef.current?.focus();
170
251
  },
171
- [isControlled, onValueChange]
252
+ [isControlled, multiple, onValueChange, searchable, selectedValues]
172
253
  );
173
254
  const handleKeyDown = React__namespace.useCallback(
174
255
  (e) => {
@@ -289,13 +370,17 @@ function Select({
289
370
  error ? errorId : null,
290
371
  helperText && !error ? helperId : null
291
372
  ].filter(Boolean).join(" ");
373
+ const isFloating = labelVariant === "floating" && !!label && !hideLabel;
374
+ const isFloated = isOpen || hasSelection;
375
+ const resolvedSize = size ?? "md";
376
+ const requiredMark = required && /* @__PURE__ */ jsxRuntime.jsx(chunkZ5S5JEJD_cjs.RequiredMark, { variant: requiredVariant });
292
377
  return /* @__PURE__ */ jsxRuntime.jsxs(
293
378
  "div",
294
379
  {
295
380
  "data-slot": "select-wrapper",
296
381
  className: chunkS5RVSXDV_cjs.cn("flex flex-col gap-1.5", className),
297
382
  children: [
298
- label && /* @__PURE__ */ jsxRuntime.jsx(
383
+ label && !isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
299
384
  "label",
300
385
  {
301
386
  "data-slot": "select-label",
@@ -304,7 +389,10 @@ function Select({
304
389
  "text-foreground text-sm font-medium",
305
390
  hideLabel && "sr-only"
306
391
  ),
307
- children: label
392
+ children: [
393
+ label,
394
+ requiredMark
395
+ ]
308
396
  }
309
397
  ),
310
398
  /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: containerRef, className: "relative", children: [
@@ -321,15 +409,20 @@ function Select({
321
409
  role: "combobox",
322
410
  "aria-haspopup": "listbox",
323
411
  "aria-expanded": isOpen,
324
- "aria-controls": listboxId,
412
+ "aria-controls": isOpen ? listboxId : void 0,
325
413
  "aria-invalid": hasError || !!error,
414
+ "aria-required": required || void 0,
326
415
  "aria-label": !label ? ariaLabel : void 0,
327
416
  "aria-describedby": describedByIds || void 0,
328
417
  disabled,
329
418
  onClick: () => setIsOpen(!isOpen),
330
419
  onKeyDown: handleKeyDown,
331
420
  className: chunkS5RVSXDV_cjs.cn(
332
- selectTriggerVariants({ size, hasError: hasError || !!error })
421
+ selectTriggerVariants({
422
+ size,
423
+ hasError: hasError || !!error,
424
+ labelVariant: isFloating ? "floating" : "stacked"
425
+ })
333
426
  ),
334
427
  children: [
335
428
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -337,9 +430,10 @@ function Select({
337
430
  {
338
431
  className: chunkS5RVSXDV_cjs.cn(
339
432
  "truncate",
340
- !selectedOption && "text-muted-foreground"
433
+ !hasSelection && "text-muted-foreground",
434
+ isFloating && floatingValuePadding[resolvedSize]
341
435
  ),
342
- children: selectedOption?.label || placeholder
436
+ children: isFloating ? hasSelection ? displayLabel : "\xA0" : hasSelection ? displayLabel : placeholder
343
437
  }
344
438
  ),
345
439
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -354,6 +448,22 @@ function Select({
354
448
  ]
355
449
  }
356
450
  ),
451
+ isFloating && /* @__PURE__ */ jsxRuntime.jsxs(
452
+ "label",
453
+ {
454
+ "data-slot": "select-label",
455
+ htmlFor: selectId,
456
+ className: floatingLabelVariants({
457
+ size: resolvedSize,
458
+ floated: isFloated,
459
+ hasError: hasError || !!error
460
+ }),
461
+ children: [
462
+ label,
463
+ requiredMark
464
+ ]
465
+ }
466
+ ),
357
467
  isOpen && reactDom.createPortal(
358
468
  /* @__PURE__ */ jsxRuntime.jsxs(
359
469
  "div",
@@ -401,6 +511,7 @@ function Select({
401
511
  id: listboxId,
402
512
  role: "listbox",
403
513
  "aria-label": label || "Options",
514
+ "aria-multiselectable": multiple || void 0,
404
515
  "data-slot": "select-listbox",
405
516
  className: "flex-1 overflow-auto p-1",
406
517
  children: filteredFlatOptions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("li", { className: "text-muted-foreground px-3 py-2 text-center text-sm", children: noResultsText }) : filteredOptions.map((item) => {
@@ -418,7 +529,9 @@ function Select({
418
529
  SelectOptionItem,
419
530
  {
420
531
  option,
421
- isSelected: option.value === value,
532
+ isSelected: selectedValues.includes(
533
+ option.value
534
+ ),
422
535
  isHighlighted: filteredFlatOptions[highlightedIndex]?.value === option.value,
423
536
  onSelect: () => handleValueChange(option.value),
424
537
  onMouseEnter: () => {
@@ -436,7 +549,7 @@ function Select({
436
549
  SelectOptionItem,
437
550
  {
438
551
  option: item,
439
- isSelected: item.value === value,
552
+ isSelected: selectedValues.includes(item.value),
440
553
  isHighlighted: filteredFlatOptions[highlightedIndex]?.value === item.value,
441
554
  onSelect: () => handleValueChange(item.value),
442
555
  onMouseEnter: () => {
@@ -481,6 +594,10 @@ function Select({
481
594
  );
482
595
  }
483
596
  Select.displayName = "Select";
597
+ function toValueArray(value) {
598
+ if (value === void 0 || value === "") return [];
599
+ return Array.isArray(value) ? value : [value];
600
+ }
484
601
  function SelectOptionItem({
485
602
  option,
486
603
  isSelected,
@@ -564,5 +681,5 @@ function CheckIcon({ className }) {
564
681
 
565
682
  exports.Select = Select;
566
683
  exports.selectTriggerVariants = selectTriggerVariants;
567
- //# sourceMappingURL=chunk-ZBI52NP2.cjs.map
568
- //# sourceMappingURL=chunk-ZBI52NP2.cjs.map
684
+ //# sourceMappingURL=chunk-56QJHQ5C.cjs.map
685
+ //# sourceMappingURL=chunk-56QJHQ5C.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Select/Select.tsx"],"names":["cva","React","useClickOutside","useEscapeKey","useAnchoredPosition","jsx","RequiredMark","jsxs","cn","createPortal"],"mappings":"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","file":"chunk-56QJHQ5C.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useAnchoredPosition } from '../../hooks/useAnchoredPosition';\nimport { RequiredMark, type RequiredMarkVariant } from '../Input';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectOption {\n /** Unique value for the option */\n value: string;\n /** Display label for the option */\n label: string;\n /** Whether the option is disabled */\n disabled?: boolean;\n /** Optional group this option belongs to */\n group?: string;\n}\n\nexport interface SelectGroup {\n /** Group label */\n label: string;\n /** Options in this group */\n options: SelectOption[];\n}\n\n// ============================================================================\n// Variants\n// ============================================================================\n\nconst selectTriggerVariants = cva(\n [\n 'flex w-full items-center justify-between gap-2',\n 'border border-input rounded-lg',\n 'bg-background text-foreground',\n 'transition-colors duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-ring focus:border-transparent',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-sm',\n md: 'h-10 px-3 text-base',\n lg: 'h-12 px-4 text-lg',\n },\n hasError: {\n true: 'border-destructive focus:ring-destructive',\n false: '',\n },\n labelVariant: {\n stacked: '',\n floating: 'peer',\n },\n },\n compoundVariants: [\n { labelVariant: 'floating', size: 'sm', className: 'h-11' },\n { labelVariant: 'floating', size: 'md', className: 'h-14' },\n { labelVariant: 'floating', size: 'lg', className: 'h-16' },\n ],\n defaultVariants: {\n size: 'md',\n hasError: false,\n labelVariant: 'stacked',\n },\n }\n);\n\nconst floatingLabelVariants = cva(\n [\n 'absolute start-3 pointer-events-none select-none',\n 'transition-all duration-200 ease-out',\n ],\n {\n variants: {\n size: {\n sm: [\n 'peer-focus:top-0.5 peer-focus:translate-y-0 peer-focus:text-[0.65rem]',\n ],\n md: ['peer-focus:top-1 peer-focus:translate-y-0 peer-focus:text-xs'],\n lg: ['peer-focus:top-1.5 peer-focus:translate-y-0 peer-focus:text-sm'],\n },\n floated: {\n true: '',\n false: 'top-1/2 -translate-y-1/2',\n },\n hasError: {\n true: 'text-destructive',\n false: 'text-muted-foreground',\n },\n },\n compoundVariants: [\n { size: 'sm', floated: false, className: 'text-sm' },\n { size: 'md', floated: false, className: 'text-base' },\n { size: 'lg', floated: false, className: 'text-lg' },\n {\n size: 'sm',\n floated: true,\n className: 'top-0.5 translate-y-0 text-[0.65rem]',\n },\n { size: 'md', floated: true, className: 'top-1 translate-y-0 text-xs' },\n { size: 'lg', floated: true, className: 'top-1.5 translate-y-0 text-sm' },\n ],\n defaultVariants: {\n size: 'md',\n floated: false,\n hasError: false,\n },\n }\n);\n\nconst floatingValuePadding = {\n sm: 'pt-4 pb-1',\n md: 'pt-5 pb-1.5',\n lg: 'pt-6 pb-2',\n} as const;\n\n// ============================================================================\n// Select Component\n// ============================================================================\n\n/**\n * Props shared by both single- and multiple-selection modes. Exported so\n * wrapper components can extend the common shape (`SelectProps` itself is a\n * discriminated union, which interfaces cannot extend).\n */\nexport interface SelectBaseProps extends Omit<\n VariantProps<typeof selectTriggerVariants>,\n 'labelVariant'\n> {\n /** Array of options or groups */\n options: (SelectOption | SelectGroup)[];\n /** Placeholder text */\n placeholder?: string;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Label for the select */\n label?: string;\n /** Hide the label visually */\n hideLabel?: boolean;\n /**\n * Visual style of the label.\n * - `stacked` (default): label sits above the trigger.\n * - `floating`: label rests inside the trigger like a placeholder and\n * floats up (staying inside the trigger) when open or a value is\n * selected. The `placeholder` prop is ignored in this mode.\n */\n labelVariant?: 'stacked' | 'floating';\n /** Error message */\n error?: string;\n /** Helper text */\n helperText?: string;\n /** Whether a selection is required (shows an asterisk next to the label) */\n required?: boolean;\n /**\n * Color of the required asterisk.\n * - `default`: destructive (hard requirement).\n * - `warning`: warning color (soft requirement / recommended).\n */\n requiredVariant?: RequiredMarkVariant;\n /** Enable search/filter */\n searchable?: boolean;\n /** Search placeholder */\n searchPlaceholder?: string;\n /** No results text */\n noResultsText?: string;\n /** Accessible label for the trigger (used when no `label` prop is provided) */\n 'aria-label'?: string;\n /** Additional class name */\n className?: string;\n /** ID for the select */\n id?: string;\n}\n\nexport interface SelectSingleProps extends SelectBaseProps {\n /** Single-selection mode (default). */\n multiple?: false;\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string) => void;\n}\n\nexport interface SelectMultipleProps extends SelectBaseProps {\n /** Multiple-selection mode: selecting an option toggles it and keeps the dropdown open. */\n multiple: true;\n /** Controlled values */\n value?: string[];\n /** Default values (uncontrolled) */\n defaultValue?: string[];\n /** Callback when values change */\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SelectSingleProps | SelectMultipleProps;\n\n/**\n * An accessible select/dropdown component with search support.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Country\"\n * placeholder=\"Select a country\"\n * options={[\n * { value: 'us', label: 'United States' },\n * { value: 'ca', label: 'Canada' },\n * { value: 'uk', label: 'United Kingdom' },\n * ]}\n * onValueChange={(value) => console.log(value)}\n * />\n *\n * // Multiple selection — value/onValueChange use string[]\n * <Select\n * multiple\n * label=\"Symptoms\"\n * options={options}\n * onValueChange={(values) => console.log(values)}\n * />\n * ```\n */\nfunction Select(props: SelectProps) {\n const {\n options,\n placeholder = 'Select an option',\n disabled = false,\n label,\n hideLabel = false,\n labelVariant = 'stacked',\n error,\n helperText,\n required = false,\n requiredVariant,\n size,\n hasError,\n 'aria-label': ariaLabel,\n searchable = false,\n searchPlaceholder = 'Search...',\n noResultsText = 'No results found',\n className,\n id,\n } = props;\n const multiple = props.multiple === true;\n // The discriminated union types onValueChange as either a string or string[]\n // callback; widen it once here so handlers can use it without referencing\n // the whole `props` object. Runtime calls stay consistent with `multiple`.\n const onValueChange = props.onValueChange as\n | ((value: string | string[]) => void)\n | undefined;\n const [isOpen, setIsOpen] = React.useState(false);\n const [uncontrolledValues, setUncontrolledValues] = React.useState<string[]>(\n () => toValueArray(props.defaultValue)\n );\n const [searchQuery, setSearchQuery] = React.useState('');\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1);\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const triggerRef = React.useRef<HTMLButtonElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLUListElement>(null);\n const dropdownRef = React.useRef<HTMLDivElement>(null);\n const typeaheadRef = React.useRef<{ query: string; timer: number | null }>({\n query: '',\n timer: null,\n });\n\n const generatedId = React.useId();\n const selectId = id || generatedId;\n const listboxId = `${selectId}-listbox`;\n const errorId = `${selectId}-error`;\n const helperId = `${selectId}-helper`;\n\n const isControlled = props.value !== undefined;\n const controlledValue = props.value;\n // Memoize the controlled normalization: toValueArray allocates a fresh\n // array when value is a string, which would otherwise churn callback\n // identities (handleValueChange depends on selectedValues) every render.\n const controlledValues = React.useMemo(\n () => toValueArray(controlledValue),\n [controlledValue]\n );\n const selectedValues = isControlled ? controlledValues : uncontrolledValues;\n\n // Flatten options for easy access\n const flatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of options) {\n if ('options' in item) {\n result.push(...item.options);\n } else {\n result.push(item);\n }\n }\n return result;\n }, [options]);\n\n // Filter options based on search query\n const filteredOptions = React.useMemo(() => {\n if (!searchQuery) return options;\n\n const query = searchQuery.toLowerCase();\n const result: (SelectOption | SelectGroup)[] = [];\n\n for (const item of options) {\n if ('options' in item) {\n const filteredGroupOptions = item.options.filter((opt) =>\n opt.label.toLowerCase().includes(query)\n );\n if (filteredGroupOptions.length > 0) {\n result.push({ ...item, options: filteredGroupOptions });\n }\n } else {\n if (item.label.toLowerCase().includes(query)) {\n result.push(item);\n }\n }\n }\n\n return result;\n }, [options, searchQuery]);\n\n // Get filtered flat options for keyboard navigation\n const filteredFlatOptions = React.useMemo(() => {\n const result: SelectOption[] = [];\n for (const item of filteredOptions) {\n if ('options' in item) {\n result.push(...item.options.filter((opt) => !opt.disabled));\n } else if (!item.disabled) {\n result.push(item);\n }\n }\n return result;\n }, [filteredOptions]);\n\n // Get selected options (in selection order)\n const selectedOptions = selectedValues\n .map((v) => flatOptions.find((opt) => opt.value === v))\n .filter((opt): opt is SelectOption => opt !== undefined);\n const hasSelection = selectedOptions.length > 0;\n const displayLabel = selectedOptions.map((opt) => opt.label).join(', ');\n\n // Close dropdown on click outside (handles both container and portaled dropdown)\n const outsideRefs = React.useMemo(() => [containerRef, dropdownRef], []);\n useClickOutside(outsideRefs, () => setIsOpen(false), isOpen);\n\n useEscapeKey(() => {\n if (isOpen) {\n setIsOpen(false);\n triggerRef.current?.focus();\n }\n }, isOpen);\n\n // Track trigger position for portal dropdown\n const {\n anchorRef,\n floatingRef,\n style: dropdownStyle,\n } = useAnchoredPosition<HTMLButtonElement, HTMLDivElement>({\n open: isOpen,\n matchWidth: true,\n maxHeight: 300,\n });\n\n // Handle option selection: single mode replaces and closes; multiple mode\n // toggles the option and keeps the dropdown open.\n const handleValueChange = React.useCallback(\n (optionValue: string) => {\n if (multiple) {\n const next = selectedValues.includes(optionValue)\n ? selectedValues.filter((v) => v !== optionValue)\n : [...selectedValues, optionValue];\n if (!isControlled) {\n setUncontrolledValues(next);\n }\n onValueChange?.(next);\n // The dropdown stays open; a mouse click focuses the option <li>,\n // which only handles Enter/Space. Restore focus so arrow-key\n // navigation and typeahead keep working.\n if (searchable) {\n searchInputRef.current?.focus();\n } else {\n triggerRef.current?.focus();\n }\n return;\n }\n if (!isControlled) {\n setUncontrolledValues([optionValue]);\n }\n onValueChange?.(optionValue);\n setIsOpen(false);\n setSearchQuery('');\n triggerRef.current?.focus();\n },\n [isControlled, multiple, onValueChange, searchable, selectedValues]\n );\n\n // Handle keyboard navigation\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent) => {\n // Typeahead (native-select style): when not using the dedicated search\n // input, typing printable characters jumps to the first option whose\n // label starts with the typed string. Repeating the same key cycles\n // through matches. The buffer clears after a short pause.\n if (\n !searchable &&\n e.key.length === 1 &&\n e.key !== ' ' &&\n !e.metaKey &&\n !e.ctrlKey &&\n !e.altKey\n ) {\n e.preventDefault();\n if (!isOpen) setIsOpen(true);\n\n const hadPendingQuery = typeaheadRef.current.query !== '';\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n }\n const query = (typeaheadRef.current.query + e.key).toLowerCase();\n typeaheadRef.current.query = query;\n typeaheadRef.current.timer = window.setTimeout(() => {\n typeaheadRef.current.query = '';\n typeaheadRef.current.timer = null;\n }, 600);\n\n const len = filteredFlatOptions.length;\n if (len > 0) {\n const allSameChar = query.split('').every((c) => c === query[0]);\n const needle = allSameChar ? query[0] : query;\n const matches = (opt: SelectOption) =>\n opt.label.toLowerCase().startsWith(needle);\n\n // A fresh keystroke (or refining a multi-char query) searches from\n // the current option inclusive so typing \"car\" stays on \"Cardiology\";\n // repeating the same key cycles to the next match.\n const startInclusive = !hadPendingQuery || !allSameChar;\n const base = startInclusive\n ? Math.max(highlightedIndex, 0)\n : highlightedIndex + 1;\n\n for (let i = 0; i < len; i++) {\n const idx = (base + i) % len;\n if (matches(filteredFlatOptions[idx])) {\n setHighlightedIndex(idx);\n break;\n }\n }\n }\n return;\n }\n\n // Let Space type normally in the search input (e.g. \"new york\")\n // instead of being captured by the open/select handler below.\n if (e.key === ' ' && e.target === searchInputRef.current) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredFlatOptions.length - 1 ? prev + 1 : 0\n );\n }\n break;\n case 'ArrowUp':\n e.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev > 0 ? prev - 1 : filteredFlatOptions.length - 1\n );\n }\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (isOpen && highlightedIndex >= 0) {\n handleValueChange(filteredFlatOptions[highlightedIndex].value);\n } else if (!isOpen) {\n setIsOpen(true);\n }\n break;\n case 'Home':\n e.preventDefault();\n setHighlightedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setHighlightedIndex(filteredFlatOptions.length - 1);\n break;\n }\n },\n [\n isOpen,\n highlightedIndex,\n filteredFlatOptions,\n handleValueChange,\n searchable,\n ]\n );\n\n // Focus search input when dropdown opens\n React.useEffect(() => {\n if (isOpen && searchable && searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, [isOpen, searchable]);\n\n // Reset highlighted index when search changes\n React.useEffect(() => {\n setHighlightedIndex(filteredFlatOptions.length > 0 ? 0 : -1);\n }, [searchQuery, filteredFlatOptions.length]);\n\n // Keep the highlighted option visible within the listbox during keyboard\n // navigation. We adjust only the list's own scrollTop instead of calling the\n // native scrollIntoView: the dropdown is portaled to <body> with\n // position: fixed, and scrollIntoView would also scroll ancestor/window,\n // yanking the whole page.\n React.useEffect(() => {\n if (!isOpen || highlightedIndex < 0) return;\n const list = listRef.current;\n const el = list?.querySelector<HTMLElement>('[data-highlighted=\"true\"]');\n if (!list || !el) return;\n const listRect = list.getBoundingClientRect();\n const elRect = el.getBoundingClientRect();\n if (elRect.top < listRect.top) {\n list.scrollTop -= listRect.top - elRect.top;\n } else if (elRect.bottom > listRect.bottom) {\n list.scrollTop += elRect.bottom - listRect.bottom;\n }\n }, [highlightedIndex, isOpen]);\n\n // Reset the typeahead buffer whenever the dropdown closes (Escape, click\n // outside, selection) so a stale query doesn't carry over on a quick reopen,\n // and clear any pending timer on unmount.\n const resetTypeahead = React.useCallback(() => {\n if (typeaheadRef.current.timer !== null) {\n window.clearTimeout(typeaheadRef.current.timer);\n typeaheadRef.current.timer = null;\n }\n typeaheadRef.current.query = '';\n }, []);\n\n React.useEffect(() => {\n if (!isOpen) resetTypeahead();\n }, [isOpen, resetTypeahead]);\n\n React.useEffect(() => resetTypeahead, [resetTypeahead]);\n\n // Build aria-describedby\n const describedByIds = [\n error ? errorId : null,\n helperText && !error ? helperId : null,\n ]\n .filter(Boolean)\n .join(' ');\n\n const isFloating = labelVariant === 'floating' && !!label && !hideLabel;\n const isFloated = isOpen || hasSelection;\n const resolvedSize = size ?? 'md';\n\n const requiredMark = required && <RequiredMark variant={requiredVariant} />;\n\n return (\n <div\n data-slot=\"select-wrapper\"\n className={cn('flex flex-col gap-1.5', className)}\n >\n {label && !isFloating && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={cn(\n 'text-foreground text-sm font-medium',\n hideLabel && 'sr-only'\n )}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n <div ref={containerRef} className=\"relative\">\n {/* Trigger Button */}\n <button\n data-slot=\"select-trigger\"\n ref={(node) => {\n triggerRef.current = node;\n anchorRef.current = node;\n }}\n id={selectId}\n type=\"button\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={isOpen}\n // Only reference the listbox while it exists in the DOM (it is\n // portaled and unmounted when closed) so the ID is always valid.\n aria-controls={isOpen ? listboxId : undefined}\n aria-invalid={hasError || !!error}\n aria-required={required || undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-describedby={describedByIds || undefined}\n disabled={disabled}\n onClick={() => setIsOpen(!isOpen)}\n onKeyDown={handleKeyDown}\n className={cn(\n selectTriggerVariants({\n size,\n hasError: hasError || !!error,\n labelVariant: isFloating ? 'floating' : 'stacked',\n })\n )}\n >\n <span\n className={cn(\n 'truncate',\n !hasSelection && 'text-muted-foreground',\n isFloating && floatingValuePadding[resolvedSize]\n )}\n >\n {isFloating\n ? hasSelection\n ? displayLabel\n : '\\u00A0'\n : hasSelection\n ? displayLabel\n : placeholder}\n </span>\n <ChevronDownIcon\n className={cn(\n 'text-muted-foreground h-4 w-4 shrink-0 transition-transform',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n\n {/* Floating label (rendered after the trigger so `peer-focus` applies) */}\n {isFloating && (\n <label\n data-slot=\"select-label\"\n htmlFor={selectId}\n className={floatingLabelVariants({\n size: resolvedSize,\n floated: isFloated,\n hasError: hasError || !!error,\n })}\n >\n {label}\n {requiredMark}\n </label>\n )}\n\n {/* Dropdown (portaled to body to avoid overflow clipping) */}\n {isOpen &&\n createPortal(\n <div\n data-slot=\"select-dropdown\"\n ref={(node) => {\n dropdownRef.current = node;\n floatingRef.current = node;\n }}\n style={dropdownStyle}\n className={cn(\n 'border-border bg-card rounded-lg border shadow-lg',\n 'flex flex-col overflow-hidden',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n >\n {/* Search Input */}\n {searchable && (\n <div\n data-slot=\"select-search\"\n className=\"border-border border-b p-2\"\n >\n <input\n ref={searchInputRef}\n type=\"text\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={searchPlaceholder}\n className={cn(\n 'border-input bg-background w-full rounded-md border px-3 py-2 text-sm',\n 'placeholder:text-muted-foreground',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n aria-label=\"Search options\"\n />\n </div>\n )}\n\n {/* Options List */}\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n aria-label={label || 'Options'}\n aria-multiselectable={multiple || undefined}\n data-slot=\"select-listbox\"\n className=\"flex-1 overflow-auto p-1\"\n >\n {filteredFlatOptions.length === 0 ? (\n <li className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {noResultsText}\n </li>\n ) : (\n filteredOptions.map((item) => {\n if ('options' in item) {\n // Render group\n return (\n <li key={`group-${item.label}`} role=\"presentation\">\n <div\n data-slot=\"select-group-label\"\n className=\"text-muted-foreground px-3 py-1.5 text-xs font-semibold tracking-wider uppercase\"\n >\n {item.label}\n </div>\n <ul role=\"group\" aria-label={item.label}>\n {item.options.map((option) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n isSelected={selectedValues.includes(\n option.value\n )}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]\n ?.value === option.value\n }\n onSelect={() => handleValueChange(option.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === option.value\n );\n setHighlightedIndex(idx);\n }}\n />\n ))}\n </ul>\n </li>\n );\n }\n\n // Render single option\n return (\n <SelectOptionItem\n key={item.value}\n option={item}\n isSelected={selectedValues.includes(item.value)}\n isHighlighted={\n filteredFlatOptions[highlightedIndex]?.value ===\n item.value\n }\n onSelect={() => handleValueChange(item.value)}\n onMouseEnter={() => {\n const idx = filteredFlatOptions.findIndex(\n (o) => o.value === item.value\n );\n setHighlightedIndex(idx);\n }}\n />\n );\n })\n )}\n </ul>\n </div>,\n document.body\n )}\n </div>\n\n {/* Error Message */}\n {error && (\n <p\n id={errorId}\n data-slot=\"select-error\"\n className=\"text-destructive-700 dark:text-destructive-400 text-sm\"\n role=\"alert\"\n >\n {error}\n </p>\n )}\n\n {/* Helper Text */}\n {helperText && !error && (\n <p\n id={helperId}\n data-slot=\"select-helper\"\n className=\"text-muted-foreground text-sm\"\n >\n {helperText}\n </p>\n )}\n </div>\n );\n}\n\nSelect.displayName = 'Select';\n\n/** Normalize a single/multiple value prop into an array of selected values. */\nfunction toValueArray(value: string | string[] | undefined): string[] {\n if (value === undefined || value === '') return [];\n return Array.isArray(value) ? value : [value];\n}\n\n// ============================================================================\n// Select Option Item (Internal)\n// ============================================================================\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isHighlighted: boolean;\n onSelect: () => void;\n onMouseEnter: () => void;\n}\n\nfunction SelectOptionItem({\n option,\n isSelected,\n isHighlighted,\n onSelect,\n onMouseEnter,\n}: SelectOptionItemProps) {\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n if (!option.disabled) {\n onSelect();\n }\n }\n };\n\n return (\n <li\n data-slot=\"select-option\"\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-disabled={option.disabled}\n tabIndex={isHighlighted ? 0 : -1}\n onClick={option.disabled ? undefined : onSelect}\n onKeyDown={handleKeyDown}\n onMouseEnter={option.disabled ? undefined : onMouseEnter}\n className={cn(\n 'flex cursor-pointer items-center gap-2 rounded-md px-3 py-2 text-sm',\n 'transition-colors outline-none',\n isHighlighted && 'bg-muted',\n isSelected &&\n 'bg-primary-50 text-primary-900 dark:bg-primary-950 dark:text-primary-100',\n option.disabled && 'cursor-not-allowed opacity-50'\n )}\n >\n <span className=\"flex-1 truncate\">{option.label}</span>\n {isSelected && (\n <CheckIcon className=\"text-primary-800 h-4 w-4 shrink-0\" />\n )}\n </li>\n );\n}\n\n// ============================================================================\n// Icons\n// ============================================================================\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n );\n}\n\nexport { Select, selectTriggerVariants };\n"]}
@@ -1,12 +1,12 @@
1
- import { Textarea } from './chunk-AFGADE3B.js';
1
+ import { Textarea } from './chunk-H3YO5GBM.js';
2
2
  import { Tooltip } from './chunk-FJ7YPVKV.js';
3
- import { RadioGroup, Radio } from './chunk-QUUBTNMH.js';
3
+ import { RadioGroup, Radio } from './chunk-EPSB4WTL.js';
4
+ import { DateInput } from './chunk-IILJGFI5.js';
4
5
  import { Label } from './chunk-I3WGZPI6.js';
5
- import { Select } from './chunk-DLBV42JD.js';
6
+ import { Select } from './chunk-XBKOZRDO.js';
6
7
  import { Card, CardHeader, CardContent } from './chunk-QYSUYB3S.js';
7
- import { DateInput } from './chunk-EGWWTIWS.js';
8
8
  import { Modal, ModalHeader, ModalTitle, ModalClose, ModalBody, ModalFooter } from './chunk-XMCIXHGH.js';
9
- import { Input } from './chunk-YXCE2HSK.js';
9
+ import { Input } from './chunk-3IMM2PM4.js';
10
10
  import { AlertCircle, Plus, GripVertical, StickyNote, Ban, Pencil, CalendarCheck, ExternalLink, ThumbsUp, HandMetal, ThumbsDown, HelpCircle, ChevronDown, ChevronUp, RefreshCw } from './chunk-3PXOIAF6.js';
11
11
  import { Button } from './chunk-D2GID3YK.js';
12
12
  import { Badge } from './chunk-BMSG4NBH.js';
@@ -1565,5 +1565,5 @@ function MedicationReconciliation({
1565
1565
  }
1566
1566
 
1567
1567
  export { ALLERGY_TYPE_LABELS, AllergyList, AllergyManager, CodeLookupProvider, MEDICATION_STATUS_LABELS, MedicationEditor, MedicationList, MedicationReconciliation, RowActionToolbar, RowIconButton, labelToMedicationFields, lookupToMedicationFields, parseMedicationLabel, parseSig, toolbarKeyNav, useCodeLookupConfig };
1568
- //# sourceMappingURL=chunk-KRGKPUJH.js.map
1569
- //# sourceMappingURL=chunk-KRGKPUJH.js.map
1568
+ //# sourceMappingURL=chunk-5D253OQS.js.map
1569
+ //# sourceMappingURL=chunk-5D253OQS.js.map