@keboola/design 9.1.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (520) hide show
  1. package/AGENTS.md +119 -40
  2. package/COMPONENT-API.md +31 -9
  3. package/README.md +3 -3
  4. package/dist/MermaidDiagram-ZU5KAVRT.js +18 -0
  5. package/dist/MermaidDiagram-ZU5KAVRT.js.map +1 -0
  6. package/dist/charts.d.ts +37 -2
  7. package/dist/charts.js +11 -9
  8. package/dist/charts.js.map +1 -1
  9. package/dist/chunk-2YYJDKSP.js +51 -0
  10. package/dist/chunk-2YYJDKSP.js.map +1 -0
  11. package/dist/chunk-3P5UUCFI.js +385 -0
  12. package/dist/chunk-3P5UUCFI.js.map +1 -0
  13. package/dist/chunk-3QDFDDWZ.js +99 -0
  14. package/dist/chunk-3QDFDDWZ.js.map +1 -0
  15. package/dist/chunk-3W27OLK5.js +15 -0
  16. package/dist/chunk-3W27OLK5.js.map +1 -0
  17. package/dist/chunk-4FIZZONW.js +40 -0
  18. package/dist/chunk-4FIZZONW.js.map +1 -0
  19. package/dist/chunk-4GIAXOJG.js +133 -0
  20. package/dist/chunk-4GIAXOJG.js.map +1 -0
  21. package/dist/chunk-52NDNMK7.js +99 -0
  22. package/dist/chunk-52NDNMK7.js.map +1 -0
  23. package/dist/chunk-576G5OES.js +201 -0
  24. package/dist/chunk-576G5OES.js.map +1 -0
  25. package/dist/chunk-5AIE6SET.js +659 -0
  26. package/dist/chunk-5AIE6SET.js.map +1 -0
  27. package/dist/chunk-5FTNAZRW.js +327 -0
  28. package/dist/chunk-5FTNAZRW.js.map +1 -0
  29. package/dist/chunk-5IG2S7ZY.js +70 -0
  30. package/dist/chunk-5IG2S7ZY.js.map +1 -0
  31. package/dist/chunk-5QCXHNCW.js +404 -0
  32. package/dist/chunk-5QCXHNCW.js.map +1 -0
  33. package/dist/chunk-6DUMGC7Y.js +105 -0
  34. package/dist/chunk-6DUMGC7Y.js.map +1 -0
  35. package/dist/chunk-6J25CVST.js +174 -0
  36. package/dist/chunk-6J25CVST.js.map +1 -0
  37. package/dist/chunk-6NN35XOP.js +120 -0
  38. package/dist/chunk-6NN35XOP.js.map +1 -0
  39. package/dist/chunk-6NZBVA4T.js +24 -0
  40. package/dist/chunk-6NZBVA4T.js.map +1 -0
  41. package/dist/chunk-6W5BHRCL.js +295 -0
  42. package/dist/chunk-6W5BHRCL.js.map +1 -0
  43. package/dist/chunk-72BKRCEG.js +409 -0
  44. package/dist/chunk-72BKRCEG.js.map +1 -0
  45. package/dist/chunk-7GTI3PPI.js +95 -0
  46. package/dist/chunk-7GTI3PPI.js.map +1 -0
  47. package/dist/chunk-7P6PLZ4B.js +74 -0
  48. package/dist/chunk-7P6PLZ4B.js.map +1 -0
  49. package/dist/chunk-7WZWY5IA.js +46 -0
  50. package/dist/chunk-7WZWY5IA.js.map +1 -0
  51. package/dist/chunk-AIYO2632.js +489 -0
  52. package/dist/chunk-AIYO2632.js.map +1 -0
  53. package/dist/chunk-ANFZWPNE.js +112 -0
  54. package/dist/chunk-ANFZWPNE.js.map +1 -0
  55. package/dist/chunk-ANZTVAJU.js +73 -0
  56. package/dist/chunk-ANZTVAJU.js.map +1 -0
  57. package/dist/chunk-BD5BTJKX.js +166 -0
  58. package/dist/chunk-BD5BTJKX.js.map +1 -0
  59. package/dist/chunk-BHGIDSRJ.js +140 -0
  60. package/dist/chunk-BHGIDSRJ.js.map +1 -0
  61. package/dist/chunk-BSQWZITZ.js +507 -0
  62. package/dist/chunk-BSQWZITZ.js.map +1 -0
  63. package/dist/chunk-D3LAIK62.js +23 -0
  64. package/dist/chunk-D3LAIK62.js.map +1 -0
  65. package/dist/chunk-DODCR43C.js +155 -0
  66. package/dist/chunk-DODCR43C.js.map +1 -0
  67. package/dist/chunk-EEK5NGZF.js +40 -0
  68. package/dist/chunk-EEK5NGZF.js.map +1 -0
  69. package/dist/chunk-ENRG7TXA.js +11 -0
  70. package/dist/chunk-ENRG7TXA.js.map +1 -0
  71. package/dist/chunk-EQRMGIGY.js +239 -0
  72. package/dist/chunk-EQRMGIGY.js.map +1 -0
  73. package/dist/chunk-ERAHK5YQ.js +495 -0
  74. package/dist/chunk-ERAHK5YQ.js.map +1 -0
  75. package/dist/chunk-F3FOFY2P.js +124 -0
  76. package/dist/chunk-F3FOFY2P.js.map +1 -0
  77. package/dist/chunk-F6BTWFOC.js +507 -0
  78. package/dist/chunk-F6BTWFOC.js.map +1 -0
  79. package/dist/chunk-F6J6NNAL.js +34 -0
  80. package/dist/chunk-F6J6NNAL.js.map +1 -0
  81. package/dist/chunk-FCHJ7D5O.js +59 -0
  82. package/dist/chunk-FCHJ7D5O.js.map +1 -0
  83. package/dist/chunk-FFJTEQCC.js +80 -0
  84. package/dist/chunk-FFJTEQCC.js.map +1 -0
  85. package/dist/chunk-FUFMVW7O.js +64 -0
  86. package/dist/chunk-FUFMVW7O.js.map +1 -0
  87. package/dist/chunk-FVPGQ6UE.js +25 -0
  88. package/dist/chunk-FVPGQ6UE.js.map +1 -0
  89. package/dist/chunk-G3PMV62Z.js +33 -0
  90. package/dist/chunk-G3PMV62Z.js.map +1 -0
  91. package/dist/chunk-GACFOW3E.js +51 -0
  92. package/dist/chunk-GACFOW3E.js.map +1 -0
  93. package/dist/chunk-GDT6HQMK.js +42 -0
  94. package/dist/chunk-GDT6HQMK.js.map +1 -0
  95. package/dist/chunk-HLGU22C6.js +2589 -0
  96. package/dist/chunk-HLGU22C6.js.map +1 -0
  97. package/dist/chunk-HPMYYGP7.js +134 -0
  98. package/dist/chunk-HPMYYGP7.js.map +1 -0
  99. package/dist/chunk-I2UCOD45.js +197 -0
  100. package/dist/chunk-I2UCOD45.js.map +1 -0
  101. package/dist/chunk-IEGDZUVM.js +75 -0
  102. package/dist/chunk-IEGDZUVM.js.map +1 -0
  103. package/dist/chunk-IIS7INHF.js +47 -0
  104. package/dist/chunk-IIS7INHF.js.map +1 -0
  105. package/dist/chunk-ITELSEFU.js +256 -0
  106. package/dist/chunk-ITELSEFU.js.map +1 -0
  107. package/dist/chunk-IXAYNBOY.js +407 -0
  108. package/dist/chunk-IXAYNBOY.js.map +1 -0
  109. package/dist/chunk-JUW2ETEI.js +191 -0
  110. package/dist/chunk-JUW2ETEI.js.map +1 -0
  111. package/dist/chunk-K65C7CVE.js +127 -0
  112. package/dist/chunk-K65C7CVE.js.map +1 -0
  113. package/dist/chunk-KDI64MCY.js +189 -0
  114. package/dist/chunk-KDI64MCY.js.map +1 -0
  115. package/dist/chunk-KN4ASMH5.js +160 -0
  116. package/dist/chunk-KN4ASMH5.js.map +1 -0
  117. package/dist/chunk-KQW7QNTU.js +1549 -0
  118. package/dist/chunk-KQW7QNTU.js.map +1 -0
  119. package/dist/chunk-KR7NXXHC.js +66 -0
  120. package/dist/chunk-KR7NXXHC.js.map +1 -0
  121. package/dist/chunk-KRZKIVMA.js +142 -0
  122. package/dist/chunk-KRZKIVMA.js.map +1 -0
  123. package/dist/chunk-KTTLLKGQ.js +185 -0
  124. package/dist/chunk-KTTLLKGQ.js.map +1 -0
  125. package/dist/chunk-KWKSHPDP.js +234 -0
  126. package/dist/chunk-KWKSHPDP.js.map +1 -0
  127. package/dist/chunk-KZVC7OYG.js +57 -0
  128. package/dist/chunk-KZVC7OYG.js.map +1 -0
  129. package/dist/chunk-L5DHUN2V.js +204 -0
  130. package/dist/chunk-L5DHUN2V.js.map +1 -0
  131. package/dist/chunk-LCTGEH57.js +1376 -0
  132. package/dist/chunk-LCTGEH57.js.map +1 -0
  133. package/dist/chunk-LXLIQ2D6.js +12 -0
  134. package/dist/chunk-LXLIQ2D6.js.map +1 -0
  135. package/dist/chunk-M4CTURKX.js +84 -0
  136. package/dist/chunk-M4CTURKX.js.map +1 -0
  137. package/dist/chunk-M6LTUPVP.js +301 -0
  138. package/dist/chunk-M6LTUPVP.js.map +1 -0
  139. package/dist/chunk-MA6RRHDT.js +291 -0
  140. package/dist/chunk-MA6RRHDT.js.map +1 -0
  141. package/dist/chunk-MODE4QIA.js +6 -0
  142. package/dist/chunk-MODE4QIA.js.map +1 -0
  143. package/dist/chunk-MVILMVGG.js +118 -0
  144. package/dist/chunk-MVILMVGG.js.map +1 -0
  145. package/dist/chunk-MWS4VCLV.js +17 -0
  146. package/dist/chunk-MWS4VCLV.js.map +1 -0
  147. package/dist/chunk-NEUX74SO.js +315 -0
  148. package/dist/chunk-NEUX74SO.js.map +1 -0
  149. package/dist/chunk-NFHKYBRD.js +156 -0
  150. package/dist/chunk-NFHKYBRD.js.map +1 -0
  151. package/dist/chunk-NHJNNXD3.js +89 -0
  152. package/dist/chunk-NHJNNXD3.js.map +1 -0
  153. package/dist/chunk-O2BF3HZL.js +33 -0
  154. package/dist/chunk-O2BF3HZL.js.map +1 -0
  155. package/dist/chunk-OANXCZYD.js +212 -0
  156. package/dist/chunk-OANXCZYD.js.map +1 -0
  157. package/dist/chunk-ODJF7YIP.js +230 -0
  158. package/dist/chunk-ODJF7YIP.js.map +1 -0
  159. package/dist/chunk-ON4BJTHI.js +101 -0
  160. package/dist/chunk-ON4BJTHI.js.map +1 -0
  161. package/dist/chunk-OTL5WXIJ.js +16 -0
  162. package/dist/chunk-OTL5WXIJ.js.map +1 -0
  163. package/dist/chunk-PACNBKJV.js +47 -0
  164. package/dist/chunk-PACNBKJV.js.map +1 -0
  165. package/dist/chunk-PROCA7K7.js +23 -0
  166. package/dist/chunk-PROCA7K7.js.map +1 -0
  167. package/dist/chunk-QGMIPA67.js +85 -0
  168. package/dist/chunk-QGMIPA67.js.map +1 -0
  169. package/dist/chunk-QQA37LFB.js +190 -0
  170. package/dist/chunk-QQA37LFB.js.map +1 -0
  171. package/dist/chunk-QZAWRSEB.js +61 -0
  172. package/dist/chunk-QZAWRSEB.js.map +1 -0
  173. package/dist/chunk-R74KGWNS.js +699 -0
  174. package/dist/chunk-R74KGWNS.js.map +1 -0
  175. package/dist/chunk-RFDLHMKL.js +110 -0
  176. package/dist/chunk-RFDLHMKL.js.map +1 -0
  177. package/dist/chunk-RL64HN7S.js +40 -0
  178. package/dist/chunk-RL64HN7S.js.map +1 -0
  179. package/dist/chunk-RMRQKPL7.js +115 -0
  180. package/dist/chunk-RMRQKPL7.js.map +1 -0
  181. package/dist/chunk-RQVK4IYC.js +606 -0
  182. package/dist/chunk-RQVK4IYC.js.map +1 -0
  183. package/dist/chunk-RTW56PWZ.js +59 -0
  184. package/dist/chunk-RTW56PWZ.js.map +1 -0
  185. package/dist/chunk-RUTPQNLR.js +266 -0
  186. package/dist/chunk-RUTPQNLR.js.map +1 -0
  187. package/dist/chunk-S6TAF63G.js +25 -0
  188. package/dist/chunk-S6TAF63G.js.map +1 -0
  189. package/dist/chunk-SBGAUGXY.js +224 -0
  190. package/dist/chunk-SBGAUGXY.js.map +1 -0
  191. package/dist/chunk-SC275NHZ.js +407 -0
  192. package/dist/chunk-SC275NHZ.js.map +1 -0
  193. package/dist/chunk-SCQPU4UE.js +97 -0
  194. package/dist/chunk-SCQPU4UE.js.map +1 -0
  195. package/dist/chunk-SFFF2WQP.js +8 -0
  196. package/dist/chunk-SFFF2WQP.js.map +1 -0
  197. package/dist/chunk-SJYMHZKA.js +36 -0
  198. package/dist/chunk-SJYMHZKA.js.map +1 -0
  199. package/dist/chunk-SLCCUJVN.js +125 -0
  200. package/dist/chunk-SLCCUJVN.js.map +1 -0
  201. package/dist/chunk-SVBSNSD4.js +259 -0
  202. package/dist/chunk-SVBSNSD4.js.map +1 -0
  203. package/dist/chunk-SVPLTL35.js +62 -0
  204. package/dist/chunk-SVPLTL35.js.map +1 -0
  205. package/dist/chunk-SWQFYNYG.js +338 -0
  206. package/dist/chunk-SWQFYNYG.js.map +1 -0
  207. package/dist/chunk-THHB4EWS.js +72 -0
  208. package/dist/chunk-THHB4EWS.js.map +1 -0
  209. package/dist/chunk-TUCDD33E.js +246 -0
  210. package/dist/chunk-TUCDD33E.js.map +1 -0
  211. package/dist/chunk-TV4WAP2R.js +14 -0
  212. package/dist/chunk-TV4WAP2R.js.map +1 -0
  213. package/dist/chunk-U3A6YBTZ.js +134 -0
  214. package/dist/chunk-U3A6YBTZ.js.map +1 -0
  215. package/dist/chunk-UGT6DKWM.js +95 -0
  216. package/dist/chunk-UGT6DKWM.js.map +1 -0
  217. package/dist/chunk-VSERHUWD.js +212 -0
  218. package/dist/chunk-VSERHUWD.js.map +1 -0
  219. package/dist/chunk-VYG7BDXC.js +49 -0
  220. package/dist/chunk-VYG7BDXC.js.map +1 -0
  221. package/dist/chunk-WETKNYZX.js +52 -0
  222. package/dist/chunk-WETKNYZX.js.map +1 -0
  223. package/dist/chunk-WGG4AML3.js +216 -0
  224. package/dist/chunk-WGG4AML3.js.map +1 -0
  225. package/dist/chunk-WKAUEL6I.js +30 -0
  226. package/dist/chunk-WKAUEL6I.js.map +1 -0
  227. package/dist/chunk-WPOLA5CG.js +81 -0
  228. package/dist/chunk-WPOLA5CG.js.map +1 -0
  229. package/dist/chunk-WPVETCGJ.js +254 -0
  230. package/dist/chunk-WPVETCGJ.js.map +1 -0
  231. package/dist/chunk-WTSM3A7E.js +13 -0
  232. package/dist/chunk-WTSM3A7E.js.map +1 -0
  233. package/dist/chunk-WU3F2K3T.js +148 -0
  234. package/dist/chunk-WU3F2K3T.js.map +1 -0
  235. package/dist/chunk-WZZK2DTZ.js +39 -0
  236. package/dist/chunk-WZZK2DTZ.js.map +1 -0
  237. package/dist/chunk-X4IHLKRD.js +42 -0
  238. package/dist/chunk-X4IHLKRD.js.map +1 -0
  239. package/dist/chunk-XAHEXZJC.js +80 -0
  240. package/dist/chunk-XAHEXZJC.js.map +1 -0
  241. package/dist/chunk-XCYGJDUX.js +31 -0
  242. package/dist/chunk-XCYGJDUX.js.map +1 -0
  243. package/dist/chunk-Y4W3JORC.js +104 -0
  244. package/dist/chunk-Y4W3JORC.js.map +1 -0
  245. package/dist/chunk-YFZJ3ZLG.js +1297 -0
  246. package/dist/chunk-YFZJ3ZLG.js.map +1 -0
  247. package/dist/chunk-YI3WLXEN.js +4387 -0
  248. package/dist/chunk-YI3WLXEN.js.map +1 -0
  249. package/dist/chunk-ZBKFSPD3.js +29 -0
  250. package/dist/chunk-ZBKFSPD3.js.map +1 -0
  251. package/dist/chunk-ZOERRQ6A.js +79 -0
  252. package/dist/chunk-ZOERRQ6A.js.map +1 -0
  253. package/dist/chunk-ZSTGUKHU.js +10 -0
  254. package/dist/chunk-ZSTGUKHU.js.map +1 -0
  255. package/dist/chunk-ZUEHDL27.js +65 -0
  256. package/dist/chunk-ZUEHDL27.js.map +1 -0
  257. package/dist/editors.d.ts +27 -3
  258. package/dist/editors.js +93 -2081
  259. package/dist/editors.js.map +1 -1
  260. package/dist/icons.d.ts +29 -8
  261. package/dist/icons.js +7 -361
  262. package/dist/icons.js.map +1 -1
  263. package/dist/index.d.ts +715 -441
  264. package/dist/index.js +121 -24643
  265. package/dist/index.js.map +1 -1
  266. package/dist/internal/blocks/AIKit.js +30 -0
  267. package/dist/internal/blocks/AIKit.js.map +1 -0
  268. package/dist/internal/blocks/AppShell.js +11 -0
  269. package/dist/internal/blocks/AppShell.js.map +1 -0
  270. package/dist/internal/blocks/AutoSaveTextarea.js +14 -0
  271. package/dist/internal/blocks/AutoSaveTextarea.js.map +1 -0
  272. package/dist/internal/blocks/BrandEditor.js +23 -0
  273. package/dist/internal/blocks/BrandEditor.js.map +1 -0
  274. package/dist/internal/blocks/ChartPanel.js +10 -0
  275. package/dist/internal/blocks/ChartPanel.js.map +1 -0
  276. package/dist/internal/blocks/ClipboardButton.js +12 -0
  277. package/dist/internal/blocks/ClipboardButton.js.map +1 -0
  278. package/dist/internal/blocks/ColorInput.js +13 -0
  279. package/dist/internal/blocks/ColorInput.js.map +1 -0
  280. package/dist/internal/blocks/ColorModeSwitch.js +13 -0
  281. package/dist/internal/blocks/ColorModeSwitch.js.map +1 -0
  282. package/dist/internal/blocks/Command.js +15 -0
  283. package/dist/internal/blocks/Command.js.map +1 -0
  284. package/dist/internal/blocks/CopyField.js +11 -0
  285. package/dist/internal/blocks/CopyField.js.map +1 -0
  286. package/dist/internal/blocks/DashboardHero.js +9 -0
  287. package/dist/internal/blocks/DashboardHero.js.map +1 -0
  288. package/dist/internal/blocks/DateInput.js +16 -0
  289. package/dist/internal/blocks/DateInput.js.map +1 -0
  290. package/dist/internal/blocks/DateRangeInput.js +16 -0
  291. package/dist/internal/blocks/DateRangeInput.js.map +1 -0
  292. package/dist/internal/blocks/EmptyConfigurationActionCard.js +10 -0
  293. package/dist/internal/blocks/EmptyConfigurationActionCard.js.map +1 -0
  294. package/dist/internal/blocks/EmptyState.js +4 -0
  295. package/dist/internal/blocks/EmptyState.js.map +1 -0
  296. package/dist/internal/blocks/ErrorState.js +5 -0
  297. package/dist/internal/blocks/ErrorState.js.map +1 -0
  298. package/dist/internal/blocks/ExportMenu.js +13 -0
  299. package/dist/internal/blocks/ExportMenu.js.map +1 -0
  300. package/dist/internal/blocks/Form.js +29 -0
  301. package/dist/internal/blocks/Form.js.map +1 -0
  302. package/dist/internal/blocks/FormGroup.js +18 -0
  303. package/dist/internal/blocks/FormGroup.js.map +1 -0
  304. package/dist/internal/blocks/GoogleButton.js +10 -0
  305. package/dist/internal/blocks/GoogleButton.js.map +1 -0
  306. package/dist/internal/blocks/MicrosoftButton.js +10 -0
  307. package/dist/internal/blocks/MicrosoftButton.js.map +1 -0
  308. package/dist/internal/blocks/MultiActionButtonGroup.js +12 -0
  309. package/dist/internal/blocks/MultiActionButtonGroup.js.map +1 -0
  310. package/dist/internal/blocks/MultiCombobox.js +14 -0
  311. package/dist/internal/blocks/MultiCombobox.js.map +1 -0
  312. package/dist/internal/blocks/NumberInput.js +12 -0
  313. package/dist/internal/blocks/NumberInput.js.map +1 -0
  314. package/dist/internal/blocks/OtpInput.js +10 -0
  315. package/dist/internal/blocks/OtpInput.js.map +1 -0
  316. package/dist/internal/blocks/PageHeader.js +9 -0
  317. package/dist/internal/blocks/PageHeader.js.map +1 -0
  318. package/dist/internal/blocks/PageLayout.js +9 -0
  319. package/dist/internal/blocks/PageLayout.js.map +1 -0
  320. package/dist/internal/blocks/PageToolbar.js +13 -0
  321. package/dist/internal/blocks/PageToolbar.js.map +1 -0
  322. package/dist/internal/blocks/PasswordInput.js +13 -0
  323. package/dist/internal/blocks/PasswordInput.js.map +1 -0
  324. package/dist/internal/blocks/SearchInput.js +12 -0
  325. package/dist/internal/blocks/SearchInput.js.map +1 -0
  326. package/dist/internal/blocks/SearchInputWithNavigation.js +16 -0
  327. package/dist/internal/blocks/SearchInputWithNavigation.js.map +1 -0
  328. package/dist/internal/blocks/SectionNav.js +15 -0
  329. package/dist/internal/blocks/SectionNav.js.map +1 -0
  330. package/dist/internal/blocks/SplitButton.js +14 -0
  331. package/dist/internal/blocks/SplitButton.js.map +1 -0
  332. package/dist/internal/blocks/StatCard.js +10 -0
  333. package/dist/internal/blocks/StatCard.js.map +1 -0
  334. package/dist/internal/blocks/TextInput.js +13 -0
  335. package/dist/internal/blocks/TextInput.js.map +1 -0
  336. package/dist/internal/blocks/Textarea.js +13 -0
  337. package/dist/internal/blocks/Textarea.js.map +1 -0
  338. package/dist/internal/blocks/TimeInput.js +17 -0
  339. package/dist/internal/blocks/TimeInput.js.map +1 -0
  340. package/dist/internal/components/Alert.js +11 -0
  341. package/dist/internal/components/Alert.js.map +1 -0
  342. package/dist/internal/components/AlertModal.js +11 -0
  343. package/dist/internal/components/AlertModal.js.map +1 -0
  344. package/dist/internal/components/Avatar.js +9 -0
  345. package/dist/internal/components/Avatar.js.map +1 -0
  346. package/dist/internal/components/Badge.js +9 -0
  347. package/dist/internal/components/Badge.js.map +1 -0
  348. package/dist/internal/components/BrandLogo.js +11 -0
  349. package/dist/internal/components/BrandLogo.js.map +1 -0
  350. package/dist/internal/components/Breadcrumb.js +14 -0
  351. package/dist/internal/components/Breadcrumb.js.map +1 -0
  352. package/dist/internal/components/Button.js +10 -0
  353. package/dist/internal/components/Button.js.map +1 -0
  354. package/dist/internal/components/ButtonGroup.js +9 -0
  355. package/dist/internal/components/ButtonGroup.js.map +1 -0
  356. package/dist/internal/components/Calendar.js +9 -0
  357. package/dist/internal/components/Calendar.js.map +1 -0
  358. package/dist/internal/components/Card.js +9 -0
  359. package/dist/internal/components/Card.js.map +1 -0
  360. package/dist/internal/components/Checkbox.js +11 -0
  361. package/dist/internal/components/Checkbox.js.map +1 -0
  362. package/dist/internal/components/Clipboard.js +9 -0
  363. package/dist/internal/components/Clipboard.js.map +1 -0
  364. package/dist/internal/components/Collapsible.js +9 -0
  365. package/dist/internal/components/Collapsible.js.map +1 -0
  366. package/dist/internal/components/CollapsiblePanel.js +11 -0
  367. package/dist/internal/components/CollapsiblePanel.js.map +1 -0
  368. package/dist/internal/components/Combobox.js +13 -0
  369. package/dist/internal/components/Combobox.js.map +1 -0
  370. package/dist/internal/components/DatePicker.js +11 -0
  371. package/dist/internal/components/DatePicker.js.map +1 -0
  372. package/dist/internal/components/DateRangePicker.js +17 -0
  373. package/dist/internal/components/DateRangePicker.js.map +1 -0
  374. package/dist/internal/components/DiffView.js +9 -0
  375. package/dist/internal/components/DiffView.js.map +1 -0
  376. package/dist/internal/components/DotsLoader.js +5 -0
  377. package/dist/internal/components/DotsLoader.js.map +1 -0
  378. package/dist/internal/components/DropdownMenu.js +11 -0
  379. package/dist/internal/components/DropdownMenu.js.map +1 -0
  380. package/dist/internal/components/EmptySearchContent.js +4 -0
  381. package/dist/internal/components/EmptySearchContent.js.map +1 -0
  382. package/dist/internal/components/FileUpload.js +11 -0
  383. package/dist/internal/components/FileUpload.js.map +1 -0
  384. package/dist/internal/components/FullScreenModal.js +12 -0
  385. package/dist/internal/components/FullScreenModal.js.map +1 -0
  386. package/dist/internal/components/HelpBlock.js +4 -0
  387. package/dist/internal/components/HelpBlock.js.map +1 -0
  388. package/dist/internal/components/HoverCard.js +9 -0
  389. package/dist/internal/components/HoverCard.js.map +1 -0
  390. package/dist/internal/components/InputGroup.js +11 -0
  391. package/dist/internal/components/InputGroup.js.map +1 -0
  392. package/dist/internal/components/Kbd.js +9 -0
  393. package/dist/internal/components/Kbd.js.map +1 -0
  394. package/dist/internal/components/Label.js +9 -0
  395. package/dist/internal/components/Label.js.map +1 -0
  396. package/dist/internal/components/Link.js +9 -0
  397. package/dist/internal/components/Link.js.map +1 -0
  398. package/dist/internal/components/MarkedText.js +5 -0
  399. package/dist/internal/components/MarkedText.js.map +1 -0
  400. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js +10 -0
  401. package/dist/internal/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.js.map +1 -0
  402. package/dist/internal/components/MergeEditor/PaneHeader.js +4 -0
  403. package/dist/internal/components/MergeEditor/PaneHeader.js.map +1 -0
  404. package/dist/internal/components/MergeEditor/constants.js +4 -0
  405. package/dist/internal/components/MergeEditor/constants.js.map +1 -0
  406. package/dist/internal/components/MergeEditor/useMergeDiff.js +5 -0
  407. package/dist/internal/components/MergeEditor/useMergeDiff.js.map +1 -0
  408. package/dist/internal/components/Modal.js +13 -0
  409. package/dist/internal/components/Modal.js.map +1 -0
  410. package/dist/internal/components/Navbar.js +14 -0
  411. package/dist/internal/components/Navbar.js.map +1 -0
  412. package/dist/internal/components/Pagination.js +11 -0
  413. package/dist/internal/components/Pagination.js.map +1 -0
  414. package/dist/internal/components/PanelWithDetails.js +11 -0
  415. package/dist/internal/components/PanelWithDetails.js.map +1 -0
  416. package/dist/internal/components/Popconfirm.js +12 -0
  417. package/dist/internal/components/Popconfirm.js.map +1 -0
  418. package/dist/internal/components/Popover.js +9 -0
  419. package/dist/internal/components/Popover.js.map +1 -0
  420. package/dist/internal/components/Progress.js +9 -0
  421. package/dist/internal/components/Progress.js.map +1 -0
  422. package/dist/internal/components/RadioGroup.js +12 -0
  423. package/dist/internal/components/RadioGroup.js.map +1 -0
  424. package/dist/internal/components/Resizable.js +9 -0
  425. package/dist/internal/components/Resizable.js.map +1 -0
  426. package/dist/internal/components/ScrollArea.js +9 -0
  427. package/dist/internal/components/ScrollArea.js.map +1 -0
  428. package/dist/internal/components/Search.js +10 -0
  429. package/dist/internal/components/Search.js.map +1 -0
  430. package/dist/internal/components/Select.js +12 -0
  431. package/dist/internal/components/Select.js.map +1 -0
  432. package/dist/internal/components/Separator.js +9 -0
  433. package/dist/internal/components/Separator.js.map +1 -0
  434. package/dist/internal/components/Sheet.js +12 -0
  435. package/dist/internal/components/Sheet.js.map +1 -0
  436. package/dist/internal/components/Sidebar.js +20 -0
  437. package/dist/internal/components/Sidebar.js.map +1 -0
  438. package/dist/internal/components/Skeleton/Skeleton.js +9 -0
  439. package/dist/internal/components/Skeleton/Skeleton.js.map +1 -0
  440. package/dist/internal/components/Skeleton/SkeletonList.js +10 -0
  441. package/dist/internal/components/Skeleton/SkeletonList.js.map +1 -0
  442. package/dist/internal/components/Slider.js +11 -0
  443. package/dist/internal/components/Slider.js.map +1 -0
  444. package/dist/internal/components/SpotlightBackdrop.js +9 -0
  445. package/dist/internal/components/SpotlightBackdrop.js.map +1 -0
  446. package/dist/internal/components/Stepper.js +10 -0
  447. package/dist/internal/components/Stepper.js.map +1 -0
  448. package/dist/internal/components/Switch.js +10 -0
  449. package/dist/internal/components/Switch.js.map +1 -0
  450. package/dist/internal/components/Table.js +10 -0
  451. package/dist/internal/components/Table.js.map +1 -0
  452. package/dist/internal/components/Tabs.js +12 -0
  453. package/dist/internal/components/Tabs.js.map +1 -0
  454. package/dist/internal/components/ThemeProvider.js +10 -0
  455. package/dist/internal/components/ThemeProvider.js.map +1 -0
  456. package/dist/internal/components/TimePicker.js +12 -0
  457. package/dist/internal/components/TimePicker.js.map +1 -0
  458. package/dist/internal/components/Timeline.js +10 -0
  459. package/dist/internal/components/Timeline.js.map +1 -0
  460. package/dist/internal/components/Toast.js +11 -0
  461. package/dist/internal/components/Toast.js.map +1 -0
  462. package/dist/internal/components/Toggle.js +9 -0
  463. package/dist/internal/components/Toggle.js.map +1 -0
  464. package/dist/internal/components/ToggleGroup.js +9 -0
  465. package/dist/internal/components/ToggleGroup.js.map +1 -0
  466. package/dist/internal/components/Tooltip.js +8 -0
  467. package/dist/internal/components/Tooltip.js.map +1 -0
  468. package/dist/internal/components/Truncated.js +9 -0
  469. package/dist/internal/components/Truncated.js.map +1 -0
  470. package/dist/internal/components/Workbench.js +11 -0
  471. package/dist/internal/components/Workbench.js.map +1 -0
  472. package/dist/internal/components/ZoomableSvg.js +13 -0
  473. package/dist/internal/components/ZoomableSvg.js.map +1 -0
  474. package/dist/internal/hooks/useAutosizeInput.js +4 -0
  475. package/dist/internal/hooks/useAutosizeInput.js.map +1 -0
  476. package/dist/internal/hooks/useScrollbarPosition.js +5 -0
  477. package/dist/internal/hooks/useScrollbarPosition.js.map +1 -0
  478. package/dist/internal/hooks/useStableCallback.js +4 -0
  479. package/dist/internal/hooks/useStableCallback.js.map +1 -0
  480. package/dist/internal/utils/mergeRefs.js +4 -0
  481. package/dist/internal/utils/mergeRefs.js.map +1 -0
  482. package/dist/internal/utils.js +8 -0
  483. package/dist/internal/utils.js.map +1 -0
  484. package/dist/markdown-editor.js +55 -3426
  485. package/dist/markdown-editor.js.map +1 -1
  486. package/dist/mermaid.js +16 -1129
  487. package/dist/mermaid.js.map +1 -1
  488. package/dist/rjsf.js +252 -9380
  489. package/dist/rjsf.js.map +1 -1
  490. package/dist/styles.css +1 -1
  491. package/dist/testing.js +10 -357
  492. package/dist/testing.js.map +1 -1
  493. package/package.json +31 -75
  494. package/src/styles.css +95 -10
  495. package/src/theme.css +65 -0
  496. package/dist/charts.cjs +0 -268
  497. package/dist/charts.cjs.map +0 -1
  498. package/dist/charts.d.cts +0 -181
  499. package/dist/constants-D3gaMY-W.d.cts +0 -39
  500. package/dist/editors.cjs +0 -2440
  501. package/dist/editors.cjs.map +0 -1
  502. package/dist/editors.d.cts +0 -165
  503. package/dist/icons.cjs +0 -23888
  504. package/dist/icons.cjs.map +0 -1
  505. package/dist/icons.d.cts +0 -20
  506. package/dist/index.cjs +0 -24894
  507. package/dist/index.cjs.map +0 -1
  508. package/dist/index.d.cts +0 -10438
  509. package/dist/markdown-editor.cjs +0 -4636
  510. package/dist/markdown-editor.cjs.map +0 -1
  511. package/dist/markdown-editor.d.cts +0 -75
  512. package/dist/mermaid.cjs +0 -1138
  513. package/dist/mermaid.cjs.map +0 -1
  514. package/dist/mermaid.d.cts +0 -15
  515. package/dist/rjsf.cjs +0 -10893
  516. package/dist/rjsf.cjs.map +0 -1
  517. package/dist/rjsf.d.cts +0 -55
  518. package/dist/testing.cjs +0 -373
  519. package/dist/testing.cjs.map +0 -1
  520. package/dist/testing.d.cts +0 -25
