@mieweb/ui 0.9.0 → 0.10.0-dev.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 (347) hide show
  1. package/MIGRATION.md +112 -0
  2. package/agent/mieweb-ui.instructions.md +2 -1
  3. package/dist/{Animated-Cs-naa2g.d.cts → Animated-XmH6k8pZ.d.cts} +16 -3
  4. package/dist/{Animated-Cs-naa2g.d.ts → Animated-XmH6k8pZ.d.ts} +16 -3
  5. package/dist/{CsvBlock-QXXZ7ZUM.cjs → CsvBlock-CVYA3HYS.cjs} +3 -2
  6. package/dist/{CsvBlock-QXXZ7ZUM.cjs.map → CsvBlock-CVYA3HYS.cjs.map} +1 -1
  7. package/dist/{CsvBlock-D7Z6ZCRP.js → CsvBlock-SM4NKSHA.js} +3 -2
  8. package/dist/{CsvBlock-D7Z6ZCRP.js.map → CsvBlock-SM4NKSHA.js.map} +1 -1
  9. package/dist/{HtmlPreviewBlock-F5VDM2EN.js → HtmlPreviewBlock-FAMF4W24.js} +3 -2
  10. package/dist/{HtmlPreviewBlock-F5VDM2EN.js.map → HtmlPreviewBlock-FAMF4W24.js.map} +1 -1
  11. package/dist/{HtmlPreviewBlock-AADG7MVB.cjs → HtmlPreviewBlock-JF454L2L.cjs} +3 -2
  12. package/dist/{HtmlPreviewBlock-AADG7MVB.cjs.map → HtmlPreviewBlock-JF454L2L.cjs.map} +1 -1
  13. package/dist/{MermaidBlock-6PLITRBZ.js → MermaidBlock-7V5G4K5A.js} +3 -2
  14. package/dist/{MermaidBlock-6PLITRBZ.js.map → MermaidBlock-7V5G4K5A.js.map} +1 -1
  15. package/dist/{MermaidBlock-TQ2O5CLV.cjs → MermaidBlock-FR5SQX4Q.cjs} +3 -2
  16. package/dist/{MermaidBlock-TQ2O5CLV.cjs.map → MermaidBlock-FR5SQX4Q.cjs.map} +1 -1
  17. package/dist/{SurveyBlock-W5PSQ62F.js → SurveyBlock-6K2POV7S.js} +3 -2
  18. package/dist/{SurveyBlock-W5PSQ62F.js.map → SurveyBlock-6K2POV7S.js.map} +1 -1
  19. package/dist/{SurveyBlock-OYL3VNU5.cjs → SurveyBlock-MCJVWR7H.cjs} +3 -2
  20. package/dist/{SurveyBlock-OYL3VNU5.cjs.map → SurveyBlock-MCJVWR7H.cjs.map} +1 -1
  21. package/dist/ag-grid.cjs +1 -0
  22. package/dist/ag-grid.cjs.map +1 -1
  23. package/dist/ag-grid.js +1 -0
  24. package/dist/ag-grid.js.map +1 -1
  25. package/dist/brands/bluehive.cjs +1 -0
  26. package/dist/brands/bluehive.js +1 -0
  27. package/dist/brands/ccme.cjs +1 -0
  28. package/dist/brands/ccme.js +1 -0
  29. package/dist/brands/index.cjs +3 -2
  30. package/dist/brands/index.js +2 -1
  31. package/dist/brands/ozwell.cjs +1 -0
  32. package/dist/brands/ozwell.js +1 -0
  33. package/dist/brands/types.cjs +1 -0
  34. package/dist/brands/types.js +1 -0
  35. package/dist/{chunk-XUVEF2RQ.js → chunk-24SEAAOH.js} +2 -2
  36. package/dist/{chunk-XUVEF2RQ.js.map → chunk-24SEAAOH.js.map} +1 -1
  37. package/dist/{chunk-IUDY6S7I.cjs → chunk-37UZHCLM.cjs} +35 -14
  38. package/dist/chunk-37UZHCLM.cjs.map +1 -0
  39. package/dist/{chunk-ODYQYLO2.js → chunk-7KWNY3HG.js} +9 -5
  40. package/dist/chunk-7KWNY3HG.js.map +1 -0
  41. package/dist/{chunk-L52N6BEN.cjs → chunk-AUOTJQGO.cjs} +7 -7
  42. package/dist/{chunk-L52N6BEN.cjs.map → chunk-AUOTJQGO.cjs.map} +1 -1
  43. package/dist/{chunk-O7XHHTTP.cjs → chunk-AZP3DDBT.cjs} +6 -6
  44. package/dist/{chunk-O7XHHTTP.cjs.map → chunk-AZP3DDBT.cjs.map} +1 -1
  45. package/dist/chunk-C6CTTLH2.js +44645 -0
  46. package/dist/chunk-C6CTTLH2.js.map +1 -0
  47. package/dist/{chunk-6XDPJWSC.cjs → chunk-E3KC2XLN.cjs} +34 -30
  48. package/dist/chunk-E3KC2XLN.cjs.map +1 -0
  49. package/dist/chunk-EUAMEVVI.cjs +41 -0
  50. package/dist/chunk-EUAMEVVI.cjs.map +1 -0
  51. package/dist/{chunk-DFYMIRMW.js → chunk-IGNWT6RP.js} +7 -2
  52. package/dist/chunk-IGNWT6RP.js.map +1 -0
  53. package/dist/{chunk-XEEVDZDK.cjs → chunk-IGSIWNX3.cjs} +7 -2
  54. package/dist/chunk-IGSIWNX3.cjs.map +1 -0
  55. package/dist/chunk-IIFQ6BSJ.js +1888 -0
  56. package/dist/chunk-IIFQ6BSJ.js.map +1 -0
  57. package/dist/{chunk-FUFBRKOG.cjs → chunk-KLJGJJHN.cjs} +24 -24
  58. package/dist/{chunk-FUFBRKOG.cjs.map → chunk-KLJGJJHN.cjs.map} +1 -1
  59. package/dist/chunk-LECJMLNE.js +15 -0
  60. package/dist/{chunk-CYMZ2QS5.js.map → chunk-LECJMLNE.js.map} +1 -1
  61. package/dist/{chunk-BJKAVWED.js → chunk-MBWF36DJ.js} +35 -14
  62. package/dist/chunk-MBWF36DJ.js.map +1 -0
  63. package/dist/chunk-NV2CWBI2.cjs +290 -0
  64. package/dist/chunk-NV2CWBI2.cjs.map +1 -0
  65. package/dist/{chunk-FQBTGS3E.cjs → chunk-OFUKTVBN.cjs} +363 -285
  66. package/dist/chunk-OFUKTVBN.cjs.map +1 -0
  67. package/dist/{chunk-7KN6J7XV.cjs → chunk-OMAACCFW.cjs} +7 -7
  68. package/dist/{chunk-7KN6J7XV.cjs.map → chunk-OMAACCFW.cjs.map} +1 -1
  69. package/dist/chunk-OYQ7GYAA.cjs +1921 -0
  70. package/dist/chunk-OYQ7GYAA.cjs.map +1 -0
  71. package/dist/{chunk-YJP6DUFO.cjs → chunk-PKD3JLS2.cjs} +6 -6
  72. package/dist/{chunk-YJP6DUFO.cjs.map → chunk-PKD3JLS2.cjs.map} +1 -1
  73. package/dist/chunk-PN2PIE2L.cjs +44670 -0
  74. package/dist/chunk-PN2PIE2L.cjs.map +1 -0
  75. package/dist/chunk-PX6F3LHL.js +37 -0
  76. package/dist/chunk-PX6F3LHL.js.map +1 -0
  77. package/dist/{chunk-CXDMZT45.cjs → chunk-PY7XAG4D.cjs} +27 -4
  78. package/dist/chunk-PY7XAG4D.cjs.map +1 -0
  79. package/dist/{chunk-5H7SAEQO.js → chunk-QKFJDQEK.js} +3 -3
  80. package/dist/{chunk-5H7SAEQO.js.map → chunk-QKFJDQEK.js.map} +1 -1
  81. package/dist/{chunk-XJTFZLWH.cjs → chunk-QO6PRHDX.cjs} +2 -2
  82. package/dist/{chunk-XJTFZLWH.cjs.map → chunk-QO6PRHDX.cjs.map} +1 -1
  83. package/dist/{chunk-ONNY7UO4.js → chunk-QSVQABXD.js} +4 -4
  84. package/dist/{chunk-ONNY7UO4.js.map → chunk-QSVQABXD.js.map} +1 -1
  85. package/dist/{chunk-OHDIJOGG.js → chunk-RD3JDFYJ.js} +3 -3
  86. package/dist/{chunk-OHDIJOGG.js.map → chunk-RD3JDFYJ.js.map} +1 -1
  87. package/dist/{chunk-4SM3I7WE.cjs → chunk-RXPEZXAB.cjs} +67 -38
  88. package/dist/chunk-RXPEZXAB.cjs.map +1 -0
  89. package/dist/{chunk-VTR2KGLY.cjs → chunk-S3BCHPXT.cjs} +9 -9
  90. package/dist/{chunk-VTR2KGLY.cjs.map → chunk-S3BCHPXT.cjs.map} +1 -1
  91. package/dist/{chunk-KU3XRHWA.js → chunk-TZX76ZNZ.js} +67 -38
  92. package/dist/chunk-TZX76ZNZ.js.map +1 -0
  93. package/dist/chunk-VNAREBLV.cjs +17 -0
  94. package/dist/{chunk-SNEQXSC5.cjs.map → chunk-VNAREBLV.cjs.map} +1 -1
  95. package/dist/{chunk-MXQ7J4BB.js → chunk-VSVGMMNO.js} +361 -284
  96. package/dist/chunk-VSVGMMNO.js.map +1 -0
  97. package/dist/{chunk-Q7G56ZIO.js → chunk-WUBMDOTG.js} +3 -3
  98. package/dist/{chunk-Q7G56ZIO.js.map → chunk-WUBMDOTG.js.map} +1 -1
  99. package/dist/{chunk-DGRXAIWK.js → chunk-X5YM3KXY.js} +27 -4
  100. package/dist/chunk-X5YM3KXY.js.map +1 -0
  101. package/dist/chunk-XCP454Q6.js +263 -0
  102. package/dist/chunk-XCP454Q6.js.map +1 -0
  103. package/dist/{chunk-I3DQXUSC.js → chunk-Y6DFMDMH.js} +3 -3
  104. package/dist/{chunk-I3DQXUSC.js.map → chunk-Y6DFMDMH.js.map} +1 -1
  105. package/dist/{chunk-D25WH7MH.js → chunk-ZX2XRFE5.js} +6 -6
  106. package/dist/{chunk-D25WH7MH.js.map → chunk-ZX2XRFE5.js.map} +1 -1
  107. package/dist/{collabKit-Q4A36LDA.cjs → collabKit-GCRHP25F.cjs} +3 -3
  108. package/dist/{collabKit-Q4A36LDA.cjs.map → collabKit-GCRHP25F.cjs.map} +1 -1
  109. package/dist/{collabKit-A643VH2I.js → collabKit-SJPDPXU4.js} +3 -3
  110. package/dist/{collabKit-A643VH2I.js.map → collabKit-SJPDPXU4.js.map} +1 -1
  111. package/dist/components/Accordion/index.cjs +1 -0
  112. package/dist/components/Accordion/index.js +1 -0
  113. package/dist/components/Alert/index.cjs +1 -0
  114. package/dist/components/Alert/index.js +1 -0
  115. package/dist/components/AlertDialog/index.cjs +5 -4
  116. package/dist/components/AlertDialog/index.js +4 -3
  117. package/dist/components/AudioPlayer/index.cjs +1 -0
  118. package/dist/components/AudioPlayer/index.js +1 -0
  119. package/dist/components/AudioRecorder/index.cjs +1 -0
  120. package/dist/components/AudioRecorder/index.js +1 -0
  121. package/dist/components/Autocomplete/index.cjs +1 -0
  122. package/dist/components/Autocomplete/index.js +1 -0
  123. package/dist/components/Avatar/index.cjs +1 -0
  124. package/dist/components/Avatar/index.js +1 -0
  125. package/dist/components/Badge/index.cjs +1 -0
  126. package/dist/components/Badge/index.js +1 -0
  127. package/dist/components/Breadcrumb/index.cjs +1 -0
  128. package/dist/components/Breadcrumb/index.js +1 -0
  129. package/dist/components/Button/index.cjs +1 -0
  130. package/dist/components/Button/index.js +1 -0
  131. package/dist/components/Card/index.cjs +1 -0
  132. package/dist/components/Card/index.js +1 -0
  133. package/dist/components/Checkbox/index.cjs +1 -0
  134. package/dist/components/Checkbox/index.js +1 -0
  135. package/dist/components/ClampedText/index.cjs +1 -0
  136. package/dist/components/ClampedText/index.js +1 -0
  137. package/dist/components/CollabStatus/index.cjs +1 -0
  138. package/dist/components/CollabStatus/index.js +1 -0
  139. package/dist/components/Collapsible/index.cjs +7 -4
  140. package/dist/components/Collapsible/index.js +4 -1
  141. package/dist/components/CopyButton/index.cjs +1 -0
  142. package/dist/components/CopyButton/index.js +1 -0
  143. package/dist/components/CountryCodeDropdown/index.cjs +1 -0
  144. package/dist/components/CountryCodeDropdown/index.js +1 -0
  145. package/dist/components/CustomizableDashboard/index.cjs +1 -0
  146. package/dist/components/CustomizableDashboard/index.js +1 -0
  147. package/dist/components/DateInput/index.cjs +1 -0
  148. package/dist/components/DateInput/index.js +1 -0
  149. package/dist/components/Dropdown/index.cjs +10 -8
  150. package/dist/components/Dropdown/index.js +3 -1
  151. package/dist/components/FilterSummaryBar/index.cjs +1 -0
  152. package/dist/components/FilterSummaryBar/index.js +1 -0
  153. package/dist/components/FloatingWindow/index.cjs +1 -0
  154. package/dist/components/FloatingWindow/index.js +1 -0
  155. package/dist/components/FreshnessBadge/index.cjs +1 -0
  156. package/dist/components/FreshnessBadge/index.js +1 -0
  157. package/dist/components/GlossaryTooltip/index.cjs +1 -0
  158. package/dist/components/GlossaryTooltip/index.js +1 -0
  159. package/dist/components/Input/index.cjs +1 -0
  160. package/dist/components/Input/index.js +1 -0
  161. package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -5
  162. package/dist/components/KeyboardShortcutsOverlay/index.js +4 -3
  163. package/dist/components/Label/index.cjs +1 -0
  164. package/dist/components/Label/index.js +1 -0
  165. package/dist/components/Markdown/index.cjs +6 -5
  166. package/dist/components/Markdown/index.js +2 -1
  167. package/dist/components/MediaEditor/index.cjs +10 -9
  168. package/dist/components/MediaEditor/index.js +5 -4
  169. package/dist/components/MediaPlayer/index.cjs +1 -0
  170. package/dist/components/MediaPlayer/index.js +1 -0
  171. package/dist/components/Modal/index.cjs +11 -10
  172. package/dist/components/Modal/index.js +3 -2
  173. package/dist/components/Pagination/index.cjs +1 -0
  174. package/dist/components/Pagination/index.js +1 -0
  175. package/dist/components/PhoneInput/index.cjs +1 -0
  176. package/dist/components/PhoneInput/index.js +1 -0
  177. package/dist/components/Progress/index.cjs +1 -0
  178. package/dist/components/Progress/index.js +1 -0
  179. package/dist/components/Q/index.cjs +1 -0
  180. package/dist/components/Q/index.js +1 -0
  181. package/dist/components/QuickAction/index.cjs +1 -0
  182. package/dist/components/QuickAction/index.js +1 -0
  183. package/dist/components/Radio/index.cjs +1 -0
  184. package/dist/components/Radio/index.js +1 -0
  185. package/dist/components/ReadingProgressBar/index.cjs +1 -0
  186. package/dist/components/ReadingProgressBar/index.js +1 -0
  187. package/dist/components/RecordButton/index.cjs +1 -0
  188. package/dist/components/RecordButton/index.js +1 -0
  189. package/dist/components/RichTextEditor/index.cjs +7 -5
  190. package/dist/components/RichTextEditor/index.js +4 -2
  191. package/dist/components/SchedulePicker/index.cjs +1 -0
  192. package/dist/components/SchedulePicker/index.js +1 -0
  193. package/dist/components/ScrollArea/index.cjs +1 -0
  194. package/dist/components/ScrollArea/index.js +1 -0
  195. package/dist/components/SectionSpyNav/index.cjs +1 -0
  196. package/dist/components/SectionSpyNav/index.js +1 -0
  197. package/dist/components/Select/index.cjs +4 -3
  198. package/dist/components/Select/index.js +2 -1
  199. package/dist/components/Separator/index.cjs +1 -0
  200. package/dist/components/Separator/index.js +1 -0
  201. package/dist/components/Sheet/index.cjs +1 -0
  202. package/dist/components/Sheet/index.js +1 -0
  203. package/dist/components/Skeleton/index.cjs +1 -0
  204. package/dist/components/Skeleton/index.js +1 -0
  205. package/dist/components/Slider/index.cjs +1 -0
  206. package/dist/components/Slider/index.js +1 -0
  207. package/dist/components/SourceTip/index.cjs +1 -0
  208. package/dist/components/SourceTip/index.js +1 -0
  209. package/dist/components/Sparkline/index.cjs +1 -0
  210. package/dist/components/Sparkline/index.js +1 -0
  211. package/dist/components/Spinner/index.cjs +1 -0
  212. package/dist/components/Spinner/index.js +1 -0
  213. package/dist/components/SuperChat/index.cjs +41 -17
  214. package/dist/components/SuperChat/index.cjs.map +1 -1
  215. package/dist/components/SuperChat/index.d.cts +20 -7
  216. package/dist/components/SuperChat/index.d.ts +20 -7
  217. package/dist/components/SuperChat/index.js +36 -12
  218. package/dist/components/SuperChat/index.js.map +1 -1
  219. package/dist/components/SuperChat/plugins/index.cjs +12 -4
  220. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  221. package/dist/components/SuperChat/plugins/index.d.cts +3 -3
  222. package/dist/components/SuperChat/plugins/index.d.ts +3 -3
  223. package/dist/components/SuperChat/plugins/index.js +11 -3
  224. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  225. package/dist/components/Switch/index.cjs +1 -0
  226. package/dist/components/Switch/index.js +1 -0
  227. package/dist/components/Table/index.cjs +1 -0
  228. package/dist/components/Table/index.js +1 -0
  229. package/dist/components/Tabs/index.cjs +1 -0
  230. package/dist/components/Tabs/index.js +1 -0
  231. package/dist/components/Text/index.cjs +1 -0
  232. package/dist/components/Text/index.js +1 -0
  233. package/dist/components/Textarea/index.cjs +1 -0
  234. package/dist/components/Textarea/index.js +1 -0
  235. package/dist/components/ThemeProvider/index.cjs +1 -0
  236. package/dist/components/ThemeProvider/index.js +1 -0
  237. package/dist/components/Toggle/index.cjs +1 -0
  238. package/dist/components/Toggle/index.js +1 -0
  239. package/dist/components/Tooltip/index.cjs +1 -0
  240. package/dist/components/Tooltip/index.js +1 -0
  241. package/dist/components/TranscriptView/index.cjs +1 -0
  242. package/dist/components/TranscriptView/index.js +1 -0
  243. package/dist/components/VisuallyHidden/index.cjs +1 -0
  244. package/dist/components/VisuallyHidden/index.js +1 -0
  245. package/dist/datavis.cjs +13 -8
  246. package/dist/datavis.cjs.map +1 -1
  247. package/dist/datavis.d.cts +647 -22
  248. package/dist/datavis.d.ts +647 -22
  249. package/dist/datavis.js +6 -5
  250. package/dist/datavis.js.map +1 -1
  251. package/dist/{default-BTEIFIZJ.cjs → default-CCMUBXP6.cjs} +3 -2
  252. package/dist/{default-BTEIFIZJ.cjs.map → default-CCMUBXP6.cjs.map} +1 -1
  253. package/dist/default-N2LW7ZFU.js +4 -0
  254. package/dist/{default-ORBRVZRZ.js.map → default-N2LW7ZFU.js.map} +1 -1
  255. package/dist/{enterprise-health-UDI25OCV.cjs → enterprise-health-75VYWAVG.cjs} +3 -2
  256. package/dist/{enterprise-health-UDI25OCV.cjs.map → enterprise-health-75VYWAVG.cjs.map} +1 -1
  257. package/dist/enterprise-health-CWLUB77O.js +4 -0
  258. package/dist/{enterprise-health-ORQQOLM3.js.map → enterprise-health-CWLUB77O.js.map} +1 -1
  259. package/dist/esheet.cjs +8 -7
  260. package/dist/esheet.cjs.map +1 -1
  261. package/dist/esheet.js +5 -4
  262. package/dist/esheet.js.map +1 -1
  263. package/dist/{hey-buddy-CLUVAY2X.cjs → hey-buddy-INNUFFJJ.cjs} +3 -2
  264. package/dist/hey-buddy-INNUFFJJ.cjs.map +1 -0
  265. package/dist/{hey-buddy-NMSWZ4TN.js → hey-buddy-V6FC5UKB.js} +3 -2
  266. package/dist/hey-buddy-V6FC5UKB.js.map +1 -0
  267. package/dist/hooks/index.cjs +14 -13
  268. package/dist/hooks/index.js +2 -1
  269. package/dist/index.cjs +753 -1703
  270. package/dist/index.cjs.map +1 -1
  271. package/dist/index.d.cts +347 -347
  272. package/dist/index.d.ts +347 -347
  273. package/dist/index.js +465 -1410
  274. package/dist/index.js.map +1 -1
  275. package/dist/kerebron.cjs +2 -1
  276. package/dist/kerebron.cjs.map +1 -1
  277. package/dist/kerebron.js +2 -1
  278. package/dist/kerebron.js.map +1 -1
  279. package/dist/{mieweb-6JCRWKSO.cjs → mieweb-72YOL44I.cjs} +3 -2
  280. package/dist/{mieweb-6JCRWKSO.cjs.map → mieweb-72YOL44I.cjs.map} +1 -1
  281. package/dist/mieweb-EZDLSSA6.js +4 -0
  282. package/dist/{mieweb-GIKY6EMN.js.map → mieweb-EZDLSSA6.js.map} +1 -1
  283. package/dist/motion.cjs +8 -7
  284. package/dist/motion.cjs.map +1 -1
  285. package/dist/motion.d.cts +1 -1
  286. package/dist/motion.d.ts +1 -1
  287. package/dist/motion.js +3 -2
  288. package/dist/motion.js.map +1 -1
  289. package/dist/{nitroTableGrid-SIMT7635.js → nitroTableGrid-LVYKKCGF.js} +5 -4
  290. package/dist/nitroTableGrid-LVYKKCGF.js.map +1 -0
  291. package/dist/{nitroTableGrid-3J2GY6CK.cjs → nitroTableGrid-SQADULEY.cjs} +5 -4
  292. package/dist/nitroTableGrid-SQADULEY.cjs.map +1 -0
  293. package/dist/q.cjs +1 -0
  294. package/dist/q.js +1 -0
  295. package/dist/styles.css +1 -1
  296. package/dist/tailwind-preset.cjs +5 -4
  297. package/dist/tailwind-preset.js +2 -1
  298. package/dist/{types-DZDroUW8.d.cts → types-B97JNRNQ.d.cts} +1 -1
  299. package/dist/{types-B2RLmdVd.d.ts → types-CnPEwzlp.d.cts} +6 -2
  300. package/dist/{types-B2RLmdVd.d.cts → types-CnPEwzlp.d.ts} +6 -2
  301. package/dist/{types-9vK_YdEb.d.ts → types-gZXrfLj6.d.ts} +1 -1
  302. package/dist/utils/index.cjs +1 -0
  303. package/dist/utils/index.js +1 -0
  304. package/dist/{waggleline-I7QWD3YX.cjs → waggleline-5CBT4MNN.cjs} +3 -2
  305. package/dist/{waggleline-I7QWD3YX.cjs.map → waggleline-5CBT4MNN.cjs.map} +1 -1
  306. package/dist/waggleline-JMPCNV3J.js +4 -0
  307. package/dist/{waggleline-2MLRNVCV.js.map → waggleline-JMPCNV3J.js.map} +1 -1
  308. package/dist/webchart-2CVQ2TT3.js +4 -0
  309. package/dist/{webchart-72YMJ45P.js.map → webchart-2CVQ2TT3.js.map} +1 -1
  310. package/dist/{webchart-37OYZ42V.cjs → webchart-AXXOQHU6.cjs} +3 -2
  311. package/dist/{webchart-37OYZ42V.cjs.map → webchart-AXXOQHU6.cjs.map} +1 -1
  312. package/package.json +9 -14
  313. package/dist/chunk-4SM3I7WE.cjs.map +0 -1
  314. package/dist/chunk-5BVFVXHN.cjs +0 -1244
  315. package/dist/chunk-5BVFVXHN.cjs.map +0 -1
  316. package/dist/chunk-6XDPJWSC.cjs.map +0 -1
  317. package/dist/chunk-BJKAVWED.js.map +0 -1
  318. package/dist/chunk-BN75TLUN.cjs +0 -163
  319. package/dist/chunk-BN75TLUN.cjs.map +0 -1
  320. package/dist/chunk-CXDMZT45.cjs.map +0 -1
  321. package/dist/chunk-CYMZ2QS5.js +0 -15
  322. package/dist/chunk-DFYMIRMW.js.map +0 -1
  323. package/dist/chunk-DGRXAIWK.js.map +0 -1
  324. package/dist/chunk-FQBTGS3E.cjs.map +0 -1
  325. package/dist/chunk-IUDY6S7I.cjs.map +0 -1
  326. package/dist/chunk-KU3XRHWA.js.map +0 -1
  327. package/dist/chunk-MXQ7J4BB.js.map +0 -1
  328. package/dist/chunk-O6GJ4IYS.js +0 -1210
  329. package/dist/chunk-O6GJ4IYS.js.map +0 -1
  330. package/dist/chunk-ODYQYLO2.js.map +0 -1
  331. package/dist/chunk-SNEQXSC5.cjs +0 -17
  332. package/dist/chunk-VJOVJTFP.cjs +0 -370
  333. package/dist/chunk-VJOVJTFP.cjs.map +0 -1
  334. package/dist/chunk-WYMO3IIK.js +0 -136
  335. package/dist/chunk-WYMO3IIK.js.map +0 -1
  336. package/dist/chunk-XEEVDZDK.cjs.map +0 -1
  337. package/dist/chunk-YBLIDESO.js +0 -365
  338. package/dist/chunk-YBLIDESO.js.map +0 -1
  339. package/dist/default-ORBRVZRZ.js +0 -3
  340. package/dist/enterprise-health-ORQQOLM3.js +0 -3
  341. package/dist/hey-buddy-CLUVAY2X.cjs.map +0 -1
  342. package/dist/hey-buddy-NMSWZ4TN.js.map +0 -1
  343. package/dist/mieweb-GIKY6EMN.js +0 -3
  344. package/dist/nitroTableGrid-3J2GY6CK.cjs.map +0 -1
  345. package/dist/nitroTableGrid-SIMT7635.js.map +0 -1
  346. package/dist/waggleline-2MLRNVCV.js +0 -3
  347. package/dist/webchart-72YMJ45P.js +0 -3
