@langchain/macaw-components 1.0.0-beta.0

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 (566) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/_chunks/ErrorState-CmPX01HV.js +13361 -0
  4. package/dist/_chunks/ErrorState-CmPX01HV.js.map +1 -0
  5. package/dist/_chunks/LoadingIndicator-DgtU9aqD.js +80 -0
  6. package/dist/_chunks/LoadingIndicator-DgtU9aqD.js.map +1 -0
  7. package/dist/base.css +305 -0
  8. package/dist/catalog.json +1675 -0
  9. package/dist/components/Avatar/Avatar.d.ts +28 -0
  10. package/dist/components/Avatar/Avatar.js +47 -0
  11. package/dist/components/Avatar/Avatar.js.map +1 -0
  12. package/dist/components/Avatar/index.d.ts +2 -0
  13. package/dist/components/Avatar/index.js +2 -0
  14. package/dist/components/Badge/Badge.d.ts +25 -0
  15. package/dist/components/Badge/Badge.js +82 -0
  16. package/dist/components/Badge/Badge.js.map +1 -0
  17. package/dist/components/Badge/index.d.ts +2 -0
  18. package/dist/components/Badge/index.js +2 -0
  19. package/dist/components/Banner/Banner.d.ts +15 -0
  20. package/dist/components/Banner/Banner.js +102 -0
  21. package/dist/components/Banner/Banner.js.map +1 -0
  22. package/dist/components/Banner/index.d.ts +2 -0
  23. package/dist/components/Banner/index.js +2 -0
  24. package/dist/components/BarChart/AnimatedBar.d.ts +20 -0
  25. package/dist/components/BarChart/AnimatedBar.js +65 -0
  26. package/dist/components/BarChart/AnimatedBar.js.map +1 -0
  27. package/dist/components/BarChart/BarChart.d.ts +25 -0
  28. package/dist/components/BarChart/BarChart.js +248 -0
  29. package/dist/components/BarChart/BarChart.js.map +1 -0
  30. package/dist/components/BarChart/BarChart.types.d.ts +239 -0
  31. package/dist/components/BarChart/BarChart.types.js +0 -0
  32. package/dist/components/BarChart/BarChart.utils.d.ts +51 -0
  33. package/dist/components/BarChart/BarChart.utils.js +215 -0
  34. package/dist/components/BarChart/BarChart.utils.js.map +1 -0
  35. package/dist/components/BarChart/BarChartAxes.d.ts +22 -0
  36. package/dist/components/BarChart/BarChartAxes.js +144 -0
  37. package/dist/components/BarChart/BarChartAxes.js.map +1 -0
  38. package/dist/components/BarChart/BarChartGuides.d.ts +22 -0
  39. package/dist/components/BarChart/BarChartGuides.js +83 -0
  40. package/dist/components/BarChart/BarChartGuides.js.map +1 -0
  41. package/dist/components/BarChart/BarChartPlot.d.ts +40 -0
  42. package/dist/components/BarChart/BarChartPlot.js +262 -0
  43. package/dist/components/BarChart/BarChartPlot.js.map +1 -0
  44. package/dist/components/BarChart/constants.d.ts +21 -0
  45. package/dist/components/BarChart/constants.js +26 -0
  46. package/dist/components/BarChart/constants.js.map +1 -0
  47. package/dist/components/BarChart/index.d.ts +3 -0
  48. package/dist/components/BarChart/index.js +3 -0
  49. package/dist/components/Button/Button.d.ts +36 -0
  50. package/dist/components/Button/Button.js +99 -0
  51. package/dist/components/Button/Button.js.map +1 -0
  52. package/dist/components/Button/constants.d.ts +26 -0
  53. package/dist/components/Button/constants.js +31 -0
  54. package/dist/components/Button/constants.js.map +1 -0
  55. package/dist/components/Button/index.d.ts +2 -0
  56. package/dist/components/Button/index.js +2 -0
  57. package/dist/components/ButtonGroup/ButtonGroup.d.ts +30 -0
  58. package/dist/components/ButtonGroup/ButtonGroup.js +26 -0
  59. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
  60. package/dist/components/ButtonGroup/index.d.ts +2 -0
  61. package/dist/components/ButtonGroup/index.js +2 -0
  62. package/dist/components/Card/Card.d.ts +10 -0
  63. package/dist/components/Card/Card.js +23 -0
  64. package/dist/components/Card/Card.js.map +1 -0
  65. package/dist/components/Card/index.d.ts +2 -0
  66. package/dist/components/Card/index.js +2 -0
  67. package/dist/components/ChartCard/ChartCard.d.ts +53 -0
  68. package/dist/components/ChartCard/ChartCard.js +172 -0
  69. package/dist/components/ChartCard/ChartCard.js.map +1 -0
  70. package/dist/components/ChartCard/ChartCardSkeleton.d.ts +7 -0
  71. package/dist/components/ChartCard/ChartCardSkeleton.js +61 -0
  72. package/dist/components/ChartCard/ChartCardSkeleton.js.map +1 -0
  73. package/dist/components/ChartCard/index.d.ts +4 -0
  74. package/dist/components/ChartCard/index.js +3 -0
  75. package/dist/components/ChartLegend/ChartLegend.d.ts +19 -0
  76. package/dist/components/ChartLegend/ChartLegend.js +195 -0
  77. package/dist/components/ChartLegend/ChartLegend.js.map +1 -0
  78. package/dist/components/ChartLegend/ChartLegendItemRenderer.d.ts +14 -0
  79. package/dist/components/ChartLegend/ChartLegendItemRenderer.js +90 -0
  80. package/dist/components/ChartLegend/ChartLegendItemRenderer.js.map +1 -0
  81. package/dist/components/ChartLegend/index.d.ts +3 -0
  82. package/dist/components/ChartLegend/index.js +3 -0
  83. package/dist/components/ChartLegend/useChartLegendActiveItem.d.ts +7 -0
  84. package/dist/components/ChartLegend/useChartLegendActiveItem.js +35 -0
  85. package/dist/components/ChartLegend/useChartLegendActiveItem.js.map +1 -0
  86. package/dist/components/ChartLegend/utils.d.ts +20 -0
  87. package/dist/components/ChartLegend/utils.js +33 -0
  88. package/dist/components/ChartLegend/utils.js.map +1 -0
  89. package/dist/components/ChartTooltip/ChartTooltip.d.ts +23 -0
  90. package/dist/components/ChartTooltip/ChartTooltip.js +83 -0
  91. package/dist/components/ChartTooltip/ChartTooltip.js.map +1 -0
  92. package/dist/components/ChartTooltip/index.d.ts +2 -0
  93. package/dist/components/ChartTooltip/index.js +2 -0
  94. package/dist/components/Checkbox/Checkbox.d.ts +58 -0
  95. package/dist/components/Checkbox/Checkbox.js +50 -0
  96. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  97. package/dist/components/Checkbox/constants.d.ts +28 -0
  98. package/dist/components/Checkbox/constants.js +57 -0
  99. package/dist/components/Checkbox/constants.js.map +1 -0
  100. package/dist/components/Checkbox/getCheckedState.d.ts +6 -0
  101. package/dist/components/Checkbox/getCheckedState.js +14 -0
  102. package/dist/components/Checkbox/getCheckedState.js.map +1 -0
  103. package/dist/components/Checkbox/index.d.ts +3 -0
  104. package/dist/components/Checkbox/index.js +3 -0
  105. package/dist/components/CircularProgress/CircularProgress.d.ts +54 -0
  106. package/dist/components/CircularProgress/CircularProgress.js +85 -0
  107. package/dist/components/CircularProgress/CircularProgress.js.map +1 -0
  108. package/dist/components/CircularProgress/index.d.ts +2 -0
  109. package/dist/components/CircularProgress/index.js +2 -0
  110. package/dist/components/Code/Code.utils.d.ts +24 -0
  111. package/dist/components/Code/Code.utils.js +160 -0
  112. package/dist/components/Code/Code.utils.js.map +1 -0
  113. package/dist/components/Code/CodeLite.d.ts +19 -0
  114. package/dist/components/Code/CodeLite.js +146 -0
  115. package/dist/components/Code/CodeLite.js.map +1 -0
  116. package/dist/components/Code/CodeLite.utils.d.ts +24 -0
  117. package/dist/components/Code/CodeLite.utils.js +273 -0
  118. package/dist/components/Code/CodeLite.utils.js.map +1 -0
  119. package/dist/components/Code/ImageReplacerExtension.d.ts +9 -0
  120. package/dist/components/Code/ImageReplacerExtension.js +227 -0
  121. package/dist/components/Code/ImageReplacerExtension.js.map +1 -0
  122. package/dist/components/Code/JsonHighlighterExtension.d.ts +4 -0
  123. package/dist/components/Code/JsonHighlighterExtension.js +172 -0
  124. package/dist/components/Code/JsonHighlighterExtension.js.map +1 -0
  125. package/dist/components/Code/constants.d.ts +6 -0
  126. package/dist/components/Code/constants.js +11 -0
  127. package/dist/components/Code/constants.js.map +1 -0
  128. package/dist/components/Code/index.d.ts +30 -0
  129. package/dist/components/Code/index.js +140 -0
  130. package/dist/components/Code/index.js.map +1 -0
  131. package/dist/components/Code/languages/json.d.ts +1 -0
  132. package/dist/components/Code/languages/json.js +7 -0
  133. package/dist/components/Code/languages/json.js.map +1 -0
  134. package/dist/components/Code/languages/languages.d.ts +7 -0
  135. package/dist/components/Code/languages/languages.js +12 -0
  136. package/dist/components/Code/languages/languages.js.map +1 -0
  137. package/dist/components/Code/languages/python.d.ts +1 -0
  138. package/dist/components/Code/languages/python.js +7 -0
  139. package/dist/components/Code/languages/python.js.map +1 -0
  140. package/dist/components/Code/languages/shell.d.ts +7 -0
  141. package/dist/components/Code/languages/shell.js +241 -0
  142. package/dist/components/Code/languages/shell.js.map +1 -0
  143. package/dist/components/Code/languages/typescript.d.ts +1 -0
  144. package/dist/components/Code/languages/typescript.js +7 -0
  145. package/dist/components/Code/languages/typescript.js.map +1 -0
  146. package/dist/components/Code/languages/yaml.d.ts +2 -0
  147. package/dist/components/Code/languages/yaml.js +44 -0
  148. package/dist/components/Code/languages/yaml.js.map +1 -0
  149. package/dist/components/Code/types.d.ts +8 -0
  150. package/dist/components/Code/types.js +0 -0
  151. package/dist/components/Code/utils.d.ts +4 -0
  152. package/dist/components/Code/utils.js +27 -0
  153. package/dist/components/Code/utils.js.map +1 -0
  154. package/dist/components/Command/Command.d.ts +78 -0
  155. package/dist/components/Command/Command.js +78 -0
  156. package/dist/components/Command/Command.js.map +1 -0
  157. package/dist/components/Command/CommandMenu.d.ts +65 -0
  158. package/dist/components/Command/CommandMenu.js +101 -0
  159. package/dist/components/Command/CommandMenu.js.map +1 -0
  160. package/dist/components/Command/index.d.ts +4 -0
  161. package/dist/components/Command/index.js +3 -0
  162. package/dist/components/ContextMenu/ContextMenu.d.ts +9 -0
  163. package/dist/components/ContextMenu/ContextMenu.js +43 -0
  164. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  165. package/dist/components/ContextMenu/index.d.ts +1 -0
  166. package/dist/components/ContextMenu/index.js +2 -0
  167. package/dist/components/CopyButton/CopyButton.d.ts +24 -0
  168. package/dist/components/CopyButton/CopyButton.js +121 -0
  169. package/dist/components/CopyButton/CopyButton.js.map +1 -0
  170. package/dist/components/CopyButton/copyToClipboard.d.ts +1 -0
  171. package/dist/components/CopyButton/copyToClipboard.js +29 -0
  172. package/dist/components/CopyButton/copyToClipboard.js.map +1 -0
  173. package/dist/components/CopyButton/index.d.ts +4 -0
  174. package/dist/components/CopyButton/index.js +4 -0
  175. package/dist/components/CopyButton/useCopy.d.ts +10 -0
  176. package/dist/components/CopyButton/useCopy.js +46 -0
  177. package/dist/components/CopyButton/useCopy.js.map +1 -0
  178. package/dist/components/Dialog/index.d.ts +49 -0
  179. package/dist/components/Dialog/index.js +130 -0
  180. package/dist/components/Dialog/index.js.map +1 -0
  181. package/dist/components/Divider/Divider.d.ts +9 -0
  182. package/dist/components/Divider/Divider.js +27 -0
  183. package/dist/components/Divider/Divider.js.map +1 -0
  184. package/dist/components/Divider/index.d.ts +2 -0
  185. package/dist/components/Divider/index.js +2 -0
  186. package/dist/components/DonutChart/DonutChart.d.ts +101 -0
  187. package/dist/components/DonutChart/DonutChart.js +197 -0
  188. package/dist/components/DonutChart/DonutChart.js.map +1 -0
  189. package/dist/components/DonutChart/DonutChart.utils.d.ts +38 -0
  190. package/dist/components/DonutChart/DonutChart.utils.js +93 -0
  191. package/dist/components/DonutChart/DonutChart.utils.js.map +1 -0
  192. package/dist/components/DonutChart/constants.d.ts +7 -0
  193. package/dist/components/DonutChart/constants.js +12 -0
  194. package/dist/components/DonutChart/constants.js.map +1 -0
  195. package/dist/components/DonutChart/index.d.ts +4 -0
  196. package/dist/components/DonutChart/index.js +4 -0
  197. package/dist/components/DropdownMenu/DropdownMenu.d.ts +24 -0
  198. package/dist/components/DropdownMenu/DropdownMenu.js +149 -0
  199. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  200. package/dist/components/DropdownMenu/index.d.ts +1 -0
  201. package/dist/components/DropdownMenu/index.js +2 -0
  202. package/dist/components/EmptyState/EmptyState.d.ts +26 -0
  203. package/dist/components/EmptyState/EmptyState.js +85 -0
  204. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  205. package/dist/components/EmptyState/index.d.ts +2 -0
  206. package/dist/components/EmptyState/index.js +2 -0
  207. package/dist/components/ErrorBoundary.d.ts +35 -0
  208. package/dist/components/ErrorBoundary.js +41 -0
  209. package/dist/components/ErrorBoundary.js.map +1 -0
  210. package/dist/components/ErrorMessage/ErrorMessage.d.ts +17 -0
  211. package/dist/components/ErrorMessage/ErrorMessage.js +146 -0
  212. package/dist/components/ErrorMessage/ErrorMessage.js.map +1 -0
  213. package/dist/components/ErrorMessage/index.d.ts +2 -0
  214. package/dist/components/ErrorMessage/index.js +2 -0
  215. package/dist/components/ErrorState/ErrorState.d.ts +23 -0
  216. package/dist/components/ErrorState/ErrorState.js +2 -0
  217. package/dist/components/ErrorState/index.d.ts +2 -0
  218. package/dist/components/ErrorState/index.js +2 -0
  219. package/dist/components/GroupedTabs/GroupedTabs.d.ts +31 -0
  220. package/dist/components/GroupedTabs/GroupedTabs.js +92 -0
  221. package/dist/components/GroupedTabs/GroupedTabs.js.map +1 -0
  222. package/dist/components/GroupedTabs/index.d.ts +2 -0
  223. package/dist/components/GroupedTabs/index.js +2 -0
  224. package/dist/components/HoverCard.d.ts +4 -0
  225. package/dist/components/HoverCard.js +34 -0
  226. package/dist/components/HoverCard.js.map +1 -0
  227. package/dist/components/Icon/Icon.d.ts +25 -0
  228. package/dist/components/Icon/Icon.js +57 -0
  229. package/dist/components/Icon/Icon.js.map +1 -0
  230. package/dist/components/Icon/index.d.ts +2 -0
  231. package/dist/components/Icon/index.js +2 -0
  232. package/dist/components/IconButton/IconButton.d.ts +35 -0
  233. package/dist/components/IconButton/IconButton.js +73 -0
  234. package/dist/components/IconButton/IconButton.js.map +1 -0
  235. package/dist/components/IconButton/index.d.ts +2 -0
  236. package/dist/components/IconButton/index.js +2 -0
  237. package/dist/components/Input/Input.d.ts +72 -0
  238. package/dist/components/Input/Input.js +221 -0
  239. package/dist/components/Input/Input.js.map +1 -0
  240. package/dist/components/Input/index.d.ts +2 -0
  241. package/dist/components/Input/index.js +2 -0
  242. package/dist/components/Input/inputStyles.d.ts +28 -0
  243. package/dist/components/Input/inputStyles.js +45 -0
  244. package/dist/components/Input/inputStyles.js.map +1 -0
  245. package/dist/components/Kbd/Kbd.d.ts +15 -0
  246. package/dist/components/Kbd/Kbd.js +30 -0
  247. package/dist/components/Kbd/Kbd.js.map +1 -0
  248. package/dist/components/Kbd/index.d.ts +2 -0
  249. package/dist/components/Kbd/index.js +2 -0
  250. package/dist/components/LineChart/LineChart.d.ts +8 -0
  251. package/dist/components/LineChart/LineChart.js +194 -0
  252. package/dist/components/LineChart/LineChart.js.map +1 -0
  253. package/dist/components/LineChart/LineChart.types.d.ts +138 -0
  254. package/dist/components/LineChart/LineChart.types.js +0 -0
  255. package/dist/components/LineChart/LineChart.utils.d.ts +29 -0
  256. package/dist/components/LineChart/LineChart.utils.js +123 -0
  257. package/dist/components/LineChart/LineChart.utils.js.map +1 -0
  258. package/dist/components/LineChart/LineChartPlot.d.ts +43 -0
  259. package/dist/components/LineChart/LineChartPlot.js +306 -0
  260. package/dist/components/LineChart/LineChartPlot.js.map +1 -0
  261. package/dist/components/LineChart/constants.d.ts +3 -0
  262. package/dist/components/LineChart/constants.js +8 -0
  263. package/dist/components/LineChart/constants.js.map +1 -0
  264. package/dist/components/LineChart/index.d.ts +2 -0
  265. package/dist/components/LineChart/index.js +2 -0
  266. package/dist/components/LinearProgress/LinearProgress.d.ts +16 -0
  267. package/dist/components/LinearProgress/LinearProgress.js +42 -0
  268. package/dist/components/LinearProgress/LinearProgress.js.map +1 -0
  269. package/dist/components/LinearProgress/index.d.ts +2 -0
  270. package/dist/components/LinearProgress/index.js +2 -0
  271. package/dist/components/Link/Link.d.ts +30 -0
  272. package/dist/components/Link/Link.js +51 -0
  273. package/dist/components/Link/Link.js.map +1 -0
  274. package/dist/components/Link/index.d.ts +2 -0
  275. package/dist/components/Link/index.js +2 -0
  276. package/dist/components/Logo/index.d.ts +17 -0
  277. package/dist/components/Logo/index.js +705 -0
  278. package/dist/components/Logo/index.js.map +1 -0
  279. package/dist/components/MetricChart/MetricChart.d.ts +9 -0
  280. package/dist/components/MetricChart/MetricChart.js +42 -0
  281. package/dist/components/MetricChart/MetricChart.js.map +1 -0
  282. package/dist/components/MetricChart/formatters.d.ts +18 -0
  283. package/dist/components/MetricChart/formatters.js +34 -0
  284. package/dist/components/MetricChart/formatters.js.map +1 -0
  285. package/dist/components/MetricChart/index.d.ts +4 -0
  286. package/dist/components/MetricChart/index.js +3 -0
  287. package/dist/components/Pane/Pane.d.ts +29 -0
  288. package/dist/components/Pane/Pane.js +171 -0
  289. package/dist/components/Pane/Pane.js.map +1 -0
  290. package/dist/components/Pane/Pane.utils.d.ts +10 -0
  291. package/dist/components/Pane/Pane.utils.js +7 -0
  292. package/dist/components/Pane/Pane.utils.js.map +1 -0
  293. package/dist/components/Pane/index.d.ts +3 -0
  294. package/dist/components/Pane/index.js +3 -0
  295. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.d.ts +9 -0
  296. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js +76 -0
  297. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js.map +1 -0
  298. package/dist/components/PlainTextEditor/index.d.ts +18 -0
  299. package/dist/components/PlainTextEditor/index.js +71 -0
  300. package/dist/components/PlainTextEditor/index.js.map +1 -0
  301. package/dist/components/Popover/Popover.d.ts +13 -0
  302. package/dist/components/Popover/Popover.js +48 -0
  303. package/dist/components/Popover/Popover.js.map +1 -0
  304. package/dist/components/Popover/constants.d.ts +1 -0
  305. package/dist/components/Popover/constants.js +6 -0
  306. package/dist/components/Popover/constants.js.map +1 -0
  307. package/dist/components/Popover/index.d.ts +1 -0
  308. package/dist/components/Popover/index.js +2 -0
  309. package/dist/components/PortalSlot.d.ts +11 -0
  310. package/dist/components/PortalSlot.js +41 -0
  311. package/dist/components/PortalSlot.js.map +1 -0
  312. package/dist/components/ProgressBar/ProgressBar.d.ts +38 -0
  313. package/dist/components/ProgressBar/ProgressBar.js +82 -0
  314. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  315. package/dist/components/ProgressBar/index.d.ts +2 -0
  316. package/dist/components/ProgressBar/index.js +2 -0
  317. package/dist/components/RadioButton/RadioButton.d.ts +62 -0
  318. package/dist/components/RadioButton/RadioButton.js +38 -0
  319. package/dist/components/RadioButton/RadioButton.js.map +1 -0
  320. package/dist/components/RadioButton/constants.d.ts +30 -0
  321. package/dist/components/RadioButton/constants.js +55 -0
  322. package/dist/components/RadioButton/constants.js.map +1 -0
  323. package/dist/components/RadioButton/index.d.ts +2 -0
  324. package/dist/components/RadioButton/index.js +2 -0
  325. package/dist/components/RadioCard/RadioCard.d.ts +26 -0
  326. package/dist/components/RadioCard/RadioCard.js +43 -0
  327. package/dist/components/RadioCard/RadioCard.js.map +1 -0
  328. package/dist/components/RadioCard/index.d.ts +2 -0
  329. package/dist/components/RadioCard/index.js +2 -0
  330. package/dist/components/RadioGroup/RadioGroup.d.ts +5 -0
  331. package/dist/components/RadioGroup/RadioGroup.js +17 -0
  332. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  333. package/dist/components/RadioGroup/RadioGroupItem.d.ts +5 -0
  334. package/dist/components/RadioGroup/RadioGroupItem.js +22 -0
  335. package/dist/components/RadioGroup/RadioGroupItem.js.map +1 -0
  336. package/dist/components/RadioGroup/index.d.ts +4 -0
  337. package/dist/components/RadioGroup/index.js +3 -0
  338. package/dist/components/Select/Select.d.ts +84 -0
  339. package/dist/components/Select/Select.js +120 -0
  340. package/dist/components/Select/Select.js.map +1 -0
  341. package/dist/components/Select/SelectPrimitive.d.ts +17 -0
  342. package/dist/components/Select/SelectPrimitive.js +126 -0
  343. package/dist/components/Select/SelectPrimitive.js.map +1 -0
  344. package/dist/components/Select/index.d.ts +4 -0
  345. package/dist/components/Select/index.js +3 -0
  346. package/dist/components/Skeleton/Skeleton.d.ts +13 -0
  347. package/dist/components/Skeleton/Skeleton.js +25 -0
  348. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  349. package/dist/components/Skeleton/index.d.ts +1 -0
  350. package/dist/components/Skeleton/index.js +2 -0
  351. package/dist/components/Slider/Slider.d.ts +33 -0
  352. package/dist/components/Slider/Slider.js +64 -0
  353. package/dist/components/Slider/Slider.js.map +1 -0
  354. package/dist/components/Slider/index.d.ts +2 -0
  355. package/dist/components/Slider/index.js +2 -0
  356. package/dist/components/SparkLineChart/SparkLineChart.d.ts +14 -0
  357. package/dist/components/SparkLineChart/SparkLineChart.js +112 -0
  358. package/dist/components/SparkLineChart/SparkLineChart.js.map +1 -0
  359. package/dist/components/SparkLineChart/index.d.ts +2 -0
  360. package/dist/components/SparkLineChart/index.js +2 -0
  361. package/dist/components/Spinner/Spinner.d.ts +12 -0
  362. package/dist/components/Spinner/Spinner.js +33 -0
  363. package/dist/components/Spinner/Spinner.js.map +1 -0
  364. package/dist/components/Spinner/index.d.ts +1 -0
  365. package/dist/components/Spinner/index.js +2 -0
  366. package/dist/components/SplitViewPane/SplitViewPane.d.ts +41 -0
  367. package/dist/components/SplitViewPane/SplitViewPane.js +314 -0
  368. package/dist/components/SplitViewPane/SplitViewPane.js.map +1 -0
  369. package/dist/components/SplitViewPane/SplitViewPaneHeader.d.ts +22 -0
  370. package/dist/components/SplitViewPane/SplitViewPaneHeader.js +105 -0
  371. package/dist/components/SplitViewPane/SplitViewPaneHeader.js.map +1 -0
  372. package/dist/components/SplitViewPane/index.d.ts +2 -0
  373. package/dist/components/SplitViewPane/index.js +3 -0
  374. package/dist/components/SplitViewPane/openPaneRegistry.d.ts +2 -0
  375. package/dist/components/SplitViewPane/openPaneRegistry.js +49 -0
  376. package/dist/components/SplitViewPane/openPaneRegistry.js.map +1 -0
  377. package/dist/components/Switch/Switch.d.ts +35 -0
  378. package/dist/components/Switch/Switch.js +65 -0
  379. package/dist/components/Switch/Switch.js.map +1 -0
  380. package/dist/components/Switch/index.d.ts +2 -0
  381. package/dist/components/Switch/index.js +2 -0
  382. package/dist/components/Tabs/index.d.ts +27 -0
  383. package/dist/components/Tabs/index.js +45 -0
  384. package/dist/components/Tabs/index.js.map +1 -0
  385. package/dist/components/Text/Text.d.ts +13 -0
  386. package/dist/components/Text/Text.js +58 -0
  387. package/dist/components/Text/Text.js.map +1 -0
  388. package/dist/components/Text/index.d.ts +2 -0
  389. package/dist/components/Text/index.js +2 -0
  390. package/dist/components/TextVirtualizer.d.ts +8 -0
  391. package/dist/components/TextVirtualizer.js +53 -0
  392. package/dist/components/TextVirtualizer.js.map +1 -0
  393. package/dist/components/TextWithLinks.d.ts +6 -0
  394. package/dist/components/TextWithLinks.js +61 -0
  395. package/dist/components/TextWithLinks.js.map +1 -0
  396. package/dist/components/Textarea/Textarea.d.ts +47 -0
  397. package/dist/components/Textarea/Textarea.js +150 -0
  398. package/dist/components/Textarea/Textarea.js.map +1 -0
  399. package/dist/components/Textarea/index.d.ts +2 -0
  400. package/dist/components/Textarea/index.js +2 -0
  401. package/dist/components/ThinkingState/LoadingIndicator.d.ts +19 -0
  402. package/dist/components/ThinkingState/LoadingIndicator.js +2 -0
  403. package/dist/components/ThinkingState/NOTICE +25 -0
  404. package/dist/components/ThinkingState/ThinkingState.d.ts +21 -0
  405. package/dist/components/ThinkingState/ThinkingState.js +42 -0
  406. package/dist/components/ThinkingState/ThinkingState.js.map +1 -0
  407. package/dist/components/ThinkingState/ThinkingStateTimer.d.ts +9 -0
  408. package/dist/components/ThinkingState/ThinkingStateTimer.js +43 -0
  409. package/dist/components/ThinkingState/ThinkingStateTimer.js.map +1 -0
  410. package/dist/components/ThinkingState/index.d.ts +4 -0
  411. package/dist/components/ThinkingState/index.js +3 -0
  412. package/dist/components/Toast/ToastContext.d.ts +5 -0
  413. package/dist/components/Toast/ToastContext.js +9 -0
  414. package/dist/components/Toast/ToastContext.js.map +1 -0
  415. package/dist/components/Toast/index.d.ts +13 -0
  416. package/dist/components/Toast/index.js +166 -0
  417. package/dist/components/Toast/index.js.map +1 -0
  418. package/dist/components/Toast/useToast.d.ts +3 -0
  419. package/dist/components/Toast/useToast.js +11 -0
  420. package/dist/components/Toast/useToast.js.map +1 -0
  421. package/dist/components/Tooltip/Tooltip.d.ts +19 -0
  422. package/dist/components/Tooltip/Tooltip.js +57 -0
  423. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  424. package/dist/components/Tooltip/index.d.ts +3 -0
  425. package/dist/components/Tooltip/index.js +3 -0
  426. package/dist/components/TopList/TopList.d.ts +3 -0
  427. package/dist/components/TopList/TopList.js +186 -0
  428. package/dist/components/TopList/TopList.js.map +1 -0
  429. package/dist/components/TopList/TopList.types.d.ts +34 -0
  430. package/dist/components/TopList/TopList.types.js +0 -0
  431. package/dist/components/TopList/TopList.utils.d.ts +3 -0
  432. package/dist/components/TopList/TopList.utils.js +16 -0
  433. package/dist/components/TopList/TopList.utils.js.map +1 -0
  434. package/dist/components/TopList/index.d.ts +2 -0
  435. package/dist/components/TopList/index.js +2 -0
  436. package/dist/components/Typeahead/Typeahead.d.ts +5 -0
  437. package/dist/components/Typeahead/Typeahead.js +305 -0
  438. package/dist/components/Typeahead/Typeahead.js.map +1 -0
  439. package/dist/components/Typeahead/Typeahead.types.d.ts +99 -0
  440. package/dist/components/Typeahead/Typeahead.types.js +0 -0
  441. package/dist/components/Typeahead/Typeahead.utils.d.ts +25 -0
  442. package/dist/components/Typeahead/Typeahead.utils.js +73 -0
  443. package/dist/components/Typeahead/Typeahead.utils.js.map +1 -0
  444. package/dist/components/Typeahead/TypeaheadParts.d.ts +25 -0
  445. package/dist/components/Typeahead/TypeaheadParts.js +109 -0
  446. package/dist/components/Typeahead/TypeaheadParts.js.map +1 -0
  447. package/dist/components/Typeahead/TypeaheadView.d.ts +81 -0
  448. package/dist/components/Typeahead/TypeaheadView.js +228 -0
  449. package/dist/components/Typeahead/TypeaheadView.js.map +1 -0
  450. package/dist/components/Typeahead/index.d.ts +2 -0
  451. package/dist/components/Typeahead/index.js +2 -0
  452. package/dist/components/Typeahead/useTypeaheadDomSync.d.ts +15 -0
  453. package/dist/components/Typeahead/useTypeaheadDomSync.js +43 -0
  454. package/dist/components/Typeahead/useTypeaheadDomSync.js.map +1 -0
  455. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.d.ts +11 -0
  456. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js +32 -0
  457. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js.map +1 -0
  458. package/dist/components/UnsavedChangesDialog.d.ts +14 -0
  459. package/dist/components/UnsavedChangesDialog.js +67 -0
  460. package/dist/components/UnsavedChangesDialog.js.map +1 -0
  461. package/dist/components/index.d.ts +58 -0
  462. package/dist/components/index.js +35 -0
  463. package/dist/components.css +102 -0
  464. package/dist/contexts/ErrorReporterContext.d.ts +6 -0
  465. package/dist/contexts/ErrorReporterContext.js +7 -0
  466. package/dist/contexts/ErrorReporterContext.js.map +1 -0
  467. package/dist/hooks/AppThemeProvider.d.ts +8 -0
  468. package/dist/hooks/AppThemeProvider.js +52 -0
  469. package/dist/hooks/AppThemeProvider.js.map +1 -0
  470. package/dist/hooks/useColorScheme.d.ts +20 -0
  471. package/dist/hooks/useColorScheme.js +50 -0
  472. package/dist/hooks/useColorScheme.js.map +1 -0
  473. package/dist/icons/LongTailPhosphorIcons.d.ts +51 -0
  474. package/dist/icons/LongTailPhosphorIcons.js +102 -0
  475. package/dist/icons/LongTailPhosphorIcons.js.map +1 -0
  476. package/dist/icons/PaddedPhosphorIcons.d.ts +17 -0
  477. package/dist/icons/PaddedPhosphorIcons.js +55 -0
  478. package/dist/icons/PaddedPhosphorIcons.js.map +1 -0
  479. package/dist/icons/WeightedPhosphorIcons.d.ts +45 -0
  480. package/dist/icons/WeightedPhosphorIcons.js +96 -0
  481. package/dist/icons/WeightedPhosphorIcons.js.map +1 -0
  482. package/dist/icons/index.d.ts +2 -0
  483. package/dist/icons/index.js +4 -0
  484. package/dist/index.d.ts +1 -0
  485. package/dist/index.js +36 -0
  486. package/dist/styles.css +10 -0
  487. package/dist/utilities.css +2 -0
  488. package/dist/utils/VirtuosoCustomScrollParentContext/index.d.ts +7 -0
  489. package/dist/utils/VirtuosoCustomScrollParentContext/index.js +15 -0
  490. package/dist/utils/VirtuosoCustomScrollParentContext/index.js.map +1 -0
  491. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.d.ts +4 -0
  492. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js +10 -0
  493. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js.map +1 -0
  494. package/dist/utils/ZIndexContext.d.ts +5 -0
  495. package/dist/utils/ZIndexContext.js +13 -0
  496. package/dist/utils/ZIndexContext.js.map +1 -0
  497. package/dist/utils/animation.d.ts +37 -0
  498. package/dist/utils/animation.js +42 -0
  499. package/dist/utils/animation.js.map +1 -0
  500. package/dist/utils/chartAxisLayout.d.ts +6 -0
  501. package/dist/utils/chartAxisLayout.js +8 -0
  502. package/dist/utils/chartAxisLayout.js.map +1 -0
  503. package/dist/utils/chartColors.d.ts +38 -0
  504. package/dist/utils/chartColors.js +78 -0
  505. package/dist/utils/chartColors.js.map +1 -0
  506. package/dist/utils/chartConstants.d.ts +10 -0
  507. package/dist/utils/chartConstants.js +15 -0
  508. package/dist/utils/chartConstants.js.map +1 -0
  509. package/dist/utils/chartValues.d.ts +2 -0
  510. package/dist/utils/chartValues.js +36 -0
  511. package/dist/utils/chartValues.js.map +1 -0
  512. package/dist/utils/clamp.d.ts +2 -0
  513. package/dist/utils/clamp.js +7 -0
  514. package/dist/utils/clamp.js.map +1 -0
  515. package/dist/utils/cn.d.ts +2 -0
  516. package/dist/utils/cn.js +191 -0
  517. package/dist/utils/cn.js.map +1 -0
  518. package/dist/utils/componentSizes.d.ts +104 -0
  519. package/dist/utils/componentSizes.js +104 -0
  520. package/dist/utils/componentSizes.js.map +1 -0
  521. package/dist/utils/controlIconSizes.d.ts +10 -0
  522. package/dist/utils/controlIconSizes.js +32 -0
  523. package/dist/utils/controlIconSizes.js.map +1 -0
  524. package/dist/utils/csp-nonce.d.ts +11 -0
  525. package/dist/utils/csp-nonce.js +17 -0
  526. package/dist/utils/csp-nonce.js.map +1 -0
  527. package/dist/utils/get-closest-scroll-parent.d.ts +1 -0
  528. package/dist/utils/get-closest-scroll-parent.js +16 -0
  529. package/dist/utils/get-closest-scroll-parent.js.map +1 -0
  530. package/dist/utils/get-color-by-string.d.ts +1 -0
  531. package/dist/utils/get-color-by-string.js +10 -0
  532. package/dist/utils/get-color-by-string.js.map +1 -0
  533. package/dist/utils/getYAxisLeftMargin.d.ts +10 -0
  534. package/dist/utils/getYAxisLeftMargin.js +20 -0
  535. package/dist/utils/getYAxisLeftMargin.js.map +1 -0
  536. package/dist/utils/icon-types.d.ts +8 -0
  537. package/dist/utils/icon-types.js +0 -0
  538. package/dist/utils/lazy-codemirror-loader.d.ts +70 -0
  539. package/dist/utils/lazy-codemirror-loader.js +79 -0
  540. package/dist/utils/lazy-codemirror-loader.js.map +1 -0
  541. package/dist/utils/merge-refs.d.ts +2 -0
  542. package/dist/utils/merge-refs.js +13 -0
  543. package/dist/utils/merge-refs.js.map +1 -0
  544. package/dist/utils/parseTextLinks.d.ts +7 -0
  545. package/dist/utils/parseTextLinks.js +46 -0
  546. package/dist/utils/parseTextLinks.js.map +1 -0
  547. package/dist/utils/prettify-error-payload.d.ts +7 -0
  548. package/dist/utils/prettify-error-payload.js +188 -0
  549. package/dist/utils/prettify-error-payload.js.map +1 -0
  550. package/dist/utils/spacing.d.ts +30 -0
  551. package/dist/utils/spacing.js +34 -0
  552. package/dist/utils/spacing.js.map +1 -0
  553. package/dist/utils/useCodeMirror.d.ts +7 -0
  554. package/dist/utils/useCodeMirror.js +28 -0
  555. package/dist/utils/useCodeMirror.js.map +1 -0
  556. package/dist/utils/useZIndex.d.ts +52 -0
  557. package/dist/utils/useZIndex.js +62 -0
  558. package/dist/utils/useZIndex.js.map +1 -0
  559. package/dist/utils/zIndices.d.ts +42 -0
  560. package/dist/utils/zIndices.js +46 -0
  561. package/dist/utils/zIndices.js.map +1 -0
  562. package/docs/DESIGN.md +134 -0
  563. package/docs/STYLES.md +568 -0
  564. package/package.json +619 -0
  565. package/tailwind.preset.cjs +738 -0
  566. package/tailwind.preset.d.cts +5 -0
