@bioturing/components 0.32.0 → 0.32.2

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 (511) hide show
  1. package/README.md +29 -0
  2. package/dist/components/badge/component.d.ts +7 -0
  3. package/dist/components/badge/component.d.ts.map +1 -0
  4. package/dist/components/badge/component.js.map +1 -1
  5. package/dist/components/badge/index.d.ts +2 -0
  6. package/dist/components/badge/index.d.ts.map +1 -0
  7. package/dist/components/breadcrumb/component.d.ts +6 -0
  8. package/dist/components/breadcrumb/component.d.ts.map +1 -0
  9. package/dist/components/breadcrumb/component.js.map +1 -1
  10. package/dist/components/breadcrumb/index.d.ts +3 -0
  11. package/dist/components/breadcrumb/index.d.ts.map +1 -0
  12. package/dist/components/breadcrumb/types.d.ts +19 -0
  13. package/dist/components/breadcrumb/types.d.ts.map +1 -0
  14. package/dist/components/breadcrumb/useItemRender.d.ts +7 -0
  15. package/dist/components/breadcrumb/useItemRender.d.ts.map +1 -0
  16. package/dist/components/breadcrumb/useItemRender.js.map +1 -1
  17. package/dist/components/button/component.d.ts +14 -0
  18. package/dist/components/button/component.d.ts.map +1 -0
  19. package/dist/components/button/component.js.map +1 -1
  20. package/dist/components/button/index.d.ts +2 -0
  21. package/dist/components/button/index.d.ts.map +1 -0
  22. package/dist/components/checkbox/component.d.ts +16 -0
  23. package/dist/components/checkbox/component.d.ts.map +1 -0
  24. package/dist/components/checkbox/component.js.map +1 -1
  25. package/dist/components/checkbox/index.d.ts +2 -0
  26. package/dist/components/checkbox/index.d.ts.map +1 -0
  27. package/dist/components/choice-list/component.d.ts +35 -0
  28. package/dist/components/choice-list/component.d.ts.map +1 -0
  29. package/dist/components/choice-list/component.js.map +1 -1
  30. package/dist/components/choice-list/index.d.ts +2 -0
  31. package/dist/components/choice-list/index.d.ts.map +1 -0
  32. package/dist/components/cmdk/command-score.d.ts +2 -0
  33. package/dist/components/cmdk/command-score.d.ts.map +1 -0
  34. package/dist/components/cmdk/command-score.js.map +1 -1
  35. package/dist/components/cmdk/index.d.ts +440 -0
  36. package/dist/components/cmdk/index.d.ts.map +1 -0
  37. package/dist/components/cmdk/index.js +332 -348
  38. package/dist/components/cmdk/index.js.map +1 -1
  39. package/dist/components/code-block/component.d.ts +3 -0
  40. package/dist/components/code-block/component.d.ts.map +1 -0
  41. package/dist/components/code-block/component.js +83 -84
  42. package/dist/components/code-block/component.js.map +1 -1
  43. package/dist/components/code-block/index.d.ts +3 -0
  44. package/dist/components/code-block/index.d.ts.map +1 -0
  45. package/dist/components/code-block/types.d.ts +64 -0
  46. package/dist/components/code-block/types.d.ts.map +1 -0
  47. package/dist/components/collapse/component.d.ts +14 -0
  48. package/dist/components/collapse/component.d.ts.map +1 -0
  49. package/dist/components/collapse/component.js.map +1 -1
  50. package/dist/components/collapse/index.d.ts +2 -0
  51. package/dist/components/collapse/index.d.ts.map +1 -0
  52. package/dist/components/color-select/component.d.ts +36 -0
  53. package/dist/components/color-select/component.d.ts.map +1 -0
  54. package/dist/components/color-select/component.js +28 -30
  55. package/dist/components/color-select/component.js.map +1 -1
  56. package/dist/components/color-select/index.d.ts +2 -0
  57. package/dist/components/color-select/index.d.ts.map +1 -0
  58. package/dist/components/combobox/component.d.ts +119 -0
  59. package/dist/components/combobox/component.d.ts.map +1 -0
  60. package/dist/components/combobox/component.js +129 -129
  61. package/dist/components/combobox/component.js.map +1 -1
  62. package/dist/components/combobox/index.d.ts +3 -0
  63. package/dist/components/combobox/index.d.ts.map +1 -0
  64. package/dist/components/command-palette/component.d.ts +41 -0
  65. package/dist/components/command-palette/component.d.ts.map +1 -0
  66. package/dist/components/command-palette/component.js +36 -36
  67. package/dist/components/command-palette/component.js.map +1 -1
  68. package/dist/components/command-palette/index.d.ts +2 -0
  69. package/dist/components/command-palette/index.d.ts.map +1 -0
  70. package/dist/components/command-palette/style.css +1 -1
  71. package/dist/components/drag-drop/context.d.ts +10 -0
  72. package/dist/components/drag-drop/context.d.ts.map +1 -0
  73. package/dist/components/drag-drop/context.js.map +1 -1
  74. package/dist/components/drag-drop/draggable.d.ts +6 -0
  75. package/dist/components/drag-drop/draggable.d.ts.map +1 -0
  76. package/dist/components/drag-drop/draggable.js.map +1 -1
  77. package/dist/components/drag-drop/droppable.d.ts +9 -0
  78. package/dist/components/drag-drop/droppable.d.ts.map +1 -0
  79. package/dist/components/drag-drop/droppable.js.map +1 -1
  80. package/dist/components/drag-drop/hooks.d.ts +42 -0
  81. package/dist/components/drag-drop/hooks.d.ts.map +1 -0
  82. package/dist/components/drag-drop/hooks.js +71 -73
  83. package/dist/components/drag-drop/hooks.js.map +1 -1
  84. package/dist/components/drag-drop/index.d.ts +26 -0
  85. package/dist/components/drag-drop/index.d.ts.map +1 -0
  86. package/dist/components/drag-drop/index.js.map +1 -1
  87. package/dist/components/drag-drop/types.d.ts +232 -0
  88. package/dist/components/drag-drop/types.d.ts.map +1 -0
  89. package/dist/components/drag-drop/value.d.ts +8 -0
  90. package/dist/components/drag-drop/value.d.ts.map +1 -0
  91. package/dist/components/drag-drop/value.js +66 -66
  92. package/dist/components/drag-drop/value.js.map +1 -1
  93. package/dist/components/dropdown-menu/component.d.ts +79 -0
  94. package/dist/components/dropdown-menu/component.d.ts.map +1 -0
  95. package/dist/components/dropdown-menu/component.js +108 -108
  96. package/dist/components/dropdown-menu/component.js.map +1 -1
  97. package/dist/components/dropdown-menu/divider.d.ts +6 -0
  98. package/dist/components/dropdown-menu/divider.d.ts.map +1 -0
  99. package/dist/components/dropdown-menu/divider.js.map +1 -1
  100. package/dist/components/dropdown-menu/index.d.ts +4 -0
  101. package/dist/components/dropdown-menu/index.d.ts.map +1 -0
  102. package/dist/components/dropdown-menu/item.d.ts +56 -0
  103. package/dist/components/dropdown-menu/item.d.ts.map +1 -0
  104. package/dist/components/dropdown-menu/item.js +75 -78
  105. package/dist/components/dropdown-menu/item.js.map +1 -1
  106. package/dist/components/dropdown-menu/types.d.ts +88 -0
  107. package/dist/components/dropdown-menu/types.d.ts.map +1 -0
  108. package/dist/components/dropdown-menu/useDropdownMenu.d.ts +58 -0
  109. package/dist/components/dropdown-menu/useDropdownMenu.d.ts.map +1 -0
  110. package/dist/components/dropdown-menu/useDropdownMenu.js +80 -80
  111. package/dist/components/dropdown-menu/useDropdownMenu.js.map +1 -1
  112. package/dist/components/ds-root/component.d.ts +14 -0
  113. package/dist/components/ds-root/component.d.ts.map +1 -0
  114. package/dist/components/ds-root/component.js.map +1 -1
  115. package/dist/components/ds-root/context.d.ts +8 -0
  116. package/dist/components/ds-root/context.d.ts.map +1 -0
  117. package/dist/components/ds-root/index.d.ts +3 -0
  118. package/dist/components/ds-root/index.d.ts.map +1 -0
  119. package/dist/components/empty/component.d.ts +13 -0
  120. package/dist/components/empty/component.d.ts.map +1 -0
  121. package/dist/components/empty/component.js.map +1 -1
  122. package/dist/components/empty/index.d.ts +2 -0
  123. package/dist/components/empty/index.d.ts.map +1 -0
  124. package/dist/components/field/component.d.ts +42 -0
  125. package/dist/components/field/component.d.ts.map +1 -0
  126. package/dist/components/field/component.js.map +1 -1
  127. package/dist/components/field/index.d.ts +2 -0
  128. package/dist/components/field/index.d.ts.map +1 -0
  129. package/dist/components/form/component.d.ts +22 -0
  130. package/dist/components/form/component.d.ts.map +1 -0
  131. package/dist/components/form/component.js.map +1 -1
  132. package/dist/components/form/index.d.ts +2 -0
  133. package/dist/components/form/index.d.ts.map +1 -0
  134. package/dist/components/form/item.d.ts +24 -0
  135. package/dist/components/form/item.d.ts.map +1 -0
  136. package/dist/components/form/item.js +24 -24
  137. package/dist/components/form/item.js.map +1 -1
  138. package/dist/components/form/label.d.ts +32 -0
  139. package/dist/components/form/label.d.ts.map +1 -0
  140. package/dist/components/form/label.js.map +1 -1
  141. package/dist/components/hooks/antd.d.ts +11 -0
  142. package/dist/components/hooks/antd.d.ts.map +1 -0
  143. package/dist/components/hooks/antd.js +9 -12
  144. package/dist/components/hooks/antd.js.map +1 -1
  145. package/dist/components/hooks/base-ui.d.ts +11 -0
  146. package/dist/components/hooks/base-ui.d.ts.map +1 -0
  147. package/dist/components/hooks/base-ui.js +22 -25
  148. package/dist/components/hooks/base-ui.js.map +1 -1
  149. package/dist/components/hooks/index.d.ts +11 -0
  150. package/dist/components/hooks/index.d.ts.map +1 -0
  151. package/dist/components/hooks/useBreakpoint.d.ts +39 -0
  152. package/dist/components/hooks/useBreakpoint.d.ts.map +1 -0
  153. package/dist/components/hooks/useBreakpoint.js +14 -15
  154. package/dist/components/hooks/useBreakpoint.js.map +1 -1
  155. package/dist/components/hooks/useCSSVariables.d.ts +7 -0
  156. package/dist/components/hooks/useCSSVariables.d.ts.map +1 -0
  157. package/dist/components/hooks/useCSSVariables.js.map +1 -1
  158. package/dist/components/hooks/useCharts.d.ts +41 -0
  159. package/dist/components/hooks/useCharts.d.ts.map +1 -0
  160. package/dist/components/hooks/useCharts.js.map +1 -1
  161. package/dist/components/hooks/useControlledState.d.ts +13 -0
  162. package/dist/components/hooks/useControlledState.d.ts.map +1 -0
  163. package/dist/components/hooks/useControlledState.js.map +1 -1
  164. package/dist/components/hooks/useDraggable.d.ts +4 -0
  165. package/dist/components/hooks/useDraggable.d.ts.map +1 -0
  166. package/dist/components/hooks/useDraggable.js +19 -20
  167. package/dist/components/hooks/useDraggable.js.map +1 -1
  168. package/dist/components/hooks/useHover.d.ts +5 -0
  169. package/dist/components/hooks/useHover.d.ts.map +1 -0
  170. package/dist/components/hooks/useHover.js +16 -17
  171. package/dist/components/hooks/useHover.js.map +1 -1
  172. package/dist/components/hooks/useResizeObserver.d.ts +9 -0
  173. package/dist/components/hooks/useResizeObserver.d.ts.map +1 -0
  174. package/dist/components/hooks/useResizeObserver.js +29 -30
  175. package/dist/components/hooks/useResizeObserver.js.map +1 -1
  176. package/dist/components/hooks/useTransitionStatus.d.ts +13 -0
  177. package/dist/components/hooks/useTransitionStatus.d.ts.map +1 -0
  178. package/dist/components/hooks/useTransitionStatus.js.map +1 -1
  179. package/dist/components/hooks/useWindowSize.d.ts +5 -0
  180. package/dist/components/hooks/useWindowSize.d.ts.map +1 -0
  181. package/dist/components/hooks/useWindowSize.js.map +1 -1
  182. package/dist/components/icon-button/component.d.ts +45 -0
  183. package/dist/components/icon-button/component.d.ts.map +1 -0
  184. package/dist/components/icon-button/component.js.map +1 -1
  185. package/dist/components/icon-button/index.d.ts +2 -0
  186. package/dist/components/icon-button/index.d.ts.map +1 -0
  187. package/dist/components/index.d.ts +53 -0
  188. package/dist/components/index.d.ts.map +1 -0
  189. package/dist/components/input/component.d.ts +29 -0
  190. package/dist/components/input/component.d.ts.map +1 -0
  191. package/dist/components/input/component.js +46 -46
  192. package/dist/components/input/component.js.map +1 -1
  193. package/dist/components/input/index.d.ts +2 -0
  194. package/dist/components/input/index.d.ts.map +1 -0
  195. package/dist/components/keyboard-shortcut/component.d.ts +15 -0
  196. package/dist/components/keyboard-shortcut/component.d.ts.map +1 -0
  197. package/dist/components/keyboard-shortcut/component.js.map +1 -1
  198. package/dist/components/keyboard-shortcut/index.d.ts +2 -0
  199. package/dist/components/keyboard-shortcut/index.d.ts.map +1 -0
  200. package/dist/components/loader/component.d.ts +5 -0
  201. package/dist/components/loader/component.d.ts.map +1 -0
  202. package/dist/components/loader/component.js.map +1 -1
  203. package/dist/components/loader/index.d.ts +2 -0
  204. package/dist/components/loader/index.d.ts.map +1 -0
  205. package/dist/components/modal/Modal.d.ts +85 -0
  206. package/dist/components/modal/Modal.d.ts.map +1 -0
  207. package/dist/components/modal/Modal.js +75 -75
  208. package/dist/components/modal/Modal.js.map +1 -1
  209. package/dist/components/modal/ModalProvider.d.ts +6 -0
  210. package/dist/components/modal/ModalProvider.d.ts.map +1 -0
  211. package/dist/components/modal/ModalProvider.js +25 -25
  212. package/dist/components/modal/ModalProvider.js.map +1 -1
  213. package/dist/components/modal/ModalService.d.ts +34 -0
  214. package/dist/components/modal/ModalService.d.ts.map +1 -0
  215. package/dist/components/modal/ModalService.js +5 -10
  216. package/dist/components/modal/ModalService.js.map +1 -1
  217. package/dist/components/modal/constants.d.ts +10 -0
  218. package/dist/components/modal/constants.d.ts.map +1 -0
  219. package/dist/components/modal/constants.js.map +1 -1
  220. package/dist/components/modal/functions.d.ts +28 -0
  221. package/dist/components/modal/functions.d.ts.map +1 -0
  222. package/dist/components/modal/functions.js.map +1 -1
  223. package/dist/components/modal/index.d.ts +16 -0
  224. package/dist/components/modal/index.d.ts.map +1 -0
  225. package/dist/components/modal/index.js.map +1 -1
  226. package/dist/components/nav/context.d.ts +10 -0
  227. package/dist/components/nav/context.d.ts.map +1 -0
  228. package/dist/components/nav/context.js.map +1 -1
  229. package/dist/components/nav/group.d.ts +15 -0
  230. package/dist/components/nav/group.d.ts.map +1 -0
  231. package/dist/components/nav/group.js.map +1 -1
  232. package/dist/components/nav/heading.d.ts +6 -0
  233. package/dist/components/nav/heading.d.ts.map +1 -0
  234. package/dist/components/nav/heading.js.map +1 -1
  235. package/dist/components/nav/index.d.ts +12 -0
  236. package/dist/components/nav/index.d.ts.map +1 -0
  237. package/dist/components/nav/item.d.ts +35 -0
  238. package/dist/components/nav/item.d.ts.map +1 -0
  239. package/dist/components/nav/item.js.map +1 -1
  240. package/dist/components/popover/component.d.ts +10 -0
  241. package/dist/components/popover/component.d.ts.map +1 -0
  242. package/dist/components/popover/component.js.map +1 -1
  243. package/dist/components/popover/index.d.ts +2 -0
  244. package/dist/components/popover/index.d.ts.map +1 -0
  245. package/dist/components/popup-panel/component.d.ts +100 -0
  246. package/dist/components/popup-panel/component.d.ts.map +1 -0
  247. package/dist/components/popup-panel/component.js +105 -105
  248. package/dist/components/popup-panel/component.js.map +1 -1
  249. package/dist/components/popup-panel/constants.d.ts +8 -0
  250. package/dist/components/popup-panel/constants.d.ts.map +1 -0
  251. package/dist/components/popup-panel/constants.js.map +1 -1
  252. package/dist/components/popup-panel/index.d.ts +2 -0
  253. package/dist/components/popup-panel/index.d.ts.map +1 -0
  254. package/dist/components/radio/component.d.ts +8 -0
  255. package/dist/components/radio/component.d.ts.map +1 -0
  256. package/dist/components/radio/component.js.map +1 -1
  257. package/dist/components/radio/index.d.ts +3 -0
  258. package/dist/components/radio/index.d.ts.map +1 -0
  259. package/dist/components/radio/interface.d.ts +6 -0
  260. package/dist/components/radio/interface.d.ts.map +1 -0
  261. package/dist/components/resizable/component.d.ts +70 -0
  262. package/dist/components/resizable/component.d.ts.map +1 -0
  263. package/dist/components/resizable/component.js +146 -147
  264. package/dist/components/resizable/component.js.map +1 -1
  265. package/dist/components/resizable/index.d.ts +3 -0
  266. package/dist/components/resizable/index.d.ts.map +1 -0
  267. package/dist/components/scroll-area/component.d.ts +67 -0
  268. package/dist/components/scroll-area/component.d.ts.map +1 -0
  269. package/dist/components/scroll-area/component.js +69 -69
  270. package/dist/components/scroll-area/component.js.map +1 -1
  271. package/dist/components/scroll-area/index.d.ts +2 -0
  272. package/dist/components/scroll-area/index.d.ts.map +1 -0
  273. package/dist/components/segmented/component.d.ts +10 -0
  274. package/dist/components/segmented/component.d.ts.map +1 -0
  275. package/dist/components/segmented/component.js.map +1 -1
  276. package/dist/components/segmented/index.d.ts +2 -0
  277. package/dist/components/segmented/index.d.ts.map +1 -0
  278. package/dist/components/select/component.d.ts +48 -0
  279. package/dist/components/select/component.d.ts.map +1 -0
  280. package/dist/components/select/component.js +93 -94
  281. package/dist/components/select/component.js.map +1 -1
  282. package/dist/components/select/index.d.ts +2 -0
  283. package/dist/components/select/index.d.ts.map +1 -0
  284. package/dist/components/select/item.d.ts +14 -0
  285. package/dist/components/select/item.d.ts.map +1 -0
  286. package/dist/components/select/item.js.map +1 -1
  287. package/dist/components/select-trigger/component.d.ts +45 -0
  288. package/dist/components/select-trigger/component.d.ts.map +1 -0
  289. package/dist/components/select-trigger/component.js +96 -96
  290. package/dist/components/select-trigger/component.js.map +1 -1
  291. package/dist/components/select-trigger/index.d.ts +3 -0
  292. package/dist/components/select-trigger/index.d.ts.map +1 -0
  293. package/dist/components/slider/component.d.ts +6 -0
  294. package/dist/components/slider/component.d.ts.map +1 -0
  295. package/dist/components/slider/component.js.map +1 -1
  296. package/dist/components/slider/index.d.ts +2 -0
  297. package/dist/components/slider/index.d.ts.map +1 -0
  298. package/dist/components/spin/component.d.ts +6 -0
  299. package/dist/components/spin/component.d.ts.map +1 -0
  300. package/dist/components/spin/component.js.map +1 -1
  301. package/dist/components/spin/index.d.ts +2 -0
  302. package/dist/components/spin/index.d.ts.map +1 -0
  303. package/dist/components/splitter/component.d.ts +10 -0
  304. package/dist/components/splitter/component.d.ts.map +1 -0
  305. package/dist/components/splitter/component.js +7 -7
  306. package/dist/components/splitter/component.js.map +1 -1
  307. package/dist/components/splitter/context.d.ts +5 -0
  308. package/dist/components/splitter/context.d.ts.map +1 -0
  309. package/dist/components/splitter/context.js.map +1 -1
  310. package/dist/components/splitter/index.d.ts +2 -0
  311. package/dist/components/splitter/index.d.ts.map +1 -0
  312. package/dist/components/splitter/splitter-panel.d.ts +12 -0
  313. package/dist/components/splitter/splitter-panel.d.ts.map +1 -0
  314. package/dist/components/splitter/splitter-panel.js.map +1 -1
  315. package/dist/components/splitter/splitter.d.ts +11 -0
  316. package/dist/components/splitter/splitter.d.ts.map +1 -0
  317. package/dist/components/splitter/splitter.js +112 -112
  318. package/dist/components/splitter/splitter.js.map +1 -1
  319. package/dist/components/splitter/useSizes.d.ts +9 -0
  320. package/dist/components/splitter/useSizes.d.ts.map +1 -0
  321. package/dist/components/splitter/useSizes.js +35 -35
  322. package/dist/components/splitter/useSizes.js.map +1 -1
  323. package/dist/components/stack/Stack.d.ts +40 -0
  324. package/dist/components/stack/Stack.d.ts.map +1 -0
  325. package/dist/components/stack/Stack.js.map +1 -1
  326. package/dist/components/stack/StackChild.d.ts +31 -0
  327. package/dist/components/stack/StackChild.d.ts.map +1 -0
  328. package/dist/components/stack/StackChild.js.map +1 -1
  329. package/dist/components/stack/index.d.ts +8 -0
  330. package/dist/components/stack/index.d.ts.map +1 -0
  331. package/dist/components/stack/index.js.map +1 -1
  332. package/dist/components/status-icon/component.d.ts +23 -0
  333. package/dist/components/status-icon/component.d.ts.map +1 -0
  334. package/dist/components/status-icon/component.js.map +1 -1
  335. package/dist/components/status-icon/index.d.ts +2 -0
  336. package/dist/components/status-icon/index.d.ts.map +1 -0
  337. package/dist/components/switch/component.d.ts +9 -0
  338. package/dist/components/switch/component.d.ts.map +1 -0
  339. package/dist/components/switch/component.js.map +1 -1
  340. package/dist/components/switch/index.d.ts +2 -0
  341. package/dist/components/switch/index.d.ts.map +1 -0
  342. package/dist/components/table/component.d.ts +32 -0
  343. package/dist/components/table/component.d.ts.map +1 -0
  344. package/dist/components/table/component.js +57 -58
  345. package/dist/components/table/component.js.map +1 -1
  346. package/dist/components/table/index.d.ts +2 -0
  347. package/dist/components/table/index.d.ts.map +1 -0
  348. package/dist/components/tag/component.d.ts +22 -0
  349. package/dist/components/tag/component.d.ts.map +1 -0
  350. package/dist/components/tag/component.js.map +1 -1
  351. package/dist/components/tag/index.d.ts +2 -0
  352. package/dist/components/tag/index.d.ts.map +1 -0
  353. package/dist/components/theme-provider/component.d.ts +7 -0
  354. package/dist/components/theme-provider/component.d.ts.map +1 -0
  355. package/dist/components/theme-provider/component.js.map +1 -1
  356. package/dist/components/theme-provider/index.d.ts +2 -0
  357. package/dist/components/theme-provider/index.d.ts.map +1 -0
  358. package/dist/components/toast/component.d.ts +15 -0
  359. package/dist/components/toast/component.d.ts.map +1 -0
  360. package/dist/components/toast/component.js +49 -50
  361. package/dist/components/toast/component.js.map +1 -1
  362. package/dist/components/toast/function.d.ts +11 -0
  363. package/dist/components/toast/function.d.ts.map +1 -0
  364. package/dist/components/toast/function.js.map +1 -1
  365. package/dist/components/toast/index.d.ts +4 -0
  366. package/dist/components/toast/index.d.ts.map +1 -0
  367. package/dist/components/toast/types.d.ts +4 -0
  368. package/dist/components/toast/types.d.ts.map +1 -0
  369. package/dist/components/tooltip/component.d.ts +10 -0
  370. package/dist/components/tooltip/component.d.ts.map +1 -0
  371. package/dist/components/tooltip/component.js.map +1 -1
  372. package/dist/components/tooltip/index.d.ts +2 -0
  373. package/dist/components/tooltip/index.d.ts.map +1 -0
  374. package/dist/components/tour/component.d.ts +8 -0
  375. package/dist/components/tour/component.d.ts.map +1 -0
  376. package/dist/components/tour/component.js.map +1 -1
  377. package/dist/components/tour/index.d.ts +2 -0
  378. package/dist/components/tour/index.d.ts.map +1 -0
  379. package/dist/components/transition/component.d.ts +30 -0
  380. package/dist/components/transition/component.d.ts.map +1 -0
  381. package/dist/components/transition/component.js +32 -32
  382. package/dist/components/transition/component.js.map +1 -1
  383. package/dist/components/transition/index.d.ts +2 -0
  384. package/dist/components/transition/index.d.ts.map +1 -0
  385. package/dist/components/tree/components.d.ts +14 -0
  386. package/dist/components/tree/components.d.ts.map +1 -0
  387. package/dist/components/tree/components.js.map +1 -1
  388. package/dist/components/tree/helpers.d.ts +6 -0
  389. package/dist/components/tree/helpers.d.ts.map +1 -0
  390. package/dist/components/tree/helpers.js.map +1 -1
  391. package/dist/components/tree/index.d.ts +5 -0
  392. package/dist/components/tree/index.d.ts.map +1 -0
  393. package/dist/components/tree/types.d.ts +56 -0
  394. package/dist/components/tree/types.d.ts.map +1 -0
  395. package/dist/components/tree/useTreeCommon.d.ts +179 -0
  396. package/dist/components/tree/useTreeCommon.d.ts.map +1 -0
  397. package/dist/components/tree/useTreeCommon.js +29 -29
  398. package/dist/components/tree/useTreeCommon.js.map +1 -1
  399. package/dist/components/tree/useUniqueKeysTree.d.ts +34 -0
  400. package/dist/components/tree/useUniqueKeysTree.d.ts.map +1 -0
  401. package/dist/components/tree/useUniqueKeysTree.js.map +1 -1
  402. package/dist/components/truncate/component.d.ts +17 -0
  403. package/dist/components/truncate/component.d.ts.map +1 -0
  404. package/dist/components/truncate/component.js +38 -39
  405. package/dist/components/truncate/component.js.map +1 -1
  406. package/dist/components/truncate/helpers.d.ts +17 -0
  407. package/dist/components/truncate/helpers.d.ts.map +1 -0
  408. package/dist/components/truncate/helpers.js +27 -30
  409. package/dist/components/truncate/helpers.js.map +1 -1
  410. package/dist/components/truncate/index.d.ts +2 -0
  411. package/dist/components/truncate/index.d.ts.map +1 -0
  412. package/dist/components/upload/component.d.ts +17 -0
  413. package/dist/components/upload/component.d.ts.map +1 -0
  414. package/dist/components/upload/component.js.map +1 -1
  415. package/dist/components/upload/dragger.d.ts +14 -0
  416. package/dist/components/upload/dragger.d.ts.map +1 -0
  417. package/dist/components/upload/dragger.js.map +1 -1
  418. package/dist/components/upload/hooks.d.ts +6 -0
  419. package/dist/components/upload/hooks.d.ts.map +1 -0
  420. package/dist/components/upload/hooks.js.map +1 -1
  421. package/dist/components/upload/index.d.ts +4 -0
  422. package/dist/components/upload/index.d.ts.map +1 -0
  423. package/dist/components/upload/item.d.ts +12 -0
  424. package/dist/components/upload/item.d.ts.map +1 -0
  425. package/dist/components/upload/item.js.map +1 -1
  426. package/dist/components/upload/utils.d.ts +2 -0
  427. package/dist/components/upload/utils.d.ts.map +1 -0
  428. package/dist/components/upload/utils.js.map +1 -1
  429. package/dist/components/utils/WithAntdTokens.d.ts +8 -0
  430. package/dist/components/utils/WithAntdTokens.d.ts.map +1 -0
  431. package/dist/components/utils/WithAntdTokens.js.map +1 -1
  432. package/dist/components/utils/WithRenderProp.d.ts +14 -0
  433. package/dist/components/utils/WithRenderProp.d.ts.map +1 -0
  434. package/dist/components/utils/WithRenderProp.js.map +1 -1
  435. package/dist/components/utils/antdUtils.d.ts +11 -0
  436. package/dist/components/utils/antdUtils.d.ts.map +1 -0
  437. package/dist/components/utils/antdUtils.js +9 -12
  438. package/dist/components/utils/antdUtils.js.map +1 -1
  439. package/dist/components/utils/client.d.ts +6 -0
  440. package/dist/components/utils/client.d.ts.map +1 -0
  441. package/dist/components/utils/cn.d.ts +5 -0
  442. package/dist/components/utils/cn.d.ts.map +1 -0
  443. package/dist/components/utils/cn.js.map +1 -1
  444. package/dist/components/utils/colors.d.ts +2 -0
  445. package/dist/components/utils/colors.d.ts.map +1 -0
  446. package/dist/components/utils/constants.d.ts +15 -0
  447. package/dist/components/utils/constants.d.ts.map +1 -0
  448. package/dist/components/utils/index.d.ts +6 -0
  449. package/dist/components/utils/index.d.ts.map +1 -0
  450. package/dist/components/utils/isTracebackError.d.ts +2 -0
  451. package/dist/components/utils/isTracebackError.d.ts.map +1 -0
  452. package/dist/components/utils/isTracebackError.js.map +1 -1
  453. package/dist/components/utils/main.d.ts +7 -0
  454. package/dist/components/utils/main.d.ts.map +1 -0
  455. package/dist/components/utils/placement.d.ts +21 -0
  456. package/dist/components/utils/placement.d.ts.map +1 -0
  457. package/dist/components/utils/placement.js.map +1 -1
  458. package/dist/components/utils/reactElement.d.ts +2 -0
  459. package/dist/components/utils/reactElement.d.ts.map +1 -0
  460. package/dist/components/utils/reactToString.d.ts +3 -0
  461. package/dist/components/utils/reactToString.d.ts.map +1 -0
  462. package/dist/components/utils/reactToString.js.map +1 -1
  463. package/dist/components/utils/selectionRange.d.ts +2 -0
  464. package/dist/components/utils/selectionRange.d.ts.map +1 -0
  465. package/dist/components/utils/selectionRange.js.map +1 -1
  466. package/dist/components/utils/theme.d.ts +6 -0
  467. package/dist/components/utils/theme.d.ts.map +1 -0
  468. package/dist/components/utils/theme.js.map +1 -1
  469. package/dist/components/utils/types.d.ts +12 -0
  470. package/dist/components/utils/types.d.ts.map +1 -0
  471. package/dist/components/vertical-collapsible-panel/component.d.ts +65 -0
  472. package/dist/components/vertical-collapsible-panel/component.d.ts.map +1 -0
  473. package/dist/components/vertical-collapsible-panel/component.js.map +1 -1
  474. package/dist/components/vertical-collapsible-panel/index.d.ts +2 -0
  475. package/dist/components/vertical-collapsible-panel/index.d.ts.map +1 -0
  476. package/dist/index.d.ts +4 -4431
  477. package/dist/index.d.ts.map +1 -0
  478. package/dist/index.js +166 -164
  479. package/dist/index.js.map +1 -1
  480. package/dist/metadata.d.ts +446 -0
  481. package/dist/metadata.d.ts.map +1 -0
  482. package/dist/metadata.js.map +1 -1
  483. package/dist/stats.html +4949 -0
  484. package/dist/tailwind.css +1 -1
  485. package/dist/tokens/and-theme/index.d.ts +2 -0
  486. package/dist/tokens/and-theme/index.d.ts.map +1 -0
  487. package/dist/tokens/and-theme/tokens.d.ts +6 -0
  488. package/dist/tokens/and-theme/tokens.d.ts.map +1 -0
  489. package/dist/tokens/and-theme/tokens.js.map +1 -1
  490. package/dist/tokens/charts/index.d.ts +5 -0
  491. package/dist/tokens/charts/index.d.ts.map +1 -0
  492. package/dist/tokens/charts/palettes/cloudscape.d.ts +460 -0
  493. package/dist/tokens/charts/palettes/cloudscape.d.ts.map +1 -0
  494. package/dist/tokens/charts/palettes/cloudscape.js.map +1 -1
  495. package/dist/tokens/charts/palettes/colorbrewer.d.ts +338 -0
  496. package/dist/tokens/charts/palettes/colorbrewer.d.ts.map +1 -0
  497. package/dist/tokens/charts/palettes/colorbrewer.js.map +1 -1
  498. package/dist/tokens/charts/palettes/index.d.ts +24 -0
  499. package/dist/tokens/charts/palettes/index.d.ts.map +1 -0
  500. package/dist/tokens/charts/palettes/index.js.map +1 -1
  501. package/dist/tokens/charts/palettes/tableau.d.ts +11 -0
  502. package/dist/tokens/charts/palettes/tableau.d.ts.map +1 -0
  503. package/dist/tokens/index.d.ts +5 -0
  504. package/dist/tokens/index.d.ts.map +1 -0
  505. package/dist/tokens/types.d.ts +10 -0
  506. package/dist/tokens/types.d.ts.map +1 -0
  507. package/dist/tokens/utils.d.ts +9 -0
  508. package/dist/tokens/utils.d.ts.map +1 -0
  509. package/dist/tokens/utils.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/tailwind.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/cmdk/index.tsx"],"sourcesContent":["// It is used here to avoid dependency on cmdk package and radix-ui-components package.\n\"use client\";\n\nimport React, { useId, JSX } from \"react\";\nimport { Dialog as RadixDialog } from \"@base-ui-components/react\";\nimport { commandScore } from \"./command-score\";\nimport { default as composeRefs } from \"merge-refs\";\nimport { WithRenderProp, type WithRenderPropProps } from \"../utils\";\n\ntype Children = { children?: React.ReactNode };\ntype DivProps = WithRenderPropProps<\"div\">;\n\ntype LoadingProps = Children &\n DivProps & {\n /** Estimated progress of loading asynchronous options. */\n progress?: number;\n /**\n * Accessible label for this loading progressbar. Not shown visibly.\n */\n label?: string;\n };\n\ntype EmptyProps = Children & DivProps & {};\ntype SeparatorProps = DivProps & {\n /** Whether this separator should always be rendered. Useful if you disable automatic filtering. */\n alwaysRender?: boolean;\n};\ntype DialogProps = RadixDialog.Root.Props &\n CommandProps & {\n /** Provide a className to the Dialog overlay. */\n overlayClassName?: string;\n /** Provide a className to the Dialog content. */\n contentClassName?: string;\n /** Provide a custom element the Dialog should portal into. */\n container?: HTMLElement;\n };\ntype ListProps = Children &\n DivProps & {\n /**\n * Accessible label for this List of suggestions. Not shown visibly.\n */\n label?: string;\n };\ntype ItemProps = Children &\n Omit<DivProps, \"disabled\" | \"onSelect\" | \"value\"> & {\n /** Whether this item is currently disabled. */\n disabled?: boolean;\n /** Event handler for when this item is selected, either via click or keyboard selection. */\n onSelect?: (value: string) => void;\n /**\n * A unique value for this item.\n * If no value is provided, it will be inferred from `children` or the rendered `textContent`. If your `textContent` changes between renders, you _must_ provide a stable, unique `value`.\n */\n value?: string;\n /** Optional keywords to match against when filtering. */\n keywords?: string[];\n /** Whether this item is forcibly rendered regardless of filtering. */\n forceMount?: boolean;\n };\ntype GroupProps = Children &\n Omit<DivProps, \"heading\" | \"value\"> & {\n /** Optional heading to render for this group. */\n heading?: React.ReactNode;\n /** If no heading is provided, you must provide a value that is unique for this group. */\n value?: string;\n /** Whether this group is forcibly rendered regardless of filtering. */\n forceMount?: boolean;\n };\ntype InputProps = Omit<\n WithRenderPropProps<\"input\">,\n \"value\" | \"onChange\" | \"type\"\n> & {\n /**\n * Optional controlled state for the value of the search input.\n */\n value?: string;\n /**\n * Event handler called when the search value changes.\n */\n onValueChange?: (search: string) => void;\n};\ntype CommandFilter = (\n value: string,\n search: string,\n keywords?: string[]\n) => number;\nexport type CommandProps = Children &\n DivProps & {\n /**\n * Accessible label for this command menu. Not shown visibly.\n */\n label?: string;\n /**\n * Optionally set to `false` to turn off the automatic filtering and sorting.\n * If `false`, you must conditionally render valid items based on the search query yourself.\n */\n shouldFilter?: boolean;\n /**\n * Custom filter function for whether each command menu item should matches the given search query.\n * It should return a number between 0 and 1, with 1 being the best match and 0 being hidden entirely.\n * By default, uses the `command-score` library.\n */\n filter?: CommandFilter;\n /**\n * Optional default item value when it is initially rendered.\n */\n defaultValue?: string;\n /**\n * Optional controlled state of the selected command menu item.\n */\n value?: string;\n /**\n * Event handler called when the selected item of the menu changes.\n */\n onValueChange?: (value: string) => void;\n /**\n * Optionally set to `true` to turn on looping around when using the arrow keys.\n */\n loop?: boolean;\n /**\n * Optionally set to `true` to disable selection via pointer events.\n */\n disablePointerSelection?: boolean;\n /**\n * Set to `false` to disable ctrl+n/j/p/k shortcuts. Defaults to `true`.\n */\n vimBindings?: boolean;\n };\n\ntype Context = {\n value: (id: string, value: string, keywords?: string[]) => void;\n item: (id: string, groupId: string) => () => void;\n group: (id: string) => () => void;\n filter: () => boolean;\n label: string;\n getDisablePointerSelection: () => boolean;\n // Ids\n listId: string;\n labelId: string;\n inputId: string;\n // Refs\n listInnerRef: React.RefObject<HTMLDivElement | null>;\n};\ntype State = {\n search: string;\n value: string;\n selectedItemId?: string;\n filtered: { count: number; items: Map<string, number>; groups: Set<string> };\n};\ntype Store = {\n subscribe: (callback: () => void) => () => void;\n snapshot: () => State;\n setState: <K extends keyof State>(\n key: K,\n value: State[K],\n opts?: any\n ) => void;\n emit: () => void;\n};\ntype Group = {\n id: string;\n forceMount?: boolean;\n};\n\nconst GROUP_SELECTOR = `[cmdk-group=\"\"]`;\nconst GROUP_ITEMS_SELECTOR = `[cmdk-group-items=\"\"]`;\nconst GROUP_HEADING_SELECTOR = `[cmdk-group-heading=\"\"]`;\nconst ITEM_SELECTOR = `[cmdk-item=\"\"]`;\nconst VALID_ITEM_SELECTOR = `${ITEM_SELECTOR}:not([aria-disabled=\"true\"])`;\nconst SELECT_EVENT = `cmdk-item-select`;\nconst VALUE_ATTR = `data-value`;\nconst defaultFilter: CommandFilter = (value, search, keywords) =>\n commandScore(value, search, keywords);\n\nconst CommandContext = React.createContext<Context>(undefined);\nconst useCommand = () => React.useContext(CommandContext);\nconst StoreContext = React.createContext<Store>(undefined);\nconst useStore = () => React.useContext(StoreContext);\nconst GroupContext = React.createContext<Group>(undefined);\n\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\n (props, forwardedRef) => {\n const state = useLazyRef<State>(() => ({\n /** Value of the search query. */\n search: \"\",\n /** Currently selected item value. */\n value: props.value ?? props.defaultValue ?? \"\",\n /** Currently selected item id. */\n selectedItemId: undefined,\n filtered: {\n /** The count of all visible items. */\n count: 0,\n /** Map from visible item id to its search score. */\n items: new Map(),\n /** Set of groups with at least one visible item. */\n groups: new Set(),\n },\n }));\n const allItems = useLazyRef<Set<string>>(() => new Set()); // [...itemIds]\n const allGroups = useLazyRef<Map<string, Set<string>>>(() => new Map()); // groupId → [...itemIds]\n const ids = useLazyRef<Map<string, { value: string; keywords?: string[] }>>(\n () => new Map()\n ); // id → { value, keywords }\n const listeners = useLazyRef<Set<() => void>>(() => new Set()); // [...rerenders]\n const propsRef = useAsRef(props);\n const {\n label,\n children,\n value,\n onValueChange,\n filter,\n shouldFilter,\n loop,\n disablePointerSelection = false,\n vimBindings = true,\n ...etc\n } = props;\n\n const listId = useId();\n const labelId = useId();\n const inputId = useId();\n\n const listInnerRef = React.useRef<HTMLDivElement>(null);\n\n const schedule = useScheduleLayoutEffect();\n\n /** Controlled mode `value` handling. */\n useLayoutEffect(() => {\n if (value !== undefined) {\n const v = value.trim();\n state.current.value = v;\n store.emit();\n }\n }, [value]);\n\n useLayoutEffect(() => {\n schedule(6, scrollSelectedIntoView);\n }, []);\n\n const store: Store = React.useMemo(() => {\n return {\n subscribe: (cb) => {\n listeners.current.add(cb);\n return () => listeners.current.delete(cb);\n },\n snapshot: () => {\n return state.current;\n },\n setState: (key, value, opts) => {\n if (Object.is(state.current[key], value)) return;\n state.current[key] = value;\n\n if (key === \"search\") {\n // Filter synchronously before emitting back to children\n filterItems();\n sort();\n schedule(1, selectFirstItem);\n } else if (key === \"value\") {\n // Force focus input or root so accessibility works\n if (\n document.activeElement.hasAttribute(\"cmdk-input\") ||\n document.activeElement.hasAttribute(\"cmdk-root\")\n ) {\n const input = document.getElementById(inputId);\n if (input) input.focus();\n else document.getElementById(listId)?.focus();\n }\n\n schedule(7, () => {\n state.current.selectedItemId = getSelectedItem()?.id;\n store.emit();\n });\n\n // opts is a boolean referring to whether it should NOT be scrolled into view\n if (!opts) {\n // Scroll the selected item into view\n schedule(5, scrollSelectedIntoView);\n }\n if (propsRef.current?.value !== undefined) {\n // If controlled, just call the callback instead of updating state internally\n const newValue = (value ?? \"\") as string;\n propsRef.current.onValueChange?.(newValue);\n return;\n }\n }\n\n // Notify subscribers that state has changed\n store.emit();\n },\n emit: () => {\n listeners.current.forEach((l) => l());\n },\n };\n }, []);\n\n const context: Context = React.useMemo(\n () => ({\n // Keep id → {value, keywords} mapping up-to-date\n value: (id, value, keywords) => {\n if (value !== ids.current.get(id)?.value) {\n ids.current.set(id, { value, keywords });\n state.current.filtered.items.set(id, score(value, keywords));\n schedule(2, () => {\n sort();\n store.emit();\n });\n }\n },\n // Track item lifecycle (mount, unmount)\n item: (id, groupId) => {\n allItems.current.add(id);\n\n // Track this item within the group\n if (groupId) {\n if (!allGroups.current.has(groupId)) {\n allGroups.current.set(groupId, new Set([id]));\n } else {\n allGroups.current.get(groupId).add(id);\n }\n }\n\n // Batch this, multiple items can mount in one pass\n // and we should not be filtering/sorting/emitting each time\n schedule(3, () => {\n filterItems();\n sort();\n\n // Could be initial mount, select the first item if none already selected\n if (!state.current.value) {\n selectFirstItem();\n }\n\n store.emit();\n });\n\n return () => {\n ids.current.delete(id);\n allItems.current.delete(id);\n state.current.filtered.items.delete(id);\n const selectedItem = getSelectedItem();\n\n // Batch this, multiple items could be removed in one pass\n schedule(4, () => {\n filterItems();\n\n // The item removed have been the selected one,\n // so selection should be moved to the first\n if (selectedItem?.getAttribute(\"id\") === id) selectFirstItem();\n\n store.emit();\n });\n };\n },\n // Track group lifecycle (mount, unmount)\n group: (id) => {\n if (!allGroups.current.has(id)) {\n allGroups.current.set(id, new Set());\n }\n\n return () => {\n ids.current.delete(id);\n allGroups.current.delete(id);\n };\n },\n filter: () => {\n return propsRef.current.shouldFilter;\n },\n label: label || props[\"aria-label\"],\n getDisablePointerSelection: () => {\n return propsRef.current.disablePointerSelection;\n },\n listId,\n inputId,\n labelId,\n listInnerRef,\n }),\n []\n );\n\n function score(value: string, keywords?: string[]) {\n const filter = propsRef.current?.filter ?? defaultFilter;\n return value ? filter(value, state.current.search, keywords) : 0;\n }\n\n /** Sorts items by score, and groups by highest item score. */\n function sort() {\n if (\n !state.current.search ||\n // Explicitly false, because true | undefined is the default\n propsRef.current.shouldFilter === false\n ) {\n return;\n }\n\n const scores = state.current.filtered.items;\n\n // Sort the groups\n const groups: [string, number][] = [];\n state.current.filtered.groups.forEach((value) => {\n const items = allGroups.current.get(value);\n\n // Get the maximum score of the group's items\n let max = 0;\n items.forEach((item) => {\n const score = scores.get(item);\n max = Math.max(score, max);\n });\n\n groups.push([value, max]);\n });\n\n // Sort items within groups to bottom\n // Sort items outside of groups\n // Sort groups to bottom (pushes all non-grouped items to the top)\n const listInsertionElement = listInnerRef.current;\n\n // Sort the items\n getValidItems()\n .sort((a, b) => {\n const valueA = a.getAttribute(\"id\");\n const valueB = b.getAttribute(\"id\");\n return (scores.get(valueB) ?? 0) - (scores.get(valueA) ?? 0);\n })\n .forEach((item) => {\n const group = item.closest(GROUP_ITEMS_SELECTOR);\n\n if (group) {\n group.appendChild(\n item.parentElement === group\n ? item\n : item.closest(`${GROUP_ITEMS_SELECTOR} > *`)\n );\n } else {\n listInsertionElement.appendChild(\n item.parentElement === listInsertionElement\n ? item\n : item.closest(`${GROUP_ITEMS_SELECTOR} > *`)\n );\n }\n });\n\n groups\n .sort((a, b) => b[1] - a[1])\n .forEach((group) => {\n const element = listInnerRef.current?.querySelector(\n `${GROUP_SELECTOR}[${VALUE_ATTR}=\"${encodeURIComponent(group[0])}\"]`\n );\n element?.parentElement.appendChild(element);\n });\n }\n\n function selectFirstItem() {\n const item = getValidItems().find(\n (item) => item.getAttribute(\"aria-disabled\") !== \"true\"\n );\n const value = item?.getAttribute(VALUE_ATTR);\n store.setState(\"value\", value || undefined);\n }\n\n /** Filters the current items. */\n function filterItems() {\n if (\n !state.current.search ||\n // Explicitly false, because true | undefined is the default\n propsRef.current.shouldFilter === false\n ) {\n state.current.filtered.count = allItems.current.size;\n // Do nothing, each item will know to show itself because search is empty\n return;\n }\n\n // Reset the groups\n state.current.filtered.groups = new Set();\n let itemCount = 0;\n\n // Check which items should be included\n for (const id of allItems.current) {\n const value = ids.current.get(id)?.value ?? \"\";\n const keywords = ids.current.get(id)?.keywords ?? [];\n const rank = score(value, keywords);\n state.current.filtered.items.set(id, rank);\n if (rank > 0) itemCount++;\n }\n\n // Check which groups have at least 1 item shown\n for (const [groupId, group] of allGroups.current) {\n for (const itemId of group) {\n if (state.current.filtered.items.get(itemId) > 0) {\n state.current.filtered.groups.add(groupId);\n break;\n }\n }\n }\n\n state.current.filtered.count = itemCount;\n }\n\n function scrollSelectedIntoView() {\n const item = getSelectedItem();\n\n if (item) {\n if (item.parentElement?.firstChild === item) {\n // First item in Group, ensure heading is in view\n item\n .closest(GROUP_SELECTOR)\n ?.querySelector(GROUP_HEADING_SELECTOR)\n ?.scrollIntoView({ block: \"nearest\" });\n }\n\n // Ensure the item is always in view\n item.scrollIntoView({ block: \"nearest\" });\n }\n }\n\n /** Getters */\n\n function getSelectedItem() {\n return listInnerRef.current?.querySelector(\n `${ITEM_SELECTOR}[aria-selected=\"true\"]`\n );\n }\n\n function getValidItems() {\n return Array.from(\n listInnerRef.current?.querySelectorAll(VALID_ITEM_SELECTOR) || []\n );\n }\n\n /** Setters */\n\n function updateSelectedToIndex(index: number) {\n const items = getValidItems();\n const item = items[index];\n if (item) store.setState(\"value\", item.getAttribute(VALUE_ATTR));\n }\n\n function updateSelectedByItem(change: 1 | -1) {\n const selected = getSelectedItem();\n const items = getValidItems();\n const index = items.findIndex((item) => item === selected);\n\n // Get item at this index\n let newSelected = items[index + change];\n\n if (propsRef.current?.loop) {\n newSelected =\n index + change < 0\n ? items[items.length - 1]\n : index + change === items.length\n ? items[0]\n : items[index + change];\n }\n\n if (newSelected)\n store.setState(\"value\", newSelected.getAttribute(VALUE_ATTR));\n }\n\n function updateSelectedByGroup(change: 1 | -1) {\n const selected = getSelectedItem();\n let group = selected?.closest(GROUP_SELECTOR);\n let item: HTMLElement;\n\n while (group && !item) {\n group =\n change > 0\n ? findNextSibling(group, GROUP_SELECTOR)\n : findPreviousSibling(group, GROUP_SELECTOR);\n item = group?.querySelector(VALID_ITEM_SELECTOR);\n }\n\n if (item) {\n store.setState(\"value\", item.getAttribute(VALUE_ATTR));\n } else {\n updateSelectedByItem(change);\n }\n }\n\n const last = () => updateSelectedToIndex(getValidItems().length - 1);\n\n const next = (e: React.KeyboardEvent) => {\n e.preventDefault();\n\n if (e.metaKey) {\n // Last item\n last();\n } else if (e.altKey) {\n // Next group\n updateSelectedByGroup(1);\n } else {\n // Next item\n updateSelectedByItem(1);\n }\n };\n\n const prev = (e: React.KeyboardEvent) => {\n e.preventDefault();\n\n if (e.metaKey) {\n // First item\n updateSelectedToIndex(0);\n } else if (e.altKey) {\n // Previous group\n updateSelectedByGroup(-1);\n } else {\n // Previous item\n updateSelectedByItem(-1);\n }\n };\n\n return (\n <WithRenderProp\n ref={forwardedRef}\n tabIndex={-1}\n {...etc}\n cmdk-root=\"\"\n onKeyDown={(e) => {\n etc.onKeyDown?.(e);\n\n // Check if IME composition is finished before triggering key binds\n // This prevents unwanted triggering while user is still inputting text with IME\n // e.keyCode === 229 is for the CJK IME with Legacy Browser [https://w3c.github.io/uievents/#determine-keydown-keyup-keyCode]\n // isComposing is for the CJK IME with Modern Browser [https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent/isComposing]\n const isComposing = e.nativeEvent.isComposing || e.keyCode === 229;\n\n if (e.defaultPrevented || isComposing) {\n return;\n }\n\n switch (e.key) {\n case \"n\":\n case \"j\": {\n // vim keybind down\n if (vimBindings && e.ctrlKey) {\n next(e);\n }\n break;\n }\n case \"ArrowDown\": {\n next(e);\n break;\n }\n case \"p\":\n case \"k\": {\n // vim keybind up\n if (vimBindings && e.ctrlKey) {\n prev(e);\n }\n break;\n }\n case \"ArrowUp\": {\n prev(e);\n break;\n }\n case \"Home\": {\n // First item\n e.preventDefault();\n updateSelectedToIndex(0);\n break;\n }\n case \"End\": {\n // Last item\n e.preventDefault();\n last();\n break;\n }\n case \"Enter\": {\n // Trigger item onSelect\n e.preventDefault();\n const item = getSelectedItem();\n if (item) {\n const event = new Event(SELECT_EVENT);\n item.dispatchEvent(event);\n }\n }\n }\n }}\n >\n <label\n cmdk-label=\"\"\n htmlFor={context.inputId}\n id={context.labelId}\n // Screen reader only\n style={srOnlyStyles}\n >\n {label}\n </label>\n {SlottableWithNestedChildren(props, (child) => (\n <StoreContext.Provider value={store}>\n <CommandContext.Provider value={context}>\n {child}\n </CommandContext.Provider>\n </StoreContext.Provider>\n ))}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * Command menu item. Becomes active on pointer enter or through keyboard navigation.\n * Preferably pass a `value`, otherwise the value will be inferred from `children` or\n * the rendered item's `textContent`.\n */\nconst Item = React.forwardRef<HTMLDivElement, ItemProps>(\n (props, forwardedRef) => {\n const id = useId();\n const ref = React.useRef<HTMLDivElement>(null);\n const groupContext = React.useContext(GroupContext);\n const context = useCommand();\n const propsRef = useAsRef(props);\n const forceMount = propsRef.current?.forceMount ?? groupContext?.forceMount;\n\n useLayoutEffect(() => {\n if (!forceMount) {\n return context.item(id, groupContext?.id);\n }\n }, [forceMount]);\n\n const value = useValue(\n id,\n ref,\n [props.value, props.children, ref],\n props.keywords\n );\n\n const store = useStore();\n const selected = useCmdk(\n (state) => state.value && state.value === value.current\n );\n const render = useCmdk((state) =>\n forceMount\n ? true\n : context.filter() === false\n ? true\n : !state.search\n ? true\n : state.filtered.items.get(id) > 0\n );\n\n React.useEffect(() => {\n const element = ref.current;\n if (!element || props.disabled) return;\n element.addEventListener(SELECT_EVENT, onSelect);\n return () => element.removeEventListener(SELECT_EVENT, onSelect);\n }, [render, props.onSelect, props.disabled]);\n\n function onSelect() {\n select();\n propsRef.current.onSelect?.(value.current);\n }\n\n function select() {\n store.setState(\"value\", value.current, true);\n }\n\n if (!render) return null;\n\n const {\n disabled,\n value: _,\n onSelect: __,\n forceMount: ___,\n keywords: ____,\n ...etc\n } = props;\n\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n id={id}\n cmdk-item=\"\"\n role=\"option\"\n aria-disabled={Boolean(disabled)}\n aria-selected={Boolean(selected)}\n data-disabled={Boolean(disabled)}\n data-selected={Boolean(selected)}\n onPointerMove={\n disabled || context.getDisablePointerSelection() ? undefined : select\n }\n onClick={disabled ? undefined : onSelect}\n >\n {props.children}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * Group command menu items together with a heading.\n * Grouped items are always shown together.\n */\nconst Group = React.forwardRef<HTMLDivElement, GroupProps>(\n (props, forwardedRef) => {\n const { heading, children, forceMount, ...etc } = props;\n const id = useId();\n const ref = React.useRef<HTMLDivElement>(null);\n const headingRef = React.useRef<HTMLDivElement>(null);\n const headingId = useId();\n const context = useCommand();\n const render = useCmdk((state) =>\n forceMount\n ? true\n : context.filter() === false\n ? true\n : !state.search\n ? true\n : state.filtered.groups.has(id)\n );\n\n useLayoutEffect(() => {\n return context.group(id);\n }, []);\n\n useValue(id, ref, [props.value, props.heading, headingRef]);\n\n const contextValue = React.useMemo(\n () => ({ id, forceMount }),\n [forceMount]\n );\n\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n cmdk-group=\"\"\n role=\"presentation\"\n hidden={render ? undefined : true}\n >\n {heading && (\n <div\n ref={headingRef}\n cmdk-group-heading=\"\"\n aria-hidden\n id={headingId}\n >\n {heading}\n </div>\n )}\n {SlottableWithNestedChildren(props, (child) => (\n <div\n cmdk-group-items=\"\"\n role=\"group\"\n aria-labelledby={heading ? headingId : undefined}\n >\n <GroupContext.Provider value={contextValue}>\n {child}\n </GroupContext.Provider>\n </div>\n ))}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * A visual and semantic separator between items or groups.\n * Visible when the search query is empty or `alwaysRender` is true, hidden otherwise.\n */\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (props, forwardedRef) => {\n const { alwaysRender, ...etc } = props;\n const ref = React.useRef<HTMLDivElement>(null);\n const render = useCmdk((state) => !state.search);\n\n if (!alwaysRender && !render) return null;\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n cmdk-separator=\"\"\n role=\"separator\"\n />\n );\n }\n);\n\n/**\n * Command menu input.\n * All props are forwarded to the underyling `input` element.\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (props, forwardedRef) => {\n const { onValueChange, ...etc } = props;\n const isControlled = props.value != null;\n const store = useStore();\n const search = useCmdk((state) => state.search);\n const selectedItemId = useCmdk((state) => state.selectedItemId);\n const context = useCommand();\n\n React.useEffect(() => {\n if (props.value != null) {\n store.setState(\"search\", props.value);\n }\n }, [props.value]);\n\n return (\n <WithRenderProp\n as=\"input\"\n ref={forwardedRef}\n {...etc}\n cmdk-input=\"\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n aria-autocomplete=\"list\"\n role=\"combobox\"\n aria-expanded={true}\n aria-controls={context.listId}\n aria-labelledby={context.labelId}\n aria-activedescendant={selectedItemId}\n id={context.inputId}\n type=\"text\"\n value={isControlled ? props.value : search}\n onChange={(e) => {\n if (!isControlled) {\n store.setState(\"search\", e.target.value);\n }\n\n onValueChange?.(e.target.value);\n }}\n />\n );\n }\n);\n\n/**\n * Contains `Item`, `Group`, and `Separator`.\n * Use the `--cmdk-list-height` CSS variable to animate height based on the number of results.\n */\nconst List = React.forwardRef<HTMLDivElement, ListProps>(\n (props, forwardedRef) => {\n const { children, label = \"Suggestions\", ...etc } = props;\n const ref = React.useRef<HTMLDivElement>(null);\n const height = React.useRef<HTMLDivElement>(null);\n const selectedItemId = useCmdk((state) => state.selectedItemId);\n const context = useCommand();\n\n React.useEffect(() => {\n if (height.current && ref.current) {\n const el = height.current;\n const wrapper = ref.current;\n let animationFrame;\n const observer = new ResizeObserver(() => {\n animationFrame = requestAnimationFrame(() => {\n const height = el.offsetHeight;\n wrapper.style.setProperty(\n `--cmdk-list-height`,\n height.toFixed(1) + \"px\"\n );\n });\n });\n observer.observe(el);\n return () => {\n cancelAnimationFrame(animationFrame);\n observer.unobserve(el);\n };\n }\n }, []);\n\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n cmdk-list=\"\"\n role=\"listbox\"\n tabIndex={-1}\n aria-activedescendant={selectedItemId}\n aria-label={label}\n id={context.listId}\n >\n {SlottableWithNestedChildren(props, (child) => (\n <div\n ref={composeRefs(height, context.listInnerRef)}\n cmdk-list-sizer=\"\"\n >\n {child}\n </div>\n ))}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * Renders the command menu in a Radix Dialog.\n */\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>(\n (props, forwardedRef) => {\n const {\n open,\n onOpenChange,\n overlayClassName,\n contentClassName,\n container,\n ...etc\n } = props;\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal container={container}>\n <RadixDialog.Backdrop cmdk-overlay=\"\" className={overlayClassName} />\n <RadixDialog.Popup\n aria-label={props.label}\n cmdk-dialog=\"\"\n className={contentClassName}\n >\n <Command ref={forwardedRef} {...etc} />\n </RadixDialog.Popup>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n }\n);\n\n/**\n * Automatically renders when there are no results for the search query.\n */\nconst Empty = React.forwardRef<HTMLDivElement, EmptyProps>(\n (props, forwardedRef) => {\n const render = useCmdk((state) => state.filtered.count === 0);\n\n if (!render) return null;\n return (\n <WithRenderProp\n ref={forwardedRef}\n {...props}\n cmdk-empty=\"\"\n role=\"presentation\"\n />\n );\n }\n);\n\n/**\n * You should conditionally render this with `progress` while loading asynchronous items.\n */\nconst Loading = React.forwardRef<HTMLDivElement, LoadingProps>(\n (props, forwardedRef) => {\n const { progress, children, label = \"Loading...\", ...etc } = props;\n\n return (\n <WithRenderProp\n ref={forwardedRef}\n {...etc}\n cmdk-loading=\"\"\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n >\n {SlottableWithNestedChildren(props, (child) => (\n <div aria-hidden>{child}</div>\n ))}\n </WithRenderProp>\n );\n }\n);\n\nconst pkg = Object.assign(Command, {\n List,\n Item,\n Input,\n Group,\n Separator,\n Dialog,\n Empty,\n Loading,\n});\n\nexport { useCmdk as useCommandState };\nexport { pkg as Command };\nexport { defaultFilter };\n\nexport { Command as CommandRoot };\nexport { List as CommandList };\nexport { Item as CommandItem };\nexport { Input as CommandInput };\nexport { Group as CommandGroup };\nexport { Separator as CommandSeparator };\nexport { Dialog as CommandDialog };\nexport { Empty as CommandEmpty };\nexport { Loading as CommandLoading };\n\n/**\n *\n *\n * Helpers\n *\n *\n */\n\nfunction findNextSibling(el: Element, selector: string) {\n let sibling = el.nextElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.nextElementSibling;\n }\n}\n\nfunction findPreviousSibling(el: Element, selector: string) {\n let sibling = el.previousElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.previousElementSibling;\n }\n}\n\nfunction useAsRef<T>(data: T) {\n const ref = React.useRef<T>(data);\n\n useLayoutEffect(() => {\n ref.current = data;\n });\n\n return ref;\n}\n\nconst useLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T>(undefined);\n\n if (ref.current === undefined) {\n ref.current = fn();\n }\n\n return ref as React.MutableRefObject<T>;\n}\n\n/** Run a selector against the store state. */\nfunction useCmdk<T = any>(selector: (state: State) => T): T {\n const store = useStore();\n const cb = () => selector(store.snapshot());\n return React.useSyncExternalStore(store.subscribe, cb, cb);\n}\n\nfunction useValue(\n id: string,\n ref: React.RefObject<HTMLElement>,\n deps: (string | React.ReactNode | React.RefObject<HTMLElement>)[],\n aliases: string[] = []\n) {\n const valueRef = React.useRef<string>(undefined);\n const context = useCommand();\n\n useLayoutEffect(() => {\n const value = (() => {\n for (const part of deps) {\n if (typeof part === \"string\") {\n return part.trim();\n }\n\n if (typeof part === \"object\" && \"current\" in part) {\n if (part.current) {\n return part.current.textContent?.trim();\n }\n return valueRef.current;\n }\n }\n })();\n\n const keywords = aliases.map((alias) => alias.trim());\n\n context.value(id, value, keywords);\n ref.current?.setAttribute(VALUE_ATTR, value);\n valueRef.current = value;\n });\n\n return valueRef;\n}\n\n/** Imperatively run a function on the next layout effect cycle. */\nconst useScheduleLayoutEffect = () => {\n const [s, ss] = React.useState<object>();\n const fns = useLazyRef(() => new Map<string | number, () => void>());\n\n useLayoutEffect(() => {\n fns.current.forEach((f) => f());\n fns.current = new Map();\n }, [s]);\n\n return (id: string | number, cb: () => void) => {\n fns.current.set(id, cb);\n ss({});\n };\n};\n\nfunction renderChildren(children: React.ReactElement) {\n const childrenType = children.type as any;\n // The children is a component\n if (typeof childrenType === \"function\") return childrenType(children.props);\n // The children is a component with `forwardRef`\n else if (\"render\" in childrenType) return childrenType.render(children.props);\n // It's a string, boolean, etc.\n else return children;\n}\n\nfunction SlottableWithNestedChildren(\n { asChild, children }: { asChild?: boolean; children?: React.ReactNode },\n render: (child: React.ReactNode) => JSX.Element\n) {\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n renderChildren(children),\n { ref: (children as any).ref },\n // @ts-expect-error expect error here\n render(children.props.children)\n );\n }\n return render(children);\n}\n\nconst srOnlyStyles = {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n borderWidth: \"0\",\n} as const;\n"],"names":["GROUP_SELECTOR","GROUP_ITEMS_SELECTOR","GROUP_HEADING_SELECTOR","ITEM_SELECTOR","VALID_ITEM_SELECTOR","SELECT_EVENT","VALUE_ATTR","defaultFilter","value","search","keywords","commandScore","CommandContext","React","useCommand","StoreContext","useStore","GroupContext","Command","props","forwardedRef","state","useLazyRef","allItems","allGroups","ids","listeners","propsRef","useAsRef","label","children","onValueChange","filter","shouldFilter","loop","disablePointerSelection","vimBindings","etc","listId","useId","labelId","inputId","listInnerRef","schedule","useScheduleLayoutEffect","useLayoutEffect","v","store","scrollSelectedIntoView","cb","key","opts","filterItems","sort","selectFirstItem","input","_a","getSelectedItem","_b","newValue","_d","_c","l","context","id","score","groupId","selectedItem","scores","groups","items","max","item","listInsertionElement","getValidItems","a","b","valueA","valueB","group","element","itemCount","rank","itemId","updateSelectedToIndex","index","updateSelectedByItem","change","selected","newSelected","updateSelectedByGroup","findNextSibling","findPreviousSibling","last","next","prev","jsxs","WithRenderProp","isComposing","event","jsx","srOnlyStyles","SlottableWithNestedChildren","child","Item","ref","groupContext","forceMount","useValue","useCmdk","render","onSelect","select","disabled","_","__","___","____","composeRefs","Group","heading","headingRef","headingId","contextValue","Separator","alwaysRender","Input","isControlled","selectedItemId","e","List","height","el","wrapper","animationFrame","observer","Dialog","open","onOpenChange","overlayClassName","contentClassName","container","RadixDialog","Empty","Loading","progress","pkg","selector","sibling","data","fn","deps","aliases","valueRef","part","alias","s","ss","fns","f","renderChildren","childrenType","asChild"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/cmdk/index.tsx"],"sourcesContent":["// It is used here to avoid dependency on cmdk package and radix-ui-components package.\n\"use client\";\n\nimport React, { useId, JSX } from \"react\";\nimport { Dialog as RadixDialog } from \"@base-ui-components/react\";\nimport { commandScore } from \"./command-score\";\nimport { default as composeRefs } from \"merge-refs\";\nimport { WithRenderProp, type WithRenderPropProps } from \"../utils\";\n\ntype Children = { children?: React.ReactNode };\ntype DivProps = WithRenderPropProps<\"div\">;\n\ntype LoadingProps = Children &\n DivProps & {\n /** Estimated progress of loading asynchronous options. */\n progress?: number;\n /**\n * Accessible label for this loading progressbar. Not shown visibly.\n */\n label?: string;\n };\n\ntype EmptyProps = Children & DivProps & {};\ntype SeparatorProps = DivProps & {\n /** Whether this separator should always be rendered. Useful if you disable automatic filtering. */\n alwaysRender?: boolean;\n};\ntype DialogProps = RadixDialog.Root.Props &\n CommandProps & {\n /** Provide a className to the Dialog overlay. */\n overlayClassName?: string;\n /** Provide a className to the Dialog content. */\n contentClassName?: string;\n /** Provide a custom element the Dialog should portal into. */\n container?: HTMLElement;\n };\ntype ListProps = Children &\n DivProps & {\n /**\n * Accessible label for this List of suggestions. Not shown visibly.\n */\n label?: string;\n };\ntype ItemProps = Children &\n Omit<DivProps, \"disabled\" | \"onSelect\" | \"value\"> & {\n /** Whether this item is currently disabled. */\n disabled?: boolean;\n /** Event handler for when this item is selected, either via click or keyboard selection. */\n onSelect?: (value: string) => void;\n /**\n * A unique value for this item.\n * If no value is provided, it will be inferred from `children` or the rendered `textContent`. If your `textContent` changes between renders, you _must_ provide a stable, unique `value`.\n */\n value?: string;\n /** Optional keywords to match against when filtering. */\n keywords?: string[];\n /** Whether this item is forcibly rendered regardless of filtering. */\n forceMount?: boolean;\n };\ntype GroupProps = Children &\n Omit<DivProps, \"heading\" | \"value\"> & {\n /** Optional heading to render for this group. */\n heading?: React.ReactNode;\n /** If no heading is provided, you must provide a value that is unique for this group. */\n value?: string;\n /** Whether this group is forcibly rendered regardless of filtering. */\n forceMount?: boolean;\n };\ntype InputProps = Omit<\n WithRenderPropProps<\"input\">,\n \"value\" | \"onChange\" | \"type\"\n> & {\n /**\n * Optional controlled state for the value of the search input.\n */\n value?: string;\n /**\n * Event handler called when the search value changes.\n */\n onValueChange?: (search: string) => void;\n};\ntype CommandFilter = (\n value: string,\n search: string,\n keywords?: string[]\n) => number;\nexport type CommandProps = Children &\n DivProps & {\n /**\n * Accessible label for this command menu. Not shown visibly.\n */\n label?: string;\n /**\n * Optionally set to `false` to turn off the automatic filtering and sorting.\n * If `false`, you must conditionally render valid items based on the search query yourself.\n */\n shouldFilter?: boolean;\n /**\n * Custom filter function for whether each command menu item should matches the given search query.\n * It should return a number between 0 and 1, with 1 being the best match and 0 being hidden entirely.\n * By default, uses the `command-score` library.\n */\n filter?: CommandFilter;\n /**\n * Optional default item value when it is initially rendered.\n */\n defaultValue?: string;\n /**\n * Optional controlled state of the selected command menu item.\n */\n value?: string;\n /**\n * Event handler called when the selected item of the menu changes.\n */\n onValueChange?: (value: string) => void;\n /**\n * Optionally set to `true` to turn on looping around when using the arrow keys.\n */\n loop?: boolean;\n /**\n * Optionally set to `true` to disable selection via pointer events.\n */\n disablePointerSelection?: boolean;\n /**\n * Set to `false` to disable ctrl+n/j/p/k shortcuts. Defaults to `true`.\n */\n vimBindings?: boolean;\n };\n\ntype Context = {\n value: (id: string, value: string, keywords?: string[]) => void;\n item: (id: string, groupId: string) => () => void;\n group: (id: string) => () => void;\n filter: () => boolean;\n label: string;\n getDisablePointerSelection: () => boolean;\n // Ids\n listId: string;\n labelId: string;\n inputId: string;\n // Refs\n listInnerRef: React.RefObject<HTMLDivElement | null>;\n};\ntype State = {\n search: string;\n value: string;\n selectedItemId?: string;\n filtered: { count: number; items: Map<string, number>; groups: Set<string> };\n};\ntype Store = {\n subscribe: (callback: () => void) => () => void;\n snapshot: () => State;\n setState: <K extends keyof State>(\n key: K,\n value: State[K],\n opts?: any\n ) => void;\n emit: () => void;\n};\ntype Group = {\n id: string;\n forceMount?: boolean;\n};\n\nconst GROUP_SELECTOR = `[cmdk-group=\"\"]`;\nconst GROUP_ITEMS_SELECTOR = `[cmdk-group-items=\"\"]`;\nconst GROUP_HEADING_SELECTOR = `[cmdk-group-heading=\"\"]`;\nconst ITEM_SELECTOR = `[cmdk-item=\"\"]`;\nconst VALID_ITEM_SELECTOR = `${ITEM_SELECTOR}:not([aria-disabled=\"true\"])`;\nconst SELECT_EVENT = `cmdk-item-select`;\nconst VALUE_ATTR = `data-value`;\nconst defaultFilter: CommandFilter = (value, search, keywords) =>\n commandScore(value, search, keywords);\n\nconst CommandContext = React.createContext<Context>(undefined);\nconst useCommand = () => React.useContext(CommandContext);\nconst StoreContext = React.createContext<Store>(undefined);\nconst useStore = () => React.useContext(StoreContext);\nconst GroupContext = React.createContext<Group>(undefined);\n\nconst Command = React.forwardRef<HTMLDivElement, CommandProps>(\n (props, forwardedRef) => {\n const state = useLazyRef<State>(() => ({\n /** Value of the search query. */\n search: \"\",\n /** Currently selected item value. */\n value: props.value ?? props.defaultValue ?? \"\",\n /** Currently selected item id. */\n selectedItemId: undefined,\n filtered: {\n /** The count of all visible items. */\n count: 0,\n /** Map from visible item id to its search score. */\n items: new Map(),\n /** Set of groups with at least one visible item. */\n groups: new Set(),\n },\n }));\n const allItems = useLazyRef<Set<string>>(() => new Set()); // [...itemIds]\n const allGroups = useLazyRef<Map<string, Set<string>>>(() => new Map()); // groupId → [...itemIds]\n const ids = useLazyRef<Map<string, { value: string; keywords?: string[] }>>(\n () => new Map()\n ); // id → { value, keywords }\n const listeners = useLazyRef<Set<() => void>>(() => new Set()); // [...rerenders]\n const propsRef = useAsRef(props);\n const {\n label,\n children,\n value,\n onValueChange,\n filter,\n shouldFilter,\n loop,\n disablePointerSelection = false,\n vimBindings = true,\n ...etc\n } = props;\n\n const listId = useId();\n const labelId = useId();\n const inputId = useId();\n\n const listInnerRef = React.useRef<HTMLDivElement>(null);\n\n const schedule = useScheduleLayoutEffect();\n\n /** Controlled mode `value` handling. */\n useLayoutEffect(() => {\n if (value !== undefined) {\n const v = value.trim();\n state.current.value = v;\n store.emit();\n }\n }, [value]);\n\n useLayoutEffect(() => {\n schedule(6, scrollSelectedIntoView);\n }, []);\n\n const store: Store = React.useMemo(() => {\n return {\n subscribe: (cb) => {\n listeners.current.add(cb);\n return () => listeners.current.delete(cb);\n },\n snapshot: () => {\n return state.current;\n },\n setState: (key, value, opts) => {\n if (Object.is(state.current[key], value)) return;\n state.current[key] = value;\n\n if (key === \"search\") {\n // Filter synchronously before emitting back to children\n filterItems();\n sort();\n schedule(1, selectFirstItem);\n } else if (key === \"value\") {\n // Force focus input or root so accessibility works\n if (\n document.activeElement.hasAttribute(\"cmdk-input\") ||\n document.activeElement.hasAttribute(\"cmdk-root\")\n ) {\n const input = document.getElementById(inputId);\n if (input) input.focus();\n else document.getElementById(listId)?.focus();\n }\n\n schedule(7, () => {\n state.current.selectedItemId = getSelectedItem()?.id;\n store.emit();\n });\n\n // opts is a boolean referring to whether it should NOT be scrolled into view\n if (!opts) {\n // Scroll the selected item into view\n schedule(5, scrollSelectedIntoView);\n }\n if (propsRef.current?.value !== undefined) {\n // If controlled, just call the callback instead of updating state internally\n const newValue = (value ?? \"\") as string;\n propsRef.current.onValueChange?.(newValue);\n return;\n }\n }\n\n // Notify subscribers that state has changed\n store.emit();\n },\n emit: () => {\n listeners.current.forEach((l) => l());\n },\n };\n }, []);\n\n const context: Context = React.useMemo(\n () => ({\n // Keep id → {value, keywords} mapping up-to-date\n value: (id, value, keywords) => {\n if (value !== ids.current.get(id)?.value) {\n ids.current.set(id, { value, keywords });\n state.current.filtered.items.set(id, score(value, keywords));\n schedule(2, () => {\n sort();\n store.emit();\n });\n }\n },\n // Track item lifecycle (mount, unmount)\n item: (id, groupId) => {\n allItems.current.add(id);\n\n // Track this item within the group\n if (groupId) {\n if (!allGroups.current.has(groupId)) {\n allGroups.current.set(groupId, new Set([id]));\n } else {\n allGroups.current.get(groupId).add(id);\n }\n }\n\n // Batch this, multiple items can mount in one pass\n // and we should not be filtering/sorting/emitting each time\n schedule(3, () => {\n filterItems();\n sort();\n\n // Could be initial mount, select the first item if none already selected\n if (!state.current.value) {\n selectFirstItem();\n }\n\n store.emit();\n });\n\n return () => {\n ids.current.delete(id);\n allItems.current.delete(id);\n state.current.filtered.items.delete(id);\n const selectedItem = getSelectedItem();\n\n // Batch this, multiple items could be removed in one pass\n schedule(4, () => {\n filterItems();\n\n // The item removed have been the selected one,\n // so selection should be moved to the first\n if (selectedItem?.getAttribute(\"id\") === id) selectFirstItem();\n\n store.emit();\n });\n };\n },\n // Track group lifecycle (mount, unmount)\n group: (id) => {\n if (!allGroups.current.has(id)) {\n allGroups.current.set(id, new Set());\n }\n\n return () => {\n ids.current.delete(id);\n allGroups.current.delete(id);\n };\n },\n filter: () => {\n return propsRef.current.shouldFilter;\n },\n label: label || props[\"aria-label\"],\n getDisablePointerSelection: () => {\n return propsRef.current.disablePointerSelection;\n },\n listId,\n inputId,\n labelId,\n listInnerRef,\n }),\n []\n );\n\n function score(value: string, keywords?: string[]) {\n const filter = propsRef.current?.filter ?? defaultFilter;\n return value ? filter(value, state.current.search, keywords) : 0;\n }\n\n /** Sorts items by score, and groups by highest item score. */\n function sort() {\n if (\n !state.current.search ||\n // Explicitly false, because true | undefined is the default\n propsRef.current.shouldFilter === false\n ) {\n return;\n }\n\n const scores = state.current.filtered.items;\n\n // Sort the groups\n const groups: [string, number][] = [];\n state.current.filtered.groups.forEach((value) => {\n const items = allGroups.current.get(value);\n\n // Get the maximum score of the group's items\n let max = 0;\n items.forEach((item) => {\n const score = scores.get(item);\n max = Math.max(score, max);\n });\n\n groups.push([value, max]);\n });\n\n // Sort items within groups to bottom\n // Sort items outside of groups\n // Sort groups to bottom (pushes all non-grouped items to the top)\n const listInsertionElement = listInnerRef.current;\n\n // Sort the items\n getValidItems()\n .sort((a, b) => {\n const valueA = a.getAttribute(\"id\");\n const valueB = b.getAttribute(\"id\");\n return (scores.get(valueB) ?? 0) - (scores.get(valueA) ?? 0);\n })\n .forEach((item) => {\n const group = item.closest(GROUP_ITEMS_SELECTOR);\n\n if (group) {\n group.appendChild(\n item.parentElement === group\n ? item\n : item.closest(`${GROUP_ITEMS_SELECTOR} > *`)\n );\n } else {\n listInsertionElement.appendChild(\n item.parentElement === listInsertionElement\n ? item\n : item.closest(`${GROUP_ITEMS_SELECTOR} > *`)\n );\n }\n });\n\n groups\n .sort((a, b) => b[1] - a[1])\n .forEach((group) => {\n const element = listInnerRef.current?.querySelector(\n `${GROUP_SELECTOR}[${VALUE_ATTR}=\"${encodeURIComponent(group[0])}\"]`\n );\n element?.parentElement.appendChild(element);\n });\n }\n\n function selectFirstItem() {\n const item = getValidItems().find(\n (item) => item.getAttribute(\"aria-disabled\") !== \"true\"\n );\n const value = item?.getAttribute(VALUE_ATTR);\n store.setState(\"value\", value || undefined);\n }\n\n /** Filters the current items. */\n function filterItems() {\n if (\n !state.current.search ||\n // Explicitly false, because true | undefined is the default\n propsRef.current.shouldFilter === false\n ) {\n state.current.filtered.count = allItems.current.size;\n // Do nothing, each item will know to show itself because search is empty\n return;\n }\n\n // Reset the groups\n state.current.filtered.groups = new Set();\n let itemCount = 0;\n\n // Check which items should be included\n for (const id of allItems.current) {\n const value = ids.current.get(id)?.value ?? \"\";\n const keywords = ids.current.get(id)?.keywords ?? [];\n const rank = score(value, keywords);\n state.current.filtered.items.set(id, rank);\n if (rank > 0) itemCount++;\n }\n\n // Check which groups have at least 1 item shown\n for (const [groupId, group] of allGroups.current) {\n for (const itemId of group) {\n if (state.current.filtered.items.get(itemId) > 0) {\n state.current.filtered.groups.add(groupId);\n break;\n }\n }\n }\n\n state.current.filtered.count = itemCount;\n }\n\n function scrollSelectedIntoView() {\n const item = getSelectedItem();\n\n if (item) {\n if (item.parentElement?.firstChild === item) {\n // First item in Group, ensure heading is in view\n item\n .closest(GROUP_SELECTOR)\n ?.querySelector(GROUP_HEADING_SELECTOR)\n ?.scrollIntoView({ block: \"nearest\" });\n }\n\n // Ensure the item is always in view\n item.scrollIntoView({ block: \"nearest\" });\n }\n }\n\n /** Getters */\n\n function getSelectedItem() {\n return listInnerRef.current?.querySelector(\n `${ITEM_SELECTOR}[aria-selected=\"true\"]`\n );\n }\n\n function getValidItems() {\n return Array.from(\n listInnerRef.current?.querySelectorAll(VALID_ITEM_SELECTOR) || []\n );\n }\n\n /** Setters */\n\n function updateSelectedToIndex(index: number) {\n const items = getValidItems();\n const item = items[index];\n if (item) store.setState(\"value\", item.getAttribute(VALUE_ATTR));\n }\n\n function updateSelectedByItem(change: 1 | -1) {\n const selected = getSelectedItem();\n const items = getValidItems();\n const index = items.findIndex((item) => item === selected);\n\n // Get item at this index\n let newSelected = items[index + change];\n\n if (propsRef.current?.loop) {\n newSelected =\n index + change < 0\n ? items[items.length - 1]\n : index + change === items.length\n ? items[0]\n : items[index + change];\n }\n\n if (newSelected)\n store.setState(\"value\", newSelected.getAttribute(VALUE_ATTR));\n }\n\n function updateSelectedByGroup(change: 1 | -1) {\n const selected = getSelectedItem();\n let group = selected?.closest(GROUP_SELECTOR);\n let item: HTMLElement;\n\n while (group && !item) {\n group =\n change > 0\n ? findNextSibling(group, GROUP_SELECTOR)\n : findPreviousSibling(group, GROUP_SELECTOR);\n item = group?.querySelector(VALID_ITEM_SELECTOR);\n }\n\n if (item) {\n store.setState(\"value\", item.getAttribute(VALUE_ATTR));\n } else {\n updateSelectedByItem(change);\n }\n }\n\n const last = () => updateSelectedToIndex(getValidItems().length - 1);\n\n const next = (e: React.KeyboardEvent) => {\n e.preventDefault();\n\n if (e.metaKey) {\n // Last item\n last();\n } else if (e.altKey) {\n // Next group\n updateSelectedByGroup(1);\n } else {\n // Next item\n updateSelectedByItem(1);\n }\n };\n\n const prev = (e: React.KeyboardEvent) => {\n e.preventDefault();\n\n if (e.metaKey) {\n // First item\n updateSelectedToIndex(0);\n } else if (e.altKey) {\n // Previous group\n updateSelectedByGroup(-1);\n } else {\n // Previous item\n updateSelectedByItem(-1);\n }\n };\n\n return (\n <WithRenderProp\n ref={forwardedRef}\n tabIndex={-1}\n {...etc}\n cmdk-root=\"\"\n onKeyDown={(e) => {\n etc.onKeyDown?.(e);\n\n // Check if IME composition is finished before triggering key binds\n // This prevents unwanted triggering while user is still inputting text with IME\n // e.keyCode === 229 is for the CJK IME with Legacy Browser [https://w3c.github.io/uievents/#determine-keydown-keyup-keyCode]\n // isComposing is for the CJK IME with Modern Browser [https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent/isComposing]\n const isComposing = e.nativeEvent.isComposing || e.keyCode === 229;\n\n if (e.defaultPrevented || isComposing) {\n return;\n }\n\n switch (e.key) {\n case \"n\":\n case \"j\": {\n // vim keybind down\n if (vimBindings && e.ctrlKey) {\n next(e);\n }\n break;\n }\n case \"ArrowDown\": {\n next(e);\n break;\n }\n case \"p\":\n case \"k\": {\n // vim keybind up\n if (vimBindings && e.ctrlKey) {\n prev(e);\n }\n break;\n }\n case \"ArrowUp\": {\n prev(e);\n break;\n }\n case \"Home\": {\n // First item\n e.preventDefault();\n updateSelectedToIndex(0);\n break;\n }\n case \"End\": {\n // Last item\n e.preventDefault();\n last();\n break;\n }\n case \"Enter\": {\n // Trigger item onSelect\n e.preventDefault();\n const item = getSelectedItem();\n if (item) {\n const event = new Event(SELECT_EVENT);\n item.dispatchEvent(event);\n }\n }\n }\n }}\n >\n <label\n cmdk-label=\"\"\n htmlFor={context.inputId}\n id={context.labelId}\n // Screen reader only\n style={srOnlyStyles}\n >\n {label}\n </label>\n {SlottableWithNestedChildren(props, (child) => (\n <StoreContext.Provider value={store}>\n <CommandContext.Provider value={context}>\n {child}\n </CommandContext.Provider>\n </StoreContext.Provider>\n ))}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * Command menu item. Becomes active on pointer enter or through keyboard navigation.\n * Preferably pass a `value`, otherwise the value will be inferred from `children` or\n * the rendered item's `textContent`.\n */\nconst Item = React.forwardRef<HTMLDivElement, ItemProps>(\n (props, forwardedRef) => {\n const id = useId();\n const ref = React.useRef<HTMLDivElement>(null);\n const groupContext = React.useContext(GroupContext);\n const context = useCommand();\n const propsRef = useAsRef(props);\n const forceMount = propsRef.current?.forceMount ?? groupContext?.forceMount;\n\n useLayoutEffect(() => {\n if (!forceMount) {\n return context.item(id, groupContext?.id);\n }\n }, [forceMount]);\n\n const value = useValue(\n id,\n ref,\n [props.value, props.children, ref],\n props.keywords\n );\n\n const store = useStore();\n const selected = useCmdk(\n (state) => state.value && state.value === value.current\n );\n const render = useCmdk((state) =>\n forceMount\n ? true\n : context.filter() === false\n ? true\n : !state.search\n ? true\n : state.filtered.items.get(id) > 0\n );\n\n React.useEffect(() => {\n const element = ref.current;\n if (!element || props.disabled) return;\n element.addEventListener(SELECT_EVENT, onSelect);\n return () => element.removeEventListener(SELECT_EVENT, onSelect);\n }, [render, props.onSelect, props.disabled]);\n\n function onSelect() {\n select();\n propsRef.current.onSelect?.(value.current);\n }\n\n function select() {\n store.setState(\"value\", value.current, true);\n }\n\n if (!render) return null;\n\n const {\n disabled,\n value: _,\n onSelect: __,\n forceMount: ___,\n keywords: ____,\n ...etc\n } = props;\n\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n id={id}\n cmdk-item=\"\"\n role=\"option\"\n aria-disabled={Boolean(disabled)}\n aria-selected={Boolean(selected)}\n data-disabled={Boolean(disabled)}\n data-selected={Boolean(selected)}\n onPointerMove={\n disabled || context.getDisablePointerSelection() ? undefined : select\n }\n onClick={disabled ? undefined : onSelect}\n >\n {props.children}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * Group command menu items together with a heading.\n * Grouped items are always shown together.\n */\nconst Group = React.forwardRef<HTMLDivElement, GroupProps>(\n (props, forwardedRef) => {\n const { heading, children, forceMount, ...etc } = props;\n const id = useId();\n const ref = React.useRef<HTMLDivElement>(null);\n const headingRef = React.useRef<HTMLDivElement>(null);\n const headingId = useId();\n const context = useCommand();\n const render = useCmdk((state) =>\n forceMount\n ? true\n : context.filter() === false\n ? true\n : !state.search\n ? true\n : state.filtered.groups.has(id)\n );\n\n useLayoutEffect(() => {\n return context.group(id);\n }, []);\n\n useValue(id, ref, [props.value, props.heading, headingRef]);\n\n const contextValue = React.useMemo(\n () => ({ id, forceMount }),\n [forceMount]\n );\n\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n cmdk-group=\"\"\n role=\"presentation\"\n hidden={render ? undefined : true}\n >\n {heading && (\n <div\n ref={headingRef}\n cmdk-group-heading=\"\"\n aria-hidden\n id={headingId}\n >\n {heading}\n </div>\n )}\n {SlottableWithNestedChildren(props, (child) => (\n <div\n cmdk-group-items=\"\"\n role=\"group\"\n aria-labelledby={heading ? headingId : undefined}\n >\n <GroupContext.Provider value={contextValue}>\n {child}\n </GroupContext.Provider>\n </div>\n ))}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * A visual and semantic separator between items or groups.\n * Visible when the search query is empty or `alwaysRender` is true, hidden otherwise.\n */\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (props, forwardedRef) => {\n const { alwaysRender, ...etc } = props;\n const ref = React.useRef<HTMLDivElement>(null);\n const render = useCmdk((state) => !state.search);\n\n if (!alwaysRender && !render) return null;\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n cmdk-separator=\"\"\n role=\"separator\"\n />\n );\n }\n);\n\n/**\n * Command menu input.\n * All props are forwarded to the underyling `input` element.\n */\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n (props, forwardedRef) => {\n const { onValueChange, ...etc } = props;\n const isControlled = props.value != null;\n const store = useStore();\n const search = useCmdk((state) => state.search);\n const selectedItemId = useCmdk((state) => state.selectedItemId);\n const context = useCommand();\n\n React.useEffect(() => {\n if (props.value != null) {\n store.setState(\"search\", props.value);\n }\n }, [props.value]);\n\n return (\n <WithRenderProp\n as=\"input\"\n ref={forwardedRef}\n {...etc}\n cmdk-input=\"\"\n autoComplete=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n aria-autocomplete=\"list\"\n role=\"combobox\"\n aria-expanded={true}\n aria-controls={context.listId}\n aria-labelledby={context.labelId}\n aria-activedescendant={selectedItemId}\n id={context.inputId}\n type=\"text\"\n value={isControlled ? props.value : search}\n onChange={(e) => {\n if (!isControlled) {\n store.setState(\"search\", e.target.value);\n }\n\n onValueChange?.(e.target.value);\n }}\n />\n );\n }\n);\n\n/**\n * Contains `Item`, `Group`, and `Separator`.\n * Use the `--cmdk-list-height` CSS variable to animate height based on the number of results.\n */\nconst List = React.forwardRef<HTMLDivElement, ListProps>(\n (props, forwardedRef) => {\n const { children, label = \"Suggestions\", ...etc } = props;\n const ref = React.useRef<HTMLDivElement>(null);\n const height = React.useRef<HTMLDivElement>(null);\n const selectedItemId = useCmdk((state) => state.selectedItemId);\n const context = useCommand();\n\n React.useEffect(() => {\n if (height.current && ref.current) {\n const el = height.current;\n const wrapper = ref.current;\n let animationFrame;\n const observer = new ResizeObserver(() => {\n animationFrame = requestAnimationFrame(() => {\n const height = el.offsetHeight;\n wrapper.style.setProperty(\n `--cmdk-list-height`,\n height.toFixed(1) + \"px\"\n );\n });\n });\n observer.observe(el);\n return () => {\n cancelAnimationFrame(animationFrame);\n observer.unobserve(el);\n };\n }\n }, []);\n\n return (\n <WithRenderProp\n ref={composeRefs(ref, forwardedRef)}\n {...etc}\n cmdk-list=\"\"\n role=\"listbox\"\n tabIndex={-1}\n aria-activedescendant={selectedItemId}\n aria-label={label}\n id={context.listId}\n >\n {SlottableWithNestedChildren(props, (child) => (\n <div\n ref={composeRefs(height, context.listInnerRef)}\n cmdk-list-sizer=\"\"\n >\n {child}\n </div>\n ))}\n </WithRenderProp>\n );\n }\n);\n\n/**\n * Renders the command menu in a Radix Dialog.\n */\nconst Dialog = React.forwardRef<HTMLDivElement, DialogProps>(\n (props, forwardedRef) => {\n const {\n open,\n onOpenChange,\n overlayClassName,\n contentClassName,\n container,\n ...etc\n } = props;\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal container={container}>\n <RadixDialog.Backdrop cmdk-overlay=\"\" className={overlayClassName} />\n <RadixDialog.Popup\n aria-label={props.label}\n cmdk-dialog=\"\"\n className={contentClassName}\n >\n <Command ref={forwardedRef} {...etc} />\n </RadixDialog.Popup>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n }\n);\n\n/**\n * Automatically renders when there are no results for the search query.\n */\nconst Empty = React.forwardRef<HTMLDivElement, EmptyProps>(\n (props, forwardedRef) => {\n const render = useCmdk((state) => state.filtered.count === 0);\n\n if (!render) return null;\n return (\n <WithRenderProp\n ref={forwardedRef}\n {...props}\n cmdk-empty=\"\"\n role=\"presentation\"\n />\n );\n }\n);\n\n/**\n * You should conditionally render this with `progress` while loading asynchronous items.\n */\nconst Loading = React.forwardRef<HTMLDivElement, LoadingProps>(\n (props, forwardedRef) => {\n const { progress, children, label = \"Loading...\", ...etc } = props;\n\n return (\n <WithRenderProp\n ref={forwardedRef}\n {...etc}\n cmdk-loading=\"\"\n role=\"progressbar\"\n aria-valuenow={progress}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-label={label}\n >\n {SlottableWithNestedChildren(props, (child) => (\n <div aria-hidden>{child}</div>\n ))}\n </WithRenderProp>\n );\n }\n);\n\nconst pkg = Object.assign(Command, {\n List,\n Item,\n Input,\n Group,\n Separator,\n Dialog,\n Empty,\n Loading,\n});\n\nexport { useCmdk as useCommandState };\nexport { pkg as Command };\nexport { defaultFilter };\n\nexport { Command as CommandRoot };\nexport { List as CommandList };\nexport { Item as CommandItem };\nexport { Input as CommandInput };\nexport { Group as CommandGroup };\nexport { Separator as CommandSeparator };\nexport { Dialog as CommandDialog };\nexport { Empty as CommandEmpty };\nexport { Loading as CommandLoading };\n\n/**\n *\n *\n * Helpers\n *\n *\n */\n\nfunction findNextSibling(el: Element, selector: string) {\n let sibling = el.nextElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.nextElementSibling;\n }\n}\n\nfunction findPreviousSibling(el: Element, selector: string) {\n let sibling = el.previousElementSibling;\n\n while (sibling) {\n if (sibling.matches(selector)) return sibling;\n sibling = sibling.previousElementSibling;\n }\n}\n\nfunction useAsRef<T>(data: T) {\n const ref = React.useRef<T>(data);\n\n useLayoutEffect(() => {\n ref.current = data;\n });\n\n return ref;\n}\n\nconst useLayoutEffect =\n typeof window === \"undefined\" ? React.useEffect : React.useLayoutEffect;\n\nfunction useLazyRef<T>(fn: () => T) {\n const ref = React.useRef<T>(undefined);\n\n if (ref.current === undefined) {\n ref.current = fn();\n }\n\n return ref as React.MutableRefObject<T>;\n}\n\n/** Run a selector against the store state. */\nfunction useCmdk<T = any>(selector: (state: State) => T): T {\n const store = useStore();\n const cb = () => selector(store.snapshot());\n return React.useSyncExternalStore(store.subscribe, cb, cb);\n}\n\nfunction useValue(\n id: string,\n ref: React.RefObject<HTMLElement>,\n deps: (string | React.ReactNode | React.RefObject<HTMLElement>)[],\n aliases: string[] = []\n) {\n const valueRef = React.useRef<string>(undefined);\n const context = useCommand();\n\n useLayoutEffect(() => {\n const value = (() => {\n for (const part of deps) {\n if (typeof part === \"string\") {\n return part.trim();\n }\n\n if (typeof part === \"object\" && \"current\" in part) {\n if (part.current) {\n return part.current.textContent?.trim();\n }\n return valueRef.current;\n }\n }\n })();\n\n const keywords = aliases.map((alias) => alias.trim());\n\n context.value(id, value, keywords);\n ref.current?.setAttribute(VALUE_ATTR, value);\n valueRef.current = value;\n });\n\n return valueRef;\n}\n\n/** Imperatively run a function on the next layout effect cycle. */\nconst useScheduleLayoutEffect = () => {\n const [s, ss] = React.useState<object>();\n const fns = useLazyRef(() => new Map<string | number, () => void>());\n\n useLayoutEffect(() => {\n fns.current.forEach((f) => f());\n fns.current = new Map();\n }, [s]);\n\n return (id: string | number, cb: () => void) => {\n fns.current.set(id, cb);\n ss({});\n };\n};\n\nfunction renderChildren(children: React.ReactElement) {\n const childrenType = children.type as any;\n // The children is a component\n if (typeof childrenType === \"function\") return childrenType(children.props);\n // The children is a component with `forwardRef`\n else if (\"render\" in childrenType) return childrenType.render(children.props);\n // It's a string, boolean, etc.\n else return children;\n}\n\nfunction SlottableWithNestedChildren(\n { asChild, children }: { asChild?: boolean; children?: React.ReactNode },\n render: (child: React.ReactNode) => JSX.Element\n) {\n if (asChild && React.isValidElement(children)) {\n return React.cloneElement(\n renderChildren(children),\n { ref: (children as any).ref },\n // @ts-expect-error expect error here\n render(children.props.children)\n );\n }\n return render(children);\n}\n\nconst srOnlyStyles = {\n position: \"absolute\",\n width: \"1px\",\n height: \"1px\",\n padding: \"0\",\n margin: \"-1px\",\n overflow: \"hidden\",\n clip: \"rect(0, 0, 0, 0)\",\n whiteSpace: \"nowrap\",\n borderWidth: \"0\",\n} as const;\n"],"names":["GROUP_SELECTOR","GROUP_ITEMS_SELECTOR","GROUP_HEADING_SELECTOR","ITEM_SELECTOR","VALID_ITEM_SELECTOR","SELECT_EVENT","VALUE_ATTR","defaultFilter","value","search","keywords","commandScore","CommandContext","React","useCommand","StoreContext","useStore","GroupContext","Command","props","forwardedRef","state","useLazyRef","allItems","allGroups","ids","listeners","propsRef","useAsRef","label","children","onValueChange","filter","shouldFilter","loop","disablePointerSelection","vimBindings","etc","listId","useId","labelId","inputId","listInnerRef","schedule","useScheduleLayoutEffect","useLayoutEffect","v","store","scrollSelectedIntoView","cb","key","opts","filterItems","sort","selectFirstItem","input","getSelectedItem","newValue","l","context","id","score","groupId","selectedItem","scores","groups","items","max","item","listInsertionElement","getValidItems","a","b","valueA","valueB","group","element","itemCount","rank","itemId","updateSelectedToIndex","index","updateSelectedByItem","change","selected","newSelected","updateSelectedByGroup","findNextSibling","findPreviousSibling","last","next","prev","jsxs","WithRenderProp","isComposing","event","jsx","srOnlyStyles","SlottableWithNestedChildren","child","Item","ref","groupContext","forceMount","useValue","useCmdk","render","onSelect","select","disabled","_","__","___","____","composeRefs","Group","heading","headingRef","headingId","contextValue","Separator","alwaysRender","Input","isControlled","selectedItemId","e","List","height","el","wrapper","animationFrame","observer","Dialog","open","onOpenChange","overlayClassName","contentClassName","container","RadixDialog","Empty","Loading","progress","pkg","selector","sibling","data","fn","deps","aliases","valueRef","part","alias","s","ss","fns","f","renderChildren","childrenType","asChild"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CodeBlockProps } from './types';