@@ -2,21 +2,22 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var chunkCXDMZT45_cjs = require('./chunk-CXDMZT45.cjs');
5
+ var chunkPY7XAG4D_cjs = require('./chunk-PY7XAG4D.cjs');
6
+ require('./chunk-EUAMEVVI.cjs');
6
7
 
7
8
 
8
9
 
9
10
  Object.defineProperty(exports, "default", {
10
11
  enumerable: true,
11
- get: function () { return chunkCXDMZT45_cjs.tailwind_preset_default; }
12
+ get: function () { return chunkPY7XAG4D_cjs.tailwind_preset_default; }
12
13
  });
13
14
  Object.defineProperty(exports, "miewebUIPreset", {
14
15
  enumerable: true,
15
- get: function () { return chunkCXDMZT45_cjs.miewebUIPreset; }
16
+ get: function () { return chunkPY7XAG4D_cjs.miewebUIPreset; }
16
17
  });
17
18
  Object.defineProperty(exports, "miewebUISafelist", {
18
19
  enumerable: true,
19
- get: function () { return chunkCXDMZT45_cjs.miewebUISafelist; }
20
+ get: function () { return chunkPY7XAG4D_cjs.miewebUISafelist; }
20
21
  });
21
22
  //# sourceMappingURL=tailwind-preset.cjs.map