@@ -0,0 +1,156 @@
1
+ import { cva } from 'class-variance-authority';
2
+
3
+ // src/components/OverlayTrigger/styles.ts
4
+ var overlayTriggerVariants = cva(
5
+ [
6
+ "tailwindcss-preflight",
7
+ "tw:group",
8
+ "tw:box-border",
9
+ // layout
10
+ "tw:inline-flex",
11
+ "tw:items-center",
12
+ "tw:justify-between",
13
+ "tw:gap-2",
14
+ "tw:w-full",
15
+ "tw:text-left",
16
+ // base appearance
17
+ "tw:rounded",
18
+ "tw:border",
19
+ "tw:border-solid",
20
+ "tw:border-neutral-200",
21
+ "tw:text-neutral-800",
22
+ // Scoped transition (no `outline`) — prevents the UA focus-outline color
23
+ // from interpolating through its dark default during state changes.
24
+ "tw:transition-[color,background-color,border-color,box-shadow]",
25
+ // focus base — ring width here, color comes from state variant
26
+ "tw:!outline-hidden",
27
+ "tw:focus:ring-4",
28
+ "tw:data-[state=open]:ring-4",
29
+ // disabled
30
+ "tw:disabled:cursor-not-allowed",
31
+ "tw:aria-disabled:cursor-not-allowed",
32
+ // placeholder (Radix sets data-placeholder on the trigger when no value)
33
+ "tw:data-[placeholder]:text-muted-foreground",
34
+ // child svg defaults
35
+ "tw:[&_svg]:shrink-0",
36
+ "tw:[&_svg]:pointer-events-none"
37
+ ],
38
+ {
39
+ defaultVariants: {
40
+ variant: "primary",
41
+ state: "default",
42
+ sizing: "medium"
43
+ },
44
+ compoundVariants: [
45
+ {
46
+ variant: "secondary",
47
+ state: "error",
48
+ className: ["tw:bg-error-100"]
49
+ },
50
+ {
51
+ variant: "secondary",
52
+ state: "warning",
53
+ className: ["tw:bg-warning-100"]
54
+ },
55
+ // --- argo ---
56
+ {
57
+ variant: "argo",
58
+ state: "default",
59
+ className: [
60
+ "tw:focus:border-primary",
61
+ "tw:focus:ring-ring/50",
62
+ "tw:data-[state=open]:border-primary",
63
+ "tw:data-[state=open]:ring-ring/50"
64
+ ]
65
+ },
66
+ {
67
+ variant: "argo",
68
+ state: "error",
69
+ className: [
70
+ "tw:border-destructive",
71
+ "tw:focus:border-destructive",
72
+ "tw:focus:ring-destructive/20",
73
+ "tw:data-[state=open]:border-destructive",
74
+ "tw:data-[state=open]:ring-destructive/20"
75
+ ]
76
+ }
77
+ ],
78
+ variants: {
79
+ variant: {
80
+ primary: [
81
+ "tw:bg-white",
82
+ "tw:disabled:opacity-40",
83
+ "tw:aria-disabled:opacity-40",
84
+ // aria-invalid on the trigger surfaces the error chrome without a `state` prop — the
85
+ // accessible path (mirrors the `state="error"` legacy tokens). The extra attribute
86
+ // selector outranks the default focus/open state, so it wins without `!important`.
87
+ "tw:aria-[invalid=true]:border-error-500",
88
+ "tw:aria-[invalid=true]:focus:border-error-500",
89
+ "tw:aria-[invalid=true]:focus:ring-error-200",
90
+ "tw:aria-[invalid=true]:data-[state=open]:border-error-500",
91
+ "tw:aria-[invalid=true]:data-[state=open]:ring-error-200"
92
+ ],
93
+ secondary: [
94
+ "tw:bg-neutral-100",
95
+ "tw:border-neutral-100",
96
+ "tw:disabled:opacity-40",
97
+ "tw:aria-disabled:opacity-40",
98
+ "tw:aria-[invalid=true]:border-error-500",
99
+ "tw:aria-[invalid=true]:focus:border-error-500",
100
+ "tw:aria-[invalid=true]:focus:ring-error-200",
101
+ "tw:aria-[invalid=true]:data-[state=open]:border-error-500",
102
+ "tw:aria-[invalid=true]:data-[state=open]:ring-error-200"
103
+ ],
104
+ argo: [
105
+ // muted filled input surface — gray, distinct from white containers; not the app-background token
106
+ "tw:bg-muted",
107
+ "tw:border-input",
108
+ // token-driven radius so the trigger tracks --radius-lg like sibling inputs (InputGroup/Combobox/Button)
109
+ "tw:rounded-[var(--radius-lg,0.25rem)]",
110
+ "tw:text-foreground",
111
+ "tw:disabled:opacity-50",
112
+ "tw:aria-disabled:opacity-50",
113
+ // aria-invalid on the trigger surfaces the error chrome without a `state` prop — the
114
+ // accessible path (uses the themeable `destructive` status token).
115
+ "tw:aria-[invalid=true]:border-destructive",
116
+ "tw:aria-[invalid=true]:focus:border-destructive",
117
+ "tw:aria-[invalid=true]:focus:ring-destructive/20",
118
+ "tw:aria-[invalid=true]:data-[state=open]:border-destructive",
119
+ "tw:aria-[invalid=true]:data-[state=open]:ring-destructive/20"
120
+ ]
121
+ },
122
+ sizing: {
123
+ // border-inclusive heights: 40 / 36 / 32 px (small matches Button small)
124
+ default: ["tw:px-4", "tw:py-2.5", "tw:text-sm/[18px]", "tw:h-10", "tw:min-h-10"],
125
+ medium: ["tw:px-4", "tw:py-2", "tw:text-sm/[18px]", "tw:h-9", "tw:min-h-9"],
126
+ small: ["tw:px-4", "tw:py-2", "tw:text-sm/[16px]", "tw:h-8", "tw:min-h-8"]
127
+ },
128
+ state: {
129
+ default: [
130
+ "tw:focus:border-ring",
131
+ "tw:focus:ring-ring/30",
132
+ "tw:data-[state=open]:border-ring",
133
+ "tw:data-[state=open]:ring-ring/30"
134
+ ],
135
+ error: [
136
+ "tw:border-error-500",
137
+ "tw:focus:border-error-500",
138
+ "tw:focus:ring-error-200",
139
+ "tw:data-[state=open]:border-error-500",
140
+ "tw:data-[state=open]:ring-error-200"
141
+ ],
142
+ warning: [
143
+ "tw:border-warning-500",
144
+ "tw:focus:border-warning-500",
145
+ "tw:focus:ring-warning-200",
146
+ "tw:data-[state=open]:border-warning-500",
147
+ "tw:data-[state=open]:ring-warning-200"
148
+ ]
149
+ }
150
+ }
151
+ }
152
+ );
153
+
154
+ export { overlayTriggerVariants };
155
+ //# sourceMappingURL=chunk-NFHKYBRD.js.map
156
+ //# sourceMappingURL=chunk-NFHKYBRD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/OverlayTrigger/styles.ts"],"names":[],"mappings":"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","file":"chunk-NFHKYBRD.js","sourcesContent":["import { cva } from 'class-variance-authority';\n\n/**\n * Chrome for a control that looks like an input but opens an overlay on click. Shared by\n * `SelectTrigger` and `DateRangePicker`'s trigger so both sit at the same height and colour when\n * they stand next to each other in a filter row.\n */\nexport const overlayTriggerVariants = cva(\n [\n 'tailwindcss-preflight',\n 'tw:group',\n 'tw:box-border',\n\n // layout\n 'tw:inline-flex',\n 'tw:items-center',\n 'tw:justify-between',\n 'tw:gap-2',\n 'tw:w-full',\n 'tw:text-left',\n\n // base appearance\n 'tw:rounded',\n 'tw:border',\n 'tw:border-solid',\n 'tw:border-neutral-200',\n 'tw:text-neutral-800',\n // Scoped transition (no `outline`) — prevents the UA focus-outline color\n // from interpolating through its dark default during state changes.\n 'tw:transition-[color,background-color,border-color,box-shadow]',\n\n // focus base — ring width here, color comes from state variant\n 'tw:!outline-hidden',\n 'tw:focus:ring-4',\n 'tw:data-[state=open]:ring-4',\n\n // disabled\n 'tw:disabled:cursor-not-allowed',\n 'tw:aria-disabled:cursor-not-allowed',\n\n // placeholder (Radix sets data-placeholder on the trigger when no value)\n 'tw:data-[placeholder]:text-muted-foreground',\n\n // child svg defaults\n 'tw:[&_svg]:shrink-0',\n 'tw:[&_svg]:pointer-events-none',\n ],\n {\n defaultVariants: {\n variant: 'primary',\n state: 'default',\n sizing: 'medium',\n },\n compoundVariants: [\n {\n variant: 'secondary',\n state: 'error',\n className: ['tw:bg-error-100'],\n },\n {\n variant: 'secondary',\n state: 'warning',\n className: ['tw:bg-warning-100'],\n },\n // --- argo ---\n {\n variant: 'argo',\n state: 'default',\n className: [\n 'tw:focus:border-primary',\n 'tw:focus:ring-ring/50',\n 'tw:data-[state=open]:border-primary',\n 'tw:data-[state=open]:ring-ring/50',\n ],\n },\n {\n variant: 'argo',\n state: 'error',\n className: [\n 'tw:border-destructive',\n 'tw:focus:border-destructive',\n 'tw:focus:ring-destructive/20',\n 'tw:data-[state=open]:border-destructive',\n 'tw:data-[state=open]:ring-destructive/20',\n ],\n },\n ],\n variants: {\n variant: {\n primary: [\n 'tw:bg-white',\n 'tw:disabled:opacity-40',\n 'tw:aria-disabled:opacity-40',\n // aria-invalid on the trigger surfaces the error chrome without a `state` prop — the\n // accessible path (mirrors the `state=\"error\"` legacy tokens). The extra attribute\n // selector outranks the default focus/open state, so it wins without `!important`.\n 'tw:aria-[invalid=true]:border-error-500',\n 'tw:aria-[invalid=true]:focus:border-error-500',\n 'tw:aria-[invalid=true]:focus:ring-error-200',\n 'tw:aria-[invalid=true]:data-[state=open]:border-error-500',\n 'tw:aria-[invalid=true]:data-[state=open]:ring-error-200',\n ],\n secondary: [\n 'tw:bg-neutral-100',\n 'tw:border-neutral-100',\n 'tw:disabled:opacity-40',\n 'tw:aria-disabled:opacity-40',\n 'tw:aria-[invalid=true]:border-error-500',\n 'tw:aria-[invalid=true]:focus:border-error-500',\n 'tw:aria-[invalid=true]:focus:ring-error-200',\n 'tw:aria-[invalid=true]:data-[state=open]:border-error-500',\n 'tw:aria-[invalid=true]:data-[state=open]:ring-error-200',\n ],\n argo: [\n // muted filled input surface — gray, distinct from white containers; not the app-background token\n 'tw:bg-muted',\n 'tw:border-input',\n // token-driven radius so the trigger tracks --radius-lg like sibling inputs (InputGroup/Combobox/Button)\n 'tw:rounded-[var(--radius-lg,0.25rem)]',\n 'tw:text-foreground',\n 'tw:disabled:opacity-50',\n 'tw:aria-disabled:opacity-50',\n // aria-invalid on the trigger surfaces the error chrome without a `state` prop — the\n // accessible path (uses the themeable `destructive` status token).\n 'tw:aria-[invalid=true]:border-destructive',\n 'tw:aria-[invalid=true]:focus:border-destructive',\n 'tw:aria-[invalid=true]:focus:ring-destructive/20',\n 'tw:aria-[invalid=true]:data-[state=open]:border-destructive',\n 'tw:aria-[invalid=true]:data-[state=open]:ring-destructive/20',\n ],\n },\n sizing: {\n // border-inclusive heights: 40 / 36 / 32 px (small matches Button small)\n default: ['tw:px-4', 'tw:py-2.5', 'tw:text-sm/[18px]', 'tw:h-10', 'tw:min-h-10'],\n medium: ['tw:px-4', 'tw:py-2', 'tw:text-sm/[18px]', 'tw:h-9', 'tw:min-h-9'],\n small: ['tw:px-4', 'tw:py-2', 'tw:text-sm/[16px]', 'tw:h-8', 'tw:min-h-8'],\n },\n state: {\n default: [\n 'tw:focus:border-ring',\n 'tw:focus:ring-ring/30',\n 'tw:data-[state=open]:border-ring',\n 'tw:data-[state=open]:ring-ring/30',\n ],\n error: [\n 'tw:border-error-500',\n 'tw:focus:border-error-500',\n 'tw:focus:ring-error-200',\n 'tw:data-[state=open]:border-error-500',\n 'tw:data-[state=open]:ring-error-200',\n ],\n warning: [\n 'tw:border-warning-500',\n 'tw:focus:border-warning-500',\n 'tw:focus:ring-warning-200',\n 'tw:data-[state=open]:border-warning-500',\n 'tw:data-[state=open]:ring-warning-200',\n ],\n },\n },\n },\n);\n"]}
@@ -0,0 +1,89 @@
1
+ import { ButtonGroup } from './chunk-ANZTVAJU.js';
2
+ import { Separator } from './chunk-6DUMGC7Y.js';
3
+ import { TextInput } from './chunk-HPMYYGP7.js';
4
+ import { Button } from './chunk-IXAYNBOY.js';
5
+ import { ChevronUp, ChevronDown, Search } from './chunk-RQVK4IYC.js';
6
+ import { keyCodes } from './chunk-SWQFYNYG.js';
7
+ import { cn } from './chunk-LXLIQ2D6.js';
8
+ import { jsx, jsxs } from 'react/jsx-runtime';
9
+
10
+ var SearchInputWithNavigation = ({
11
+ ref,
12
+ value,
13
+ onValueChange,
14
+ placeholder = "Search...",
15
+ variant = "secondary",
16
+ onClear,
17
+ focusVariant,
18
+ currentIndex,
19
+ totalResults,
20
+ onNavigateNext,
21
+ onNavigatePrevious,
22
+ className
23
+ }) => {
24
+ const withControls = totalResults > 0;
25
+ const handleKeyDown = (e) => {
26
+ if (e.key === keyCodes.ENTER) {
27
+ e.preventDefault();
28
+ e.shiftKey ? onNavigatePrevious() : onNavigateNext();
29
+ }
30
+ };
31
+ return /* @__PURE__ */ jsx(
32
+ TextInput,
33
+ {
34
+ ref,
35
+ allowClear: true,
36
+ value,
37
+ placeholder,
38
+ onValueChange,
39
+ onClear,
40
+ prefix: /* @__PURE__ */ jsx(Search, { className: "tw:size-4 tw:shrink-0 tw:text-neutral-400" }),
41
+ focusVariant,
42
+ onKeyDown: handleKeyDown,
43
+ variant,
44
+ className,
45
+ leftSuffix: /* @__PURE__ */ jsxs(
46
+ "div",
47
+ {
48
+ className: cn("tw:flex tw:items-center tw:gap-3", {
49
+ "tw:hidden": !withControls
50
+ }),
51
+ children: [
52
+ /* @__PURE__ */ jsxs("span", { className: "tw:text-xs tw:text-neutral-400", children: [
53
+ totalResults > 0 ? currentIndex ?? 0 : 0,
54
+ "/",
55
+ totalResults
56
+ ] }),
57
+ /* @__PURE__ */ jsx(Separator, { orientation: "vertical", size: "3/4" }),
58
+ /* @__PURE__ */ jsxs(ButtonGroup, { children: [
59
+ /* @__PURE__ */ jsx(
60
+ Button,
61
+ {
62
+ variant: "inline",
63
+ size: "icon-3xs",
64
+ onClick: onNavigatePrevious,
65
+ disabled: !totalResults,
66
+ children: /* @__PURE__ */ jsx(ChevronUp, { className: "tw:size-4" })
67
+ }
68
+ ),
69
+ /* @__PURE__ */ jsx(
70
+ Button,
71
+ {
72
+ variant: "inline",
73
+ size: "icon-3xs",
74
+ onClick: onNavigateNext,
75
+ disabled: !totalResults,
76
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "tw:size-4" })
77
+ }
78
+ )
79
+ ] })
80
+ ]
81
+ }
82
+ )
83
+ }
84
+ );
85
+ };
86
+
87
+ export { SearchInputWithNavigation };
88
+ //# sourceMappingURL=chunk-NHJNNXD3.js.map
89
+ //# sourceMappingURL=chunk-NHJNNXD3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/blocks/SearchInputWithNavigation/SearchInputWithNavigation.tsx"],"names":[],"mappings":";;;;;;;;;AAyBO,IAAM,4BAA4B,CAAC;AAAA,EACxC,GAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA,GAAc,WAAA;AAAA,EACd,OAAA,GAAU,WAAA;AAAA,EACV,OAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAwE;AACtE,EAAA,MAAM,eAAe,YAAA,GAAe,CAAA;AAEpC,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC1C,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,CAAS,KAAA,EAAO;AAC5B,MAAA,CAAA,CAAE,cAAA,EAAe;AAEjB,MAAA,CAAA,CAAE,QAAA,GAAW,kBAAA,EAAmB,GAAI,cAAA,EAAe;AAAA,IACrD;AAAA,EACF,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,KAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,kBAAQ,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,2CAAA,EAA4C,CAAA;AAAA,MACtE,YAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX,OAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA,kBACE,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,kCAAA,EAAoC;AAAA,YAChD,aAAa,CAAC;AAAA,WACf,CAAA;AAAA,UAED,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gCAAA,EACb,QAAA,EAAA;AAAA,cAAA,YAAA,GAAe,CAAA,GAAK,gBAAgB,CAAA,GAAK,CAAA;AAAA,cAAE,GAAA;AAAA,cAAE;AAAA,aAAA,EAChD,CAAA;AAAA,4BACA,GAAA,CAAC,SAAA,EAAA,EAAU,WAAA,EAAY,UAAA,EAAW,MAAK,KAAA,EAAM,CAAA;AAAA,iCAC5C,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,QAAA;AAAA,kBACR,IAAA,EAAK,UAAA;AAAA,kBACL,OAAA,EAAS,kBAAA;AAAA,kBACT,UAAU,CAAC,YAAA;AAAA,kBAEX,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EAAY;AAAA;AAAA,eACnC;AAAA,8BACA,GAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,QAAA;AAAA,kBACR,IAAA,EAAK,UAAA;AAAA,kBACL,OAAA,EAAS,cAAA;AAAA,kBACT,UAAU,CAAC,YAAA;AAAA,kBAEX,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EAAY;AAAA;AAAA;AACrC,aAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,GAEJ;AAEJ","file":"chunk-NHJNNXD3.js","sourcesContent":["import type { ComponentProps, KeyboardEvent, Ref } from 'react';\n\nimport { Button } from '../../components/Button';\nimport { ButtonGroup } from '../../components/ButtonGroup';\nimport { Separator } from '../../components/Separator';\nimport { keyCodes } from '../../constants/keyCodes';\nimport { ChevronDown, ChevronUp, Search } from '../../icons';\nimport { cn } from '../../utils';\nimport { TextInput } from '../TextInput';\n\ntype SearchInputWithNavigationProps = {\n currentIndex: number | null;\n totalResults: number;\n onValueChange: (value: string) => void;\n onNavigateNext: () => void;\n onNavigatePrevious: () => void;\n\n value?: string;\n placeholder?: string;\n variant?: 'primary' | 'secondary';\n onClear?: () => void;\n focusVariant?: ComponentProps<typeof TextInput>['focusVariant'];\n className?: string;\n};\n\nexport const SearchInputWithNavigation = ({\n ref,\n value,\n onValueChange,\n placeholder = 'Search...',\n variant = 'secondary',\n onClear,\n focusVariant,\n currentIndex,\n totalResults,\n onNavigateNext,\n onNavigatePrevious,\n className,\n}: SearchInputWithNavigationProps & { ref?: Ref<HTMLInputElement> }) => {\n const withControls = totalResults > 0;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === keyCodes.ENTER) {\n e.preventDefault();\n\n e.shiftKey ? onNavigatePrevious() : onNavigateNext();\n }\n };\n\n return (\n <TextInput\n ref={ref}\n allowClear\n value={value}\n placeholder={placeholder}\n onValueChange={onValueChange}\n onClear={onClear}\n prefix={<Search className=\"tw:size-4 tw:shrink-0 tw:text-neutral-400\" />}\n focusVariant={focusVariant}\n onKeyDown={handleKeyDown}\n variant={variant}\n className={className}\n leftSuffix={\n <div\n className={cn('tw:flex tw:items-center tw:gap-3', {\n 'tw:hidden': !withControls,\n })}\n >\n <span className=\"tw:text-xs tw:text-neutral-400\">\n {totalResults > 0 ? (currentIndex ?? 0) : 0}/{totalResults}\n </span>\n <Separator orientation=\"vertical\" size=\"3/4\" />\n <ButtonGroup>\n <Button\n variant=\"inline\"\n size=\"icon-3xs\"\n onClick={onNavigatePrevious}\n disabled={!totalResults}\n >\n <ChevronUp className=\"tw:size-4\" />\n </Button>\n <Button\n variant=\"inline\"\n size=\"icon-3xs\"\n onClick={onNavigateNext}\n disabled={!totalResults}\n >\n <ChevronDown className=\"tw:size-4\" />\n </Button>\n </ButtonGroup>\n </div>\n }\n />\n );\n};\n"]}
@@ -0,0 +1,33 @@
1
+ import { CircleCheck, AlertTriangle } from './chunk-RQVK4IYC.js';
2
+ import { cn } from './chunk-LXLIQ2D6.js';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+
5
+ var ConflictStatusIndicator = ({ remainingConflicts, remainingSafeChanges }) => {
6
+ const hasConflicts = remainingConflicts > 0;
7
+ const allDone = !hasConflicts && remainingSafeChanges === 0;
8
+ const colorClass = hasConflicts ? "tw:text-warning-500" : allDone ? "tw:text-green-500" : "tw:text-muted-foreground";
9
+ const parts = [];
10
+ if (hasConflicts) {
11
+ parts.push(`${remainingConflicts} conflict${remainingConflicts !== 1 ? "s" : ""}`);
12
+ }
13
+ if (remainingSafeChanges > 0) {
14
+ parts.push(`${remainingSafeChanges} change${remainingSafeChanges !== 1 ? "s" : ""}`);
15
+ }
16
+ return /* @__PURE__ */ jsxs(
17
+ "p",
18
+ {
19
+ className: cn(
20
+ "tw:m-0 tw:flex tw:items-center tw:gap-1.5 tw:text-sm tw:font-medium",
21
+ colorClass
22
+ ),
23
+ children: [
24
+ allDone ? /* @__PURE__ */ jsx(CircleCheck, { className: "tw:size-4" }) : /* @__PURE__ */ jsx(AlertTriangle, { className: "tw:size-4" }),
25
+ allDone ? "All changes resolved" : `${parts.join(", ")} remaining`
26
+ ]
27
+ }
28
+ );
29
+ };
30
+
31
+ export { ConflictStatusIndicator };
32
+ //# sourceMappingURL=chunk-O2BF3HZL.js.map
33
+ //# sourceMappingURL=chunk-O2BF3HZL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/MergeEditor/ConflictStatus/ConflictStatusIndicator.tsx"],"names":[],"mappings":";;;;AAQO,IAAM,uBAAA,GAA0B,CAAC,EAAE,kBAAA,EAAoB,sBAAqB,KAAa;AAC9F,EAAA,MAAM,eAAe,kBAAA,GAAqB,CAAA;AAC1C,EAAA,MAAM,OAAA,GAAU,CAAC,YAAA,IAAgB,oBAAA,KAAyB,CAAA;AAE1D,EAAA,MAAM,UAAA,GAAa,YAAA,GACf,qBAAA,GACA,OAAA,GACE,mBAAA,GACA,0BAAA;AAEN,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,kBAAkB,CAAA,SAAA,EAAY,uBAAuB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AAAA,EACnF;AACA,EAAA,IAAI,uBAAuB,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,oBAAoB,CAAA,OAAA,EAAU,yBAAyB,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AAAA,EACrF;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,qEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA,mBAAU,GAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EAAY,oBAAK,GAAA,CAAC,aAAA,EAAA,EAAc,WAAU,WAAA,EAAY,CAAA;AAAA,QACvF,UAAU,sBAAA,GAAyB,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,UAAA;AAAA;AAAA;AAAA,GACzD;AAEJ","file":"chunk-O2BF3HZL.js","sourcesContent":["import { AlertTriangle, CircleCheck } from '../../../icons';\nimport { cn } from '../../../utils';\n\ntype Props = {\n remainingConflicts: number;\n remainingSafeChanges: number;\n};\n\nexport const ConflictStatusIndicator = ({ remainingConflicts, remainingSafeChanges }: Props) => {\n const hasConflicts = remainingConflicts > 0;\n const allDone = !hasConflicts && remainingSafeChanges === 0;\n\n const colorClass = hasConflicts\n ? 'tw:text-warning-500'\n : allDone\n ? 'tw:text-green-500'\n : 'tw:text-muted-foreground';\n\n const parts: string[] = [];\n if (hasConflicts) {\n parts.push(`${remainingConflicts} conflict${remainingConflicts !== 1 ? 's' : ''}`);\n }\n if (remainingSafeChanges > 0) {\n parts.push(`${remainingSafeChanges} change${remainingSafeChanges !== 1 ? 's' : ''}`);\n }\n\n return (\n <p\n className={cn(\n 'tw:m-0 tw:flex tw:items-center tw:gap-1.5 tw:text-sm tw:font-medium',\n colorClass,\n )}\n >\n {allDone ? <CircleCheck className=\"tw:size-4\" /> : <AlertTriangle className=\"tw:size-4\" />}\n {allDone ? 'All changes resolved' : `${parts.join(', ')} remaining`}\n </p>\n );\n};\n"]}
@@ -0,0 +1,212 @@
1
+ import { isGroupItems, isGroupItem, createCreatableItem, Combobox as Combobox$1, defaultItemToLabel, isCreatableItem, defaultQueryToCreateLabel, defaultGroupToLabel, defaultItemToDisabled, defaultItemToIcon, toLabel, defaultToCreateValue, isLabeledItem } from './chunk-5AIE6SET.js';
2
+ import { InputGroup } from './chunk-SC275NHZ.js';
3
+ import { X, ChevronDown, Plus } from './chunk-RQVK4IYC.js';
4
+ import { useArgoDesign } from './chunk-WETKNYZX.js';
5
+ import { useState, Fragment } from 'react';
6
+ import { Combobox } from '@base-ui/react/combobox';
7
+ import { jsxs, jsx } from 'react/jsx-runtime';
8
+
9
+ var selectAllItem = {
10
+ value: "__select_all__",
11
+ label: "Select All"
12
+ };
13
+ var isSelectAllItem = (item) => isLabeledItem(item) && item.value === "__select_all__";
14
+ var MultiCombobox = ({
15
+ // root props
16
+ items: _itemsProp,
17
+ value: _valueProp,
18
+ defaultValue,
19
+ onValueChange,
20
+ itemToStringLabel,
21
+ itemToStringValue,
22
+ disabled,
23
+ filter: filterProp,
24
+ inputRef,
25
+ // input props
26
+ variant,
27
+ sizing,
28
+ focusVariant,
29
+ state,
30
+ placeholder,
31
+ allowClear,
32
+ id,
33
+ className,
34
+ // own props
35
+ allowSelectAll = false,
36
+ empty = "No items",
37
+ indicator,
38
+ // creatable
39
+ allowCreate,
40
+ queryToCreateValue,
41
+ queryToCreateLabel = defaultQueryToCreateLabel,
42
+ // own item props
43
+ itemToDisabled = defaultItemToDisabled,
44
+ itemToLabel = defaultItemToLabel,
45
+ itemToIcon = defaultItemToIcon,
46
+ groupToLabel = defaultGroupToLabel,
47
+ itemToChipLabel,
48
+ itemToChipColor,
49
+ maxVisible = 3
50
+ }) => {
51
+ const itemsProp = _itemsProp ?? [];
52
+ const valueProp = _valueProp ?? [];
53
+ const renderArgo = useArgoDesign();
54
+ const chipVariant = renderArgo ? "pill" : "default";
55
+ const [inputValue, setInputValue] = useState("");
56
+ const [createdItems, setCreatedItems] = useState([]);
57
+ const query = inputValue.trim();
58
+ const queryLower = query.toLowerCase();
59
+ const baseItems = (() => {
60
+ if (createdItems.length === 0) return itemsProp;
61
+ if (isGroupItems(itemsProp))
62
+ return [...itemsProp, { items: createdItems }];
63
+ return [...itemsProp, ...createdItems];
64
+ })();
65
+ const allFlatItems = baseItems.flatMap((item) => isGroupItem(item) ? item.items : item);
66
+ const sampleItem = allFlatItems[0];
67
+ const isAllSelected = allFlatItems.length === (valueProp?.length ?? 0);
68
+ const defaultFilter = Combobox.useFilter({
69
+ multiple: true,
70
+ value: valueProp
71
+ });
72
+ const itemsWithSelectAllItem = (() => {
73
+ if (!allowSelectAll) return baseItems;
74
+ return [selectAllItem, ...baseItems];
75
+ })();
76
+ const itemToString = (item) => itemToStringLabel?.(item) ?? toLabel(item);
77
+ const items = (() => {
78
+ const base = itemsWithSelectAllItem;
79
+ if (!allowCreate || disabled || !query) return base;
80
+ const exactMatch = allFlatItems.some((item) => itemToString(item).toLowerCase() === queryLower);
81
+ const alreadySelected = valueProp.some(
82
+ (item) => itemToString(item).toLowerCase() === queryLower
83
+ );
84
+ if (exactMatch || alreadySelected) return base;
85
+ const creatable = createCreatableItem(query);
86
+ return isGroupItems(base) ? [...base, { items: [creatable] }] : [...base, creatable];
87
+ })();
88
+ const filter = (item, query2, itemToString2) => {
89
+ if (isSelectAllItem(item)) return true;
90
+ if (isCreatableItem(item)) return true;
91
+ if (filterProp) return filterProp(item, query2, itemToString2);
92
+ return defaultFilter.contains(item, query2, itemToString2);
93
+ };
94
+ const wrappedItemToStringLabel = !allowCreate ? itemToStringLabel : (item) => isCreatableItem(item) ? item.value : itemToString(item);
95
+ const wrappedItemToStringValue = !allowCreate || !itemToStringValue ? itemToStringValue : (item) => isCreatableItem(item) ? item.value : itemToStringValue(item);
96
+ const value = (() => {
97
+ if (!allowSelectAll) return valueProp;
98
+ return isAllSelected ? [...valueProp, selectAllItem] : valueProp;
99
+ })();
100
+ const handleValueChange = (next, event) => {
101
+ if (!onValueChange) return;
102
+ const created = [];
103
+ const converted = allowCreate ? next.map((item) => {
104
+ if (!isCreatableItem(item)) return item;
105
+ const value2 = defaultToCreateValue(item.value, sampleItem, queryToCreateValue);
106
+ created.push(value2);
107
+ return value2;
108
+ }) : next;
109
+ if (allowCreate) {
110
+ if (created.length > 0) setCreatedItems((prev) => [...prev, ...created]);
111
+ setInputValue("");
112
+ }
113
+ const hasSelectAll = converted.some((item) => isSelectAllItem(item));
114
+ const newValue = (() => {
115
+ if (!allowSelectAll) return converted;
116
+ if (!hasSelectAll) return isAllSelected ? [] : converted;
117
+ return isAllSelected ? converted.filter((item) => !isSelectAllItem(item)) : allFlatItems;
118
+ })();
119
+ onValueChange(newValue, event);
120
+ };
121
+ const renderItem = (item) => {
122
+ return /* @__PURE__ */ jsx(
123
+ Combobox$1.Item,
124
+ {
125
+ value: item,
126
+ indicator,
127
+ icon: itemToIcon(item),
128
+ disabled: itemToDisabled(item),
129
+ children: itemToLabel(item)
130
+ }
131
+ );
132
+ };
133
+ return /* @__PURE__ */ jsxs(
134
+ Combobox$1.Root,
135
+ {
136
+ multiple: true,
137
+ items,
138
+ value,
139
+ defaultValue,
140
+ filter,
141
+ onValueChange: handleValueChange,
142
+ itemToStringLabel: wrappedItemToStringLabel,
143
+ itemToStringValue: wrappedItemToStringValue,
144
+ disabled,
145
+ inputRef,
146
+ ...allowCreate ? { inputValue, onInputValueChange: (nextValue) => setInputValue(nextValue) } : {},
147
+ children: [
148
+ /* @__PURE__ */ jsx(Combobox.Chips, { render: /* @__PURE__ */ jsx(Fragment, {}), children: /* @__PURE__ */ jsx(
149
+ Combobox$1.InputGroup,
150
+ {
151
+ variant,
152
+ sizing,
153
+ state,
154
+ focusVariant,
155
+ className,
156
+ children: /* @__PURE__ */ jsxs("div", { className: "tw:flex tw:min-w-0 tw:flex-1 tw:flex-wrap tw:items-center tw:gap-1.5 tw:px-4 tw:py-1.5", children: [
157
+ /* @__PURE__ */ jsx(
158
+ Combobox$1.Chips,
159
+ {
160
+ maxVisible,
161
+ variant: chipVariant,
162
+ itemToChipLabel: itemToChipLabel ?? itemToLabel,
163
+ itemToChipColor
164
+ }
165
+ ),
166
+ /* @__PURE__ */ jsxs("div", { className: "tw:flex tw:flex-1 tw:items-center tw:gap-1", children: [
167
+ /* @__PURE__ */ jsx(
168
+ Combobox$1.Input,
169
+ {
170
+ id,
171
+ placeholder,
172
+ disabled,
173
+ className: "tw:w-auto tw:min-w-[120px] tw:flex-1"
174
+ }
175
+ ),
176
+ allowClear && /* @__PURE__ */ jsx(InputGroup.Button, { asChild: true, "aria-label": "Clear", disabled, children: /* @__PURE__ */ jsx(Combobox.Clear, { children: /* @__PURE__ */ jsx(X, { className: "tw:size-4" }) }) }),
177
+ /* @__PURE__ */ jsx(InputGroup.Button, { disabled, asChild: true, "aria-label": "Open combobox", children: /* @__PURE__ */ jsx(Combobox.Trigger, { children: /* @__PURE__ */ jsx(ChevronDown, { className: "tw:size-4" }) }) })
178
+ ] })
179
+ ] })
180
+ }
181
+ ) }),
182
+ /* @__PURE__ */ jsxs(Combobox$1.Content, { children: [
183
+ /* @__PURE__ */ jsx(Combobox$1.Empty, { children: empty }),
184
+ /* @__PURE__ */ jsx(Combobox$1.List, { children: (itemOrGroup) => {
185
+ if (isSelectAllItem(itemOrGroup)) {
186
+ return /* @__PURE__ */ jsx(Combobox$1.Item, { value: itemOrGroup, indicator: "checkbox", children: "Select All" });
187
+ }
188
+ if (isCreatableItem(itemOrGroup)) {
189
+ return /* @__PURE__ */ jsx(Combobox$1.Item, { value: itemOrGroup, icon: /* @__PURE__ */ jsx(Plus, {}), children: queryToCreateLabel(itemOrGroup.value) });
190
+ }
191
+ if (isGroupItem(itemOrGroup)) {
192
+ const maybeCreatable = itemOrGroup.items[0];
193
+ if (isCreatableItem(maybeCreatable)) {
194
+ return /* @__PURE__ */ jsx(Combobox$1.Item, { value: maybeCreatable, icon: /* @__PURE__ */ jsx(Plus, {}), children: queryToCreateLabel(maybeCreatable.value) });
195
+ }
196
+ const groupLabel = groupToLabel(itemOrGroup);
197
+ return /* @__PURE__ */ jsxs(Combobox$1.Group, { items: itemOrGroup.items, children: [
198
+ groupLabel && /* @__PURE__ */ jsx(Combobox$1.GroupLabel, { children: groupLabel }),
199
+ /* @__PURE__ */ jsx(Combobox$1.GroupList, { children: renderItem })
200
+ ] });
201
+ }
202
+ return renderItem(itemOrGroup);
203
+ } })
204
+ ] })
205
+ ]
206
+ }
207
+ );
208
+ };
209
+
210
+ export { MultiCombobox };
211
+ //# sourceMappingURL=chunk-OANXCZYD.js.map
212
+ //# sourceMappingURL=chunk-OANXCZYD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/blocks/MultiCombobox/MultiCombobox.tsx"],"names":["BaseCombobox","query","itemToString","value","Combobox"],"mappings":"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","file":"chunk-OANXCZYD.js","sourcesContent":["import { type ComponentProps, Fragment, type ReactNode, useState } from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\n\nimport { Combobox } from '../../components/Combobox';\nimport type { Group, LabeledItem } from '../../components/Combobox/types';\nimport {\n createCreatableItem,\n defaultGroupToLabel,\n defaultItemToDisabled,\n defaultItemToIcon,\n defaultItemToLabel,\n defaultQueryToCreateLabel,\n defaultToCreateValue,\n isCreatableItem,\n isGroupItem,\n isGroupItems,\n isLabeledItem,\n toLabel,\n} from '../../components/Combobox/utils';\nimport { InputGroup } from '../../components/InputGroup';\nimport { useArgoDesign } from '../../components/ThemeProvider/context';\nimport { ChevronDown, Plus, X } from '../../icons';\n\ntype ComboboxProps<Value> = BaseCombobox.Root.Props<Value, true>;\ntype ComboboxInputProps = ComponentProps<typeof Combobox.Input>;\ntype ComboboxInputGroupProps = ComponentProps<typeof Combobox.InputGroup>;\ntype ComboboxItemProps = ComponentProps<typeof Combobox.Item>;\ntype ComboboxChipsProps = ComponentProps<typeof Combobox.Chips>;\n\ntype Indicator = NonNullable<ComboboxItemProps['indicator']>;\n\ntype CreatableProps<Value> = {\n allowCreate?: boolean;\n queryToCreateLabel?: (query: string) => ReactNode;\n queryToCreateValue?: (query: string) => Value;\n};\n\n/**\n * Props for `MultiCombobox`. Generic over `Value` (the item shape) and `GroupShape` (optional group wrapper).\n * Use `itemToLabel` / `itemToIcon` / `itemToDisabled` to project custom item shapes; use `filter` to override\n * the default substring matcher. Pass `allowCreate` to let the user add free-form values not in `items`.\n */\ntype Props<Value, GroupShape extends Group<Value> = Group<Value>> = Pick<\n ComboboxInputProps,\n 'placeholder' | 'id'\n> &\n Pick<ComboboxInputGroupProps, 'variant' | 'focusVariant' | 'sizing' | 'state' | 'className'> &\n Pick<\n ComboboxProps<Value>,\n | 'disabled'\n | 'inputRef'\n | 'value'\n | 'defaultValue'\n | 'onValueChange'\n | 'itemToStringLabel'\n | 'itemToStringValue'\n | 'filter'\n > &\n Pick<ComboboxChipsProps, 'itemToChipLabel' | 'itemToChipColor' | 'maxVisible'> &\n CreatableProps<Value> & {\n items?: readonly (Value | GroupShape)[];\n\n // root specific\n allowClear?: boolean;\n allowSelectAll?: boolean;\n empty?: ReactNode;\n indicator?: Indicator;\n\n // item specific\n itemToLabel?: (item: Value) => ReactNode;\n itemToIcon?: (item: Value) => ReactNode;\n itemToDisabled?: (item: Value) => boolean;\n\n // group specific\n groupToLabel?: (group: GroupShape) => ReactNode;\n };\n\nconst selectAllItem: LabeledItem = {\n value: '__select_all__',\n label: 'Select All',\n};\n\nconst isSelectAllItem = <Value,>(item: Value) =>\n isLabeledItem(item) && item.value === '__select_all__';\n\n/**\n * Multi-selection combobox with chip display and search. Built on Base UI Combobox.\n *\n * **When to use:** picking several items from a searchable enumerated list (filter by tags, assign labels).\n * Items render as chips above the input; `maxVisible` collapses excess into a `+N more` chip.\n * **When NOT to use:** for single selection use `Combobox`; for short enums without search use `Select`.\n * **Composition:** wrap in `FormGroup` for label + help text, or use `useAppForm` for form integration.\n * Pass `allowSelectAll` for a sticky \"Select All\" item when the full enum is small. Pass `allowCreate`\n * to let the user add free-form values that are not in `items` (e.g. entering column names by hand).\n *\n * @see RECIPES.md#creatable-multi-combobox — for free-form-plus-enumerated patterns\n * @see RECIPES.md#filter-toolbar — for combining multi-select with other filter chips\n */\nexport const MultiCombobox = <Value, GroupShape extends Group<Value> = Group<Value>>({\n // root props\n items: _itemsProp,\n value: _valueProp,\n defaultValue,\n onValueChange,\n itemToStringLabel,\n itemToStringValue,\n disabled,\n filter: filterProp,\n inputRef,\n\n // input props\n variant,\n sizing,\n focusVariant,\n state,\n placeholder,\n allowClear,\n id,\n className,\n\n // own props\n allowSelectAll = false,\n empty = 'No items',\n indicator,\n\n // creatable\n allowCreate,\n queryToCreateValue,\n queryToCreateLabel = defaultQueryToCreateLabel,\n\n // own item props\n itemToDisabled = defaultItemToDisabled,\n itemToLabel = defaultItemToLabel,\n itemToIcon = defaultItemToIcon,\n groupToLabel = defaultGroupToLabel,\n itemToChipLabel,\n itemToChipColor,\n maxVisible = 3,\n}: Props<Value, GroupShape>) => {\n const itemsProp = _itemsProp ?? [];\n const valueProp = _valueProp ?? [];\n const renderArgo = useArgoDesign();\n const chipVariant = renderArgo ? 'pill' : 'default';\n\n const [inputValue, setInputValue] = useState('');\n const [createdItems, setCreatedItems] = useState<Value[]>([]);\n const query = inputValue.trim();\n const queryLower = query.toLowerCase();\n\n // Created values are appended to `items` so Base UI can keep resolving them (as chips and as\n // list options) once the query clears — otherwise a value that isn't in `items` gets dropped.\n const baseItems = (() => {\n if (createdItems.length === 0) return itemsProp;\n if (isGroupItems(itemsProp))\n return [...itemsProp, { items: createdItems } as unknown as GroupShape];\n return [...itemsProp, ...createdItems];\n })();\n\n const allFlatItems = baseItems.flatMap((item) => (isGroupItem(item) ? item.items : item));\n const sampleItem = allFlatItems[0] as Value | undefined;\n const isAllSelected = allFlatItems.length === (valueProp?.length ?? 0);\n\n const defaultFilter = BaseCombobox.useFilter({\n multiple: true,\n value: valueProp,\n });\n\n const itemsWithSelectAllItem = (() => {\n if (!allowSelectAll) return baseItems;\n return [selectAllItem, ...baseItems];\n })();\n\n const itemToString = (item: Value) => itemToStringLabel?.(item) ?? toLabel(item);\n\n const items = (() => {\n const base = itemsWithSelectAllItem;\n if (!allowCreate || disabled || !query) return base;\n\n const exactMatch = allFlatItems.some((item) => itemToString(item).toLowerCase() === queryLower);\n const alreadySelected = valueProp.some(\n (item) => itemToString(item).toLowerCase() === queryLower,\n );\n if (exactMatch || alreadySelected) return base;\n\n const creatable = createCreatableItem(query);\n return isGroupItems(base)\n ? [...base, { items: [creatable] } as unknown as GroupShape]\n : [...base, creatable as unknown as Value];\n })();\n\n const filter = (item: Value, query: string, itemToString?: (value: Value) => string) => {\n // keep select always visible\n if (isSelectAllItem(item)) return true;\n // always offer the transient \"create\" option\n if (isCreatableItem(item)) return true;\n\n if (filterProp) return filterProp(item, query, itemToString);\n return defaultFilter.contains(item, query, itemToString);\n };\n\n const wrappedItemToStringLabel: ComboboxProps<Value>['itemToStringLabel'] = !allowCreate\n ? itemToStringLabel\n : (item) => (isCreatableItem(item) ? item.value : itemToString(item));\n\n const wrappedItemToStringValue: ComboboxProps<Value>['itemToStringValue'] =\n !allowCreate || !itemToStringValue\n ? itemToStringValue\n : (item) => (isCreatableItem(item) ? item.value : itemToStringValue(item));\n\n const value = (() => {\n if (!allowSelectAll) return valueProp;\n return isAllSelected ? [...valueProp, selectAllItem as Value] : valueProp;\n })();\n\n const handleValueChange: ComboboxProps<Value>['onValueChange'] = (next, event) => {\n if (!onValueChange) return;\n\n const created: Value[] = [];\n const converted = allowCreate\n ? next.map((item) => {\n if (!isCreatableItem(item)) return item;\n const value = defaultToCreateValue(item.value, sampleItem, queryToCreateValue) as Value;\n created.push(value);\n return value;\n })\n : next;\n\n if (allowCreate) {\n if (created.length > 0) setCreatedItems((prev) => [...prev, ...created]);\n setInputValue('');\n }\n\n const hasSelectAll = converted.some((item) => isSelectAllItem(item));\n const newValue = (() => {\n if (!allowSelectAll) return converted;\n if (!hasSelectAll) return isAllSelected ? [] : converted;\n return isAllSelected ? converted.filter((item) => !isSelectAllItem(item)) : allFlatItems;\n })();\n\n onValueChange(newValue, event);\n };\n\n const renderItem = (item: Value) => {\n return (\n <Combobox.Item\n value={item}\n indicator={indicator}\n icon={itemToIcon(item)}\n disabled={itemToDisabled(item)}\n >\n {itemToLabel(item)}\n </Combobox.Item>\n );\n };\n\n return (\n <Combobox.Root<Value, true>\n multiple\n items={items}\n value={value}\n defaultValue={defaultValue}\n filter={filter}\n onValueChange={handleValueChange}\n itemToStringLabel={wrappedItemToStringLabel}\n itemToStringValue={wrappedItemToStringValue}\n disabled={disabled}\n inputRef={inputRef}\n {...(allowCreate\n ? { inputValue, onInputValueChange: (nextValue: string) => setInputValue(nextValue) }\n : {})}\n >\n <BaseCombobox.Chips render={<Fragment />}>\n <Combobox.InputGroup\n variant={variant}\n sizing={sizing}\n state={state}\n focusVariant={focusVariant}\n className={className}\n >\n <div className=\"tw:flex tw:min-w-0 tw:flex-1 tw:flex-wrap tw:items-center tw:gap-1.5 tw:px-4 tw:py-1.5\">\n <Combobox.Chips<Value>\n maxVisible={maxVisible}\n variant={chipVariant}\n itemToChipLabel={itemToChipLabel ?? itemToLabel}\n itemToChipColor={itemToChipColor}\n />\n <div className=\"tw:flex tw:flex-1 tw:items-center tw:gap-1\">\n <Combobox.Input\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n className=\"tw:w-auto tw:min-w-[120px] tw:flex-1\"\n />\n {allowClear && (\n <InputGroup.Button asChild aria-label=\"Clear\" disabled={disabled}>\n <BaseCombobox.Clear>\n <X className=\"tw:size-4\" />\n </BaseCombobox.Clear>\n </InputGroup.Button>\n )}\n <InputGroup.Button disabled={disabled} asChild aria-label=\"Open combobox\">\n <BaseCombobox.Trigger>\n <ChevronDown className=\"tw:size-4\" />\n </BaseCombobox.Trigger>\n </InputGroup.Button>\n </div>\n </div>\n </Combobox.InputGroup>\n </BaseCombobox.Chips>\n <Combobox.Content>\n <Combobox.Empty>{empty}</Combobox.Empty>\n <Combobox.List>\n {(itemOrGroup: Value | GroupShape) => {\n if (isSelectAllItem(itemOrGroup)) {\n return (\n <Combobox.Item value={itemOrGroup} indicator=\"checkbox\">\n Select All\n </Combobox.Item>\n );\n }\n\n if (isCreatableItem(itemOrGroup)) {\n return (\n <Combobox.Item value={itemOrGroup} icon={<Plus />}>\n {queryToCreateLabel(itemOrGroup.value)}\n </Combobox.Item>\n );\n }\n\n if (isGroupItem(itemOrGroup)) {\n const maybeCreatable = itemOrGroup.items[0];\n\n if (isCreatableItem(maybeCreatable)) {\n return (\n <Combobox.Item value={maybeCreatable} icon={<Plus />}>\n {queryToCreateLabel(maybeCreatable.value)}\n </Combobox.Item>\n );\n }\n\n const groupLabel = groupToLabel(itemOrGroup);\n return (\n <Combobox.Group items={itemOrGroup.items}>\n {groupLabel && <Combobox.GroupLabel>{groupLabel}</Combobox.GroupLabel>}\n <Combobox.GroupList>{renderItem}</Combobox.GroupList>\n </Combobox.Group>\n );\n }\n\n return renderItem(itemOrGroup);\n }}\n </Combobox.List>\n </Combobox.Content>\n </Combobox.Root>\n );\n};\n"]}