2
+ export declare const CodeBlock: ({ code, children, lang: defaultLang, className, options, activeOption: controlledActiveOption, defaultActiveOption, onActiveOptionChange, copyText, copySuccessText, classNames, maxHeight, onCopy, ...rest }: CodeBlockProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/component.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,aAAa,CAAC;AAErB,eAAO,MAAM,SAAS,GAAI,+MAgBvB,cAAc,4CA4HhB,CAAC"}
@@ -1,122 +1,121 @@
1
1
  "use client";
2
- import { jsx as o, jsxs as q } from "react/jsx-runtime";
3
- import { CheckIcon as z, CopyIcon as G } from "@bioturing/assets";
4
- import { Highlight as J, themes as K } from "prism-react-renderer";
5
- import { useState as p, useEffect as Q, useCallback as I } from "react";
6
- import { ThemeProvider as R } from "../theme-provider/component.js";
2
+ import { jsx as e, jsxs as $ } from "react/jsx-runtime";
3
+ import { CheckIcon as q, CopyIcon as z } from "@bioturing/assets";
4
+ import { Highlight as G, themes as J } from "prism-react-renderer";
5
+ import { useState as a, useEffect as K, useCallback as S } from "react";
6
+ import { ThemeProvider as Q } from "../theme-provider/component.js";
7
7
  import './style.css';/* empty css */
8
- import { Segmented as U } from "../segmented/component.js";
9
- import { useControlledState as V } from "../hooks/useControlledState.js";
10
- import { reactNodeToString as X } from "../utils/reactToString.js";
11
- import { useCls as Y } from "../utils/antdUtils.js";
12
- import { WithAntdTokens as Z } from "../utils/WithAntdTokens.js";
13
- import { clsx as H } from "../utils/cn.js";
14
- import { IconButton as N } from "../icon-button/component.js";
15
- import { ScrollArea as oo } from "../scroll-area/component.js";
16
- const vo = ({
17
- code: s,
18
- children: m,
8
+ import { Segmented as R } from "../segmented/component.js";
9
+ import { useControlledState as U } from "../hooks/useControlledState.js";
10
+ import { reactNodeToString as V } from "../utils/reactToString.js";
11
+ import { useCls as X } from "../utils/antdUtils.js";
12
+ import { WithAntdTokens as Y } from "../utils/WithAntdTokens.js";
13
+ import { clsx as Z } from "../utils/cn.js";
14
+ import { IconButton as H } from "../icon-button/component.js";
15
+ import { ScrollArea as ee } from "../scroll-area/component.js";
16
+ const fe = ({
17
+ code: u,
18
+ children: i,
19
19
  // initial,
20
- lang: h = "tsx",
21
- className: O,
22
- options: n,
23
- activeOption: j,
24
- defaultActiveOption: b = 0,
25
- onActiveOptionChange: x,
26
- copyText: a = "Copy",
27
- copySuccessText: g = "Copied",
28
- classNames: e,
29
- maxHeight: i,
30
- onCopy: C,
31
- ...A
20
+ lang: m = "tsx",
21
+ className: N,
22
+ options: t,
23
+ activeOption: w,
24
+ defaultActiveOption: v = 0,
25
+ onActiveOptionChange: I,
26
+ copyText: d = "Copy",
27
+ copySuccessText: k = "Copied",
28
+ classNames: p,
29
+ maxHeight: c,
30
+ onCopy: h,
31
+ ...O
32
32
  }) => {
33
- const [l, y] = V(
34
- j,
35
- x,
36
- b
37
- ), [c, B] = p(s || ""), [L, M] = p(h), f = n && n.length > 0;
38
- Q(() => {
39
- var t, r;
40
- if (f) {
41
- const v = ((t = n[l]) == null ? void 0 : t.code) || "", k = ((r = n[l]) == null ? void 0 : r.lang) || h;
42
- B(v), M(k);
33
+ const [l, b] = U(
34
+ w,
35
+ I,
36
+ v
37
+ ), [n, j] = a(u || ""), [x, A] = a(m), C = t && t.length > 0;
38
+ K(() => {
39
+ if (C) {
40
+ const o = t[l]?.code || "", r = t[l]?.lang || m;
41
+ j(o), A(r);
43
42
  }
44
43
  }, [
45
- s,
44
+ u,
46
45
  l,
47
- b,
48
- n,
49
- h,
50
- f,
51
- y
46
+ v,
47
+ t,
48
+ m,
49
+ C,
50
+ b
52
51
  ]);
53
- const [T, u] = p(a), [D, S] = p(!1), E = I(() => {
54
- const t = c || X(m);
52
+ const [B, f] = a(d), [L, g] = a(!1), M = S(() => {
53
+ const o = n || V(i);
55
54
  try {
56
- navigator.clipboard.writeText(t).then(() => {
57
- u(g), S(!0), C && C(t);
55
+ navigator.clipboard.writeText(o).then(() => {
56
+ f(k), g(!0), h && h(o);
58
57
  });
59
58
  } catch {
60
- u("Failed to copy");
59
+ f("Failed to copy");
61
60
  }
62
- }, [c, m, g, C]), F = I(() => {
63
- u(a), S(!1);
64
- }, [a]), d = Y();
65
- return /* @__PURE__ */ o(R, { theme: "dark", children: /* @__PURE__ */ q(
66
- Z,
61
+ }, [n, i, k, h]), T = S(() => {
62
+ f(d), g(!1);
63
+ }, [d]), s = X();
64
+ return /* @__PURE__ */ e(Q, { theme: "dark", children: /* @__PURE__ */ $(
65
+ Y,
67
66
  {
68
- className: H(d("code-block"), O, e == null ? void 0 : e.root),
69
- ...A,
67
+ className: Z(s("code-block"), N, p?.root),
68
+ ...O,
70
69
  children: [
71
- f && /* @__PURE__ */ o("div", { className: d("code-block-header", e == null ? void 0 : e.header), children: /* @__PURE__ */ o(
72
- U,
70
+ C && /* @__PURE__ */ e("div", { className: s("code-block-header", p?.header), children: /* @__PURE__ */ e(
71
+ R,
73
72
  {
74
73
  value: l,
75
- onChange: y,
76
- options: n.map((t, r) => ({
77
- label: t.label,
74
+ onChange: b,
75
+ options: t.map((o, r) => ({
76
+ label: o.label,
78
77
  value: r
79
78
  }))
80
79
  }
81
80
  ) }),
82
- /* @__PURE__ */ o("div", { className: d("code-block-copy"), children: /* @__PURE__ */ o(
83
- N,
81
+ /* @__PURE__ */ e("div", { className: s("code-block-copy"), children: /* @__PURE__ */ e(
82
+ H,
84
83
  {
85
- onClick: E,
86
- label: T,
87
- onMouseLeave: F,
88
- children: D ? /* @__PURE__ */ o(z, {}) : /* @__PURE__ */ o(G, {})
84
+ onClick: M,
85
+ label: B,
86
+ onMouseLeave: T,
87
+ children: L ? /* @__PURE__ */ e(q, {}) : /* @__PURE__ */ e(z, {})
89
88
  }
90
89
  ) }),
91
- /* @__PURE__ */ o(
90
+ /* @__PURE__ */ e(
92
91
  "div",
93
92
  {
94
- className: d("code-block-content", e == null ? void 0 : e.content),
93
+ className: s("code-block-content", p?.content),
95
94
  style: {
96
- maxHeight: i && (typeof i == "number" ? `${i}px` : i)
95
+ maxHeight: c && (typeof c == "number" ? `${c}px` : c)
97
96
  },
98
- children: /* @__PURE__ */ o(oo, { children: c ? /* @__PURE__ */ o(
99
- J,
97
+ children: /* @__PURE__ */ e(ee, { children: n ? /* @__PURE__ */ e(
98
+ G,
100
99
  {
101
- language: L,
102
- code: c,
103
- theme: K.vsDark,
100
+ language: x,
101
+ code: n,
102
+ theme: J.vsDark,
104
103
  children: ({
105
- className: t,
104
+ className: o,
106
105
  style: r,
107
- tokens: v,
108
- getLineProps: k,
109
- getTokenProps: P
110
- }) => /* @__PURE__ */ o(
106
+ tokens: D,
107
+ getLineProps: E,
108
+ getTokenProps: F
109
+ }) => /* @__PURE__ */ e(
111
110
  "pre",
112
111
  {
113
112
  style: { ...r, backgroundColor: "transparent" },
114
- className: t,
115
- children: v.map((w, W) => /* @__PURE__ */ o("div", { ...k({ line: w }), children: w.map((_, $) => /* @__PURE__ */ o("span", { ...P({ token: _ }) }, $)) }, W))
113
+ className: o,
114
+ children: D.map((y, P) => /* @__PURE__ */ e("div", { ...E({ line: y }), children: y.map((W, _) => /* @__PURE__ */ e("span", { ...F({ token: W }) }, _)) }, P))
116
115
  }
117
116
  )
118
117
  }
119
- ) : m })
118
+ ) : i })
120
119
  }
121
120
  )
122
121
  ]
@@ -124,6 +123,6 @@ const vo = ({
124
123
  ) });
125
124
  };
126
125
  export {
127
- vo as CodeBlock
126
+ fe as CodeBlock
128
127
  };
129
128
  //# sourceMappingURL=component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sources":["../../../src/components/code-block/component.tsx"],"sourcesContent":["\"use client\";\nimport { CheckIcon, CopyIcon } from \"@bioturing/assets\";\nimport { Highlight, themes } from \"prism-react-renderer\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { IconButton } from \"../icon-button\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Segmented } from \"../segmented\";\nimport { ThemeProvider } from \"../theme-provider/component\";\nimport { clsx, reactNodeToString, useCls, WithAntdTokens } from \"../utils\";\nimport type { CodeBlockProps } from \"./types\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport const CodeBlock = ({\n code,\n children,\n // initial,\n lang: defaultLang = \"tsx\",\n className,\n options,\n activeOption: controlledActiveOption,\n defaultActiveOption = 0,\n onActiveOptionChange,\n copyText = \"Copy\",\n copySuccessText = \"Copied\",\n classNames,\n maxHeight,\n onCopy,\n ...rest\n}: CodeBlockProps) => {\n const [activeOption, setActiveOption] = useControlledState(\n controlledActiveOption,\n onActiveOptionChange,\n defaultActiveOption\n );\n\n const [currentCode, setCurrentCode] = useState(code || \"\");\n\n const [lang, setLang] = useState(defaultLang);\n\n const hasOptions = options && options.length > 0;\n\n useEffect(() => {\n if (hasOptions) {\n const newCode = options[activeOption]?.code || \"\";\n const newLang = options[activeOption]?.lang || defaultLang;\n setCurrentCode(newCode);\n setLang(newLang);\n }\n }, [\n code,\n activeOption,\n defaultActiveOption,\n options,\n defaultLang,\n hasOptions,\n setActiveOption,\n ]);\n\n const [tooltipContent, setTooltipContent] = useState(copyText);\n const [copySuccess, setCopySuccess] = useState(false);\n\n const handleCopy = useCallback(() => {\n const codeContent = currentCode ? currentCode : reactNodeToString(children);\n try {\n navigator.clipboard.writeText(codeContent).then(() => {\n setTooltipContent(copySuccessText);\n setCopySuccess(true);\n if (onCopy) onCopy(codeContent);\n });\n } catch (_) {\n setTooltipContent(\"Failed to copy\");\n }\n }, [currentCode, children, copySuccessText, onCopy]);\n\n const handleMouseLeave = useCallback(() => {\n setTooltipContent(copyText);\n setCopySuccess(false);\n }, [copyText]);\n\n const cls = useCls();\n\n return (\n <ThemeProvider theme={\"dark\"}>\n <WithAntdTokens\n className={clsx(cls(\"code-block\"), className, classNames?.root)}\n {...rest}\n >\n {hasOptions && (\n <div className={cls(\"code-block-header\", classNames?.header)}>\n <Segmented\n value={activeOption}\n onChange={setActiveOption}\n options={options.map((opt, index) => ({\n label: opt.label,\n value: index,\n }))}\n />\n </div>\n )}\n <div className={cls(\"code-block-copy\")}>\n <IconButton\n onClick={handleCopy}\n label={tooltipContent}\n onMouseLeave={handleMouseLeave}\n >\n {copySuccess ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n </div>\n <div\n className={cls(\"code-block-content\", classNames?.content)}\n style={{\n maxHeight:\n maxHeight &&\n (typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight),\n }}\n >\n <ScrollArea>\n {currentCode ? (\n <Highlight\n language={lang}\n code={currentCode}\n theme={themes.vsDark}\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps,\n }) => (\n <pre\n style={{ ...style, backgroundColor: \"transparent\" }}\n className={className}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n ) : (\n children\n )}\n </ScrollArea>\n </div>\n </WithAntdTokens>\n </ThemeProvider>\n );\n};\n"],"names":["CodeBlock","code","children","defaultLang","className","options","controlledActiveOption","defaultActiveOption","onActiveOptionChange","copyText","copySuccessText","classNames","maxHeight","onCopy","rest","activeOption","setActiveOption","useControlledState","currentCode","setCurrentCode","useState","lang","setLang","hasOptions","useEffect","newCode","_a","newLang","_b","tooltipContent","setTooltipContent","copySuccess","setCopySuccess","handleCopy","useCallback","codeContent","reactNodeToString","handleMouseLeave","cls","useCls","jsx","ThemeProvider","jsxs","WithAntdTokens","clsx","Segmented","opt","index","IconButton","CheckIcon","CopyIcon","ScrollArea","Highlight","themes","style","tokens","getLineProps","getTokenProps","line","i","token","key"],"mappings":"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"}
1
+ {"version":3,"file":"component.js","sources":["../../../src/components/code-block/component.tsx"],"sourcesContent":["\"use client\";\nimport { CheckIcon, CopyIcon } from \"@bioturing/assets\";\nimport { Highlight, themes } from \"prism-react-renderer\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useControlledState } from \"../hooks\";\nimport { IconButton } from \"../icon-button\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { Segmented } from \"../segmented\";\nimport { ThemeProvider } from \"../theme-provider/component\";\nimport { clsx, reactNodeToString, useCls, WithAntdTokens } from \"../utils\";\nimport type { CodeBlockProps } from \"./types\";\n\n// Import component-specific styles\nimport \"./style.css\";\n\nexport const CodeBlock = ({\n code,\n children,\n // initial,\n lang: defaultLang = \"tsx\",\n className,\n options,\n activeOption: controlledActiveOption,\n defaultActiveOption = 0,\n onActiveOptionChange,\n copyText = \"Copy\",\n copySuccessText = \"Copied\",\n classNames,\n maxHeight,\n onCopy,\n ...rest\n}: CodeBlockProps) => {\n const [activeOption, setActiveOption] = useControlledState(\n controlledActiveOption,\n onActiveOptionChange,\n defaultActiveOption\n );\n\n const [currentCode, setCurrentCode] = useState(code || \"\");\n\n const [lang, setLang] = useState(defaultLang);\n\n const hasOptions = options && options.length > 0;\n\n useEffect(() => {\n if (hasOptions) {\n const newCode = options[activeOption]?.code || \"\";\n const newLang = options[activeOption]?.lang || defaultLang;\n setCurrentCode(newCode);\n setLang(newLang);\n }\n }, [\n code,\n activeOption,\n defaultActiveOption,\n options,\n defaultLang,\n hasOptions,\n setActiveOption,\n ]);\n\n const [tooltipContent, setTooltipContent] = useState(copyText);\n const [copySuccess, setCopySuccess] = useState(false);\n\n const handleCopy = useCallback(() => {\n const codeContent = currentCode ? currentCode : reactNodeToString(children);\n try {\n navigator.clipboard.writeText(codeContent).then(() => {\n setTooltipContent(copySuccessText);\n setCopySuccess(true);\n if (onCopy) onCopy(codeContent);\n });\n } catch (_) {\n setTooltipContent(\"Failed to copy\");\n }\n }, [currentCode, children, copySuccessText, onCopy]);\n\n const handleMouseLeave = useCallback(() => {\n setTooltipContent(copyText);\n setCopySuccess(false);\n }, [copyText]);\n\n const cls = useCls();\n\n return (\n <ThemeProvider theme={\"dark\"}>\n <WithAntdTokens\n className={clsx(cls(\"code-block\"), className, classNames?.root)}\n {...rest}\n >\n {hasOptions && (\n <div className={cls(\"code-block-header\", classNames?.header)}>\n <Segmented\n value={activeOption}\n onChange={setActiveOption}\n options={options.map((opt, index) => ({\n label: opt.label,\n value: index,\n }))}\n />\n </div>\n )}\n <div className={cls(\"code-block-copy\")}>\n <IconButton\n onClick={handleCopy}\n label={tooltipContent}\n onMouseLeave={handleMouseLeave}\n >\n {copySuccess ? <CheckIcon /> : <CopyIcon />}\n </IconButton>\n </div>\n <div\n className={cls(\"code-block-content\", classNames?.content)}\n style={{\n maxHeight:\n maxHeight &&\n (typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight),\n }}\n >\n <ScrollArea>\n {currentCode ? (\n <Highlight\n language={lang}\n code={currentCode}\n theme={themes.vsDark}\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps,\n }) => (\n <pre\n style={{ ...style, backgroundColor: \"transparent\" }}\n className={className}\n >\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n ) : (\n children\n )}\n </ScrollArea>\n </div>\n </WithAntdTokens>\n </ThemeProvider>\n );\n};\n"],"names":["CodeBlock","code","children","defaultLang","className","options","controlledActiveOption","defaultActiveOption","onActiveOptionChange","copyText","copySuccessText","classNames","maxHeight","onCopy","rest","activeOption","setActiveOption","useControlledState","currentCode","setCurrentCode","useState","lang","setLang","hasOptions","useEffect","newCode","newLang","tooltipContent","setTooltipContent","copySuccess","setCopySuccess","handleCopy","useCallback","codeContent","reactNodeToString","handleMouseLeave","cls","useCls","jsx","ThemeProvider","jsxs","WithAntdTokens","clsx","Segmented","opt","index","IconButton","CheckIcon","CopyIcon","ScrollArea","Highlight","themes","style","tokens","getLineProps","getTokenProps","line","i","token","key"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './component';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}