22
23
  //# sourceMappingURL=tailwind-preset.cjs.map
@@ -1,3 +1,4 @@
1
- export { tailwind_preset_default as default, miewebUIPreset, miewebUISafelist } from './chunk-DGRXAIWK.js';
1
+ export { tailwind_preset_default as default, miewebUIPreset, miewebUISafelist } from './chunk-X5YM3KXY.js';
2
+ import './chunk-PX6F3LHL.js';
2
3
  //# sourceMappingURL=tailwind-preset.js.map
3
4
  //# sourceMappingURL=tailwind-preset.js.map
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { A as AIMessageContent, a as AIMessageStatus } from './types-B2RLmdVd.cjs';
2
+ import { A as AIMessageContent, a as AIMessageStatus } from './types-CnPEwzlp.cjs';
3
3
 
4
4
  /**
5
5
  * SuperChat Types
@@ -229,8 +229,12 @@ interface MCPToolInfo {
229
229
  enabled?: boolean;
230
230
  }
231
231
  interface AIChatCallbacks {
232
- /** Called when user sends a message */
233
- onSendMessage?: (message: string) => void | Promise<void>;
232
+ /**
233
+ * Called when user sends a message. When attachments are enabled via
234
+ * `composerProps`, the staged files arrive as the second argument
235
+ * (attachment-only sends invoke this with an empty string).
236
+ */
237
+ onSendMessage?: (message: string, attachments?: File[]) => void | Promise<void>;
234
238
  /** Called when a tool call is initiated */