@@ -0,0 +1,186 @@
1
+ import { Text } from "../Text/Text.js";
2
+ import { getFillChartColorForKey } from "../../utils/chartColors.js";
3
+ import { BarChart } from "../BarChart/BarChart.js";
4
+ import { limitTopListItems, sortTopListItems } from "./TopList.utils.js";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { animated, useReducedMotion, useSpring } from "@react-spring/web";
7
+ import { getStringWidth } from "@visx/text";
8
+ //#region packages/components/src/components/TopList/TopList.tsx
9
+ var TOP_LIST_SERIES_ID = "top-list-values";
10
+ var TOP_LIST_DEFAULT_CATEGORY_LABEL_WIDTH = 112;
11
+ var TOP_LIST_VALUE_LABEL_GAP = 8;
12
+ var TOP_LIST_VALUE_LABEL_FONT_SIZE = 12;
13
+ var numberFormatter = new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 });
14
+ var defaultFormatValue = (value) => numberFormatter.format(value);
15
+ var TopListValueLabel = ({ bar, label, shouldAnimate }) => {
16
+ const isNegative = bar.value < 0;
17
+ const isReducedMotion = (useReducedMotion() ?? false) || !shouldAnimate;
18
+ const targetX = isNegative ? bar.x - TOP_LIST_VALUE_LABEL_GAP : bar.x + bar.width + TOP_LIST_VALUE_LABEL_GAP;
19
+ const targetY = bar.y + bar.height / 2;
20
+ const { x, y } = useSpring({
21
+ from: {
22
+ x: bar.baselinePosition + (isNegative ? -8 : TOP_LIST_VALUE_LABEL_GAP),
23
+ y: targetY
24
+ },
25
+ to: {
26
+ x: targetX,
27
+ y: targetY
28
+ },
29
+ immediate: isReducedMotion
30
+ });
31
+ return /* @__PURE__ */ jsx(animated.text, {
32
+ x,
33
+ y,
34
+ dominantBaseline: "middle",
35
+ textAnchor: isNegative ? "end" : "start",
36
+ className: "fill-current font-mono text-xs text-secondary",
37
+ children: label
38
+ });
39
+ };
40
+ var TopListOverlay = ({ categories, bandwidth, innerWidth, innerHeight, getCategoryPosition, getItem, categoryLabelWidth, valueLabelPadding, hasNegativeValues, onItemPointerMove, onItemPointerOut, onItemActivate }) => categories.map((category, index) => {
41
+ const item = getItem(category);
42
+ const position = getCategoryPosition(category);
43
+ if (item == null || position == null) return null;
44
+ const previousPosition = index === 0 ? void 0 : getCategoryPosition(categories[index - 1]);
45
+ const nextPosition = index === categories.length - 1 ? void 0 : getCategoryPosition(categories[index + 1]);
46
+ const top = previousPosition == null ? 0 : (previousPosition + position) / 2;
47
+ const bottom = nextPosition == null ? innerHeight : (position + nextPosition) / 2;
48
+ const leftPadding = hasNegativeValues ? valueLabelPadding : 0;
49
+ const isInteractive = onItemPointerMove != null || onItemActivate != null;
50
+ let cursorClassName;
51
+ if (onItemActivate != null) cursorClassName = "cursor-pointer";
52
+ else if (onItemPointerMove != null) cursorClassName = "cursor-crosshair";
53
+ return /* @__PURE__ */ jsxs("g", {
54
+ className: cursorClassName,
55
+ onPointerMove: onItemPointerMove == null ? void 0 : (event) => {
56
+ event.stopPropagation();
57
+ onItemPointerMove(item, event);
58
+ },
59
+ onPointerLeave: onItemPointerOut,
60
+ onPointerUp: onItemActivate == null ? void 0 : (event) => {
61
+ if (event.button !== 0) return;
62
+ event.stopPropagation();
63
+ onItemActivate(item, event);
64
+ },
65
+ children: [isInteractive && /* @__PURE__ */ jsx("rect", {
66
+ x: -categoryLabelWidth - leftPadding,
67
+ y: top,
68
+ width: categoryLabelWidth + leftPadding + innerWidth + valueLabelPadding,
69
+ height: Math.max(0, bottom - top),
70
+ fill: "transparent",
71
+ pointerEvents: "all",
72
+ "aria-hidden": "true"
73
+ }), /* @__PURE__ */ jsx("foreignObject", {
74
+ x: -categoryLabelWidth - leftPadding,
75
+ y: position - bandwidth / 2,
76
+ width: categoryLabelWidth,
77
+ height: bandwidth,
78
+ children: /* @__PURE__ */ jsx("div", {
79
+ className: "flex size-full min-w-0 items-center justify-end overflow-hidden pr-space-3",
80
+ children: /* @__PURE__ */ jsx(Text, {
81
+ as: "span",
82
+ variant: "xs",
83
+ color: "primary",
84
+ className: "block max-w-full truncate",
85
+ title: item.label,
86
+ children: item.label
87
+ })
88
+ })
89
+ })]
90
+ }, `hitbox:${item.id}`);
91
+ });
92
+ /** Use for ranked top-K data; adapters own data shaping, tooltips, and navigation. */
93
+ var TopList = ({ items, sort = "descending", limit, formatValue = defaultFormatValue, valueAxisLabel, categoryLabelWidth = TOP_LIST_DEFAULT_CATEGORY_LABEL_WIDTH, activeItemId, getItemAriaLabel, isRendering = true, shouldAnimate = true, onItemPointerMove, onItemPointerOut, onItemActivate, onItemFocus, onItemBlur, className, "aria-label": ariaLabel, ...rest }) => {
94
+ const sortedItems = sortTopListItems(items.filter((item) => Number.isFinite(item.value)), sort);
95
+ const visibleItems = limitTopListItems(sortedItems, limit);
96
+ const itemById = new Map(visibleItems.map((item) => [item.id, item]));
97
+ const formattedValueById = new Map(visibleItems.map((item) => [item.id, formatValue(item.value)]));
98
+ const resolvedCategoryLabelWidth = Number.isFinite(categoryLabelWidth) ? Math.max(0, categoryLabelWidth) : TOP_LIST_DEFAULT_CATEGORY_LABEL_WIDTH;
99
+ const valueLabelPadding = Math.ceil(TOP_LIST_VALUE_LABEL_GAP + Math.max(0, ...Array.from(formattedValueById.values(), (value) => Math.max(getStringWidth(value, { fontSize: `${TOP_LIST_VALUE_LABEL_FONT_SIZE}px` }) ?? 0, value.length * 7))));
100
+ const values = sortedItems.map((item) => item.value);
101
+ const valueDomain = values.length === 0 ? void 0 : [Math.min(0, ...values), Math.max(0, ...values)];
102
+ const hasNegativeValues = (valueDomain?.[0] ?? 0) < 0;
103
+ const series = [{
104
+ id: TOP_LIST_SERIES_ID,
105
+ label: valueAxisLabel ?? "Value",
106
+ ariaLabel: valueAxisLabel ?? "Values",
107
+ data: visibleItems.map((item) => ({
108
+ id: item.id,
109
+ category: item.id,
110
+ value: item.value,
111
+ color: item.color ?? getFillChartColorForKey(item.id)
112
+ }))
113
+ }];
114
+ const getItem = (category) => itemById.get(String(category));
115
+ const getDatumItem = (datum) => getItem(datum.category);
116
+ const mapDatumHandlerToItem = (handler) => {
117
+ if (!isRendering || handler == null) return void 0;
118
+ return (datum, event) => {
119
+ const item = getDatumItem(datum);
120
+ if (item != null) handler(item, event);
121
+ };
122
+ };
123
+ return /* @__PURE__ */ jsx(BarChart, {
124
+ ...rest,
125
+ "aria-label": ariaLabel,
126
+ className,
127
+ orientation: "horizontal",
128
+ mode: "grouped",
129
+ series,
130
+ showLegend: false,
131
+ activeBarId: activeItemId,
132
+ isRendering,
133
+ shouldAnimate,
134
+ minimumPlotWidth: 0,
135
+ categoryPadding: {
136
+ inner: .24,
137
+ outer: .24
138
+ },
139
+ categoryAxis: {
140
+ domain: visibleItems.map((item) => item.id),
141
+ thickness: resolvedCategoryLabelWidth
142
+ },
143
+ valueAxes: [{
144
+ id: TOP_LIST_SERIES_ID,
145
+ label: valueAxisLabel,
146
+ domain: valueDomain,
147
+ nice: true,
148
+ formatValue
149
+ }],
150
+ grid: { value: true },
151
+ plotPadding: {
152
+ left: hasNegativeValues ? valueLabelPadding : 0,
153
+ right: valueLabelPadding
154
+ },
155
+ slots: {
156
+ categoryAxis: () => null,
157
+ barLabel: (bar) => /* @__PURE__ */ jsx(TopListValueLabel, {
158
+ bar,
159
+ label: formattedValueById.get(bar.id) ?? formatValue(bar.value),
160
+ shouldAnimate
161
+ }, `${bar.id}:${bar.startValue}:${bar.endValue}`),
162
+ overlay: (slotProps) => isRendering ? /* @__PURE__ */ jsx(TopListOverlay, {
163
+ ...slotProps,
164
+ getItem,
165
+ categoryLabelWidth: resolvedCategoryLabelWidth,
166
+ valueLabelPadding,
167
+ hasNegativeValues,
168
+ onItemPointerMove,
169
+ onItemPointerOut,
170
+ onItemActivate
171
+ }) : null
172
+ },
173
+ getCategoryAriaLabel: !isRendering ? void 0 : (datum) => {
174
+ const item = getDatumItem(datum);
175
+ if (item == null) return void 0;
176
+ return getItemAriaLabel?.(item) ?? `${item.label}: ${formattedValueById.get(item.id) ?? formatValue(item.value)}`;
177
+ },
178
+ onDatumActivate: mapDatumHandlerToItem(onItemActivate),
179
+ onDatumFocus: mapDatumHandlerToItem(onItemFocus),
180
+ onDatumBlur: mapDatumHandlerToItem(onItemBlur)
181
+ });
182
+ };
183
+ //#endregion
184
+ export { TopList };
185
+
186
+ //# sourceMappingURL=TopList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopList.js","names":[],"sources":["../../../src/components/TopList/TopList.tsx"],"sourcesContent":["import { animated, useReducedMotion, useSpring } from '@react-spring/web';\nimport { getStringWidth } from '@visx/text';\n\nimport { getFillChartColorForKey } from '../../utils/chartColors';\nimport {\n BarChart,\n type BarChartCategory,\n type BarChartInteractionDatum,\n type BarChartPlotSlotProps,\n type BarChartRenderedBar,\n type BarChartSeries,\n} from '../BarChart';\nimport { Text } from '../Text';\nimport type { TopListItem, TopListProps } from './TopList.types';\nimport { limitTopListItems, sortTopListItems } from './TopList.utils';\n\nconst TOP_LIST_SERIES_ID = 'top-list-values';\nconst TOP_LIST_DEFAULT_CATEGORY_LABEL_WIDTH = 112;\nconst TOP_LIST_VALUE_LABEL_GAP = 8;\nconst TOP_LIST_VALUE_LABEL_FONT_SIZE = 12;\nconst numberFormatter = new Intl.NumberFormat('en-US', {\n maximumFractionDigits: 2,\n});\n\nconst defaultFormatValue = (value: number) => numberFormatter.format(value);\n\nconst TopListValueLabel = ({\n bar,\n label,\n shouldAnimate,\n}: {\n bar: BarChartRenderedBar;\n label: string;\n shouldAnimate: boolean;\n}) => {\n const isNegative = bar.value < 0;\n const isReducedMotion = (useReducedMotion() ?? false) || !shouldAnimate;\n const targetX = isNegative\n ? bar.x - TOP_LIST_VALUE_LABEL_GAP\n : bar.x + bar.width + TOP_LIST_VALUE_LABEL_GAP;\n const targetY = bar.y + bar.height / 2;\n const { x, y } = useSpring({\n from: {\n x:\n bar.baselinePosition +\n (isNegative ? -TOP_LIST_VALUE_LABEL_GAP : TOP_LIST_VALUE_LABEL_GAP),\n y: targetY,\n },\n to: { x: targetX, y: targetY },\n immediate: isReducedMotion,\n });\n\n return (\n <animated.text\n x={x}\n y={y}\n dominantBaseline=\"middle\"\n textAnchor={isNegative ? 'end' : 'start'}\n className=\"fill-current font-mono text-xs text-secondary\"\n >\n {label}\n </animated.text>\n );\n};\n\ntype TopListOverlayProps<Item extends TopListItem> = BarChartPlotSlotProps &\n Pick<\n TopListProps<Item>,\n 'onItemActivate' | 'onItemPointerMove' | 'onItemPointerOut'\n > & {\n getItem: (category: BarChartCategory) => Item | undefined;\n categoryLabelWidth: number;\n valueLabelPadding: number;\n hasNegativeValues: boolean;\n };\n\nconst TopListOverlay = <Item extends TopListItem>({\n categories,\n bandwidth,\n innerWidth,\n innerHeight,\n getCategoryPosition,\n getItem,\n categoryLabelWidth,\n valueLabelPadding,\n hasNegativeValues,\n onItemPointerMove,\n onItemPointerOut,\n onItemActivate,\n}: TopListOverlayProps<Item>) =>\n categories.map((category, index) => {\n const item = getItem(category);\n const position = getCategoryPosition(category);\n if (item == null || position == null) return null;\n\n const previousPosition =\n index === 0 ? undefined : getCategoryPosition(categories[index - 1]);\n const nextPosition =\n index === categories.length - 1\n ? undefined\n : getCategoryPosition(categories[index + 1]);\n const top =\n previousPosition == null ? 0 : (previousPosition + position) / 2;\n const bottom =\n nextPosition == null ? innerHeight : (position + nextPosition) / 2;\n const leftPadding = hasNegativeValues ? valueLabelPadding : 0;\n const isInteractive = onItemPointerMove != null || onItemActivate != null;\n\n let cursorClassName: string | undefined;\n if (onItemActivate != null) {\n cursorClassName = 'cursor-pointer';\n } else if (onItemPointerMove != null) {\n cursorClassName = 'cursor-crosshair';\n }\n\n return (\n <g\n key={`hitbox:${item.id}`}\n className={cursorClassName}\n onPointerMove={\n onItemPointerMove == null\n ? undefined\n : (event) => {\n event.stopPropagation();\n onItemPointerMove(item, event);\n }\n }\n onPointerLeave={onItemPointerOut}\n onPointerUp={\n onItemActivate == null\n ? undefined\n : (event) => {\n if (event.button !== 0) return;\n event.stopPropagation();\n onItemActivate(item, event);\n }\n }\n >\n {isInteractive && (\n <rect\n x={-categoryLabelWidth - leftPadding}\n y={top}\n width={\n categoryLabelWidth + leftPadding + innerWidth + valueLabelPadding\n }\n height={Math.max(0, bottom - top)}\n fill=\"transparent\"\n pointerEvents=\"all\"\n aria-hidden=\"true\"\n />\n )}\n <foreignObject\n x={-categoryLabelWidth - leftPadding}\n y={position - bandwidth / 2}\n width={categoryLabelWidth}\n height={bandwidth}\n >\n <div className=\"flex size-full min-w-0 items-center justify-end overflow-hidden pr-space-3\">\n <Text\n as=\"span\"\n variant=\"xs\"\n color=\"primary\"\n className=\"block max-w-full truncate\"\n title={item.label}\n >\n {item.label}\n </Text>\n </div>\n </foreignObject>\n </g>\n );\n });\n\n/** Use for ranked top-K data; adapters own data shaping, tooltips, and navigation. */\nexport const TopList = <Item extends TopListItem>({\n items,\n sort = 'descending',\n limit,\n formatValue = defaultFormatValue,\n valueAxisLabel,\n categoryLabelWidth = TOP_LIST_DEFAULT_CATEGORY_LABEL_WIDTH,\n activeItemId,\n getItemAriaLabel,\n isRendering = true,\n shouldAnimate = true,\n onItemPointerMove,\n onItemPointerOut,\n onItemActivate,\n onItemFocus,\n onItemBlur,\n className,\n 'aria-label': ariaLabel,\n ...rest\n}: TopListProps<Item>) => {\n const sortedItems = sortTopListItems(\n items.filter((item) => Number.isFinite(item.value)),\n sort\n );\n const visibleItems = limitTopListItems(sortedItems, limit);\n const itemById = new Map(visibleItems.map((item) => [item.id, item]));\n const formattedValueById = new Map(\n visibleItems.map((item) => [item.id, formatValue(item.value)])\n );\n const resolvedCategoryLabelWidth = Number.isFinite(categoryLabelWidth)\n ? Math.max(0, categoryLabelWidth)\n : TOP_LIST_DEFAULT_CATEGORY_LABEL_WIDTH;\n const valueLabelPadding = Math.ceil(\n TOP_LIST_VALUE_LABEL_GAP +\n Math.max(\n 0,\n ...Array.from(formattedValueById.values(), (value) =>\n Math.max(\n getStringWidth(value, {\n fontSize: `${TOP_LIST_VALUE_LABEL_FONT_SIZE}px`,\n }) ?? 0,\n value.length * 7\n )\n )\n )\n );\n const values = sortedItems.map((item) => item.value);\n const valueDomain: readonly [number, number] | undefined =\n values.length === 0\n ? undefined\n : [Math.min(0, ...values), Math.max(0, ...values)];\n const hasNegativeValues = (valueDomain?.[0] ?? 0) < 0;\n const series: readonly BarChartSeries[] = [\n {\n id: TOP_LIST_SERIES_ID,\n label: valueAxisLabel ?? 'Value',\n ariaLabel: valueAxisLabel ?? 'Values',\n data: visibleItems.map((item) => ({\n id: item.id,\n category: item.id,\n value: item.value,\n color: item.color ?? getFillChartColorForKey(item.id),\n })),\n },\n ];\n const getItem = (category: BarChartCategory) =>\n itemById.get(String(category));\n const getDatumItem = (datum: BarChartInteractionDatum) =>\n getItem(datum.category);\n const mapDatumHandlerToItem = <Event,>(\n handler: ((item: Item, event: Event) => void) | undefined\n ) => {\n if (!isRendering || handler == null) return undefined;\n\n return (datum: BarChartInteractionDatum, event: Event) => {\n const item = getDatumItem(datum);\n if (item != null) handler(item, event);\n };\n };\n\n return (\n <BarChart\n {...rest}\n aria-label={ariaLabel}\n className={className}\n orientation=\"horizontal\"\n mode=\"grouped\"\n series={series}\n showLegend={false}\n activeBarId={activeItemId}\n isRendering={isRendering}\n shouldAnimate={shouldAnimate}\n minimumPlotWidth={0}\n categoryPadding={{ inner: 0.24, outer: 0.24 }}\n categoryAxis={{\n domain: visibleItems.map((item) => item.id),\n thickness: resolvedCategoryLabelWidth,\n }}\n valueAxes={[\n {\n id: TOP_LIST_SERIES_ID,\n label: valueAxisLabel,\n domain: valueDomain,\n nice: true,\n formatValue,\n },\n ]}\n grid={{ value: true }}\n plotPadding={{\n left: hasNegativeValues ? valueLabelPadding : 0,\n right: valueLabelPadding,\n }}\n slots={{\n categoryAxis: () => null,\n barLabel: (bar) => (\n <TopListValueLabel\n key={`${bar.id}:${bar.startValue}:${bar.endValue}`}\n bar={bar}\n label={formattedValueById.get(bar.id) ?? formatValue(bar.value)}\n shouldAnimate={shouldAnimate}\n />\n ),\n overlay: (slotProps) =>\n isRendering ? (\n <TopListOverlay\n {...slotProps}\n getItem={getItem}\n categoryLabelWidth={resolvedCategoryLabelWidth}\n valueLabelPadding={valueLabelPadding}\n hasNegativeValues={hasNegativeValues}\n onItemPointerMove={onItemPointerMove}\n onItemPointerOut={onItemPointerOut}\n onItemActivate={onItemActivate}\n />\n ) : null,\n }}\n getCategoryAriaLabel={\n !isRendering\n ? undefined\n : (datum) => {\n const item = getDatumItem(datum);\n if (item == null) return undefined;\n return (\n getItemAriaLabel?.(item) ??\n `${item.label}: ${formattedValueById.get(item.id) ?? formatValue(item.value)}`\n );\n }\n }\n onDatumActivate={mapDatumHandlerToItem(onItemActivate)}\n onDatumFocus={mapDatumHandlerToItem(onItemFocus)}\n onDatumBlur={mapDatumHandlerToItem(onItemBlur)}\n />\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { FocusEvent, HTMLAttributes, KeyboardEvent, PointerEvent } from 'react';
2
+ export type TopListItem = {
3
+ /** Stable identifier. Must be unique within the list. */
4
+ id: string;
5
+ label: string;
6
+ value: number;
7
+ /** Chart color from `chartColors`. */
8
+ color?: string;
9
+ };
10
+ export type TopListSort<Item extends TopListItem = TopListItem> = 'ascending' | 'descending' | 'none' | ((left: Item, right: Item) => number);
11
+ export type TopListProps<Item extends TopListItem = TopListItem> = Omit<HTMLAttributes<HTMLDivElement>, 'aria-label' | 'children'> & {
12
+ items: readonly Item[];
13
+ /** Sorts before applying `limit`. Defaults to descending value order. */
14
+ sort?: TopListSort<Item>;
15
+ limit?: number;
16
+ /** Formats value-axis ticks, value labels, and default accessible names. */
17
+ formatValue?: (value: number) => string;
18
+ valueAxisLabel?: string;
19
+ /** Reserved width for category labels, in pixels. Defaults to 112. */
20
+ categoryLabelWidth?: number;
21
+ activeItemId?: string | null;
22
+ /** Defaults to `<label>: <formatted value>`. */
23
+ getItemAriaLabel?: (item: Item) => string;
24
+ /** Keeps axes mounted while omitting rows during resize. */
25
+ isRendering?: boolean;
26
+ /** Animates the chart unless reduced motion is preferred. Defaults to true. */
27
+ shouldAnimate?: boolean;
28
+ onItemPointerMove?: (item: Item, event: PointerEvent<SVGElement>) => void;
29
+ onItemPointerOut?: () => void;
30
+ onItemActivate?: (item: Item, event: PointerEvent<SVGElement> | KeyboardEvent<SVGRectElement>) => void;
31
+ onItemFocus?: (item: Item, event: FocusEvent<SVGRectElement>) => void;
32
+ onItemBlur?: (item: Item, event: FocusEvent<SVGRectElement>) => void;
33
+ 'aria-label': string;
34
+ };
File without changes
@@ -0,0 +1,3 @@
1
+ import type { TopListItem, TopListSort } from './TopList.types.js';
2
+ export declare const sortTopListItems: <Item extends TopListItem>(items: readonly Item[], sort: TopListSort<Item>) => readonly Item[];
3
+ export declare const limitTopListItems: <Item extends TopListItem>(items: readonly Item[], limit: number | undefined) => readonly Item[];
@@ -0,0 +1,16 @@
1
+ //#region packages/components/src/components/TopList/TopList.utils.ts
2
+ var sortTopListItems = (items, sort) => {
3
+ const sortedItems = [...items];
4
+ if (sort === "none") return sortedItems;
5
+ if (typeof sort === "function") return sortedItems.sort(sort);
6
+ if (sort === "ascending") return sortedItems.sort((left, right) => left.value - right.value);
7
+ return sortedItems.sort((left, right) => right.value - left.value);
8
+ };
9
+ var limitTopListItems = (items, limit) => {
10
+ if (limit == null || !Number.isFinite(limit)) return items;
11
+ return items.slice(0, Math.max(0, Math.floor(limit)));
12
+ };
13
+ //#endregion
14
+ export { limitTopListItems, sortTopListItems };
15
+
16
+ //# sourceMappingURL=TopList.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopList.utils.js","names":[],"sources":["../../../src/components/TopList/TopList.utils.ts"],"sourcesContent":["import type { TopListItem, TopListSort } from './TopList.types';\n\nexport const sortTopListItems = <Item extends TopListItem>(\n items: readonly Item[],\n sort: TopListSort<Item>\n): readonly Item[] => {\n const sortedItems = [...items];\n if (sort === 'none') return sortedItems;\n\n if (typeof sort === 'function') return sortedItems.sort(sort);\n if (sort === 'ascending') {\n return sortedItems.sort((left, right) => left.value - right.value);\n }\n\n return sortedItems.sort((left, right) => right.value - left.value);\n};\n\nexport const limitTopListItems = <Item extends TopListItem>(\n items: readonly Item[],\n limit: number | undefined\n): readonly Item[] => {\n if (limit == null || !Number.isFinite(limit)) return items;\n return items.slice(0, Math.max(0, Math.floor(limit)));\n};\n"],"mappings":";AAEA,IAAa,oBACX,OACA,SACoB;CACpB,MAAM,cAAc,CAAC,GAAG,KAAK;CAC7B,IAAI,SAAS,QAAQ,OAAO;CAE5B,IAAI,OAAO,SAAS,YAAY,OAAO,YAAY,KAAK,IAAI;CAC5D,IAAI,SAAS,aACX,OAAO,YAAY,MAAM,MAAM,UAAU,KAAK,QAAQ,MAAM,KAAK;CAGnE,OAAO,YAAY,MAAM,MAAM,UAAU,MAAM,QAAQ,KAAK,KAAK;AACnE;AAEA,IAAa,qBACX,OACA,UACoB;CACpB,IAAI,SAAS,QAAQ,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO;CACrD,OAAO,MAAM,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AACtD"}
@@ -0,0 +1,2 @@
1
+ export { TopList } from './TopList.js';
2
+ export type { TopListItem, TopListProps, TopListSort } from './TopList.types.js';
@@ -0,0 +1,2 @@
1
+ import { TopList } from "./TopList.js";
2
+ export { TopList };
@@ -0,0 +1,5 @@
1
+ import type { ReactElement, Ref } from 'react';
2
+ import type { TypeaheadProps } from './Typeahead.types.js';
3
+ export declare const Typeahead: <TOption = string>(props: TypeaheadProps<TOption> & {
4
+ ref?: Ref<HTMLDivElement>;
5
+ }) => ReactElement<unknown>;
@@ -0,0 +1,305 @@
1
+ import { defaultOptionLabel, defaultOptionValue, getTypeaheadCreateState, getTypeaheadDisplayInputValue, getTypeaheadListItems, getTypeaheadSelectedSummary, isActiveOptionSelected, isTypeaheadOption } from "./Typeahead.utils.js";
2
+ import { TypeaheadView } from "./TypeaheadView.js";
3
+ import { useTypeaheadDomSync } from "./useTypeaheadDomSync.js";
4
+ import { useTypeaheadUncontrolledInput } from "./useTypeaheadUncontrolledInput.js";
5
+ import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region packages/components/src/components/Typeahead/Typeahead.tsx
8
+ function TypeaheadInner({ options, value, onChange, placeholder = "Search...", leftDecorator, showPlaceholderWithValues = false, emptyText = "No results found.", size = "md", disabled = false, isError = false, freeSolo = false, multiple, disableClearable = false, disableCloseOnSelect = false, filterOptions, forcePopupIcon = true, clearOnBlur, clearValueOnInputClear = false, displaySelectedValueWhenInputEmpty = false, maxVisibleOptions, hideEmptyList = false, emptyState, listFooter, onCreateNew, createNewLabel, inputValue: controlledInputValue, onInputChange, getOptionLabel, getOptionValue, getOptionDisabled, renderOption, renderTags, className, inputId, autoFocus, autoComplete, onKeyDown, onBlur, "aria-label": ariaLabel, "data-testid": dataTestId, ...rest }, ref) {
9
+ const generatedId = useId();
10
+ const resolvedInputId = inputId ?? generatedId;
11
+ const listId = `${resolvedInputId}-listbox`;
12
+ const selectedSummaryId = `${resolvedInputId}-selected-summary`;
13
+ const commandLabel = ariaLabel ?? placeholder;
14
+ const inputAriaLabel = ariaLabel ?? (inputId ? void 0 : placeholder);
15
+ const internalInputRef = useRef(null);
16
+ const listRef = useRef(null);
17
+ const popoverContentRef = useRef(null);
18
+ const [open, setOpenState] = useState(false);
19
+ const [uncontrolledInputValue, setUncontrolledInputValue] = useState("");
20
+ const setOpen = useCallback((nextOpen) => {
21
+ if (!disabled || !nextOpen) setOpenState(nextOpen);
22
+ }, [disabled]);
23
+ useEffect(() => {
24
+ if (disabled) setOpenState(false);
25
+ if (autoFocus) requestAnimationFrame(() => internalInputRef.current?.focus());
26
+ }, [autoFocus, disabled]);
27
+ const inputValue = controlledInputValue ?? uncontrolledInputValue;
28
+ const getLabel = useCallback((option) => getOptionLabel ? getOptionLabel(option) : defaultOptionLabel(option), [getOptionLabel]);
29
+ const getValue = useCallback((option) => getOptionValue ? getOptionValue(option) : defaultOptionValue(option), [getOptionValue]);
30
+ const selectedValues = useMemo(() => {
31
+ if (multiple) return Array.isArray(value) ? value : [];
32
+ return value == null ? [] : [value];
33
+ }, [multiple, value]);
34
+ const selectedKeys = useMemo(() => new Set(selectedValues.map((selected) => getValue(selected))), [getValue, selectedValues]);
35
+ const setInputValue = useCallback((nextValue) => {
36
+ if (controlledInputValue === void 0) setUncontrolledInputValue(nextValue);
37
+ onInputChange?.(nextValue);
38
+ }, [controlledInputValue, onInputChange]);
39
+ useTypeaheadUncontrolledInput({
40
+ clearOnBlur,
41
+ controlledInputValue,
42
+ freeSolo,
43
+ getLabel,
44
+ multiple,
45
+ open,
46
+ setUncontrolledInputValue,
47
+ value
48
+ });
49
+ const visibleItems = getTypeaheadListItems({
50
+ options,
51
+ selectedValues,
52
+ inputValue,
53
+ getLabel,
54
+ getValue,
55
+ filterOptions,
56
+ maxVisibleOptions,
57
+ includeSelectedValues: multiple
58
+ });
59
+ const optionIsDisabled = useCallback((item) => {
60
+ if (item.source === "selected") return false;
61
+ const option = item.option;
62
+ return getOptionDisabled?.(option) ?? (isTypeaheadOption(option) ? !!option.disabled : false);
63
+ }, [getOptionDisabled]);
64
+ const { customCreateInputValue, showCreateOption, showFreeSoloCreateOption, trimmedInputValue } = getTypeaheadCreateState(inputValue, options, selectedValues, getLabel, freeSolo, !!onCreateNew);
65
+ const hasPopupContent = visibleItems.length > 0 || showCreateOption || emptyState != null || listFooter != null || !hideEmptyList;
66
+ const popupOpen = open && hasPopupContent;
67
+ const focusInput = useCallback(() => {
68
+ requestAnimationFrame(() => internalInputRef.current?.focus());
69
+ }, []);
70
+ const emitChange = useCallback((next) => onChange(next), [onChange]);
71
+ const selectValue = useCallback((selected) => {
72
+ if (disabled) return;
73
+ if (multiple) {
74
+ const selectedKey = getValue(selected);
75
+ const nextValue = selectedKeys.has(selectedKey) ? selectedValues.filter((item) => getValue(item) !== selectedKey) : [...selectedValues, selected];
76
+ emitChange(nextValue);
77
+ setInputValue("");
78
+ if (disableCloseOnSelect) focusInput();
79
+ else setOpen(false);
80
+ return;
81
+ }
82
+ emitChange(selected);
83
+ setInputValue(displaySelectedValueWhenInputEmpty ? "" : getLabel(selected));
84
+ setOpen(false);
85
+ }, [
86
+ disableCloseOnSelect,
87
+ disabled,
88
+ emitChange,
89
+ focusInput,
90
+ getLabel,
91
+ getValue,
92
+ displaySelectedValueWhenInputEmpty,
93
+ multiple,
94
+ selectedKeys,
95
+ selectedValues,
96
+ setInputValue,
97
+ setOpen
98
+ ]);
99
+ const createFreeSoloValue = useCallback(() => {
100
+ if (!showFreeSoloCreateOption) return;
101
+ selectValue(trimmedInputValue);
102
+ }, [
103
+ selectValue,
104
+ showFreeSoloCreateOption,
105
+ trimmedInputValue
106
+ ]);
107
+ const createCustomValue = useCallback(() => {
108
+ if (!onCreateNew) return;
109
+ onCreateNew(customCreateInputValue);
110
+ setOpen(false);
111
+ }, [
112
+ customCreateInputValue,
113
+ onCreateNew,
114
+ setOpen
115
+ ]);
116
+ const removeAtIndex = useCallback((index) => {
117
+ if (!multiple || disabled || index < 0) return;
118
+ emitChange(selectedValues.filter((_, i) => i !== index));
119
+ focusInput();
120
+ }, [
121
+ disabled,
122
+ emitChange,
123
+ focusInput,
124
+ multiple,
125
+ selectedValues
126
+ ]);
127
+ const clearValue = useCallback(() => {
128
+ if (disabled || disableClearable) return;
129
+ if (multiple) emitChange([]);
130
+ else emitChange(null);
131
+ setInputValue("");
132
+ setOpen(false);
133
+ focusInput();
134
+ }, [
135
+ disableClearable,
136
+ disabled,
137
+ emitChange,
138
+ focusInput,
139
+ multiple,
140
+ setInputValue,
141
+ setOpen
142
+ ]);
143
+ const handleInputValueChange = useCallback((nextValue) => {
144
+ if (disabled) return;
145
+ if (clearValueOnInputClear && !multiple && nextValue.length === 0 && selectedValues.length > 0) emitChange(null);
146
+ setInputValue(nextValue);
147
+ setOpen(true);
148
+ }, [
149
+ clearValueOnInputClear,
150
+ disabled,
151
+ emitChange,
152
+ multiple,
153
+ selectedValues.length,
154
+ setInputValue,
155
+ setOpen
156
+ ]);
157
+ const handleKeyDown = useCallback((event) => {
158
+ onKeyDown?.(event);
159
+ if (event.defaultPrevented || disabled) return;
160
+ if (event.key === "Backspace" && multiple && inputValue.length === 0) {
161
+ removeAtIndex(selectedValues.length - 1);
162
+ return;
163
+ }
164
+ if (event.key === "Enter" && multiple && freeSolo && popupOpen && isActiveOptionSelected(listRef.current, selectedValues, getValue)) {
165
+ event.preventDefault();
166
+ if (showFreeSoloCreateOption) createFreeSoloValue();
167
+ else setInputValue("");
168
+ return;
169
+ }
170
+ if (event.key === "ArrowDown" || event.key === "Enter") {
171
+ if (!open && hasPopupContent) {
172
+ event.preventDefault();
173
+ setOpen(true);
174
+ }
175
+ return;
176
+ }
177
+ if (event.key === "Escape" && open) {
178
+ if (popupOpen) event.preventDefault();
179
+ setOpen(false);
180
+ }
181
+ }, [
182
+ createFreeSoloValue,
183
+ disabled,
184
+ freeSolo,
185
+ getValue,
186
+ hasPopupContent,
187
+ inputValue.length,
188
+ multiple,
189
+ onKeyDown,
190
+ open,
191
+ popupOpen,
192
+ removeAtIndex,
193
+ selectedValues,
194
+ setInputValue,
195
+ setOpen,
196
+ showFreeSoloCreateOption
197
+ ]);
198
+ const handleBlur = useCallback((event) => {
199
+ onBlur?.(event);
200
+ const nextTarget = event.relatedTarget;
201
+ if (!nextTarget || !event.currentTarget.contains(nextTarget) && !popoverContentRef.current?.contains(nextTarget)) setOpen(false);
202
+ }, [onBlur, setOpen]);
203
+ const getTagProps = useCallback(({ index }) => ({
204
+ key: `${getValue(selectedValues[index])}-${index}`,
205
+ tabIndex: -1,
206
+ "data-tag-index": index,
207
+ onDelete: () => removeAtIndex(index)
208
+ }), [
209
+ getValue,
210
+ removeAtIndex,
211
+ selectedValues
212
+ ]);
213
+ const hasValue = selectedValues.length > 0;
214
+ const showClearButton = !disabled && !disableClearable && (hasValue || !multiple && inputValue.length > 0);
215
+ const selectedSummary = getTypeaheadSelectedSummary(selectedValues, getLabel, multiple);
216
+ const displayInputValue = getTypeaheadDisplayInputValue(inputValue, selectedValues, getLabel, multiple, displaySelectedValueWhenInputEmpty);
217
+ const setInputNode = useCallback((node) => {
218
+ internalInputRef.current = node;
219
+ }, []);
220
+ useTypeaheadDomSync({
221
+ autoComplete,
222
+ commandLabel,
223
+ inputAriaLabel,
224
+ inputRef: internalInputRef,
225
+ inputValue,
226
+ isError,
227
+ listId,
228
+ listRef,
229
+ multiple,
230
+ open: popupOpen,
231
+ resolvedInputId,
232
+ selectedSummaryId
233
+ });
234
+ return /* @__PURE__ */ jsx(TypeaheadView, {
235
+ root: {
236
+ ref,
237
+ props: rest,
238
+ handleBlur,
239
+ dataTestId,
240
+ className
241
+ },
242
+ state: {
243
+ size,
244
+ disabled,
245
+ isError,
246
+ multiple,
247
+ open: popupOpen,
248
+ setOpen
249
+ },
250
+ ids: {
251
+ commandLabel,
252
+ resolvedInputId,
253
+ listId,
254
+ selectedSummaryId,
255
+ inputAriaLabel
256
+ },
257
+ input: {
258
+ value: displayInputValue,
259
+ onValueChange: handleInputValueChange,
260
+ onKeyDown: handleKeyDown,
261
+ placeholder,
262
+ leftDecorator,
263
+ showPlaceholderWithValues,
264
+ autoFocus,
265
+ autoComplete,
266
+ setNode: setInputNode,
267
+ focus: focusInput
268
+ },
269
+ selection: {
270
+ selectedValues,
271
+ selectedKeys,
272
+ getTagProps,
273
+ renderTags,
274
+ getLabel,
275
+ getValue,
276
+ showClearButton,
277
+ clearValue,
278
+ forcePopupIcon,
279
+ selectedSummary
280
+ },
281
+ list: {
282
+ ref: listRef,
283
+ items: visibleItems,
284
+ emptyText,
285
+ emptyState,
286
+ listFooter,
287
+ hideEmptyList,
288
+ optionIsDisabled,
289
+ selectValue,
290
+ renderOption
291
+ },
292
+ createOption: {
293
+ show: showCreateOption,
294
+ inputValue: onCreateNew ? customCreateInputValue : trimmedInputValue,
295
+ label: createNewLabel?.(customCreateInputValue),
296
+ onCreate: onCreateNew ? createCustomValue : createFreeSoloValue
297
+ },
298
+ popoverContentRef
299
+ });
300
+ }
301
+ var Typeahead = forwardRef(TypeaheadInner);
302
+ //#endregion
303
+ export { Typeahead };
304
+
305
+ //# sourceMappingURL=Typeahead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typeahead.js","names":[],"sources":["../../../src/components/Typeahead/Typeahead.tsx"],"sourcesContent":["import type { FocusEvent, KeyboardEvent, ReactElement, Ref } from 'react';\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport type {\n TypeaheadMultipleValue,\n TypeaheadProps,\n TypeaheadSelectedValue,\n TypeaheadSingleValue,\n TypeaheadTagProps,\n} from './Typeahead.types';\nimport {\n defaultOptionLabel,\n defaultOptionValue,\n getTypeaheadCreateState,\n getTypeaheadDisplayInputValue,\n getTypeaheadListItems,\n getTypeaheadSelectedSummary,\n isActiveOptionSelected,\n isTypeaheadOption,\n} from './Typeahead.utils';\nimport { TypeaheadView } from './TypeaheadView';\nimport { useTypeaheadDomSync } from './useTypeaheadDomSync';\nimport { useTypeaheadUncontrolledInput } from './useTypeaheadUncontrolledInput';\n\nfunction TypeaheadInner<TOption = string>(\n {\n options,\n value,\n onChange,\n placeholder = 'Search...',\n leftDecorator,\n showPlaceholderWithValues = false,\n emptyText = 'No results found.',\n size = 'md',\n disabled = false,\n isError = false,\n freeSolo = false,\n multiple,\n disableClearable = false,\n disableCloseOnSelect = false,\n filterOptions,\n forcePopupIcon = true,\n clearOnBlur,\n clearValueOnInputClear = false,\n displaySelectedValueWhenInputEmpty = false,\n maxVisibleOptions,\n hideEmptyList = false,\n emptyState,\n listFooter,\n onCreateNew,\n createNewLabel,\n inputValue: controlledInputValue,\n onInputChange,\n getOptionLabel,\n getOptionValue,\n getOptionDisabled,\n renderOption,\n renderTags,\n className,\n inputId,\n autoFocus,\n autoComplete,\n onKeyDown,\n onBlur,\n 'aria-label': ariaLabel,\n 'data-testid': dataTestId,\n ...rest\n }: TypeaheadProps<TOption>,\n ref: Ref<HTMLDivElement>\n) {\n const generatedId = useId();\n const resolvedInputId = inputId ?? generatedId;\n const listId = `${resolvedInputId}-listbox`;\n const selectedSummaryId = `${resolvedInputId}-selected-summary`;\n const commandLabel = ariaLabel ?? placeholder;\n const inputAriaLabel = ariaLabel ?? (inputId ? undefined : placeholder);\n const internalInputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLDivElement | null>(null);\n const popoverContentRef = useRef<HTMLDivElement | null>(null);\n const [open, setOpenState] = useState(false);\n const [uncontrolledInputValue, setUncontrolledInputValue] = useState('');\n const setOpen = useCallback(\n (nextOpen: boolean) => {\n if (!disabled || !nextOpen) {\n setOpenState(nextOpen);\n }\n },\n [disabled]\n );\n useEffect(() => {\n if (disabled) setOpenState(false);\n if (autoFocus)\n requestAnimationFrame(() => internalInputRef.current?.focus());\n }, [autoFocus, disabled]);\n\n const inputValue = controlledInputValue ?? uncontrolledInputValue;\n const getLabel = useCallback(\n (option: TypeaheadSelectedValue<TOption>) =>\n getOptionLabel ? getOptionLabel(option) : defaultOptionLabel(option),\n [getOptionLabel]\n );\n const getValue = useCallback(\n (option: TypeaheadSelectedValue<TOption>) =>\n getOptionValue ? getOptionValue(option) : defaultOptionValue(option),\n [getOptionValue]\n );\n\n const selectedValues = useMemo<TypeaheadMultipleValue<TOption>>(() => {\n if (multiple) {\n return Array.isArray(value) ? value : [];\n }\n return value == null ? [] : [value];\n }, [multiple, value]);\n\n const selectedKeys = useMemo(\n () => new Set(selectedValues.map((selected) => getValue(selected))),\n [getValue, selectedValues]\n );\n\n const setInputValue = useCallback(\n (nextValue: string) => {\n if (controlledInputValue === undefined) {\n setUncontrolledInputValue(nextValue);\n }\n onInputChange?.(nextValue);\n },\n [controlledInputValue, onInputChange]\n );\n\n useTypeaheadUncontrolledInput({\n clearOnBlur,\n controlledInputValue,\n freeSolo,\n getLabel,\n multiple,\n open,\n setUncontrolledInputValue,\n value,\n });\n\n const visibleItems = getTypeaheadListItems({\n options,\n selectedValues,\n inputValue,\n getLabel,\n getValue,\n filterOptions,\n maxVisibleOptions,\n includeSelectedValues: multiple,\n });\n\n const optionIsDisabled = useCallback(\n (item: (typeof visibleItems)[number]) => {\n if (item.source === 'selected') return false;\n const option = item.option as TOption;\n return (\n getOptionDisabled?.(option) ??\n (isTypeaheadOption(option) ? !!option.disabled : false)\n );\n },\n [getOptionDisabled]\n );\n\n const {\n customCreateInputValue,\n showCreateOption,\n showFreeSoloCreateOption,\n trimmedInputValue,\n } = getTypeaheadCreateState(\n inputValue,\n options,\n selectedValues,\n getLabel,\n freeSolo,\n !!onCreateNew\n );\n const hasPopupContent =\n visibleItems.length > 0 ||\n showCreateOption ||\n emptyState != null ||\n listFooter != null ||\n !hideEmptyList;\n const popupOpen = open && hasPopupContent;\n const focusInput = useCallback(() => {\n requestAnimationFrame(() => internalInputRef.current?.focus());\n }, []);\n\n // `onChange` can't be narrowed from the single/multiple props union after destructuring; callers below branch on `multiple` first, so funnel both shapes through one callback.\n const emitChange = useCallback(\n (next: TypeaheadSingleValue<TOption> | TypeaheadMultipleValue<TOption>) =>\n (onChange as (value: typeof next) => void)(next),\n [onChange]\n );\n const selectValue = useCallback(\n (selected: TypeaheadSelectedValue<TOption>) => {\n if (disabled) return;\n if (multiple) {\n const selectedKey = getValue(selected);\n const nextValue = selectedKeys.has(selectedKey)\n ? selectedValues.filter((item) => getValue(item) !== selectedKey)\n : [...selectedValues, selected];\n\n emitChange(nextValue);\n setInputValue('');\n if (disableCloseOnSelect) {\n focusInput();\n } else {\n setOpen(false);\n }\n return;\n }\n\n emitChange(selected);\n setInputValue(\n displaySelectedValueWhenInputEmpty ? '' : getLabel(selected)\n );\n setOpen(false);\n },\n [\n disableCloseOnSelect,\n disabled,\n emitChange,\n focusInput,\n getLabel,\n getValue,\n displaySelectedValueWhenInputEmpty,\n multiple,\n selectedKeys,\n selectedValues,\n setInputValue,\n setOpen,\n ]\n );\n\n const createFreeSoloValue = useCallback(() => {\n if (!showFreeSoloCreateOption) return;\n selectValue(trimmedInputValue);\n }, [selectValue, showFreeSoloCreateOption, trimmedInputValue]);\n\n const createCustomValue = useCallback(() => {\n if (!onCreateNew) return;\n onCreateNew(customCreateInputValue);\n setOpen(false);\n }, [customCreateInputValue, onCreateNew, setOpen]);\n\n const removeAtIndex = useCallback(\n (index: number) => {\n if (!multiple || disabled || index < 0) return;\n emitChange(selectedValues.filter((_, i) => i !== index));\n focusInput();\n },\n [disabled, emitChange, focusInput, multiple, selectedValues]\n );\n\n const clearValue = useCallback(() => {\n if (disabled || disableClearable) return;\n if (multiple) {\n emitChange([]);\n } else {\n emitChange(null);\n }\n setInputValue('');\n setOpen(false);\n focusInput();\n }, [\n disableClearable,\n disabled,\n emitChange,\n focusInput,\n multiple,\n setInputValue,\n setOpen,\n ]);\n\n const handleInputValueChange = useCallback(\n (nextValue: string) => {\n if (disabled) return;\n if (\n clearValueOnInputClear &&\n !multiple &&\n nextValue.length === 0 &&\n selectedValues.length > 0\n ) {\n emitChange(null);\n }\n setInputValue(nextValue);\n setOpen(true);\n },\n [\n clearValueOnInputClear,\n disabled,\n emitChange,\n multiple,\n selectedValues.length,\n setInputValue,\n setOpen,\n ]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || disabled) return;\n\n if (event.key === 'Backspace' && multiple && inputValue.length === 0) {\n removeAtIndex(selectedValues.length - 1);\n return;\n }\n\n if (\n event.key === 'Enter' &&\n multiple &&\n freeSolo &&\n popupOpen &&\n isActiveOptionSelected(listRef.current, selectedValues, getValue)\n ) {\n event.preventDefault();\n if (showFreeSoloCreateOption) createFreeSoloValue();\n else setInputValue('');\n return;\n }\n\n // When open, cmdk owns Enter so active options and create rows win over free-solo.\n if (event.key === 'ArrowDown' || event.key === 'Enter') {\n if (!open && hasPopupContent) {\n event.preventDefault();\n setOpen(true);\n }\n return;\n }\n\n if (event.key === 'Escape' && open) {\n if (popupOpen) {\n event.preventDefault();\n }\n setOpen(false);\n }\n },\n [\n createFreeSoloValue,\n disabled,\n freeSolo,\n getValue,\n hasPopupContent,\n inputValue.length,\n multiple,\n onKeyDown,\n open,\n popupOpen,\n removeAtIndex,\n selectedValues,\n setInputValue,\n setOpen,\n showFreeSoloCreateOption,\n ]\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n const nextTarget = event.relatedTarget as Node | null;\n if (\n !nextTarget ||\n (!event.currentTarget.contains(nextTarget) &&\n !popoverContentRef.current?.contains(nextTarget))\n ) {\n setOpen(false);\n }\n },\n [onBlur, setOpen]\n );\n\n const getTagProps = useCallback(\n ({ index }: { index: number }): TypeaheadTagProps => ({\n key: `${getValue(selectedValues[index])}-${index}`,\n tabIndex: -1,\n 'data-tag-index': index,\n onDelete: () => removeAtIndex(index),\n }),\n [getValue, removeAtIndex, selectedValues]\n );\n\n const hasValue = selectedValues.length > 0;\n const showClearButton =\n !disabled &&\n !disableClearable &&\n (hasValue || (!multiple && inputValue.length > 0));\n const selectedSummary = getTypeaheadSelectedSummary(\n selectedValues,\n getLabel,\n multiple\n );\n const displayInputValue = getTypeaheadDisplayInputValue(\n inputValue,\n selectedValues,\n getLabel,\n multiple,\n displaySelectedValueWhenInputEmpty\n );\n\n const setInputNode = useCallback((node: HTMLInputElement | null) => {\n internalInputRef.current = node;\n }, []);\n\n useTypeaheadDomSync({\n autoComplete,\n commandLabel,\n inputAriaLabel,\n inputRef: internalInputRef,\n inputValue,\n isError,\n listId,\n listRef,\n multiple,\n open: popupOpen,\n resolvedInputId,\n selectedSummaryId,\n });\n\n return (\n <TypeaheadView\n root={{\n ref,\n props: rest,\n handleBlur,\n dataTestId,\n className,\n }}\n state={{\n size,\n disabled,\n isError,\n multiple,\n open: popupOpen,\n setOpen,\n }}\n ids={{\n commandLabel,\n resolvedInputId,\n listId,\n selectedSummaryId,\n inputAriaLabel,\n }}\n input={{\n value: displayInputValue,\n onValueChange: handleInputValueChange,\n onKeyDown: handleKeyDown,\n placeholder,\n leftDecorator,\n showPlaceholderWithValues,\n autoFocus,\n autoComplete,\n setNode: setInputNode,\n focus: focusInput,\n }}\n selection={{\n selectedValues,\n selectedKeys,\n getTagProps,\n renderTags,\n getLabel,\n getValue,\n showClearButton,\n clearValue,\n forcePopupIcon,\n selectedSummary,\n }}\n list={{\n ref: listRef,\n items: visibleItems,\n emptyText,\n emptyState,\n listFooter,\n hideEmptyList,\n optionIsDisabled,\n selectValue,\n renderOption,\n }}\n createOption={{\n show: showCreateOption,\n inputValue: onCreateNew ? customCreateInputValue : trimmedInputValue,\n label: createNewLabel?.(customCreateInputValue),\n onCreate: onCreateNew ? createCustomValue : createFreeSoloValue,\n }}\n popoverContentRef={popoverContentRef}\n />\n );\n}\n\nexport const Typeahead = forwardRef(TypeaheadInner) as <TOption = string>(\n props: TypeaheadProps<TOption> & { ref?: Ref<HTMLDivElement> }\n) => ReactElement<unknown>;\n"],"mappings":";;;;;;;AAgCA,SAAS,eACP,EACE,SACA,OACA,UACA,cAAc,aACd,eACA,4BAA4B,OAC5B,YAAY,qBACZ,OAAO,MACP,WAAW,OACX,UAAU,OACV,WAAW,OACX,UACA,mBAAmB,OACnB,uBAAuB,OACvB,eACA,iBAAiB,MACjB,aACA,yBAAyB,OACzB,qCAAqC,OACrC,mBACA,gBAAgB,OAChB,YACA,YACA,aACA,gBACA,YAAY,sBACZ,eACA,gBACA,gBACA,mBACA,cACA,YACA,WACA,SACA,WACA,cACA,WACA,QACA,cAAc,WACd,eAAe,YACf,GAAG,QAEL,KACA;CACA,MAAM,cAAc,MAAM;CAC1B,MAAM,kBAAkB,WAAW;CACnC,MAAM,SAAS,GAAG,gBAAgB;CAClC,MAAM,oBAAoB,GAAG,gBAAgB;CAC7C,MAAM,eAAe,aAAa;CAClC,MAAM,iBAAiB,cAAc,UAAU,KAAA,IAAY;CAC3D,MAAM,mBAAmB,OAAgC,IAAI;CAC7D,MAAM,UAAU,OAA8B,IAAI;CAClD,MAAM,oBAAoB,OAA8B,IAAI;CAC5D,MAAM,CAAC,MAAM,gBAAgB,SAAS,KAAK;CAC3C,MAAM,CAAC,wBAAwB,6BAA6B,SAAS,EAAE;CACvE,MAAM,UAAU,aACb,aAAsB;EACrB,IAAI,CAAC,YAAY,CAAC,UAChB,aAAa,QAAQ;CAEzB,GACA,CAAC,QAAQ,CACX;CACA,gBAAgB;EACd,IAAI,UAAU,aAAa,KAAK;EAChC,IAAI,WACF,4BAA4B,iBAAiB,SAAS,MAAM,CAAC;CACjE,GAAG,CAAC,WAAW,QAAQ,CAAC;CAExB,MAAM,aAAa,wBAAwB;CAC3C,MAAM,WAAW,aACd,WACC,iBAAiB,eAAe,MAAM,IAAI,mBAAmB,MAAM,GACrE,CAAC,cAAc,CACjB;CACA,MAAM,WAAW,aACd,WACC,iBAAiB,eAAe,MAAM,IAAI,mBAAmB,MAAM,GACrE,CAAC,cAAc,CACjB;CAEA,MAAM,iBAAiB,cAA+C;EACpE,IAAI,UACF,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC;EAEzC,OAAO,SAAS,OAAO,CAAC,IAAI,CAAC,KAAK;CACpC,GAAG,CAAC,UAAU,KAAK,CAAC;CAEpB,MAAM,eAAe,cACb,IAAI,IAAI,eAAe,KAAK,aAAa,SAAS,QAAQ,CAAC,CAAC,GAClE,CAAC,UAAU,cAAc,CAC3B;CAEA,MAAM,gBAAgB,aACnB,cAAsB;EACrB,IAAI,yBAAyB,KAAA,GAC3B,0BAA0B,SAAS;EAErC,gBAAgB,SAAS;CAC3B,GACA,CAAC,sBAAsB,aAAa,CACtC;CAEA,8BAA8B;EAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,eAAe,sBAAsB;EACzC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,uBAAuB;CACzB,CAAC;CAED,MAAM,mBAAmB,aACtB,SAAwC;EACvC,IAAI,KAAK,WAAW,YAAY,OAAO;EACvC,MAAM,SAAS,KAAK;EACpB,OACE,oBAAoB,MAAM,MACzB,kBAAkB,MAAM,IAAI,CAAC,CAAC,OAAO,WAAW;CAErD,GACA,CAAC,iBAAiB,CACpB;CAEA,MAAM,EACJ,wBACA,kBACA,0BACA,sBACE,wBACF,YACA,SACA,gBACA,UACA,UACA,CAAC,CAAC,WACJ;CACA,MAAM,kBACJ,aAAa,SAAS,KACtB,oBACA,cAAc,QACd,cAAc,QACd,CAAC;CACH,MAAM,YAAY,QAAQ;CAC1B,MAAM,aAAa,kBAAkB;EACnC,4BAA4B,iBAAiB,SAAS,MAAM,CAAC;CAC/D,GAAG,CAAC,CAAC;CAGL,MAAM,aAAa,aAChB,SACE,SAA0C,IAAI,GACjD,CAAC,QAAQ,CACX;CACA,MAAM,cAAc,aACjB,aAA8C;EAC7C,IAAI,UAAU;EACd,IAAI,UAAU;GACZ,MAAM,cAAc,SAAS,QAAQ;GACrC,MAAM,YAAY,aAAa,IAAI,WAAW,IAC1C,eAAe,QAAQ,SAAS,SAAS,IAAI,MAAM,WAAW,IAC9D,CAAC,GAAG,gBAAgB,QAAQ;GAEhC,WAAW,SAAS;GACpB,cAAc,EAAE;GAChB,IAAI,sBACF,WAAW;QAEX,QAAQ,KAAK;GAEf;EACF;EAEA,WAAW,QAAQ;EACnB,cACE,qCAAqC,KAAK,SAAS,QAAQ,CAC7D;EACA,QAAQ,KAAK;CACf,GACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,MAAM,sBAAsB,kBAAkB;EAC5C,IAAI,CAAC,0BAA0B;EAC/B,YAAY,iBAAiB;CAC/B,GAAG;EAAC;EAAa;EAA0B;CAAiB,CAAC;CAE7D,MAAM,oBAAoB,kBAAkB;EAC1C,IAAI,CAAC,aAAa;EAClB,YAAY,sBAAsB;EAClC,QAAQ,KAAK;CACf,GAAG;EAAC;EAAwB;EAAa;CAAO,CAAC;CAEjD,MAAM,gBAAgB,aACnB,UAAkB;EACjB,IAAI,CAAC,YAAY,YAAY,QAAQ,GAAG;EACxC,WAAW,eAAe,QAAQ,GAAG,MAAM,MAAM,KAAK,CAAC;EACvD,WAAW;CACb,GACA;EAAC;EAAU;EAAY;EAAY;EAAU;CAAc,CAC7D;CAEA,MAAM,aAAa,kBAAkB;EACnC,IAAI,YAAY,kBAAkB;EAClC,IAAI,UACF,WAAW,CAAC,CAAC;OAEb,WAAW,IAAI;EAEjB,cAAc,EAAE;EAChB,QAAQ,KAAK;EACb,WAAW;CACb,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,yBAAyB,aAC5B,cAAsB;EACrB,IAAI,UAAU;EACd,IACE,0BACA,CAAC,YACD,UAAU,WAAW,KACrB,eAAe,SAAS,GAExB,WAAW,IAAI;EAEjB,cAAc,SAAS;EACvB,QAAQ,IAAI;CACd,GACA;EACE;EACA;EACA;EACA;EACA,eAAe;EACf;EACA;CACF,CACF;CAEA,MAAM,gBAAgB,aACnB,UAA2C;EAC1C,YAAY,KAAK;EACjB,IAAI,MAAM,oBAAoB,UAAU;EAExC,IAAI,MAAM,QAAQ,eAAe,YAAY,WAAW,WAAW,GAAG;GACpE,cAAc,eAAe,SAAS,CAAC;GACvC;EACF;EAEA,IACE,MAAM,QAAQ,WACd,YACA,YACA,aACA,uBAAuB,QAAQ,SAAS,gBAAgB,QAAQ,GAChE;GACA,MAAM,eAAe;GACrB,IAAI,0BAA0B,oBAAoB;QAC7C,cAAc,EAAE;GACrB;EACF;EAGA,IAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,SAAS;GACtD,IAAI,CAAC,QAAQ,iBAAiB;IAC5B,MAAM,eAAe;IACrB,QAAQ,IAAI;GACd;GACA;EACF;EAEA,IAAI,MAAM,QAAQ,YAAY,MAAM;GAClC,IAAI,WACF,MAAM,eAAe;GAEvB,QAAQ,KAAK;EACf;CACF,GACA;EACE;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,MAAM,aAAa,aAChB,UAAsC;EACrC,SAAS,KAAK;EACd,MAAM,aAAa,MAAM;EACzB,IACE,CAAC,cACA,CAAC,MAAM,cAAc,SAAS,UAAU,KACvC,CAAC,kBAAkB,SAAS,SAAS,UAAU,GAEjD,QAAQ,KAAK;CAEjB,GACA,CAAC,QAAQ,OAAO,CAClB;CAEA,MAAM,cAAc,aACjB,EAAE,aAAmD;EACpD,KAAK,GAAG,SAAS,eAAe,MAAM,EAAE,GAAG;EAC3C,UAAU;EACV,kBAAkB;EAClB,gBAAgB,cAAc,KAAK;CACrC,IACA;EAAC;EAAU;EAAe;CAAc,CAC1C;CAEA,MAAM,WAAW,eAAe,SAAS;CACzC,MAAM,kBACJ,CAAC,YACD,CAAC,qBACA,YAAa,CAAC,YAAY,WAAW,SAAS;CACjD,MAAM,kBAAkB,4BACtB,gBACA,UACA,QACF;CACA,MAAM,oBAAoB,8BACxB,YACA,gBACA,UACA,UACA,kCACF;CAEA,MAAM,eAAe,aAAa,SAAkC;EAClE,iBAAiB,UAAU;CAC7B,GAAG,CAAC,CAAC;CAEL,oBAAoB;EAClB;EACA;EACA;EACA,UAAU;EACV;EACA;EACA;EACA;EACA;EACA,MAAM;EACN;EACA;CACF,CAAC;CAED,OACE,oBAAC,eAAD;EACE,MAAM;GACJ;GACA,OAAO;GACP;GACA;GACA;EACF;EACA,OAAO;GACL;GACA;GACA;GACA;GACA,MAAM;GACN;EACF;EACA,KAAK;GACH;GACA;GACA;GACA;GACA;EACF;EACA,OAAO;GACL,OAAO;GACP,eAAe;GACf,WAAW;GACX;GACA;GACA;GACA;GACA;GACA,SAAS;GACT,OAAO;EACT;EACA,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,MAAM;GACJ,KAAK;GACL,OAAO;GACP;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,cAAc;GACZ,MAAM;GACN,YAAY,cAAc,yBAAyB;GACnD,OAAO,iBAAiB,sBAAsB;GAC9C,UAAU,cAAc,oBAAoB;EAC9C;EACmB;CACpB,CAAA;AAEL;AAEA,IAAa,YAAY,WAAW,cAAc"}