235
239
  onToolCall?: (toolCall: MCPToolCall) => void | Promise<void>;
236
240
  /** Called when a tool call completes */
@@ -229,8 +229,12 @@ interface MCPToolInfo {
229
229
  enabled?: boolean;
230
230
  }
231
231
  interface AIChatCallbacks {
232
- /** Called when user sends a message */
233
- onSendMessage?: (message: string) => void | Promise<void>;
232
+ /**
233
+ * Called when user sends a message. When attachments are enabled via
234
+ * `composerProps`, the staged files arrive as the second argument
235
+ * (attachment-only sends invoke this with an empty string).
236
+ */
237
+ onSendMessage?: (message: string, attachments?: File[]) => void | Promise<void>;
234
238
  /** Called when a tool call is initiated */
235
239
  onToolCall?: (toolCall: MCPToolCall) => void | Promise<void>;
236
240
  /** Called when a tool call completes */
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { A as AIMessageContent, a as AIMessageStatus } from './types-B2RLmdVd.js';
2
+ import { A as AIMessageContent, a as AIMessageStatus } from './types-CnPEwzlp.js';
3
3
 
4
4
  /**
5
5
  * SuperChat Types
@@ -6,6 +6,7 @@ var chunkL7YQBSEL_cjs = require('../chunk-L7YQBSEL.cjs');
6
6
  var chunkCW75IKA6_cjs = require('../chunk-CW75IKA6.cjs');
7
7
  var chunkS5RVSXDV_cjs = require('../chunk-S5RVSXDV.cjs');
8
8
  var chunkSCV7C55E_cjs = require('../chunk-SCV7C55E.cjs');
9
+ require('../chunk-EUAMEVVI.cjs');
9
10
 
10
11
 
11
12
 
@@ -4,5 +4,6 @@ export { formatPhoneNumber, isPhoneNumberEmpty, isValidPhoneNumber, unformatPhon
4
4
  export { calculateAge, dateToDisplayFormat, displayFormatToDateString, formatDateValue, isDateEmpty, isDateInFuture, isDateInPast, isValidDate, isValidDrivingAge, parseDateValue } from '../chunk-RC2YMOMS.js';
5
5
  export { cn, miewebUITwMergeConflicts } from '../chunk-TQONQSJO.js';
6
6
  export { isStorybookDocsMode } from '../chunk-VSQF22GL.js';
7
+ import '../chunk-PX6F3LHL.js';
7
8
  //# sourceMappingURL=index.js.map
8
9
  //# sourceMappingURL=index.js.map
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var chunkZ5J4NTPL_cjs = require('./chunk-Z5J4NTPL.cjs');
6
+ require('./chunk-EUAMEVVI.cjs');
6
7
 
7
8
 
8
9
 
@@ -14,5 +15,5 @@ Object.defineProperty(exports, "wagglelineBrand", {
14
15
  enumerable: true,
15
16
  get: function () { return chunkZ5J4NTPL_cjs.wagglelineBrand; }
16
17
  });
17
- //# sourceMappingURL=waggleline-I7QWD3YX.cjs.map
18
- //# sourceMappingURL=waggleline-I7QWD3YX.cjs.map
18
+ //# sourceMappingURL=waggleline-5CBT4MNN.cjs.map
19
+ //# sourceMappingURL=waggleline-5CBT4MNN.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"waggleline-I7QWD3YX.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"waggleline-5CBT4MNN.cjs"}
@@ -0,0 +1,4 @@
1
+ export { wagglelineBrand as default, wagglelineBrand } from './chunk-2NTYAALC.js';
2
+ import './chunk-PX6F3LHL.js';
3
+ //# sourceMappingURL=waggleline-JMPCNV3J.js.map
4
+ //# sourceMappingURL=waggleline-JMPCNV3J.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"waggleline-2MLRNVCV.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"waggleline-JMPCNV3J.js"}
@@ -0,0 +1,4 @@
1
+ export { webchartBrand as default, webchartBrand } from './chunk-CW66SO5O.js';
2
+ import './chunk-PX6F3LHL.js';
3
+ //# sourceMappingURL=webchart-2CVQ2TT3.js.map
4
+ //# sourceMappingURL=webchart-2CVQ2TT3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"webchart-72YMJ45P.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"webchart-2CVQ2TT3.js"}
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var chunkU7VQUOLS_cjs = require('./chunk-U7VQUOLS.cjs');
6
+ require('./chunk-EUAMEVVI.cjs');
6
7
 
7
8
 
8
9
 
@@ -14,5 +15,5 @@ Object.defineProperty(exports, "webchartBrand", {
14
15
  enumerable: true,
15
16
  get: function () { return chunkU7VQUOLS_cjs.webchartBrand; }
16
17
  });
17
- //# sourceMappingURL=webchart-37OYZ42V.cjs.map
18
- //# sourceMappingURL=webchart-37OYZ42V.cjs.map
18
+ //# sourceMappingURL=webchart-AXXOQHU6.cjs.map
19
+ //# sourceMappingURL=webchart-AXXOQHU6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"webchart-37OYZ42V.cjs"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"webchart-AXXOQHU6.cjs"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mieweb/ui",
3
- "version": "0.9.0",
3
+ "version": "0.10.0-dev.1",
4
4
  "description": "A themeable, accessible React component library built with Tailwind CSS",
5
5
  "author": "Medical Informatics Engineering, Inc.",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -220,6 +220,7 @@
220
220
  "dist",
221
221
  "agent",
222
222
  "README.md",
223
+ "MIGRATION.md",
223
224
  "LICENSE"
224
225
  ],
225
226
  "bin": {
@@ -227,11 +228,12 @@
227
228
  },
228
229
  "scripts": {
229
230
  "preinstall": "node -e \"try{if(require('fs').existsSync('.git'))require('child_process').execSync('git submodule update --init --recursive',{stdio:'inherit'})}catch(e){console.warn('[@mieweb/ui] submodule update skipped:',e.message)}\"",
230
- "prepare": "npm run build:css && npm run copy:brand-css && npm run copy:style-css && npm run copy:markdown-css && npm run copy:kerebron-css",
231
+ "prepare": "npm run build:datavis && npm run build:css && npm run copy:brand-css && npm run copy:style-css && npm run copy:markdown-css && npm run copy:kerebron-css",
231
232
  "dev": "tsup --watch",
232
- "prebuild": "npm run build:esheet",
233
+ "prebuild": "npm run build:esheet && npm run build:datavis",
233
234
  "build": "node --max-old-space-size=8192 ./node_modules/tsup/dist/cli-default.js && npm run build:css && npm run copy:brand-css && npm run copy:style-css && npm run copy:markdown-css && npm run copy:kerebron-css",
234
235
  "build:esheet": "if [ ! -f packages/esheet/packages/core/dist/index.d.ts ] || [ ! -f packages/esheet/packages/renderer/src/index.output.css ] || [ ! -f packages/esheet/packages/builder/src/index.output.css ]; then cd packages/esheet && pnpm install --frozen-lockfile && pnpm --filter '@esheet/builder...' --filter '@esheet/renderer...' build; fi",
236
+ "build:datavis": "node scripts/build-datavis.mjs",
235
237
  "build:css": "mkdir -p dist && npx @tailwindcss/cli -i ./src/styles/base.css -o ./dist/styles.css --minify",
236
238
  "copy:brand-css": "mkdir -p dist/brands && cp src/brands/*.css dist/brands/",
237
239
  "copy:style-css": "mkdir -p dist/styles && cp src/styles/init.css dist/styles/ 2>/dev/null || true",
@@ -250,9 +252,9 @@
250
252
  "format:fix": "prettier --write \"src/**/*.{ts,tsx,css}\"",
251
253
  "test": "vitest run",
252
254
  "test:watch": "vitest",
253
- "prestorybook": "npm run build:esheet",
255
+ "prestorybook": "npm run build:esheet && npm run build:datavis",
254
256
  "storybook": "storybook dev -p 6006",
255
- "build-storybook": "npm run build:esheet && storybook build && npm run catalog:manifest",
257
+ "build-storybook": "npm run build:esheet && npm run build:datavis && storybook build && npm run catalog:manifest",
256
258
  "test:coverage": "vitest run --coverage",
257
259
  "playwright:install": "playwright install --with-deps",
258
260
  "test:visual": "playwright test",
@@ -266,11 +268,9 @@
266
268
  "@kerebron/editor-kits": ">=0.8.6",
267
269
  "@kerebron/extension-yjs": ">=0.8.6",
268
270
  "@kerebron/wasm": ">=0.8.6",
269
- "@mieweb/datavis": "=1.7.0",
270
271
  "@mieweb/q": "1.0.0",
271
272
  "ag-grid-community": ">=32.0.0",
272
273
  "ag-grid-react": ">=32.0.0",
273
- "datavis-ace": "=4.1.0",
274
274
  "js-yaml": ">=4.0.0",
275
275
  "katex": ">=0.16.0",
276
276
  "mermaid": ">=11.0.0",
@@ -310,9 +310,6 @@
310
310
  "yjs": {
311
311
  "optional": true
312
312
  },
313
- "@mieweb/datavis": {
314
- "optional": true
315
- },
316
313
  "@mieweb/q": {
317
314
  "optional": true
318
315
  },
@@ -322,9 +319,6 @@
322
319
  "ag-grid-react": {
323
320
  "optional": true
324
321
  },
325
- "datavis-ace": {
326
- "optional": true
327
- },
328
322
  "js-yaml": {
329
323
  "optional": true
330
324
  },
@@ -373,6 +367,7 @@
373
367
  "@tanstack/react-virtual": "^3.14.2",
374
368
  "class-variance-authority": "^0.7.1",
375
369
  "clsx": "^2.1.1",
370
+ "datavis-ace": "4.1.0",
376
371
  "dompurify": "^3.4.0",
377
372
  "google-libphonenumber": "^3.2.44",
378
373
  "highlight.js": "^11.11.1",
@@ -398,7 +393,7 @@
398
393
  "@kerebron/editor-kits": "^0.8.6",
399
394
  "@kerebron/extension-yjs": "^0.8.6",
400
395
  "@kerebron/wasm": "^0.8.6",
401
- "@mieweb/datavis": "=1.7.0",
396
+ "@mieweb/datavis": "link:./packages/datavis",
402
397
  "@mieweb/q": "1.0.0",
403
398
  "@monaco-editor/react": "^4.7.0",
404
399
  "@playwright/test": "^1.58.2",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Dropdown/Dropdown.tsx"],"names":["React","useEscapeKey","useAnchoredPosition","useClickOutside","jsx","jsxs","createPortal","cn","inputVariants","Fragment","ChevronRightIcon"],"mappings":"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","file":"chunk-4SM3I7WE.cjs","sourcesContent":["import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { ChevronRight as ChevronRightIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { useClickOutside } from '../../hooks/useClickOutside';\nimport { useEscapeKey } from '../../hooks/useEscapeKey';\nimport {\n useAnchoredPosition,\n type AnchoredPlacement,\n} from '../../hooks/useAnchoredPosition';\nimport { inputVariants } from '../Input';\n\nexport type DropdownPlacement = AnchoredPlacement;\n\nexport interface DropdownProps {\n /** The trigger element (usually a button) */\n trigger: React.ReactElement<{\n onClick?: () => void;\n disabled?: boolean;\n 'aria-haspopup'?: string;\n 'aria-expanded'?: boolean;\n 'aria-controls'?: string;\n }>;\n /** Dropdown content */\n children: React.ReactNode;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Placement of the dropdown */\n placement?: DropdownPlacement;\n /** Additional class name for the dropdown menu */\n className?: string;\n /** Width of the dropdown menu */\n width?: 'auto' | 'trigger' | number;\n /** Whether the dropdown is disabled */\n disabled?: boolean;\n /** Whether to render a search field at the top of the dropdown */\n searchable?: boolean;\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** Accessible label for the search input */\n searchAriaLabel?: string;\n /** Content to render when no items match the search query */\n searchEmptyState?: React.ReactNode;\n /** Whether dropdown items support multi-select checkboxes */\n multiSelect?: boolean;\n /** Selected item values for controlled multi-select dropdowns */\n selectedValues?: string[];\n /** Initial selected item values for uncontrolled multi-select dropdowns */\n defaultSelectedValues?: string[];\n /** Callback fired when selected values change in multi-select mode */\n onSelectedValuesChange?: (values: string[]) => void;\n /** Whether to render a select-all control for multi-select dropdowns */\n showSelectAll?: boolean;\n /** Label for the select-all control */\n selectAllLabel?: React.ReactNode;\n}\n\nconst placementOffset = 8; // matches the previous mt-2/mb-2 gap\n\ninterface DropdownContextValue {\n multiSelect: boolean;\n selectedValues: string[];\n toggleSelectedValue: (value: string) => void;\n /**\n * Registers a portaled descendant (submenu panel) with the root dropdown's\n * click-outside detection so clicks inside it don't close the menu.\n * Returns an unregister function.\n */\n registerOutsideRef: (ref: React.RefObject<HTMLElement | null>) => () => void;\n}\n\nconst DropdownContext = React.createContext<DropdownContextValue | null>(null);\n\nfunction getNodeText(node: React.ReactNode): string {\n if (typeof node === 'string' || typeof node === 'number') {\n return String(node);\n }\n\n if (Array.isArray(node)) {\n return node.map(getNodeText).join(' ');\n }\n\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n return getNodeText(node.props.children);\n }\n\n return '';\n}\n\nfunction isDropdownElement<P>(\n node: React.ReactNode,\n component: React.JSXElementConstructor<P>\n): node is React.ReactElement<P> {\n return React.isValidElement(node) && node.type === component;\n}\n\nfunction hasVisibleDropdownContent(node: React.ReactNode): boolean {\n if (node == null || typeof node === 'boolean') {\n return false;\n }\n\n if (Array.isArray(node)) {\n return node.some(hasVisibleDropdownContent);\n }\n\n if (!React.isValidElement<{ children?: React.ReactNode }>(node)) {\n if (typeof node === 'string') {\n return node.trim().length > 0;\n }\n\n return true;\n }\n\n if (node.type === React.Fragment) {\n return React.Children.toArray(node.props.children).some(\n hasVisibleDropdownContent\n );\n }\n\n if (\n node.type === DropdownSeparator ||\n node.type === DropdownLabel ||\n node.type === DropdownHeader\n ) {\n return false;\n }\n\n if (node.type === DropdownContent) {\n return React.Children.toArray(node.props.children).some(\n hasVisibleDropdownContent\n );\n }\n\n return true;\n}\n\nfunction normalizeDropdownSiblings(\n children: React.ReactNode[]\n): React.ReactNode[] {\n const hasContentBefore = (index: number) => {\n for (let current = index - 1; current >= 0; current -= 1) {\n const child = children[current];\n\n if (isDropdownElement(child, DropdownSeparator)) {\n return false;\n }\n\n if (hasVisibleDropdownContent(child)) {\n return true;\n }\n }\n\n return false;\n };\n\n const hasContentAfter = (index: number) => {\n for (let current = index + 1; current < children.length; current += 1) {\n const child = children[current];\n\n if (isDropdownElement(child, DropdownSeparator)) {\n return false;\n }\n\n if (hasVisibleDropdownContent(child)) {\n return true;\n }\n }\n\n return false;\n };\n\n return children.filter((child, index) => {\n if (isDropdownElement(child, DropdownSeparator)) {\n return hasContentBefore(index) && hasContentAfter(index);\n }\n\n if (isDropdownElement(child, DropdownLabel)) {\n return hasContentAfter(index);\n }\n\n return true;\n });\n}\n\nfunction filterDropdownChildren(\n children: React.ReactNode,\n query: string\n): React.ReactNode[] {\n const normalizedQuery = query.trim().toLowerCase();\n\n if (!normalizedQuery) {\n return React.Children.toArray(children);\n }\n\n const filteredChildren = React.Children.toArray(children)\n .map((child) => {\n if (!React.isValidElement<{ children?: React.ReactNode }>(child)) {\n if (typeof child === 'string' || typeof child === 'number') {\n return String(child).toLowerCase().includes(normalizedQuery)\n ? child\n : null;\n }\n\n return null;\n }\n\n if (child.type === React.Fragment) {\n const fragmentChildren = filterDropdownChildren(\n child.props.children,\n normalizedQuery\n );\n\n return fragmentChildren.length > 0\n ? React.cloneElement(child, undefined, fragmentChildren)\n : null;\n }\n\n if (isDropdownElement(child, DropdownHeader)) {\n return child;\n }\n\n if (isDropdownElement(child, DropdownItem)) {\n const searchText = [\n getNodeText(child.props.children),\n child.props.searchText,\n ]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n\n return searchText.includes(normalizedQuery) ? child : null;\n }\n\n if (isDropdownElement(child, DropdownSubmenu)) {\n const searchText = [\n getNodeText(child.props.label),\n child.props.searchText,\n ]\n .filter(Boolean)\n .join(' ')\n .toLowerCase();\n\n // Keep the whole submenu when its label matches; otherwise filter its\n // items and keep it only when something inside still matches.\n if (searchText.includes(normalizedQuery)) {\n return child;\n }\n\n const submenuChildren = filterDropdownChildren(\n child.props.children,\n normalizedQuery\n );\n\n return hasVisibleDropdownContent(submenuChildren)\n ? React.cloneElement(child, undefined, submenuChildren)\n : null;\n }\n\n if (isDropdownElement(child, DropdownContent)) {\n const contentChildren = filterDropdownChildren(\n child.props.children,\n normalizedQuery\n );\n\n return hasVisibleDropdownContent(contentChildren)\n ? React.cloneElement(child, undefined, contentChildren)\n : null;\n }\n\n if (isDropdownElement(child, DropdownSeparator)) {\n return child;\n }\n\n if (isDropdownElement(child, DropdownLabel)) {\n return child;\n }\n\n const nestedChildren = child.props.children;\n\n if (nestedChildren === undefined) {\n return child;\n }\n\n const filteredNestedChildren = filterDropdownChildren(\n nestedChildren,\n normalizedQuery\n );\n\n return filteredNestedChildren.length > 0\n ? React.cloneElement(child, undefined, filteredNestedChildren)\n : null;\n })\n .filter((child) => child !== null);\n\n return normalizeDropdownSiblings(filteredChildren);\n}\n\nfunction getSelectableValues(children: React.ReactNode): string[] {\n return React.Children.toArray(children).flatMap((child) => {\n if (\n !React.isValidElement<{ children?: React.ReactNode; value?: unknown }>(\n child\n )\n ) {\n return [];\n }\n\n if (child.type === React.Fragment || child.type === DropdownContent) {\n return getSelectableValues(child.props.children);\n }\n\n if (isDropdownElement(child, DropdownItem)) {\n return typeof child.props.value === 'string' ? [child.props.value] : [];\n }\n\n return child.props.children !== undefined\n ? getSelectableValues(child.props.children)\n : [];\n });\n}\n\n/**\n * An accessible dropdown menu component.\n *\n * @example\n * ```tsx\n * <Dropdown\n * trigger={<Button>Options</Button>}\n * >\n * <DropdownItem onClick={() => console.log('Edit')}>Edit</DropdownItem>\n * <DropdownItem onClick={() => console.log('Delete')} variant=\"danger\">Delete</DropdownItem>\n * </Dropdown>\n * ```\n */\nfunction Dropdown({\n trigger,\n children,\n open: controlledOpen,\n onOpenChange,\n placement = 'bottom-start',\n className,\n width = 'auto',\n disabled = false,\n searchable = false,\n searchPlaceholder = 'Search...',\n searchAriaLabel = 'Search dropdown items',\n searchEmptyState = 'No results found',\n multiSelect = false,\n selectedValues: controlledSelectedValues,\n defaultSelectedValues = [],\n onSelectedValuesChange,\n showSelectAll = false,\n selectAllLabel = 'Select all',\n}: DropdownProps) {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\n const [uncontrolledSelectedValues, setUncontrolledSelectedValues] =\n React.useState(defaultSelectedValues);\n const [searchQuery, setSearchQuery] = React.useState('');\n const [extraOutsideRefs, setExtraOutsideRefs] = React.useState<\n ReadonlyArray<React.RefObject<HTMLElement | null>>\n >([]);\n const containerRef = React.useRef<HTMLDivElement>(null);\n const searchInputRef = React.useRef<HTMLInputElement>(null);\n const menuId = React.useId();\n\n const isControlled = controlledOpen !== undefined;\n const isSelectedValuesControlled = controlledSelectedValues !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n const selectedValues = isSelectedValuesControlled\n ? controlledSelectedValues\n : uncontrolledSelectedValues;\n\n const setOpen = React.useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setUncontrolledOpen(value);\n }\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange]\n );\n\n const handleToggle = React.useCallback(() => {\n if (!disabled) {\n setOpen(!isOpen);\n }\n }, [disabled, isOpen, setOpen]);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const setSelectedValues = React.useCallback(\n (values: string[]) => {\n if (!isSelectedValuesControlled) {\n setUncontrolledSelectedValues(values);\n }\n onSelectedValuesChange?.(values);\n },\n [isSelectedValuesControlled, onSelectedValuesChange]\n );\n\n const toggleSelectedValue = React.useCallback(\n (value: string) => {\n if (!multiSelect) {\n return;\n }\n\n setSelectedValues(\n selectedValues.includes(value)\n ? selectedValues.filter((selectedValue) => selectedValue !== value)\n : [...selectedValues, value]\n );\n },\n [multiSelect, selectedValues, setSelectedValues]\n );\n\n const registerOutsideRef = React.useCallback(\n (ref: React.RefObject<HTMLElement | null>) => {\n setExtraOutsideRefs((prev) => [...prev, ref]);\n return () => setExtraOutsideRefs((prev) => prev.filter((r) => r !== ref));\n },\n []\n );\n\n const dropdownContext = React.useMemo<DropdownContextValue>(\n () => ({\n multiSelect,\n selectedValues,\n toggleSelectedValue,\n registerOutsideRef,\n }),\n [multiSelect, selectedValues, toggleSelectedValue, registerOutsideRef]\n );\n\n useEscapeKey(handleClose, isOpen);\n\n // Portal + fixed positioning so the menu escapes overflow-hidden ancestors.\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLDivElement,\n HTMLDivElement\n >({\n open: isOpen,\n placement,\n offset: placementOffset,\n matchMinWidth: width === 'trigger',\n });\n\n const outsideRefs = React.useMemo(\n () => [containerRef, floatingRef, ...extraOutsideRefs],\n [floatingRef, extraOutsideRefs]\n );\n useClickOutside(outsideRefs, handleClose, isOpen);\n\n React.useEffect(() => {\n if (!isOpen) {\n setSearchQuery('');\n return;\n }\n\n if (searchable) {\n requestAnimationFrame(() => searchInputRef.current?.focus());\n }\n }, [isOpen, searchable]);\n\n // Clone trigger to add event handlers\n const triggerElement = React.cloneElement(trigger, {\n onClick: handleToggle,\n 'aria-haspopup': 'menu',\n 'aria-expanded': isOpen,\n 'aria-controls': isOpen ? menuId : undefined,\n disabled: disabled || trigger.props.disabled,\n });\n\n const widthStyle = typeof width === 'number' ? { width: `${width}px` } : {};\n\n const filteredChildren = React.useMemo(\n () => filterDropdownChildren(children, searchQuery),\n [children, searchQuery]\n );\n const visibleSelectableValues = React.useMemo(\n () => getSelectableValues(searchable ? filteredChildren : children),\n [children, filteredChildren, searchable]\n );\n const hasSearchResults = React.useMemo(\n () => hasVisibleDropdownContent(filteredChildren),\n [filteredChildren]\n );\n const allVisibleSelected =\n visibleSelectableValues.length > 0 &&\n visibleSelectableValues.every((value) => selectedValues.includes(value));\n const someVisibleSelected = visibleSelectableValues.some((value) =>\n selectedValues.includes(value)\n );\n\n const handleSelectAll = React.useCallback(() => {\n if (!multiSelect || visibleSelectableValues.length === 0) {\n return;\n }\n\n const visibleValueSet = new Set(visibleSelectableValues);\n\n setSelectedValues(\n allVisibleSelected\n ? selectedValues.filter((value) => !visibleValueSet.has(value))\n : Array.from(new Set([...selectedValues, ...visibleSelectableValues]))\n );\n }, [\n allVisibleSelected,\n multiSelect,\n selectedValues,\n setSelectedValues,\n visibleSelectableValues,\n ]);\n\n return (\n <DropdownContext.Provider value={dropdownContext}>\n <div\n ref={(node) => {\n containerRef.current = node;\n anchorRef.current = node;\n }}\n className=\"relative inline-flex\"\n >\n {triggerElement}\n {isOpen &&\n createPortal(\n <div\n ref={floatingRef}\n style={{ ...style, ...widthStyle }}\n data-slot=\"dropdown-menu\"\n className={cn(\n 'flex min-w-[12rem] flex-col overflow-hidden',\n 'rounded-xl border border-neutral-200 bg-white shadow-lg',\n 'dark:border-neutral-700 dark:bg-neutral-800',\n 'animate-in fade-in zoom-in-95 duration-100',\n className\n )}\n >\n {searchable && (\n <div\n className=\"shrink-0 border-b border-neutral-200 p-2 dark:border-neutral-700\"\n data-slot=\"dropdown-search\"\n >\n <input\n ref={searchInputRef}\n type=\"search\"\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n placeholder={searchPlaceholder}\n aria-label={searchAriaLabel}\n aria-controls={menuId}\n aria-autocomplete=\"list\"\n data-slot=\"dropdown-search-input\"\n className={cn(\n inputVariants({ size: 'sm' }),\n 'text-sm',\n 'dark:border-neutral-600 dark:bg-neutral-700 dark:text-neutral-100'\n )}\n />\n </div>\n )}\n <div id={menuId} role=\"menu\" className=\"min-h-0 overflow-y-auto\">\n {multiSelect &&\n showSelectAll &&\n visibleSelectableValues.length > 0 && (\n <>\n <div className=\"p-2\" data-slot=\"dropdown-select-all\">\n <DropdownItem\n checked={allVisibleSelected}\n indeterminate={\n !allVisibleSelected && someVisibleSelected\n }\n onClick={handleSelectAll}\n >\n {selectAllLabel}\n </DropdownItem>\n </div>\n <DropdownSeparator />\n </>\n )}\n {searchable ? (\n hasSearchResults ? (\n filteredChildren\n ) : (\n <div\n className=\"text-muted-foreground px-3 py-4 text-center text-sm\"\n data-slot=\"dropdown-empty\"\n >\n {searchEmptyState}\n </div>\n )\n ) : (\n children\n )}\n </div>\n </div>,\n document.body\n )}\n </div>\n </DropdownContext.Provider>\n );\n}\n\nDropdown.displayName = 'Dropdown';\n\n// ============================================================================\n// Dropdown Header Component\n// ============================================================================\n\nexport interface DropdownHeaderProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'title'\n> {\n /** Avatar element or image */\n avatar?: React.ReactNode;\n /** Primary text (e.g., user name) */\n title: React.ReactNode;\n /** Secondary text (e.g., email) */\n subtitle?: React.ReactNode;\n}\n\n/**\n * A header section for dropdown menus, typically used for user info.\n *\n * @example\n * ```tsx\n * <DropdownHeader\n * avatar={<Avatar name=\"John Doe\" />}\n * title=\"John Doe\"\n * subtitle=\"john@example.com\"\n * />\n * ```\n */\nconst DropdownHeader = React.forwardRef<HTMLDivElement, DropdownHeaderProps>(\n ({ className, avatar, title, subtitle, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"dropdown-header\"\n className={cn(\n 'border-b border-neutral-200 p-4 dark:border-neutral-700',\n className\n )}\n {...props}\n >\n <div\n className=\"flex items-center gap-3\"\n data-slot=\"dropdown-header-row\"\n >\n {avatar}\n <div className=\"min-w-0 flex-1\">\n <p\n className=\"truncate text-sm font-semibold text-neutral-900 dark:text-white\"\n data-slot=\"dropdown-header-title\"\n >\n {title}\n </p>\n {subtitle && (\n <p\n className=\"text-muted-foreground truncate text-xs\"\n data-slot=\"dropdown-header-subtitle\"\n >\n {subtitle}\n </p>\n )}\n </div>\n </div>\n {children}\n </div>\n );\n }\n);\n\nDropdownHeader.displayName = 'DropdownHeader';\n\n// ============================================================================\n// Dropdown Content Component\n// ============================================================================\n\nexport type DropdownContentProps = React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * A container for dropdown menu items with proper padding.\n */\nconst DropdownContent = React.forwardRef<HTMLDivElement, DropdownContentProps>(\n ({ className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n data-slot=\"dropdown-content\"\n className={cn('p-2', className)}\n {...props}\n />\n );\n }\n);\n\nDropdownContent.displayName = 'DropdownContent';\n\n// ============================================================================\n// Dropdown Item Component\n// ============================================================================\n\nexport interface DropdownItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /** Icon to display before the label */\n icon?: React.ReactNode;\n /** Danger variant for destructive actions */\n variant?: 'default' | 'danger';\n /** Optional text used when filtering searchable dropdown items */\n searchText?: string;\n /** Checked state for multi-select items */\n checked?: boolean;\n /** Indeterminate state for multi-select items */\n indeterminate?: boolean;\n /** Callback fired when a multi-select item changes */\n onCheckedChange?: (checked: boolean) => void;\n}\n\nfunction DropdownItemCheckbox({\n checked,\n indeterminate = false,\n}: {\n checked: boolean;\n indeterminate?: boolean;\n}) {\n return (\n <span\n aria-hidden=\"true\"\n data-slot=\"dropdown-checkbox\"\n className={cn(\n 'flex h-4 w-4 shrink-0 items-center justify-center rounded border-2 transition-colors duration-150',\n checked || indeterminate\n ? 'border-primary-500 bg-primary-800 text-white'\n : 'border-input bg-background text-transparent'\n )}\n >\n {indeterminate ? (\n <svg\n aria-hidden=\"true\"\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M4 8h8\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n ) : (\n <svg\n aria-hidden=\"true\"\n className=\"h-3 w-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8.5 6.5 11.5 12.5 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </span>\n );\n}\n\n/**\n * An item within a Dropdown menu.\n */\nconst DropdownItem = React.forwardRef<HTMLButtonElement, DropdownItemProps>(\n (\n {\n className,\n icon,\n variant = 'default',\n children,\n searchText,\n checked,\n indeterminate = false,\n onCheckedChange,\n onClick,\n value,\n disabled,\n ...props\n },\n ref\n ) => {\n const dropdownContext = React.useContext(DropdownContext);\n const itemValue = typeof value === 'string' ? value : undefined;\n const contextSelectedValues = dropdownContext?.selectedValues ?? [];\n const isMultiSelectItem =\n (dropdownContext?.multiSelect === true && itemValue !== undefined) ||\n checked !== undefined ||\n indeterminate;\n const isChecked =\n checked ??\n (isMultiSelectItem\n ? itemValue !== undefined && contextSelectedValues.includes(itemValue)\n : false);\n\n const handleClick = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (\n dropdownContext &&\n isMultiSelectItem &&\n itemValue !== undefined &&\n !disabled\n ) {\n dropdownContext.toggleSelectedValue(itemValue);\n onCheckedChange?.(!isChecked);\n }\n\n onClick?.(event);\n },\n [\n disabled,\n dropdownContext,\n isChecked,\n isMultiSelectItem,\n itemValue,\n onCheckedChange,\n onClick,\n ]\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role={isMultiSelectItem ? 'menuitemcheckbox' : 'menuitem'}\n aria-checked={\n isMultiSelectItem ? (indeterminate ? 'mixed' : isChecked) : undefined\n }\n disabled={disabled}\n data-slot=\"dropdown-item\"\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2 text-start text-sm',\n 'transition-colors duration-150',\n 'focus:outline-none',\n variant === 'default' && [\n 'text-neutral-700 dark:text-neutral-300',\n 'hover:bg-neutral-100 dark:hover:bg-neutral-700',\n 'focus:bg-neutral-100 dark:focus:bg-neutral-700',\n ],\n variant === 'danger' && [\n 'text-red-600 dark:text-red-400',\n 'hover:bg-red-50 dark:hover:bg-red-900/20',\n 'focus:bg-red-50 dark:focus:bg-red-900/20',\n ],\n className\n )}\n data-search-text={searchText}\n onClick={handleClick}\n value={value}\n {...props}\n >\n {isMultiSelectItem && (\n <DropdownItemCheckbox\n checked={isChecked}\n indeterminate={indeterminate}\n />\n )}\n {icon && (\n <span className=\"h-4 w-4 shrink-0\" data-slot=\"dropdown-item-icon\">\n {icon}\n </span>\n )}\n <span className=\"font-medium\" data-slot=\"dropdown-item-label\">\n {children}\n </span>\n </button>\n );\n }\n);\n\nDropdownItem.displayName = 'DropdownItem';\n\n// ============================================================================\n// Dropdown Submenu Component\n// ============================================================================\n\nexport interface DropdownSubmenuProps {\n /** The parent item's label */\n label: React.ReactNode;\n /** Icon to display before the label */\n icon?: React.ReactNode;\n /** Whether the submenu trigger is disabled */\n disabled?: boolean;\n /** Optional text used when filtering searchable dropdown items */\n searchText?: string;\n /** Additional class name for the submenu trigger item */\n className?: string;\n /** Submenu items */\n children: React.ReactNode;\n}\n\n/** Delay before a hover-opened submenu closes, allowing diagonal travel. */\nconst submenuCloseDelay = 150;\n\n/**\n * A dropdown item that opens a nested flyout menu.\n *\n * Opens on hover or click, and via ArrowRight/Enter/Space from the keyboard;\n * ArrowLeft or Escape closes just the submenu (Escape is stopped so the root\n * menu stays open) and returns focus to the trigger.\n *\n * @example\n * ```tsx\n * <Dropdown trigger={<Button>Options</Button>}>\n * <DropdownItem onClick={copy}>Copy</DropdownItem>\n * <DropdownSubmenu label=\"Copy as\">\n * <DropdownItem onClick={copyMarkdown}>Markdown</DropdownItem>\n * <DropdownItem onClick={copyPlain}>Plain text</DropdownItem>\n * </DropdownSubmenu>\n * </Dropdown>\n * ```\n */\nfunction DropdownSubmenu({\n label,\n icon,\n disabled = false,\n className,\n children,\n}: DropdownSubmenuProps) {\n const [open, setOpen] = React.useState(false);\n const menuId = React.useId();\n const dropdownContext = React.useContext(DropdownContext);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n const { anchorRef, floatingRef, style } = useAnchoredPosition<\n HTMLButtonElement,\n HTMLDivElement\n >({ open, placement: 'right-start', offset: 4 });\n\n // Let the root dropdown treat clicks inside the portaled flyout as \"inside\"\n // so they don't dismiss the whole menu. Layout effect so the registration\n // flushes before the browser can deliver the next mousedown/touchstart —\n // a passive effect could lose a fast open-then-click race.\n const registerOutsideRef = dropdownContext?.registerOutsideRef;\n React.useLayoutEffect(() => {\n if (!open || !registerOutsideRef) return;\n return registerOutsideRef(floatingRef);\n }, [open, registerOutsideRef, floatingRef]);\n\n React.useEffect(() => () => clearTimeout(closeTimer.current), []);\n\n const cancelClose = () => clearTimeout(closeTimer.current);\n const openNow = () => {\n if (disabled) return;\n cancelClose();\n setOpen(true);\n };\n const scheduleClose = () => {\n cancelClose();\n closeTimer.current = setTimeout(() => setOpen(false), submenuCloseDelay);\n };\n const closeAndRefocus = () => {\n cancelClose();\n setOpen(false);\n anchorRef.current?.focus();\n };\n\n const focusFirstItem = () => {\n // The flyout positions in a layout effect; wait a frame so it's measurable\n // and visible before moving focus.\n requestAnimationFrame(() => {\n floatingRef.current\n ?.querySelector<HTMLElement>('[data-slot=\"dropdown-item\"]')\n ?.focus();\n });\n };\n\n return (\n <>\n <button\n ref={anchorRef}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? menuId : undefined}\n data-slot=\"dropdown-submenu-trigger\"\n className={cn(\n 'flex w-full items-center gap-3 rounded-lg px-3 py-2 text-start text-sm',\n 'transition-colors duration-150',\n 'focus:outline-none',\n 'text-neutral-700 dark:text-neutral-300',\n 'hover:bg-neutral-100 dark:hover:bg-neutral-700',\n 'focus:bg-neutral-100 dark:focus:bg-neutral-700',\n open && 'bg-neutral-100 dark:bg-neutral-700',\n className\n )}\n onPointerEnter={(event) => {\n // Hover-open is a mouse affordance; touch taps go through onClick so\n // the flyout doesn't open-then-toggle on the same tap.\n if (event.pointerType === 'mouse') openNow();\n }}\n onPointerLeave={(event) => {\n if (event.pointerType === 'mouse') scheduleClose();\n }}\n onClick={(event) => {\n openNow();\n // Keyboard activation (Enter/Space fire click with detail 0) moves\n // focus into the flyout; pointer clicks leave focus on the trigger.\n if (event.detail === 0) focusFirstItem();\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n openNow();\n focusFirstItem();\n } else if (\n open &&\n (event.key === 'ArrowLeft' || event.key === 'Escape')\n ) {\n event.preventDefault();\n // Keep the root menu open: stop Escape before it reaches the\n // document-level listener that closes the whole dropdown.\n event.stopPropagation();\n closeAndRefocus();\n }\n }}\n >\n {icon && (\n <span className=\"h-4 w-4 shrink-0\" data-slot=\"dropdown-item-icon\">\n {icon}\n </span>\n )}\n <span className=\"flex-1 font-medium\" data-slot=\"dropdown-item-label\">\n {label}\n </span>\n <ChevronRightIcon\n size={16}\n aria-hidden=\"true\"\n className=\"shrink-0 text-neutral-400 rtl:-scale-x-100\"\n />\n </button>\n {open &&\n createPortal(\n <div\n ref={floatingRef}\n style={style}\n id={menuId}\n role=\"menu\"\n // Programmatically focusable (a11y: interactive role); focus lands\n // on the menu items themselves.\n tabIndex={-1}\n data-slot=\"dropdown-submenu\"\n className={cn(\n // min() keeps the preferred width from beating the hook's\n // maxWidth viewport clamp on very narrow screens.\n 'flex min-w-[min(10rem,calc(100vw-1rem))] flex-col overflow-hidden',\n 'rounded-xl border border-neutral-200 bg-white shadow-lg',\n 'dark:border-neutral-700 dark:bg-neutral-800',\n 'animate-in fade-in zoom-in-95 duration-100'\n )}\n onPointerEnter={cancelClose}\n onPointerLeave={(event) => {\n if (event.pointerType === 'mouse') scheduleClose();\n }}\n onKeyDown={(event) => {\n if (event.key === 'ArrowLeft' || event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeAndRefocus();\n }\n }}\n >\n <div className=\"min-h-0 overflow-y-auto\">{children}</div>\n </div>,\n document.body\n )}\n </>\n );\n}\n\nDropdownSubmenu.displayName = 'DropdownSubmenu';\n\n// ============================================================================\n// Dropdown Separator Component\n// ============================================================================\n\n/**\n * A separator between dropdown items.\n */\nfunction DropdownSeparator({ className }: { className?: string }) {\n return (\n <hr\n data-slot=\"dropdown-separator\"\n className={cn(\n 'border-t border-neutral-200 dark:border-neutral-700',\n className\n )}\n />\n );\n}\n\nDropdownSeparator.displayName = 'DropdownSeparator';\n\n// ============================================================================\n// Dropdown Label Component\n// ============================================================================\n\n/**\n * A label/header for a group of dropdown items.\n */\nfunction DropdownLabel({\n className,\n children,\n}: {\n className?: string;\n children: React.ReactNode;\n}) {\n return (\n <div\n data-slot=\"dropdown-label\"\n className={cn(\n 'px-3 py-1.5 text-xs font-semibold tracking-wider uppercase',\n 'text-muted-foreground',\n className\n )}\n >\n {children}\n </div>\n );\n}\n\nDropdownLabel.displayName = 'DropdownLabel';\n\nexport {\n Dropdown,\n DropdownHeader,\n DropdownContent,\n DropdownItem,\n DropdownSubmenu,\n DropdownSeparator,\n DropdownLabel,\n};\n"]}