optikos 0.0.0-stage → 0.2.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 (527) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/LICENSE +21 -0
  3. package/README.md +213 -2
  4. package/THIRD_PARTY_NOTICES.md +83 -0
  5. package/dist/bind.js +2 -0
  6. package/dist/bind.js.map +7 -0
  7. package/dist/chunk-23XLG2EM.js +2 -0
  8. package/dist/chunk-23XLG2EM.js.map +7 -0
  9. package/dist/chunk-27UZFEXD.js +2 -0
  10. package/dist/chunk-27UZFEXD.js.map +7 -0
  11. package/dist/chunk-2UPUC4RK.js +2 -0
  12. package/dist/chunk-2UPUC4RK.js.map +7 -0
  13. package/dist/chunk-2ZRNGG2N.js +2 -0
  14. package/dist/chunk-2ZRNGG2N.js.map +7 -0
  15. package/dist/chunk-2ZUZ5HDL.js +2 -0
  16. package/dist/chunk-2ZUZ5HDL.js.map +7 -0
  17. package/dist/chunk-3DBEZGOY.js +2 -0
  18. package/dist/chunk-3DBEZGOY.js.map +7 -0
  19. package/dist/chunk-3S24ZRPK.js +2 -0
  20. package/dist/chunk-3S24ZRPK.js.map +7 -0
  21. package/dist/chunk-3TAW4AKH.js +2 -0
  22. package/dist/chunk-3TAW4AKH.js.map +7 -0
  23. package/dist/chunk-4AA4FQEM.js +2 -0
  24. package/dist/chunk-4AA4FQEM.js.map +7 -0
  25. package/dist/chunk-4C666HHU.js +2 -0
  26. package/dist/chunk-4C666HHU.js.map +7 -0
  27. package/dist/chunk-4EZJ5FKJ.js +2 -0
  28. package/dist/chunk-4EZJ5FKJ.js.map +7 -0
  29. package/dist/chunk-4LZZ244E.js +2 -0
  30. package/dist/chunk-4LZZ244E.js.map +7 -0
  31. package/dist/chunk-4SYIIX5A.js +2 -0
  32. package/dist/chunk-4SYIIX5A.js.map +7 -0
  33. package/dist/chunk-5BC72727.js +2 -0
  34. package/dist/chunk-5BC72727.js.map +7 -0
  35. package/dist/chunk-5DJTP53N.js +2 -0
  36. package/dist/chunk-5DJTP53N.js.map +7 -0
  37. package/dist/chunk-5JEXM5S7.js +2 -0
  38. package/dist/chunk-5JEXM5S7.js.map +7 -0
  39. package/dist/chunk-5Q76ACVI.js +2 -0
  40. package/dist/chunk-5Q76ACVI.js.map +7 -0
  41. package/dist/chunk-5QUY72FX.js +2 -0
  42. package/dist/chunk-5QUY72FX.js.map +7 -0
  43. package/dist/chunk-5YS7OD5E.js +2 -0
  44. package/dist/chunk-5YS7OD5E.js.map +7 -0
  45. package/dist/chunk-676AKAGF.js +2 -0
  46. package/dist/chunk-676AKAGF.js.map +7 -0
  47. package/dist/chunk-6NCXO5ZP.js +2 -0
  48. package/dist/chunk-6NCXO5ZP.js.map +7 -0
  49. package/dist/chunk-6VBK2I5B.js +2 -0
  50. package/dist/chunk-6VBK2I5B.js.map +7 -0
  51. package/dist/chunk-7KMIFXHZ.js +2 -0
  52. package/dist/chunk-7KMIFXHZ.js.map +7 -0
  53. package/dist/chunk-A2NKDOYN.js +2 -0
  54. package/dist/chunk-A2NKDOYN.js.map +7 -0
  55. package/dist/chunk-ATFJ7PNA.js +2 -0
  56. package/dist/chunk-ATFJ7PNA.js.map +7 -0
  57. package/dist/chunk-BXYWVRKJ.js +2 -0
  58. package/dist/chunk-BXYWVRKJ.js.map +7 -0
  59. package/dist/chunk-CKXS375P.js +2 -0
  60. package/dist/chunk-CKXS375P.js.map +7 -0
  61. package/dist/chunk-CUN5QO4T.js +2 -0
  62. package/dist/chunk-CUN5QO4T.js.map +7 -0
  63. package/dist/chunk-DBMWS3O5.js +2 -0
  64. package/dist/chunk-DBMWS3O5.js.map +7 -0
  65. package/dist/chunk-E4VNLYO2.js +2 -0
  66. package/dist/chunk-E4VNLYO2.js.map +7 -0
  67. package/dist/chunk-EDUMAMK4.js +2 -0
  68. package/dist/chunk-EDUMAMK4.js.map +7 -0
  69. package/dist/chunk-ELYARUCN.js +2 -0
  70. package/dist/chunk-ELYARUCN.js.map +7 -0
  71. package/dist/chunk-EV73ADN2.js +2 -0
  72. package/dist/chunk-EV73ADN2.js.map +7 -0
  73. package/dist/chunk-FEHGU6EP.js +3 -0
  74. package/dist/chunk-FEHGU6EP.js.map +7 -0
  75. package/dist/chunk-FHM5NUS4.js +3 -0
  76. package/dist/chunk-FHM5NUS4.js.map +7 -0
  77. package/dist/chunk-G2DAD3MQ.js +2 -0
  78. package/dist/chunk-G2DAD3MQ.js.map +7 -0
  79. package/dist/chunk-G2KUK6AT.js +2 -0
  80. package/dist/chunk-G2KUK6AT.js.map +7 -0
  81. package/dist/chunk-GBPLNXMP.js +2 -0
  82. package/dist/chunk-GBPLNXMP.js.map +7 -0
  83. package/dist/chunk-GNU4VOOE.js +2 -0
  84. package/dist/chunk-GNU4VOOE.js.map +7 -0
  85. package/dist/chunk-GZ7X34QP.js +2 -0
  86. package/dist/chunk-GZ7X34QP.js.map +7 -0
  87. package/dist/chunk-HOF4JGMQ.js +2 -0
  88. package/dist/chunk-HOF4JGMQ.js.map +7 -0
  89. package/dist/chunk-HXDTGP2K.js +2 -0
  90. package/dist/chunk-HXDTGP2K.js.map +7 -0
  91. package/dist/chunk-I4SP6JTU.js +2 -0
  92. package/dist/chunk-I4SP6JTU.js.map +7 -0
  93. package/dist/chunk-IHE2MQ3W.js +2 -0
  94. package/dist/chunk-IHE2MQ3W.js.map +7 -0
  95. package/dist/chunk-II6ITOA6.js +2 -0
  96. package/dist/chunk-II6ITOA6.js.map +7 -0
  97. package/dist/chunk-JBLRAM7Z.js +2 -0
  98. package/dist/chunk-JBLRAM7Z.js.map +7 -0
  99. package/dist/chunk-JI265XFO.js +2 -0
  100. package/dist/chunk-JI265XFO.js.map +7 -0
  101. package/dist/chunk-JK74QK3M.js +2 -0
  102. package/dist/chunk-JK74QK3M.js.map +7 -0
  103. package/dist/chunk-JOFQJGZK.js +2 -0
  104. package/dist/chunk-JOFQJGZK.js.map +7 -0
  105. package/dist/chunk-KCEUD232.js +2 -0
  106. package/dist/chunk-KCEUD232.js.map +7 -0
  107. package/dist/chunk-KLLAY2IM.js +2 -0
  108. package/dist/chunk-KLLAY2IM.js.map +7 -0
  109. package/dist/chunk-LBJSMXLV.js +2 -0
  110. package/dist/chunk-LBJSMXLV.js.map +7 -0
  111. package/dist/chunk-LQRFNQ2N.js +2 -0
  112. package/dist/chunk-LQRFNQ2N.js.map +7 -0
  113. package/dist/chunk-LW2WRUVL.js +2 -0
  114. package/dist/chunk-LW2WRUVL.js.map +7 -0
  115. package/dist/chunk-M242VYZA.js +2 -0
  116. package/dist/chunk-M242VYZA.js.map +7 -0
  117. package/dist/chunk-MB3MU6HR.js +2 -0
  118. package/dist/chunk-MB3MU6HR.js.map +7 -0
  119. package/dist/chunk-MW3RWBZ7.js +2 -0
  120. package/dist/chunk-MW3RWBZ7.js.map +7 -0
  121. package/dist/chunk-NXSTUFS7.js +2 -0
  122. package/dist/chunk-NXSTUFS7.js.map +7 -0
  123. package/dist/chunk-OEAXCCVM.js +2 -0
  124. package/dist/chunk-OEAXCCVM.js.map +7 -0
  125. package/dist/chunk-OGRFQTXA.js +2 -0
  126. package/dist/chunk-OGRFQTXA.js.map +7 -0
  127. package/dist/chunk-OWEQT2HN.js +2 -0
  128. package/dist/chunk-OWEQT2HN.js.map +7 -0
  129. package/dist/chunk-PZSHOSOS.js +2 -0
  130. package/dist/chunk-PZSHOSOS.js.map +7 -0
  131. package/dist/chunk-REW4LR46.js +2 -0
  132. package/dist/chunk-REW4LR46.js.map +7 -0
  133. package/dist/chunk-RNN55473.js +2 -0
  134. package/dist/chunk-RNN55473.js.map +7 -0
  135. package/dist/chunk-SA53QUBF.js +2 -0
  136. package/dist/chunk-SA53QUBF.js.map +7 -0
  137. package/dist/chunk-TIPK3SCJ.js +2 -0
  138. package/dist/chunk-TIPK3SCJ.js.map +7 -0
  139. package/dist/chunk-TOLTUOZS.js +2 -0
  140. package/dist/chunk-TOLTUOZS.js.map +7 -0
  141. package/dist/chunk-TZOQWCVH.js +2 -0
  142. package/dist/chunk-TZOQWCVH.js.map +7 -0
  143. package/dist/chunk-VF7BGP6L.js +2 -0
  144. package/dist/chunk-VF7BGP6L.js.map +7 -0
  145. package/dist/chunk-VU3GIDZ3.js +2 -0
  146. package/dist/chunk-VU3GIDZ3.js.map +7 -0
  147. package/dist/chunk-VV7CFMPZ.js +2 -0
  148. package/dist/chunk-VV7CFMPZ.js.map +7 -0
  149. package/dist/chunk-W3H7GTJY.js +2 -0
  150. package/dist/chunk-W3H7GTJY.js.map +7 -0
  151. package/dist/chunk-X2ASKUFD.js +2 -0
  152. package/dist/chunk-X2ASKUFD.js.map +7 -0
  153. package/dist/chunk-X6AULZI4.js +1 -0
  154. package/dist/chunk-X6AULZI4.js.map +7 -0
  155. package/dist/chunk-XHOBNSBO.js +2 -0
  156. package/dist/chunk-XHOBNSBO.js.map +7 -0
  157. package/dist/chunk-XX2MVWFS.js +4 -0
  158. package/dist/chunk-XX2MVWFS.js.map +7 -0
  159. package/dist/chunk-XYZ6VZ5T.js +2 -0
  160. package/dist/chunk-XYZ6VZ5T.js.map +7 -0
  161. package/dist/chunk-YBAYEU25.js +2 -0
  162. package/dist/chunk-YBAYEU25.js.map +7 -0
  163. package/dist/chunk-YHEMA56R.js +2 -0
  164. package/dist/chunk-YHEMA56R.js.map +7 -0
  165. package/dist/chunk-Z2JBUHKA.js +2 -0
  166. package/dist/chunk-Z2JBUHKA.js.map +7 -0
  167. package/dist/chunk-Z2Z52GFT.js +2 -0
  168. package/dist/chunk-Z2Z52GFT.js.map +7 -0
  169. package/dist/chunk-ZPPELYNJ.js +2 -0
  170. package/dist/chunk-ZPPELYNJ.js.map +7 -0
  171. package/dist/chunk-ZVK4L5GK.js +2 -0
  172. package/dist/chunk-ZVK4L5GK.js.map +7 -0
  173. package/dist/chunk-ZWNQREWS.js +2 -0
  174. package/dist/chunk-ZWNQREWS.js.map +7 -0
  175. package/dist/components/badge.js +2 -0
  176. package/dist/components/badge.js.map +7 -0
  177. package/dist/components/breadcrumb.js +2 -0
  178. package/dist/components/breadcrumb.js.map +7 -0
  179. package/dist/components/button.js +2 -0
  180. package/dist/components/button.js.map +7 -0
  181. package/dist/components/calendar.js +2 -0
  182. package/dist/components/calendar.js.map +7 -0
  183. package/dist/components/cellediting.js +2 -0
  184. package/dist/components/cellediting.js.map +7 -0
  185. package/dist/components/chat.js +2 -0
  186. package/dist/components/chat.js.map +7 -0
  187. package/dist/components/checkbox.js +2 -0
  188. package/dist/components/checkbox.js.map +7 -0
  189. package/dist/components/checkboxgroup.js +2 -0
  190. package/dist/components/checkboxgroup.js.map +7 -0
  191. package/dist/components/chip.js +2 -0
  192. package/dist/components/chip.js.map +7 -0
  193. package/dist/components/codeviewer.js +2 -0
  194. package/dist/components/codeviewer.js.map +7 -0
  195. package/dist/components/combobox.js +2 -0
  196. package/dist/components/combobox.js.map +7 -0
  197. package/dist/components/commandpalette.js +2 -0
  198. package/dist/components/commandpalette.js.map +7 -0
  199. package/dist/components/container.js +2 -0
  200. package/dist/components/container.js.map +7 -0
  201. package/dist/components/dataview.js +2 -0
  202. package/dist/components/dataview.js.map +7 -0
  203. package/dist/components/datefield.js +2 -0
  204. package/dist/components/datefield.js.map +7 -0
  205. package/dist/components/daterangefield.js +2 -0
  206. package/dist/components/daterangefield.js.map +7 -0
  207. package/dist/components/dial.js +2 -0
  208. package/dist/components/dial.js.map +7 -0
  209. package/dist/components/dropdown.js +2 -0
  210. package/dist/components/dropdown.js.map +7 -0
  211. package/dist/components/fieldgroup.js +2 -0
  212. package/dist/components/fieldgroup.js.map +7 -0
  213. package/dist/components/fieldlist.js +2 -0
  214. package/dist/components/fieldlist.js.map +7 -0
  215. package/dist/components/fieldset.js +2 -0
  216. package/dist/components/fieldset.js.map +7 -0
  217. package/dist/components/filterbuilder.js +2 -0
  218. package/dist/components/filterbuilder.js.map +7 -0
  219. package/dist/components/form.js +2 -0
  220. package/dist/components/form.js.map +7 -0
  221. package/dist/components/formactions.js +2 -0
  222. package/dist/components/formactions.js.map +7 -0
  223. package/dist/components/formerrors.js +2 -0
  224. package/dist/components/formerrors.js.map +7 -0
  225. package/dist/components/formsection.js +2 -0
  226. package/dist/components/formsection.js.map +7 -0
  227. package/dist/components/grid.js +2 -0
  228. package/dist/components/grid.js.map +7 -0
  229. package/dist/components/icon.js +2 -0
  230. package/dist/components/icon.js.map +7 -0
  231. package/dist/components/inputgroup.js +2 -0
  232. package/dist/components/inputgroup.js.map +7 -0
  233. package/dist/components/label.js +2 -0
  234. package/dist/components/label.js.map +7 -0
  235. package/dist/components/listbox.js +2 -0
  236. package/dist/components/listbox.js.map +7 -0
  237. package/dist/components/lookupfield.js +2 -0
  238. package/dist/components/lookupfield.js.map +7 -0
  239. package/dist/components/menu.js +2 -0
  240. package/dist/components/menu.js.map +7 -0
  241. package/dist/components/messagebox.js +2 -0
  242. package/dist/components/messagebox.js.map +7 -0
  243. package/dist/components/navmenu.js +2 -0
  244. package/dist/components/navmenu.js.map +7 -0
  245. package/dist/components/numberfield.js +2 -0
  246. package/dist/components/numberfield.js.map +7 -0
  247. package/dist/components/pagination.js +2 -0
  248. package/dist/components/pagination.js.map +7 -0
  249. package/dist/components/panel.js +2 -0
  250. package/dist/components/panel.js.map +7 -0
  251. package/dist/components/pickerfield.js +2 -0
  252. package/dist/components/pickerfield.js.map +7 -0
  253. package/dist/components/radiogroup.js +2 -0
  254. package/dist/components/radiogroup.js.map +7 -0
  255. package/dist/components/searchgrid.js +2 -0
  256. package/dist/components/searchgrid.js.map +7 -0
  257. package/dist/components/secretfield.js +2 -0
  258. package/dist/components/secretfield.js.map +7 -0
  259. package/dist/components/select.js +2 -0
  260. package/dist/components/select.js.map +7 -0
  261. package/dist/components/slider.js +2 -0
  262. package/dist/components/slider.js.map +7 -0
  263. package/dist/components/spacer.js +2 -0
  264. package/dist/components/spacer.js.map +7 -0
  265. package/dist/components/spinner.js +2 -0
  266. package/dist/components/spinner.js.map +7 -0
  267. package/dist/components/stepform.js +2 -0
  268. package/dist/components/stepform.js.map +7 -0
  269. package/dist/components/stepper.js +2 -0
  270. package/dist/components/stepper.js.map +7 -0
  271. package/dist/components/suggestfield.js +2 -0
  272. package/dist/components/suggestfield.js.map +7 -0
  273. package/dist/components/table.js +2 -0
  274. package/dist/components/table.js.map +7 -0
  275. package/dist/components/tabs.js +2 -0
  276. package/dist/components/tabs.js.map +7 -0
  277. package/dist/components/textarea.js +2 -0
  278. package/dist/components/textarea.js.map +7 -0
  279. package/dist/components/textfield.js +2 -0
  280. package/dist/components/textfield.js.map +7 -0
  281. package/dist/components/toast.js +2 -0
  282. package/dist/components/toast.js.map +7 -0
  283. package/dist/components/toggle.js +2 -0
  284. package/dist/components/toggle.js.map +7 -0
  285. package/dist/components/toolbar.js +2 -0
  286. package/dist/components/toolbar.js.map +7 -0
  287. package/dist/components/tooltip.js +2 -0
  288. package/dist/components/tooltip.js.map +7 -0
  289. package/dist/components/tree.js +2 -0
  290. package/dist/components/tree.js.map +7 -0
  291. package/dist/components/viewmanager.js +2 -0
  292. package/dist/components/viewmanager.js.map +7 -0
  293. package/dist/components/viewport.js +2 -0
  294. package/dist/components/viewport.js.map +7 -0
  295. package/dist/components/widget.js +2 -0
  296. package/dist/components/widget.js.map +7 -0
  297. package/dist/components/window.js +2 -0
  298. package/dist/components/window.js.map +7 -0
  299. package/dist/core.js +2 -0
  300. package/dist/core.js.map +7 -0
  301. package/dist/css/badge.css +39 -0
  302. package/dist/css/base.css +180 -0
  303. package/dist/css/breadcrumb.css +53 -0
  304. package/dist/css/button.css +103 -0
  305. package/dist/css/calendar.css +108 -0
  306. package/dist/css/cellediting.css +33 -0
  307. package/dist/css/chat.css +232 -0
  308. package/dist/css/checkbox.css +64 -0
  309. package/dist/css/checkboxgroup.css +12 -0
  310. package/dist/css/chip.css +64 -0
  311. package/dist/css/codeviewer.css +109 -0
  312. package/dist/css/commandpalette.css +167 -0
  313. package/dist/css/container.css +5 -0
  314. package/dist/css/core.css +88 -0
  315. package/dist/css/dataview.css +56 -0
  316. package/dist/css/dial.css +203 -0
  317. package/dist/css/dropdown.css +13 -0
  318. package/dist/css/field.css +62 -0
  319. package/dist/css/fieldgroup.css +26 -0
  320. package/dist/css/fieldlist.css +84 -0
  321. package/dist/css/fieldset.css +68 -0
  322. package/dist/css/filterbuilder.css +125 -0
  323. package/dist/css/form.css +8 -0
  324. package/dist/css/formactions.css +40 -0
  325. package/dist/css/formerrors.css +39 -0
  326. package/dist/css/formsection.css +45 -0
  327. package/dist/css/grid.css +378 -0
  328. package/dist/css/icon.css +16 -0
  329. package/dist/css/inputgroup.css +58 -0
  330. package/dist/css/label.css +12 -0
  331. package/dist/css/layout.css +116 -0
  332. package/dist/css/listbox.css +50 -0
  333. package/dist/css/menu.css +92 -0
  334. package/dist/css/messagebox.css +6 -0
  335. package/dist/css/motion.css +29 -0
  336. package/dist/css/navmenu.css +115 -0
  337. package/dist/css/pagination.css +23 -0
  338. package/dist/css/panel.css +84 -0
  339. package/dist/css/pickerfield.css +85 -0
  340. package/dist/css/radiogroup.css +53 -0
  341. package/dist/css/searchgrid.css +37 -0
  342. package/dist/css/secretfield.css +73 -0
  343. package/dist/css/slider.css +107 -0
  344. package/dist/css/spacer.css +7 -0
  345. package/dist/css/stepform.css +46 -0
  346. package/dist/css/stepper.css +122 -0
  347. package/dist/css/table.css +36 -0
  348. package/dist/css/tabs.css +108 -0
  349. package/dist/css/textarea.css +11 -0
  350. package/dist/css/textfield.css +59 -0
  351. package/dist/css/toast.css +91 -0
  352. package/dist/css/toggle.css +39 -0
  353. package/dist/css/toolbar.css +14 -0
  354. package/dist/css/tooltip.css +17 -0
  355. package/dist/css/tree.css +94 -0
  356. package/dist/css/viewport.css +9 -0
  357. package/dist/css/widget.css +135 -0
  358. package/dist/css/window.css +35 -0
  359. package/dist/data.js +2 -0
  360. package/dist/data.js.map +7 -0
  361. package/dist/index.js +8 -0
  362. package/dist/index.js.map +7 -0
  363. package/dist/motion.js +2 -0
  364. package/dist/motion.js.map +7 -0
  365. package/dist/optikos.css +4240 -0
  366. package/dist/themes/compact.css +17 -0
  367. package/dist/themes/dark.css +53 -0
  368. package/dist/types/bind/index.d.ts +23 -0
  369. package/dist/types/components/badge.d.ts +1 -0
  370. package/dist/types/components/base/badge/badge.d.ts +18 -0
  371. package/dist/types/components/base/button/button.d.ts +34 -0
  372. package/dist/types/components/base/chip/chip.d.ts +27 -0
  373. package/dist/types/components/base/codeviewer/codeviewer.d.ts +48 -0
  374. package/dist/types/components/base/icon/icon.d.ts +17 -0
  375. package/dist/types/components/base/label/label.d.ts +14 -0
  376. package/dist/types/components/breadcrumb.d.ts +1 -0
  377. package/dist/types/components/button.d.ts +1 -0
  378. package/dist/types/components/calendar.d.ts +1 -0
  379. package/dist/types/components/cellediting.d.ts +1 -0
  380. package/dist/types/components/chat/chat/chat.d.ts +84 -0
  381. package/dist/types/components/chat.d.ts +1 -0
  382. package/dist/types/components/checkbox.d.ts +1 -0
  383. package/dist/types/components/checkboxgroup.d.ts +1 -0
  384. package/dist/types/components/chip.d.ts +1 -0
  385. package/dist/types/components/codeviewer.d.ts +1 -0
  386. package/dist/types/components/combobox.d.ts +1 -0
  387. package/dist/types/components/commandpalette.d.ts +1 -0
  388. package/dist/types/components/container.d.ts +1 -0
  389. package/dist/types/components/data/cellediting/cellediting.d.ts +10 -0
  390. package/dist/types/components/data/dataview/dataview.d.ts +61 -0
  391. package/dist/types/components/data/filterbuilder/filterbuilder.d.ts +73 -0
  392. package/dist/types/components/data/grid/grid.d.ts +177 -0
  393. package/dist/types/components/data/pagination/pagination.d.ts +31 -0
  394. package/dist/types/components/data/searchgrid/searchgrid.d.ts +63 -0
  395. package/dist/types/components/data/table/table.d.ts +26 -0
  396. package/dist/types/components/data/tree/tree.d.ts +71 -0
  397. package/dist/types/components/data/viewmanager/viewmanager.d.ts +86 -0
  398. package/dist/types/components/dataview.d.ts +1 -0
  399. package/dist/types/components/datefield.d.ts +1 -0
  400. package/dist/types/components/daterangefield.d.ts +1 -0
  401. package/dist/types/components/dates/calendar/calendar.d.ts +48 -0
  402. package/dist/types/components/dial.d.ts +1 -0
  403. package/dist/types/components/dropdown.d.ts +1 -0
  404. package/dist/types/components/feedback/spinner/spinner.d.ts +11 -0
  405. package/dist/types/components/fieldgroup.d.ts +1 -0
  406. package/dist/types/components/fieldlist.d.ts +1 -0
  407. package/dist/types/components/fields/checkbox/checkbox.d.ts +20 -0
  408. package/dist/types/components/fields/checkboxgroup/checkboxgroup.d.ts +27 -0
  409. package/dist/types/components/fields/combobox/combobox.d.ts +15 -0
  410. package/dist/types/components/fields/datefield/datefield.d.ts +30 -0
  411. package/dist/types/components/fields/daterangefield/daterangefield.d.ts +32 -0
  412. package/dist/types/components/fields/dial/dial.d.ts +84 -0
  413. package/dist/types/components/fields/listbox/listbox.d.ts +54 -0
  414. package/dist/types/components/fields/lookupfield/lookupfield.d.ts +25 -0
  415. package/dist/types/components/fields/numberfield/numberfield.d.ts +31 -0
  416. package/dist/types/components/fields/pickerfield/pickerfield.d.ts +77 -0
  417. package/dist/types/components/fields/radiogroup/radiogroup.d.ts +26 -0
  418. package/dist/types/components/fields/secretfield/secretfield.d.ts +52 -0
  419. package/dist/types/components/fields/select/select.d.ts +10 -0
  420. package/dist/types/components/fields/slider/slider.d.ts +62 -0
  421. package/dist/types/components/fields/suggestfield/suggestfield.d.ts +34 -0
  422. package/dist/types/components/fields/textarea/textarea.d.ts +16 -0
  423. package/dist/types/components/fields/textfield/textfield.d.ts +38 -0
  424. package/dist/types/components/fields/toggle/toggle.d.ts +9 -0
  425. package/dist/types/components/fieldset.d.ts +1 -0
  426. package/dist/types/components/filterbuilder.d.ts +1 -0
  427. package/dist/types/components/form/fieldgroup/fieldgroup.d.ts +33 -0
  428. package/dist/types/components/form/fieldlist/fieldlist.d.ts +58 -0
  429. package/dist/types/components/form/form/form.d.ts +68 -0
  430. package/dist/types/components/form/formactions/formactions.d.ts +34 -0
  431. package/dist/types/components/form/formerrors/formerrors.d.ts +23 -0
  432. package/dist/types/components/form/formsection/formsection.d.ts +26 -0
  433. package/dist/types/components/form/inputgroup/inputgroup.d.ts +28 -0
  434. package/dist/types/components/form/stepform/stepform.d.ts +64 -0
  435. package/dist/types/components/form.d.ts +1 -0
  436. package/dist/types/components/formactions.d.ts +1 -0
  437. package/dist/types/components/formerrors.d.ts +1 -0
  438. package/dist/types/components/formsection.d.ts +1 -0
  439. package/dist/types/components/grid.d.ts +1 -0
  440. package/dist/types/components/icon.d.ts +1 -0
  441. package/dist/types/components/inputgroup.d.ts +1 -0
  442. package/dist/types/components/label.d.ts +1 -0
  443. package/dist/types/components/layout/container/container.d.ts +1 -0
  444. package/dist/types/components/layout/fieldset/fieldset.d.ts +30 -0
  445. package/dist/types/components/layout/panel/panel.d.ts +53 -0
  446. package/dist/types/components/layout/panel/reload.d.ts +1 -0
  447. package/dist/types/components/layout/spacer/spacer.d.ts +12 -0
  448. package/dist/types/components/layout/toolbar/toolbar.d.ts +15 -0
  449. package/dist/types/components/layout/viewport/viewport.d.ts +7 -0
  450. package/dist/types/components/listbox.d.ts +1 -0
  451. package/dist/types/components/lookupfield.d.ts +1 -0
  452. package/dist/types/components/menu.d.ts +1 -0
  453. package/dist/types/components/messagebox.d.ts +1 -0
  454. package/dist/types/components/navigation/breadcrumb/breadcrumb.d.ts +32 -0
  455. package/dist/types/components/navigation/navmenu/navmenu.d.ts +63 -0
  456. package/dist/types/components/navigation/stepper/stepper.d.ts +31 -0
  457. package/dist/types/components/navigation/tabs/tabs.d.ts +57 -0
  458. package/dist/types/components/navmenu.d.ts +1 -0
  459. package/dist/types/components/numberfield.d.ts +1 -0
  460. package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +80 -0
  461. package/dist/types/components/overlays/dropdown/dropdown.d.ts +41 -0
  462. package/dist/types/components/overlays/menu/menu.d.ts +56 -0
  463. package/dist/types/components/overlays/messagebox/messagebox.d.ts +61 -0
  464. package/dist/types/components/overlays/toast/toast.d.ts +45 -0
  465. package/dist/types/components/overlays/tooltip/tooltip.d.ts +13 -0
  466. package/dist/types/components/overlays/widget/widget.d.ts +61 -0
  467. package/dist/types/components/overlays/window/window.d.ts +38 -0
  468. package/dist/types/components/pagination.d.ts +1 -0
  469. package/dist/types/components/panel.d.ts +1 -0
  470. package/dist/types/components/pickerfield.d.ts +1 -0
  471. package/dist/types/components/radiogroup.d.ts +1 -0
  472. package/dist/types/components/searchgrid.d.ts +1 -0
  473. package/dist/types/components/secretfield.d.ts +1 -0
  474. package/dist/types/components/select.d.ts +1 -0
  475. package/dist/types/components/slider.d.ts +1 -0
  476. package/dist/types/components/spacer.d.ts +1 -0
  477. package/dist/types/components/spinner.d.ts +1 -0
  478. package/dist/types/components/stepform.d.ts +1 -0
  479. package/dist/types/components/stepper.d.ts +1 -0
  480. package/dist/types/components/suggestfield.d.ts +1 -0
  481. package/dist/types/components/table.d.ts +1 -0
  482. package/dist/types/components/tabs.d.ts +1 -0
  483. package/dist/types/components/textarea.d.ts +1 -0
  484. package/dist/types/components/textfield.d.ts +1 -0
  485. package/dist/types/components/toast.d.ts +1 -0
  486. package/dist/types/components/toggle.d.ts +1 -0
  487. package/dist/types/components/toolbar.d.ts +1 -0
  488. package/dist/types/components/tooltip.d.ts +1 -0
  489. package/dist/types/components/tree.d.ts +1 -0
  490. package/dist/types/components/viewmanager.d.ts +1 -0
  491. package/dist/types/components/viewport.d.ts +1 -0
  492. package/dist/types/components/widget.d.ts +1 -0
  493. package/dist/types/components/window.d.ts +1 -0
  494. package/dist/types/core/component.d.ts +94 -0
  495. package/dist/types/core/container.d.ts +43 -0
  496. package/dist/types/core/date.d.ts +14 -0
  497. package/dist/types/core/dom.d.ts +11 -0
  498. package/dist/types/core/emitter.d.ts +12 -0
  499. package/dist/types/core/field.d.ts +78 -0
  500. package/dist/types/core/focus.d.ts +18 -0
  501. package/dist/types/core/i18n.d.ts +12 -0
  502. package/dist/types/core/index.d.ts +15 -0
  503. package/dist/types/core/layer.d.ts +6 -0
  504. package/dist/types/core/position.d.ts +19 -0
  505. package/dist/types/core/registry.d.ts +12 -0
  506. package/dist/types/core/validators.d.ts +10 -0
  507. package/dist/types/core/virtual.d.ts +24 -0
  508. package/dist/types/data/column.d.ts +32 -0
  509. package/dist/types/data/format.d.ts +4 -0
  510. package/dist/types/data/index.d.ts +5 -0
  511. package/dist/types/data/model.d.ts +28 -0
  512. package/dist/types/data/proxy.d.ts +61 -0
  513. package/dist/types/data/store.d.ts +94 -0
  514. package/dist/types/index.d.ts +67 -0
  515. package/dist/types/layout/layout.d.ts +27 -0
  516. package/dist/types/motion/config.d.ts +83 -0
  517. package/dist/types/motion/core.d.ts +40 -0
  518. package/dist/types/motion/extras.d.ts +66 -0
  519. package/dist/types/motion/index.d.ts +3 -0
  520. package/dist/types/themes/define.d.ts +31 -0
  521. package/dist/types/themes/index.d.ts +1 -0
  522. package/dist/types/ui/enums.d.ts +82 -0
  523. package/dist/types/ui/index.d.ts +2 -0
  524. package/dist/types/ui/ui.d.ts +67 -0
  525. package/dist/ui.js +2 -0
  526. package/dist/ui.js.map +7 -0
  527. package/package.json +104 -4
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/field.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from './component';\nimport { h, uid } from './dom';\nimport { t } from './i18n';\nimport type { Validator } from './validators';\n\nexport interface FieldConfig<V = unknown> extends ComponentConfig {\n name?: string;\n label?: string;\n labelPos?: 'top' | 'left';\n value?: V;\n required?: boolean;\n readonly?: boolean;\n help?: string;\n validators?: Validator<V>[];\n /** When to validate on its own. After the first error it revalidates on every change. Default `blur`. */\n validateOn?: 'blur' | 'change' | 'submit';\n /** ms of quiet after the last change before `settled` fires (0 = right away). `change` itself is never delayed. */\n debounce?: number;\n}\n\n/**\n * Base of every field: value, validation, dirty tracking, label and messages.\n * Subclasses implement `createControl` (build the control, assign `inputEl`), `applyValue` (value \u2192 DOM)\n * and call `commit` when the user edits (DOM \u2192 value).\n */\nexport abstract class Field<V = unknown, C extends FieldConfig<V> = FieldConfig<V>> extends Component<C> {\n protected override baseCls = 'op-field';\n protected value: V;\n protected original: V;\n protected error = '';\n /** The focusable control; `label for`, `aria-invalid` and `aria-describedby` point at it. */\n protected inputEl!: HTMLElement;\n private labelEl!: HTMLElement;\n private helpEl!: HTMLElement;\n private errorEl!: HTMLElement;\n private dirty = false;\n private cancelSettle?: () => void;\n\n constructor(config: C = {} as C) {\n super(config);\n this.value = this.original = config.value ?? this.emptyValue();\n }\n\n get name(): string | undefined {\n return this.config.name;\n }\n\n protected abstract createControl(): HTMLElement;\n protected abstract applyValue(value: V): void;\n protected emptyValue(): V {\n return '' as V;\n }\n protected isEmpty(v: V): boolean {\n return v == null || (v as unknown) === '' || (Array.isArray(v) && !v.length);\n }\n protected isEqual(a: V, b: V): boolean {\n return a === b || JSON.stringify(a) === JSON.stringify(b);\n }\n\n protected override build(): HTMLElement {\n const c = this.config;\n const el = h('div', `${this.baseCls}${c.labelPos === 'left' ? ' op-field--label-left' : ''}`);\n this.labelEl = h('label', 'op-field__label');\n const control = h('div', 'op-field__control', {}, this.createControl());\n this.helpEl = h('div', 'op-field__help', { id: `${this.id}-help` });\n this.errorEl = h('div', 'op-field__error', { id: `${this.id}-error`, role: 'alert' });\n el.append(this.labelEl, control, this.helpEl, this.errorEl);\n return el;\n }\n\n protected override onRender(): void {\n const c = this.config;\n const input = this.inputEl;\n input.id ||= uid('op-input');\n (this.labelEl as HTMLLabelElement).htmlFor = input.id;\n // a field without a visible label is named by `ariaLabel` on its control (the root is just a wrapper)\n if (c.ariaLabel && input !== this.el) {\n input.setAttribute('aria-label', c.ariaLabel);\n this.el.removeAttribute('aria-label');\n }\n this.setLabel(c.label ?? '');\n this.setHelp(c.help ?? '');\n this.setRequired(!!c.required);\n this.setReadonly(!!c.readonly);\n this.applyValue(this.value);\n this.paintError();\n this.listen(this.el, 'focusin', () => {\n this.el.classList.add('is-focused');\n this.emit('focus');\n });\n this.listen(this.el, 'focusout', (e: FocusEvent) => {\n if (this.el.contains(e.relatedTarget as Node)) return;\n this.flushSettled();\n this.el.classList.remove('is-focused');\n if ((c.validateOn ?? 'blur') === 'blur') this.validate();\n this.emit('blur');\n });\n }\n\n protected override focusEl(): HTMLElement {\n this.render();\n return this.inputEl;\n }\n\n // ---- value ---------------------------------------------------------------------------------\n\n getValue(): V {\n return this.value;\n }\n\n /** Sets the value programmatically. `silent` skips the `change` event and validation. */\n setValue(v: V, silent = false): void {\n const old = this.value;\n this.value = v;\n if (this.rendered) this.applyValue(v);\n if (!this.isEqual(old, v)) this.changed(old, silent);\n }\n\n /** For subclasses: the user edited the control and the DOM already shows `v`. */\n protected commit(v: V): void {\n const old = this.value;\n this.value = v;\n if (!this.isEqual(old, v)) this.changed(old, false);\n }\n\n private changed(old: V, silent: boolean): void {\n this.updateDirty();\n if (silent) return;\n if (this.config.validateOn === 'change' || this.error) this.validate();\n this.emit('change', this.value, old);\n this.queueSettled();\n }\n\n /** `settled(value)`: the value after the user stopped changing it for `debounce` ms (immediately without `debounce`). */\n private queueSettled(): void {\n this.cancelSettle?.();\n this.cancelSettle = undefined;\n const ms = this.config.debounce;\n if (!ms) return void this.emit('settled', this.value);\n this.cancelSettle = this.later(() => {\n this.cancelSettle = undefined;\n this.emit('settled', this.value);\n }, ms);\n }\n\n /** Fires a pending `settled` now (Enter, blur, end of a drag...). No-op when nothing is waiting. */\n protected flushSettled(): void {\n if (!this.cancelSettle) return;\n this.cancelSettle();\n this.cancelSettle = undefined;\n this.emit('settled', this.value);\n }\n\n private updateDirty(): void {\n const d = this.isDirty();\n if (d === this.dirty) return;\n this.dirty = d;\n if (this.rendered) this.el.classList.toggle('is-dirty', d);\n this.emit('dirty-change', d);\n }\n\n /** What the user sees as this field's value (a select's label, a formatted date); used by summaries such as the StepForm review. */\n getDisplayText(): string {\n const v = this.value;\n return this.isEmpty(v) ? '' : String(v);\n }\n\n /** Sets the empty value (`''`, `null`, `false`...) and emits `change`. */\n clear(): void {\n this.setValue(this.emptyValue());\n }\n\n isDirty(): boolean {\n return !this.isEqual(this.value, this.original);\n }\n\n /** The current value becomes the \"original\" (as after loading or saving). */\n markClean(): void {\n this.original = this.value;\n this.updateDirty();\n }\n\n reset(): void {\n this.setValue(this.original, true);\n this.clearError();\n }\n\n // ---- validation ----------------------------------------------------------------------------\n\n /** Returns the error message for the current value, or `''`. No UI side effects. */\n protected check(): string {\n const v = this.value;\n if (this.isEmpty(v)) return this.config.required ? t('required') : '';\n for (const fn of this.config.validators ?? []) {\n const r = fn(v, this as Field<any>);\n if (typeof r === 'string') return r;\n }\n return '';\n }\n\n validate(): boolean {\n const msg = this.check();\n if (msg) this.setError(msg);\n else this.clearError();\n return !msg;\n }\n\n isValid(): boolean {\n return !this.check();\n }\n\n getError(): string {\n return this.error;\n }\n\n setError(msg: string): void {\n const was = this.error;\n this.error = msg;\n this.paintError();\n if (msg && msg !== was) this.emit('invalid', msg);\n }\n\n clearError(): void {\n if (!this.error) return;\n this.error = '';\n this.paintError();\n this.emit('valid');\n }\n\n private paintError(): void {\n if (!this.rendered) return;\n this.errorEl.textContent = this.error;\n this.el.classList.toggle('is-invalid', !!this.error);\n this.inputEl.setAttribute('aria-invalid', String(!!this.error));\n this.describe();\n }\n\n private describe(): void {\n const ids = [this.error && this.errorEl.id, this.config.help && this.helpEl.id].filter(Boolean);\n if (ids.length) this.inputEl.setAttribute('aria-describedby', ids.join(' '));\n else this.inputEl.removeAttribute('aria-describedby');\n }\n\n // ---- setters -------------------------------------------------------------------------------\n\n setLabel(label: string): void {\n this.config.label = label;\n if (!this.rendered) return;\n this.labelEl.textContent = label;\n this.labelEl.hidden = !label;\n }\n\n setHelp(help: string): void {\n this.config.help = help;\n if (!this.rendered) return;\n this.helpEl.textContent = help;\n this.helpEl.hidden = !help;\n this.describe();\n }\n\n setRequired(required: boolean): void {\n this.config.required = required;\n if (!this.rendered) return;\n this.el.classList.toggle('is-required', required);\n this.inputEl.setAttribute('aria-required', String(required));\n }\n\n setReadonly(readonly: boolean): void {\n this.config.readonly = readonly;\n if (!this.rendered) return;\n this.el.classList.toggle('is-readonly', readonly);\n this.onReadonly(readonly);\n }\n\n setValidators(validators: Validator<V>[]): void {\n this.config.validators = validators;\n }\n\n protected onReadonly(_readonly: boolean): void {}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Field", "Component", "config", "v", "a", "b", "c", "el", "h", "control", "input", "uid", "e", "silent", "old", "ms", "d", "t", "fn", "r", "msg", "was", "ids", "label", "help", "required", "readonly", "validators", "_readonly"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{g as r}from"./chunk-4AA4FQEM.js";import{c as l}from"./chunk-4EZJ5FKJ.js";import{a as o}from"./chunk-A2NKDOYN.js";import{b as i}from"./chunk-PZSHOSOS.js";import{a as n}from"./chunk-TIPK3SCJ.js";var s=class extends o{baseCls="op-button";tag="button";textEl;busyTextEl;iconHost;build(){let t=this.config,e=i("button","op-button",{type:t.htmlType??"button"});return this.iconHost=i("span","op-button__icon"),this.textEl=i("span","op-button__text"),this.busyTextEl=i("span","op-button__busy-text"),e.append(i("span","op-button__face",{},this.iconHost,this.textEl),i("span","op-button__busy",{},i("span","op-spinner op-button__spinner",{"aria-hidden":"true"}),this.busyTextEl)),e}onRender(){let t=this.config;this.setText(t.text??""),this.setIcon(t.icon??""),this.setVariant(t.variant??"default"),this.setPressed(!!t.pressed),!t.text&&!t.ariaLabel&&!t.tooltip&&console.warn("Optikos: icon-only Button needs ariaLabel"),this.listen(this.el,"click",e=>{if(t.disabled||t.loading||(t.toggle&&(this.setPressed(!t.pressed),this.emit("toggle",t.pressed)),this.emit("click",e)===!1))return e.preventDefault();t.handler?.(this,e)})}onDisabled(t){this.el.disabled=t}setText(t){this.config.text=t,this.rendered&&(this.textEl.textContent=t,this.textEl.hidden=!t,this.busyTextEl.textContent=this.config.loadingText??t)}setIcon(t){this.config.icon=t,this.rendered&&(this.iconHost.replaceChildren(...t?[l(t)]:[]),this.iconHost.hidden=!t,this.el.classList.toggle("op-button--icon-right",this.config.iconPos==="right"))}setVariant(t){if(this.config.variant=t,!!this.rendered)for(let e of["default","primary","danger","ghost"])this.el.classList.toggle(`op-button--${e}`,e===t)}setPressed(t){this.config.pressed=t,this.rendered&&(this.el.classList.toggle("is-pressed",t),this.config.toggle&&this.el.setAttribute("aria-pressed",String(t)))}setLoading(t){if(this.config.loading=t,typeof t=="string"&&this.setLoadingText(t),!!this.rendered){this.el.classList.toggle("is-loading",!!t);for(let e of["aria-busy","aria-disabled"])t?this.el.setAttribute(e,"true"):this.el.removeAttribute(e)}}setLoadingText(t){this.config.loadingText=t,this.rendered&&(this.busyTextEl.textContent=t)}pulse(){r(this.el)}click(){this.el.click()}};n("button",s);export{s as a};
2
+ //# sourceMappingURL=chunk-2ZUZ5HDL.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/base/button/button.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { iconEl } from '../icon/icon';\nimport { pulse } from '../../../motion/core';\n\nexport interface ButtonConfig extends ComponentConfig {\n text?: string;\n icon?: string;\n iconPos?: 'left' | 'right';\n variant?: 'default' | 'primary' | 'danger' | 'ghost';\n htmlType?: 'button' | 'submit' | 'reset';\n handler?: (button: Button, ev: MouseEvent) => unknown;\n /** Behaves as a toggle button (`aria-pressed`). */\n toggle?: boolean;\n pressed?: boolean;\n /** Text shown while loading. Default: `text`. Passing a string to `loading` sets it too. */\n loadingText?: string;\n}\n\nexport class Button extends Component<ButtonConfig> {\n protected override baseCls = 'op-button';\n protected override tag = 'button' as const;\n private textEl!: HTMLElement;\n private busyTextEl!: HTMLElement;\n private iconHost!: HTMLElement;\n\n protected override build() {\n const c = this.config;\n const el = h('button', 'op-button', { type: c.htmlType ?? 'button' });\n this.iconHost = h('span', 'op-button__icon');\n this.textEl = h('span', 'op-button__text');\n // Two layers share one grid cell: the normal face and the loading face. The inactive one is hidden by CSS,\n // so the button is as wide as the wider of the two and never jumps when loading starts.\n this.busyTextEl = h('span', 'op-button__busy-text');\n el.append(\n h('span', 'op-button__face', {}, this.iconHost, this.textEl),\n h('span', 'op-button__busy', {}, h('span', 'op-spinner op-button__spinner', { 'aria-hidden': 'true' }), this.busyTextEl),\n );\n return el;\n }\n\n protected override onRender() {\n const c = this.config;\n this.setText(c.text ?? '');\n this.setIcon(c.icon ?? '');\n this.setVariant(c.variant ?? 'default');\n this.setPressed(!!c.pressed);\n if (!c.text && !c.ariaLabel && !c.tooltip) console.warn('Optikos: icon-only Button needs ariaLabel');\n this.listen(this.el, 'click', (e: MouseEvent) => {\n if (c.disabled || c.loading) return e.preventDefault();\n if (c.toggle) {\n this.setPressed(!c.pressed);\n this.emit('toggle', c.pressed);\n }\n if (this.emit('click', e) === false) return e.preventDefault();\n c.handler?.(this, e);\n });\n }\n\n protected override onDisabled(disabled: boolean) {\n (this.el as HTMLButtonElement).disabled = disabled;\n }\n\n setText(text: string) {\n this.config.text = text;\n if (!this.rendered) return;\n this.textEl.textContent = text;\n this.textEl.hidden = !text;\n this.busyTextEl.textContent = this.config.loadingText ?? text;\n }\n\n setIcon(name: string) {\n this.config.icon = name;\n if (!this.rendered) return;\n this.iconHost.replaceChildren(...(name ? [iconEl(name)] : []));\n this.iconHost.hidden = !name;\n this.el.classList.toggle('op-button--icon-right', this.config.iconPos === 'right');\n }\n\n setVariant(variant: NonNullable<ButtonConfig['variant']>) {\n this.config.variant = variant;\n if (!this.rendered) return;\n for (const v of ['default', 'primary', 'danger', 'ghost']) this.el.classList.toggle(`op-button--${v}`, v === variant);\n }\n\n setPressed(pressed: boolean) {\n this.config.pressed = pressed;\n if (!this.rendered) return;\n this.el.classList.toggle('is-pressed', pressed);\n if (this.config.toggle) this.el.setAttribute('aria-pressed', String(pressed));\n }\n\n /** The button shows its own spinner (no mask) and ignores clicks while loading. A string is the loading text. */\n override setLoading(loading: boolean | string) {\n this.config.loading = loading;\n if (typeof loading === 'string') this.setLoadingText(loading);\n if (!this.rendered) return;\n this.el.classList.toggle('is-loading', !!loading);\n // the visible (loading) face names the button; it ignores clicks meanwhile, so it is announced as unavailable\n for (const a of ['aria-busy', 'aria-disabled']) (loading ? this.el.setAttribute(a, 'true') : this.el.removeAttribute(a));\n }\n\n setLoadingText(text: string) {\n this.config.loadingText = text;\n if (this.rendered) this.busyTextEl.textContent = text;\n }\n\n /** A subtle ring that confirms the action worked (motion rule 8). */\n pulse(): void {\n void pulse(this.el);\n }\n\n click() {\n (this.el as HTMLButtonElement).click();\n }\n}\nregister('button', Button);\n"],
5
+ "mappings": "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",
6
+ "names": ["Button", "Component", "c", "el", "h", "disabled", "text", "name", "iconEl", "variant", "v", "pressed", "loading", "a", "pulse", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as k}from"./chunk-7KMIFXHZ.js";import{a as S}from"./chunk-3TAW4AKH.js";import{a as _}from"./chunk-FHM5NUS4.js";import{a as F}from"./chunk-W3H7GTJY.js";import{a as x}from"./chunk-2ZUZ5HDL.js";import{c as M}from"./chunk-4EZJ5FKJ.js";import{a as N}from"./chunk-A2NKDOYN.js";import{b as p}from"./chunk-PZSHOSOS.js";import{a as L}from"./chunk-TIPK3SCJ.js";import{e as y,f as s}from"./chunk-MW3RWBZ7.js";y("en",{fbEq:"equals",fbNe:"does not equal",fbContains:"contains",fbNotContains:"does not contain",fbStarts:"starts with",fbEnds:"ends with",fbGt:"greater than",fbGe:"greater than or equal",fbLt:"less than",fbLe:"less than or equal",fbBetween:"is between",fbNotBetween:"is not between",fbIn:"is any of",fbNin:"is none of",fbEmpty:"is empty",fbNotEmpty:"is not empty",fbAnd:"Match all (AND)",fbOr:"Match any (OR)",fbAddFilter:"Add filter",fbAddGroup:"Add group",fbRemove:"Remove",fbClear:"Clear all",fbApply:"Apply",fbField:"Field",fbOperator:"Operator",fbValue:"Value",fbTo:"and",fbList:"a, b, c",fbNone:"No filters",fbLabel:"Filters"});y("pt-BR",{fbEq:"igual a",fbNe:"diferente de",fbContains:"cont\xE9m",fbNotContains:"n\xE3o cont\xE9m",fbStarts:"come\xE7a com",fbEnds:"termina com",fbGt:"maior que",fbGe:"maior ou igual a",fbLt:"menor que",fbLe:"menor ou igual a",fbBetween:"entre",fbNotBetween:"fora do intervalo",fbIn:"\xE9 um de",fbNin:"n\xE3o \xE9 nenhum de",fbEmpty:"est\xE1 vazio",fbNotEmpty:"n\xE3o est\xE1 vazio",fbAnd:"Todas (E)",fbOr:"Qualquer uma (OU)",fbAddFilter:"Adicionar filtro",fbAddGroup:"Adicionar grupo",fbRemove:"Remover",fbClear:"Limpar tudo",fbApply:"Aplicar",fbField:"Campo",fbOperator:"Operador",fbValue:"Valor",fbTo:"e",fbList:"a, b, c",fbNone:"Sem filtros",fbLabel:"Filtros"});var w={text:["contains","notContains","eq","ne","startsWith","endsWith","in","nin","empty","notEmpty"],number:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],date:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],select:["eq","ne","in","nin","empty","notEmpty"]},C={eq:"fbEq",ne:"fbNe",contains:"fbContains",notContains:"fbNotContains",startsWith:"fbStarts",endsWith:"fbEnds",gt:"fbGt",ge:"fbGe",lt:"fbLt",le:"fbLe",between:"fbBetween",notBetween:"fbNotBetween",in:"fbIn",nin:"fbNin",empty:"fbEmpty",notEmpty:"fbNotEmpty"},v=h=>h==="empty"||h==="notEmpty"?0:h==="between"||h==="notBetween"?2:1,m=h=>h==="in"||h==="nin",E=class extends N{baseCls="op-filterbuilder";root={kind:"group",op:"and",items:[]};parts=[];nextId=1;cancelApply;pickMenu;onRender(){this.el.setAttribute("role","group"),this.el.setAttribute("aria-label",s("fbLabel")),this.config.value&&(this.root=this.fromNode(this.config.value)),this.own(()=>(this.parts.forEach(e=>e.destroy()),this.pickMenu?.destroy())),this.paint(),this.config.value&&this.config.store&&this.apply()}fromNode(e){if("filters"in e)return{kind:"group",op:e.op,items:e.filters.map(n=>this.fromNode(n))};let[i,t]=Array.isArray(e.value)&&!m(e.op??"eq")?e.value:[e.value,void 0];return{kind:"rule",id:this.nextId++,field:e.field,op:e.op??"eq",value:m(e.op??"eq")?e.value:i,value2:t}}field(e){return this.config.fields.find(i=>i.name===e)??this.config.fields[0]}complete(e){let i=v(e.op),t=n=>n!=null&&n!==""&&!(Array.isArray(n)&&!n.length);return i===0||(i===1?t(e.value):t(e.value)&&t(e.value2))}toNode(e){let i=e.items.flatMap(t=>{if(t.kind==="group")return this.toNode(t)?[this.toNode(t)]:[];if(!this.complete(t))return[];let n=v(t.op);return[{field:t.field,op:t.op,...n===1?{value:t.value}:n===2?{value:[t.value,t.value2]}:{}}]});return i.length?{op:e.op,filters:i}:null}getFilter(){return this.toNode(this.root)}setFilter(e){this.root=e?this.fromNode(e):{kind:"group",op:"and",items:[]},this.rendered&&this.paint(),this.changed()}clear(){this.setFilter(null),this.apply()}apply(){this.cancelApply?.();let e=this.getFilter();if(this.emit("before-apply",e)===!1)return;let i=this.config.store;i&&(e?i.filter(e):i.clearFilter()),this.emit("apply",e)}addRule(e){this.root.items.push(this.newRule(e)),this.rendered&&this.paint()}setFields(e){this.config.fields=e,this.rendered&&this.paint()}setStore(e){this.config.store=e}newRule(e){let i=this.field(e??"");return{kind:"rule",id:this.nextId++,field:i.name,op:w[i.type??"text"][0]}}changed(){this.emit("change",this.getFilter()),this.config.live!==!1&&(this.cancelApply?.(),this.cancelApply=this.later(()=>this.apply(),250))}paint(){let e=document.activeElement?.closest("[data-fb]")?.dataset.fb;this.parts.splice(0).forEach(n=>n.destroy());let i=[this.group(this.root,0,null)];this.config.live===!1&&i.push(p("div","op-filterbuilder__foot",{},this.button(s("fbApply"),"primary",()=>this.apply()))),this.el.replaceChildren(...i),this.mounted&&this.parts.forEach(n=>n.notifyMount());let t=e&&this.el.querySelector(`[data-fb="${e}"]`);t&&(t.matches("select,button,input")?t:t.querySelector("input"))?.focus()}button(e,i,t,n){let f=new x({text:e,variant:i,icon:n,handler:t});return this.parts.push(f),f.el}select(e,i,t,n,f){let r=p("select","op-filterbuilder__select",{"aria-label":t,"data-fb":n}),d=new Map;for(let[u,l,o]of e){let a=p("option","",{value:u},l);o?(d.has(o)||d.set(o,p("optgroup","",{label:o})),d.get(o).append(a)):r.append(a)}return r.append(...d.values()),r.value=i,this.listen(r,"change",()=>f(r.value)),r}group(e,i,t){let n=p("div",`op-filterbuilder__group${i?" is-nested":""}`,{role:"group","aria-label":s("fbLabel")}),f=this.select([["and",s("fbAnd")],["or",s("fbOr")]],e.op,s("fbLabel"),`g${i}:logic`,l=>{e.op=l,this.changed()}),r=p("div","op-filterbuilder__head",{},f),d=l=>{let o=this.newRule(l);e.items.push(o),this.paint(),this.el.querySelector(`[data-fb="r${o.id}:v1"] input, select[data-fb="r${o.id}:v1"]`)?.focus()},u=this.button(s("fbAddFilter"),"ghost",()=>this.config.addMode==="pick"?this.pick(u,d):d(),"plus");r.append(u),i<(this.config.maxDepth??3)&&r.append(this.button(s("fbAddGroup"),"ghost",()=>{e.items.push({kind:"group",op:"or",items:[this.newRule()]}),this.paint()},"plus")),t?r.append(this.removeBtn(()=>(t.items.splice(t.items.indexOf(e),1),this.paint(),this.changed()))):e.items.length&&r.append(this.button(s("fbClear"),"ghost",()=>this.clear())),n.append(r),!e.items.length&&!t&&n.append(p("div","op-filterbuilder__none",{},s("fbNone")));for(let l of e.items)n.append(l.kind==="group"?this.group(l,i+1,e):this.rule(l,e));return n}pick(e,i){let t=this.config.fields;this.pickMenu??=new _({}),this.pickMenu.setSearch(t.length>6),this.pickMenu.setItems(t.map(n=>({text:n.label??n.name,group:n.group,handler:()=>i(n.name)}))),this.pickMenu.showBy(e)}removeBtn(e){let i=p("button","op-filterbuilder__remove",{type:"button","aria-label":s("fbRemove"),title:s("fbRemove")},M("x"));return this.listen(i,"click",e),i}rule(e,i){let t=this.field(e.field),n=t.type??"text",f=`r${e.id}`,r=this.select(this.config.fields.map(o=>[o.name,o.label??o.name,o.group]),e.field,s("fbField"),`${f}:field`,o=>{e.field=o;let a=w[this.field(o).type??"text"];(!a.includes(e.op)||(this.field(o).type??"text")!==n)&&(e.op=a[0]),e.value=e.value2=void 0,this.paint(),this.changed()}),d=this.select(w[n].map(o=>[o,s(C[o])]),e.op,s("fbOperator"),`${f}:op`,o=>{let a=e.op;e.op=o,(v(a)!==v(e.op)||m(a)!==m(e.op))&&(e.value=e.value2=void 0),this.paint(),this.changed()}),u=p("div","op-filterbuilder__row",{},r,d),l=v(e.op);return l>=1&&u.append(this.editor(e,t,"value",`${f}:v1`)),l===2&&u.append(p("span","op-filterbuilder__to",{},s("fbTo")),this.editor(e,t,"value2",`${f}:v2`)),u.append(this.removeBtn(()=>(i.items.splice(i.items.indexOf(e),1),this.paint(),this.changed()))),u}editor(e,i,t,n){let f=i.type??"text",r=s("fbValue"),d=l=>{e[t]=l,this.changed()};if(f==="select"){let l=(i.options??[]).map(b=>typeof b=="object"?[String(b.value),b.label]:[String(b),String(b)]),o=b=>(i.options??[]).map(c=>typeof c=="object"?c.value:c).find(c=>String(c)===b)??b;if(m(e.op)){let b=new Set((Array.isArray(e.value)?e.value:[]).map(String)),c=p("div","op-filterbuilder__chips",{role:"group","aria-label":r,"data-fb":n});for(let[g,G]of l){let A=p("input","op-filterbuilder__chipbox",{type:"checkbox",value:g});A.checked=b.has(g),c.append(p("label","op-filterbuilder__chip",{},A,p("span","",{},G)))}return this.listen(c,"change",()=>d(Array.from(c.querySelectorAll("input:checked")).map(g=>o(g.value)))),c}let a=p("select","op-filterbuilder__select",{"aria-label":r,"data-fb":n});a.append(p("option","",{value:""},""));for(let[b,c]of l)a.append(p("option","",{value:b},c));return a.value=e.value!=null?String(e.value):"",this.listen(a,"change",()=>d(a.value===""?void 0:o(a.value))),a}if(m(e.op)){let l=new F({stableSize:!1,placeholder:s("fbList"),value:(e.value??[]).join(", ")});return l.on("change",o=>d(o.split(",").map(a=>a.trim()).filter(Boolean))),this.own1(l,r,n)}let u=f==="number"?new k({value:e[t]??null,stableSize:!1}):f==="date"?new S({value:e[t]??null,stableSize:!1}):new F({value:e[t]??"",stableSize:!1});return u.on("change",l=>d(l===""?void 0:l)),this.own1(u,r,n)}own1(e,i,t){this.parts.push(e),e.on("enter",()=>this.apply());let n=e.el;return n.classList.add("op-filterbuilder__value"),n.dataset.fb=t,e.getInput().setAttribute("aria-label",i),n}};L("filterbuilder",E);export{E as a};
2
+ //# sourceMappingURL=chunk-3DBEZGOY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/filterbuilder/filterbuilder.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport type { FilterGroup, FilterNode, FilterOp } from '../../../data/proxy';\nimport type { Store } from '../../../data/store';\nimport { iconEl } from '../../base/icon/icon';\nimport { Menu } from '../../overlays/menu/menu';\nimport { Button } from '../../base/button/button';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { NumberField } from '../../fields/numberfield/numberfield';\nimport { DateField } from '../../fields/datefield/datefield';\n\naddMessages('en', {\n fbEq: 'equals',\n fbNe: 'does not equal',\n fbContains: 'contains',\n fbNotContains: 'does not contain',\n fbStarts: 'starts with',\n fbEnds: 'ends with',\n fbGt: 'greater than',\n fbGe: 'greater than or equal',\n fbLt: 'less than',\n fbLe: 'less than or equal',\n fbBetween: 'is between',\n fbNotBetween: 'is not between',\n fbIn: 'is any of',\n fbNin: 'is none of',\n fbEmpty: 'is empty',\n fbNotEmpty: 'is not empty',\n fbAnd: 'Match all (AND)',\n fbOr: 'Match any (OR)',\n fbAddFilter: 'Add filter',\n fbAddGroup: 'Add group',\n fbRemove: 'Remove',\n fbClear: 'Clear all',\n fbApply: 'Apply',\n fbField: 'Field',\n fbOperator: 'Operator',\n fbValue: 'Value',\n fbTo: 'and',\n fbList: 'a, b, c',\n fbNone: 'No filters',\n fbLabel: 'Filters',\n});\naddMessages('pt-BR', {\n fbEq: 'igual a',\n fbNe: 'diferente de',\n fbContains: 'cont\u00E9m',\n fbNotContains: 'n\u00E3o cont\u00E9m',\n fbStarts: 'come\u00E7a com',\n fbEnds: 'termina com',\n fbGt: 'maior que',\n fbGe: 'maior ou igual a',\n fbLt: 'menor que',\n fbLe: 'menor ou igual a',\n fbBetween: 'entre',\n fbNotBetween: 'fora do intervalo',\n fbIn: '\u00E9 um de',\n fbNin: 'n\u00E3o \u00E9 nenhum de',\n fbEmpty: 'est\u00E1 vazio',\n fbNotEmpty: 'n\u00E3o est\u00E1 vazio',\n fbAnd: 'Todas (E)',\n fbOr: 'Qualquer uma (OU)',\n fbAddFilter: 'Adicionar filtro',\n fbAddGroup: 'Adicionar grupo',\n fbRemove: 'Remover',\n fbClear: 'Limpar tudo',\n fbApply: 'Aplicar',\n fbField: 'Campo',\n fbOperator: 'Operador',\n fbValue: 'Valor',\n fbTo: 'e',\n fbList: 'a, b, c',\n fbNone: 'Sem filtros',\n fbLabel: 'Filtros',\n});\n\nexport interface FilterField {\n name: string;\n label?: string;\n type?: 'text' | 'number' | 'date' | 'select';\n /** Fields with the same group sit together in the field pickers (as columns do in the Grid's column menu). */\n group?: string;\n /** For `select`: the choices. */\n options?: Array<string | number | { value: string | number; label: string }>;\n}\n\nexport interface FilterBuilderConfig extends ComponentConfig {\n fields: FilterField[];\n /** Starting filters. */\n value?: FilterGroup | null;\n /** Filtered as the user edits (`live`) or when Apply is pressed. */\n store?: Store<any>;\n /** Apply on every edit (debounced). Default true. With `false` an Apply button appears. */\n live?: boolean;\n /**\n * What \"Add filter\" does: `'row'` (default) adds an empty row for the first field; `'pick'` first asks\n * which field to filter by (a menu of the fields, grouped by `group`, with a search field past 6 fields) and adds the row for it.\n */\n addMode?: 'row' | 'pick';\n /** Deepest group nesting allowed. Default 3. */\n maxDepth?: number;\n}\n\ntype Rule = { kind: 'rule'; id: number; field: string; op: FilterOp; value?: any; value2?: any };\ntype Group = { kind: 'group'; op: 'and' | 'or'; items: Array<Rule | Group> };\n\nconst OPS: Record<NonNullable<FilterField['type']>, FilterOp[]> = {\n text: ['contains', 'notContains', 'eq', 'ne', 'startsWith', 'endsWith', 'in', 'nin', 'empty', 'notEmpty'],\n number: ['eq', 'ne', 'gt', 'ge', 'lt', 'le', 'between', 'notBetween', 'empty', 'notEmpty'],\n date: ['eq', 'ne', 'gt', 'ge', 'lt', 'le', 'between', 'notBetween', 'empty', 'notEmpty'],\n select: ['eq', 'ne', 'in', 'nin', 'empty', 'notEmpty'],\n};\nconst KEY: Record<FilterOp, string> = {\n eq: 'fbEq', ne: 'fbNe', contains: 'fbContains', notContains: 'fbNotContains', startsWith: 'fbStarts', endsWith: 'fbEnds',\n gt: 'fbGt', ge: 'fbGe', lt: 'fbLt', le: 'fbLe', between: 'fbBetween', notBetween: 'fbNotBetween', in: 'fbIn', nin: 'fbNin',\n empty: 'fbEmpty', notEmpty: 'fbNotEmpty',\n};\nconst arity = (op: FilterOp) => (op === 'empty' || op === 'notEmpty' ? 0 : op === 'between' || op === 'notBetween' ? 2 : 1);\nconst isList = (op: FilterOp) => op === 'in' || op === 'nin';\n\n/**\n * A dynamic filter editor: rows of `field \u00B7 operator \u00B7 value` that accumulate below each other, joined by AND or OR,\n * with nestable groups. The result is a `FilterGroup` for `Store.filter`.\n */\nexport class FilterBuilder extends Component<FilterBuilderConfig> {\n protected override baseCls = 'op-filterbuilder';\n private root: Group = { kind: 'group', op: 'and', items: [] };\n private parts: Component[] = [];\n private nextId = 1;\n private cancelApply?: () => void;\n private pickMenu?: Menu;\n\n protected override onRender() {\n this.el.setAttribute('role', 'group');\n this.el.setAttribute('aria-label', t('fbLabel'));\n if (this.config.value) this.root = this.fromNode(this.config.value) as Group;\n this.own(() => (this.parts.forEach((p) => p.destroy()), this.pickMenu?.destroy()));\n this.paint();\n if (this.config.value && this.config.store) this.apply(); // the starting filter takes effect right away\n }\n\n // ---- model <-> filter ----------------------------------------------------------------------\n\n private fromNode(n: FilterNode): Rule | Group {\n if ('filters' in n) return { kind: 'group', op: n.op, items: n.filters.map((f) => this.fromNode(f)) };\n const [a, b] = Array.isArray(n.value) && !isList(n.op ?? 'eq') ? n.value : [n.value, undefined];\n return { kind: 'rule', id: this.nextId++, field: n.field, op: n.op ?? 'eq', value: isList(n.op ?? 'eq') ? n.value : a, value2: b };\n }\n\n private field(name: string): FilterField {\n return this.config.fields.find((f) => f.name === name) ?? this.config.fields[0];\n }\n\n private complete(r: Rule): boolean {\n const n = arity(r.op);\n const has = (v: unknown) => v != null && v !== '' && !(Array.isArray(v) && !v.length);\n return n === 0 || (n === 1 ? has(r.value) : has(r.value) && has(r.value2));\n }\n\n private toNode(g: Group): FilterGroup | null {\n const filters = g.items.flatMap((it): FilterNode[] => {\n if (it.kind === 'group') return this.toNode(it) ? [this.toNode(it)!] : [];\n if (!this.complete(it)) return [];\n const n = arity(it.op);\n return [{ field: it.field, op: it.op, ...(n === 1 ? { value: it.value } : n === 2 ? { value: [it.value, it.value2] } : {}) }];\n });\n return filters.length ? { op: g.op, filters } : null;\n }\n\n /** The complete rules as a filter tree (incomplete rows are left out); null when there is nothing to filter by. */\n getFilter(): FilterGroup | null {\n return this.toNode(this.root);\n }\n\n setFilter(filter: FilterGroup | null): void {\n this.root = filter ? (this.fromNode(filter) as Group) : { kind: 'group', op: 'and', items: [] };\n if (this.rendered) this.paint();\n this.changed();\n }\n\n /** Removes every row and applies the empty filter. */\n clear(): void {\n this.setFilter(null);\n this.apply();\n }\n\n /** Pushes the current filter to the store and fires `apply`. */\n apply(): void {\n this.cancelApply?.();\n const f = this.getFilter();\n if (this.emit('before-apply', f) === false) return;\n const store = this.config.store;\n if (store) void (f ? store.filter(f) : store.clearFilter());\n this.emit('apply', f);\n }\n\n /** Adds a row (optionally for a given field) to the root group. */\n addRule(field?: string): void {\n this.root.items.push(this.newRule(field));\n if (this.rendered) this.paint();\n }\n\n setFields(fields: FilterField[]): void {\n this.config.fields = fields;\n if (this.rendered) this.paint();\n }\n\n setStore(store: Store<any> | undefined): void {\n this.config.store = store;\n }\n\n private newRule(field?: string): Rule {\n const f = this.field(field ?? '');\n return { kind: 'rule', id: this.nextId++, field: f.name, op: OPS[f.type ?? 'text'][0] };\n }\n\n private changed(): void {\n this.emit('change', this.getFilter());\n if (this.config.live === false) return;\n this.cancelApply?.();\n this.cancelApply = this.later(() => this.apply(), 250);\n }\n\n // ---- rendering -----------------------------------------------------------------------------\n\n /** Rebuilds the rows, keeping keyboard focus on the same control. */\n private paint(): void {\n const keep = (document.activeElement as HTMLElement | null)?.closest<HTMLElement>('[data-fb]')?.dataset.fb;\n this.parts.splice(0).forEach((p) => p.destroy());\n const kids: HTMLElement[] = [this.group(this.root, 0, null)];\n if (this.config.live === false) kids.push(h('div', 'op-filterbuilder__foot', {}, this.button(t('fbApply'), 'primary', () => this.apply())));\n this.el.replaceChildren(...kids);\n if (this.mounted) this.parts.forEach((p) => p.notifyMount());\n const back = keep && this.el.querySelector<HTMLElement>(`[data-fb=\"${keep}\"]`);\n if (back) (back.matches('select,button,input') ? back : back.querySelector('input'))?.focus();\n }\n\n private button(text: string, variant: 'default' | 'primary' | 'ghost', handler: () => void, icon?: string): HTMLElement {\n const b = new Button({ text, variant, icon, handler });\n this.parts.push(b);\n return b.el;\n }\n\n private select(options: Array<[string, string, string?]>, value: string, label: string, key: string, onChange: (v: string) => void): HTMLSelectElement {\n const s = h('select', 'op-filterbuilder__select', { 'aria-label': label, 'data-fb': key });\n const groups = new Map<string, HTMLElement>(); // a third value is the group: those options go in an <optgroup>\n for (const [v, text, g] of options) {\n const opt = h('option', '', { value: v }, text);\n if (!g) s.append(opt);\n else {\n if (!groups.has(g)) groups.set(g, h('optgroup', '', { label: g }));\n groups.get(g)!.append(opt);\n }\n }\n s.append(...groups.values());\n s.value = value;\n this.listen(s, 'change', () => onChange(s.value));\n return s;\n }\n\n private group(g: Group, depth: number, parent: Group | null): HTMLElement {\n const el = h('div', `op-filterbuilder__group${depth ? ' is-nested' : ''}`, { role: 'group', 'aria-label': t('fbLabel') });\n const logic = this.select([['and', t('fbAnd')], ['or', t('fbOr')]], g.op, t('fbLabel'), `g${depth}:logic`, (v) => {\n g.op = v as 'and' | 'or';\n this.changed();\n });\n const head = h('div', 'op-filterbuilder__head', {}, logic);\n const add = (field?: string) => {\n const r = this.newRule(field);\n g.items.push(r);\n this.paint();\n this.el.querySelector<HTMLElement>(`[data-fb=\"r${r.id}:v1\"] input, select[data-fb=\"r${r.id}:v1\"]`)?.focus();\n };\n const addBtn = this.button(t('fbAddFilter'), 'ghost', () => (this.config.addMode === 'pick' ? this.pick(addBtn, add) : add()), 'plus');\n head.append(addBtn);\n if (depth < (this.config.maxDepth ?? 3)) {\n head.append(\n this.button(t('fbAddGroup'), 'ghost', () => {\n g.items.push({ kind: 'group', op: 'or', items: [this.newRule()] });\n this.paint();\n }, 'plus'),\n );\n }\n if (parent) head.append(this.removeBtn(() => (parent.items.splice(parent.items.indexOf(g), 1), this.paint(), this.changed())));\n else if (g.items.length) head.append(this.button(t('fbClear'), 'ghost', () => this.clear()));\n el.append(head);\n if (!g.items.length && !parent) el.append(h('div', 'op-filterbuilder__none', {}, t('fbNone')));\n for (const it of g.items) el.append(it.kind === 'group' ? this.group(it, depth + 1, g) : this.rule(it, g));\n return el;\n }\n\n /** \"Add filter\" in `pick` mode: a menu of the fields; the chosen one gets the new row. */\n private pick(anchor: HTMLElement, add: (field: string) => void): void {\n const fields = this.config.fields;\n this.pickMenu ??= new Menu({});\n this.pickMenu.setSearch(fields.length > 6);\n this.pickMenu.setItems(fields.map((f) => ({ text: f.label ?? f.name, group: f.group, handler: () => add(f.name) })));\n this.pickMenu.showBy(anchor);\n }\n\n private removeBtn(onClick: () => void): HTMLElement {\n const b = h('button', 'op-filterbuilder__remove', { type: 'button', 'aria-label': t('fbRemove'), title: t('fbRemove') }, iconEl('x'));\n this.listen(b, 'click', onClick);\n return b;\n }\n\n private rule(r: Rule, parent: Group): HTMLElement {\n const f = this.field(r.field);\n const type = f.type ?? 'text';\n const k = `r${r.id}`;\n const fieldSel = this.select(this.config.fields.map((x) => [x.name, x.label ?? x.name, x.group]), r.field, t('fbField'), `${k}:field`, (v) => {\n r.field = v;\n const ops = OPS[this.field(v).type ?? 'text'];\n if (!ops.includes(r.op) || (this.field(v).type ?? 'text') !== type) r.op = ops[0];\n r.value = r.value2 = undefined;\n this.paint();\n this.changed();\n });\n const opSel = this.select(OPS[type].map((o) => [o, t(KEY[o])]), r.op, t('fbOperator'), `${k}:op`, (v) => {\n const prev = r.op;\n r.op = v as FilterOp;\n if (arity(prev) !== arity(r.op) || isList(prev) !== isList(r.op)) r.value = r.value2 = undefined;\n this.paint();\n this.changed();\n });\n const row = h('div', 'op-filterbuilder__row', {}, fieldSel, opSel);\n const n = arity(r.op);\n if (n >= 1) row.append(this.editor(r, f, 'value', `${k}:v1`));\n if (n === 2) row.append(h('span', 'op-filterbuilder__to', {}, t('fbTo')), this.editor(r, f, 'value2', `${k}:v2`));\n row.append(this.removeBtn(() => (parent.items.splice(parent.items.indexOf(r), 1), this.paint(), this.changed())));\n return row;\n }\n\n private editor(r: Rule, f: FilterField, slot: 'value' | 'value2', key: string): HTMLElement {\n const type = f.type ?? 'text';\n const label = t('fbValue');\n const set = (v: unknown) => {\n r[slot] = v;\n this.changed();\n };\n if (type === 'select') {\n const opts = (f.options ?? []).map((o): [string, string] => (typeof o === 'object' ? [String(o.value), o.label] : [String(o), String(o)]));\n const raw = (v: string) => (f.options ?? []).map((o) => (typeof o === 'object' ? o.value : o)).find((o) => String(o) === v) ?? v;\n if (isList(r.op)) {\n // \"is any of\": one toggle chip per option (a native multi-select is tall, scrolls and is easy to mis-click)\n const on = new Set((Array.isArray(r.value) ? r.value : []).map(String));\n const group = h('div', 'op-filterbuilder__chips', { role: 'group', 'aria-label': label, 'data-fb': key });\n for (const [v, text] of opts) {\n const box = h('input', 'op-filterbuilder__chipbox', { type: 'checkbox', value: v });\n box.checked = on.has(v);\n group.append(h('label', 'op-filterbuilder__chip', {}, box, h('span', '', {}, text)));\n }\n this.listen(group, 'change', () => set(Array.from(group.querySelectorAll<HTMLInputElement>('input:checked')).map((i) => raw(i.value))));\n return group;\n }\n const s = h('select', 'op-filterbuilder__select', { 'aria-label': label, 'data-fb': key });\n s.append(h('option', '', { value: '' }, ''));\n for (const [v, text] of opts) s.append(h('option', '', { value: v }, text));\n s.value = r.value != null ? String(r.value) : '';\n this.listen(s, 'change', () => set(s.value === '' ? undefined : raw(s.value)));\n return s;\n }\n if (isList(r.op)) {\n const c = new TextField({ stableSize: false, placeholder: t('fbList'), value: ((r.value as unknown[]) ?? []).join(', ') });\n c.on('change', (v: string) => set(v.split(',').map((x) => x.trim()).filter(Boolean)));\n return this.own1(c, label, key);\n }\n const c = type === 'number' ? new NumberField({ value: r[slot] ?? null, stableSize: false }) : type === 'date' ? new DateField({ value: r[slot] ?? null, stableSize: false }) : new TextField({ value: r[slot] ?? '', stableSize: false });\n c.on('change', (v: unknown) => set(v === '' ? undefined : v));\n return this.own1(c, label, key);\n }\n\n /** Registers an editor, labels its input, and makes Enter apply. */\n private own1(c: TextField<any, any>, label: string, key: string): HTMLElement {\n this.parts.push(c);\n c.on('enter', () => this.apply());\n const el = c.el;\n el.classList.add('op-filterbuilder__value');\n el.dataset.fb = key;\n c.getInput().setAttribute('aria-label', label);\n return el;\n }\n}\nregister('filterbuilder', FilterBuilder);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "OPS", "KEY", "arity", "op", "isList", "FilterBuilder", "Component", "t", "p", "n", "f", "a", "b", "name", "r", "has", "v", "g", "filters", "it", "filter", "store", "field", "fields", "keep", "kids", "h", "back", "text", "variant", "handler", "icon", "Button", "options", "value", "label", "key", "onChange", "s", "groups", "opt", "depth", "parent", "el", "logic", "head", "add", "addBtn", "anchor", "Menu", "onClick", "iconEl", "type", "k", "fieldSel", "x", "ops", "opSel", "prev", "row", "slot", "set", "opts", "o", "raw", "on", "group", "box", "i", "c", "TextField", "NumberField", "DateField", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-2ZUZ5HDL.js";import{a as l}from"./chunk-A2NKDOYN.js";import{b as i}from"./chunk-PZSHOSOS.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{e as a,f as n}from"./chunk-MW3RWBZ7.js";a("en",{faSave:"Save",faDirty:"Unsaved changes"});a("pt-BR",{faSave:"Salvar",faDirty:"Altera\xE7\xF5es n\xE3o salvas"});var r=class extends l{baseCls="op-formactions";statusEl;buttonsEl;form;save;cancel;extra=[];build(){return this.statusEl=i("span","op-formactions__status",{"aria-live":"polite"}),this.buttonsEl=i("div","op-formactions__buttons"),i("div","op-formactions",{},this.statusEl,this.buttonsEl)}onRender(){let t=this.config,e=this.parent;for(;e&&!("focusField"in e&&"getFields"in e);)e=e.parent;this.form=e,this.extra=(t.buttons??[]).map(s=>new o(s)),this.save=new o({text:t.submitText??n("faSave"),variant:"primary",htmlType:"submit"}),this.buttonsEl.append(...this.extra.map(s=>s.el),this.save.el),this.setCancelText(t.cancelText??n("cancel")),this.setSticky(!!t.sticky),this.form?.on("dirty-change",()=>this.paint()),this.own(()=>[...this.extra,this.save,this.cancel].forEach(s=>s?.destroy())),this.paint()}paint(){let t=!!this.form?.isDirty();this.el.classList.toggle("is-dirty",t),this.statusEl.textContent=t&&this.config.status!==!1?n("faDirty"):"",this.save.setDisabled(!!this.config.requireChanges&&!t)}getForm(){return this.form}setSubmitText(t){this.config.submitText=t,this.save?.setText(t)}setCancelText(t){if(this.config.cancelText=t,!!this.rendered){if(t===!1)return this.cancel?.destroy(),void(this.cancel=void 0);if(this.cancel)return this.cancel.setText(t);this.cancel=new o({text:t,handler:()=>this.emit("cancel")!==!1&&this.form?.reset()}),this.buttonsEl.insertBefore(this.cancel.el,this.save.el)}}setSticky(t){this.config.sticky=t,this.rendered&&this.el.classList.toggle("is-sticky",t)}};c("formactions",r);export{r as a};
2
+ //# sourceMappingURL=chunk-3S24ZRPK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/form/formactions/formactions.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { addMessages, t } from '../../../core/i18n';\nimport { Button, type ButtonConfig } from '../../base/button/button';\nimport type { Form } from '../form/form';\n\naddMessages('en', { faSave: 'Save', faDirty: 'Unsaved changes' });\naddMessages('pt-BR', { faSave: 'Salvar', faDirty: 'Altera\u00E7\u00F5es n\u00E3o salvas' });\n\nexport interface FormActionsConfig extends ComponentConfig {\n submitText?: string;\n /** `false` hides Cancel. */\n cancelText?: string | false;\n /** Extra buttons, before Cancel. */\n buttons?: ButtonConfig[];\n /** Sticks to the bottom of the scrolling area. */\n sticky?: boolean;\n /** Save is disabled until the form has changes. */\n requireChanges?: boolean;\n /** The \"Unsaved changes\" line. Default true. */\n status?: boolean;\n}\n\n/** The form's action bar: Cancel (resets), Save (submits) and an \"Unsaved changes\" status. */\nexport class FormActions extends Component<FormActionsConfig> {\n protected override baseCls = 'op-formactions';\n private statusEl!: HTMLElement;\n private buttonsEl!: HTMLElement;\n private form?: Form;\n private save!: Button;\n private cancel?: Button;\n private extra: Button[] = [];\n\n protected override build() {\n this.statusEl = h('span', 'op-formactions__status', { 'aria-live': 'polite' });\n this.buttonsEl = h('div', 'op-formactions__buttons');\n return h('div', 'op-formactions', {}, this.statusEl, this.buttonsEl);\n }\n\n protected override onRender() {\n const c = this.config;\n let p = this.parent as Component | undefined;\n while (p && !('focusField' in p && 'getFields' in p)) p = p.parent as Component | undefined; // the Form, by its methods (no import)\n this.form = p as Form | undefined;\n this.extra = (c.buttons ?? []).map((b) => new Button(b));\n this.save = new Button({ text: c.submitText ?? t('faSave'), variant: 'primary', htmlType: 'submit' });\n this.buttonsEl.append(...this.extra.map((b) => b.el), this.save.el);\n this.setCancelText(c.cancelText ?? t('cancel'));\n this.setSticky(!!c.sticky);\n this.form?.on('dirty-change', () => this.paint());\n this.own(() => [...this.extra, this.save, this.cancel].forEach((b) => b?.destroy()));\n this.paint();\n }\n\n private paint() {\n const dirty = !!this.form?.isDirty();\n this.el.classList.toggle('is-dirty', dirty);\n this.statusEl.textContent = dirty && this.config.status !== false ? t('faDirty') : '';\n this.save.setDisabled(!!this.config.requireChanges && !dirty);\n }\n\n getForm(): Form | undefined {\n return this.form;\n }\n\n setSubmitText(text: string) {\n this.config.submitText = text;\n this.save?.setText(text);\n }\n\n /** The Cancel button's text, or `false` to hide it. Cancel emits `cancel` (return false to keep the changes), then resets. */\n setCancelText(text: string | false) {\n this.config.cancelText = text;\n if (!this.rendered) return;\n if (text === false) return void (this.cancel?.destroy(), (this.cancel = undefined));\n if (this.cancel) return this.cancel.setText(text);\n this.cancel = new Button({ text, handler: () => this.emit('cancel') !== false && this.form?.reset() });\n this.buttonsEl.insertBefore(this.cancel.el, this.save.el);\n }\n\n setSticky(sticky: boolean) {\n this.config.sticky = sticky;\n if (this.rendered) this.el.classList.toggle('is-sticky', sticky);\n }\n}\nregister('formactions', FormActions);\n"],
5
+ "mappings": "+MAOAA,EAAY,KAAM,CAAE,OAAQ,OAAQ,QAAS,iBAAkB,CAAC,EAChEA,EAAY,QAAS,CAAE,OAAQ,SAAU,QAAS,gCAAwB,CAAC,EAiBpE,IAAMC,EAAN,cAA0BC,CAA6B,CACzC,QAAU,iBACrB,SACA,UACA,KACA,KACA,OACA,MAAkB,CAAC,EAER,OAAQ,CACzB,YAAK,SAAWC,EAAE,OAAQ,yBAA0B,CAAE,YAAa,QAAS,CAAC,EAC7E,KAAK,UAAYA,EAAE,MAAO,yBAAyB,EAC5CA,EAAE,MAAO,iBAAkB,CAAC,EAAG,KAAK,SAAU,KAAK,SAAS,CACrE,CAEmB,UAAW,CAC5B,IAAMC,EAAI,KAAK,OACXC,EAAI,KAAK,OACb,KAAOA,GAAK,EAAE,eAAgBA,GAAK,cAAeA,IAAIA,EAAIA,EAAE,OAC5D,KAAK,KAAOA,EACZ,KAAK,OAASD,EAAE,SAAW,CAAC,GAAG,IAAKE,GAAM,IAAIC,EAAOD,CAAC,CAAC,EACvD,KAAK,KAAO,IAAIC,EAAO,CAAE,KAAMH,EAAE,YAAcI,EAAE,QAAQ,EAAG,QAAS,UAAW,SAAU,QAAS,CAAC,EACpG,KAAK,UAAU,OAAO,GAAG,KAAK,MAAM,IAAKF,GAAMA,EAAE,EAAE,EAAG,KAAK,KAAK,EAAE,EAClE,KAAK,cAAcF,EAAE,YAAcI,EAAE,QAAQ,CAAC,EAC9C,KAAK,UAAU,CAAC,CAACJ,EAAE,MAAM,EACzB,KAAK,MAAM,GAAG,eAAgB,IAAM,KAAK,MAAM,CAAC,EAChD,KAAK,IAAI,IAAM,CAAC,GAAG,KAAK,MAAO,KAAK,KAAM,KAAK,MAAM,EAAE,QAASE,GAAMA,GAAG,QAAQ,CAAC,CAAC,EACnF,KAAK,MAAM,CACb,CAEQ,OAAQ,CACd,IAAMG,EAAQ,CAAC,CAAC,KAAK,MAAM,QAAQ,EACnC,KAAK,GAAG,UAAU,OAAO,WAAYA,CAAK,EAC1C,KAAK,SAAS,YAAcA,GAAS,KAAK,OAAO,SAAW,GAAQD,EAAE,SAAS,EAAI,GACnF,KAAK,KAAK,YAAY,CAAC,CAAC,KAAK,OAAO,gBAAkB,CAACC,CAAK,CAC9D,CAEA,SAA4B,CAC1B,OAAO,KAAK,IACd,CAEA,cAAcC,EAAc,CAC1B,KAAK,OAAO,WAAaA,EACzB,KAAK,MAAM,QAAQA,CAAI,CACzB,CAGA,cAAcA,EAAsB,CAElC,GADA,KAAK,OAAO,WAAaA,EACrB,EAAC,KAAK,SACV,IAAIA,IAAS,GAAO,OAAa,KAAK,QAAQ,QAAQ,EAAI,UAAK,OAAS,QACxE,GAAI,KAAK,OAAQ,OAAO,KAAK,OAAO,QAAQA,CAAI,EAChD,KAAK,OAAS,IAAIH,EAAO,CAAE,KAAAG,EAAM,QAAS,IAAM,KAAK,KAAK,QAAQ,IAAM,IAAS,KAAK,MAAM,MAAM,CAAE,CAAC,EACrG,KAAK,UAAU,aAAa,KAAK,OAAO,GAAI,KAAK,KAAK,EAAE,EAC1D,CAEA,UAAUC,EAAiB,CACzB,KAAK,OAAO,OAASA,EACjB,KAAK,UAAU,KAAK,GAAG,UAAU,OAAO,YAAaA,CAAM,CACjE,CACF,EACAC,EAAS,cAAeX,CAAW",
6
+ "names": ["addMessages", "FormActions", "Component", "h", "c", "p", "b", "Button", "t", "dirty", "text", "sticky", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as u}from"./chunk-Z2JBUHKA.js";import{a as h}from"./chunk-W3H7GTJY.js";import{a as f}from"./chunk-G2DAD3MQ.js";import{f as o,g as p}from"./chunk-5JEXM5S7.js";import{c}from"./chunk-4EZJ5FKJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{f as n}from"./chunk-MW3RWBZ7.js";var a=class extends h{baseCls="op-field op-textfield op-picker op-datefield";cal;dd;garbage=!1;emptyValue(){return null}isEmpty(e){return!e}parse(e){let t=p(e);return this.garbage=!!e.trim()&&!t,t}display(e){return e?o(e,{day:"2-digit",month:"2-digit",year:"numeric"}):""}createControl(){let e=super.createControl(),t=this.input;t.setAttribute("role","combobox"),t.setAttribute("aria-haspopup","dialog"),t.setAttribute("aria-expanded","false");let r=d("button","op-picker__trigger",{type:"button",tabindex:-1,"aria-label":n("calOpen")},c("calendar"));this.listen(r,"mousedown",s=>s.preventDefault()),this.listen(r,"click",()=>{!this.config.disabled&&!this.config.readonly&&this.toggle()}),e.append(r);let i=this.config;return this.cal=new f({value:i.value,min:i.min,max:i.max,firstDay:i.firstDay}),this.dd=new u({anchor:e,content:this.cal,role:"presentation"}),this.cal.on("select",s=>{this.dd.close(),this.setValue(s),t.focus()}),this.dd.on("open",()=>{t.setAttribute("aria-expanded","true"),this.el.classList.add("is-open"),this.cal.setValue(this.value),this.cal.focusDay(),this.emit("expand")}),this.dd.on("close",()=>{t.setAttribute("aria-expanded","false"),this.el.classList.remove("is-open"),this.emit("collapse")}),this.own(()=>this.dd.destroy()),this.on("blur",()=>this.later(()=>{let s=document.activeElement;!this.el.contains(s)&&!this.dd.el.contains(s)&&this.dd.close()},0)),e}onKey(e){e.key==="ArrowDown"&&!this.dd.isOpen()?(e.preventDefault(),this.open()):super.onKey(e)}onInput(){super.onInput(),this.garbage?this.setError(n("date")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-picker__trigger").disabled=e}check(){if(this.garbage)return n("date");let e=super.check(),t=this.value;if(e||!t)return e;let{min:r,max:i}=this.config;return r&&t<r?n("dateMin",{n:o(r)}):i&&t>i?n("dateMax",{n:o(i)}):""}open(){this.config.disabled||this.config.readonly||!this.rendered||this.dd.open()}close(){this.dd?.close()}toggle(){this.dd.isOpen()?this.close():this.open()}expand(){this.open()}collapse(){this.close()}setMin(e){this.config.min=e,this.cal?.setMin(e)}setMax(e){this.config.max=e,this.cal?.setMax(e)}};l("datefield",a);export{a};
2
+ //# sourceMappingURL=chunk-3TAW4AKH.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/fields/datefield/datefield.ts"],
4
+ "sourcesContent": ["import { TextField, type TextFieldConfig } from '../textfield/textfield';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport { parseDate, formatDate } from '../../../core/date';\nimport { iconEl } from '../../base/icon/icon';\nimport { Dropdown } from '../../overlays/dropdown/dropdown';\nimport { Calendar } from '../../dates/calendar/calendar';\n\nexport interface DateFieldConfig extends TextFieldConfig<string | null> {\n min?: string;\n max?: string;\n firstDay?: number;\n}\n\n/** Value is an ISO date string (`YYYY-MM-DD`) or null; the text shown and accepted follows the locale. */\nexport class DateField extends TextField<string | null, DateFieldConfig> {\n protected override baseCls = 'op-field op-textfield op-picker op-datefield';\n private cal!: Calendar;\n private dd!: Dropdown;\n private garbage = false;\n\n protected override emptyValue() {\n return null;\n }\n protected override isEmpty(v: string | null) {\n return !v;\n }\n\n protected override parse(text: string): string | null {\n const iso = parseDate(text);\n this.garbage = !!text.trim() && !iso;\n return iso;\n }\n protected override display(v: string | null) {\n return v ? formatDate(v, { day: '2-digit', month: '2-digit', year: 'numeric' }) : '';\n }\n\n protected override createControl() {\n const wrap = super.createControl();\n const input = this.input;\n input.setAttribute('role', 'combobox'); // APG date picker combobox\n input.setAttribute('aria-haspopup', 'dialog');\n input.setAttribute('aria-expanded', 'false');\n const trigger = h('button', 'op-picker__trigger', { type: 'button', tabindex: -1, 'aria-label': t('calOpen') }, iconEl('calendar'));\n this.listen(trigger, 'mousedown', (e: Event) => e.preventDefault());\n this.listen(trigger, 'click', () => {\n if (!this.config.disabled && !this.config.readonly) this.toggle();\n });\n wrap.append(trigger);\n const c = this.config;\n this.cal = new Calendar({ value: c.value, min: c.min, max: c.max, firstDay: c.firstDay });\n this.dd = new Dropdown({ anchor: wrap, content: this.cal, role: 'presentation' });\n this.cal.on('select', (iso: string) => {\n this.dd.close();\n this.setValue(iso);\n input.focus();\n });\n this.dd.on('open', () => {\n input.setAttribute('aria-expanded', 'true');\n this.el.classList.add('is-open');\n this.cal.setValue(this.value);\n this.cal.focusDay();\n this.emit('expand');\n });\n this.dd.on('close', () => {\n input.setAttribute('aria-expanded', 'false');\n this.el.classList.remove('is-open');\n this.emit('collapse');\n });\n this.own(() => this.dd.destroy());\n this.on('blur', () =>\n this.later(() => {\n const a = document.activeElement;\n if (!this.el.contains(a) && !this.dd.el.contains(a)) this.dd.close();\n }, 0),\n );\n return wrap;\n }\n\n protected override onKey(e: KeyboardEvent) {\n if (e.key === 'ArrowDown' && !this.dd.isOpen()) {\n e.preventDefault();\n this.open();\n } else super.onKey(e);\n }\n\n protected override onInput() {\n super.onInput();\n if (this.garbage) this.setError(t('date'));\n else if (this.error) this.validate();\n }\n protected override applyValue(v: string | null) {\n super.applyValue(v);\n this.garbage = false;\n }\n protected override onDisabled(disabled: boolean) {\n super.onDisabled(disabled);\n (this.el.querySelector('.op-picker__trigger') as HTMLButtonElement).disabled = disabled;\n }\n\n protected override check(): string {\n if (this.garbage) return t('date');\n const base = super.check();\n const v = this.value;\n if (base || !v) return base;\n const { min, max } = this.config;\n if (min && v < min) return t('dateMin', { n: formatDate(min) });\n if (max && v > max) return t('dateMax', { n: formatDate(max) });\n return '';\n }\n\n open() {\n if (this.config.disabled || this.config.readonly || !this.rendered) return;\n this.dd.open();\n }\n close() {\n this.dd?.close();\n }\n toggle() {\n if (this.dd.isOpen()) this.close();\n else this.open();\n }\n expand() {\n this.open();\n }\n collapse() {\n this.close();\n }\n setMin(min: string | undefined) {\n this.config.min = min;\n this.cal?.setMin(min);\n }\n setMax(max: string | undefined) {\n this.config.max = max;\n this.cal?.setMax(max);\n }\n}\nregister('datefield', DateField);\n"],
5
+ "mappings": "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",
6
+ "names": ["DateField", "TextField", "v", "text", "iso", "parseDate", "formatDate", "wrap", "input", "trigger", "h", "t", "iconEl", "e", "c", "Calendar", "Dropdown", "a", "disabled", "base", "min", "max", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as t}from"./chunk-2UPUC4RK.js";var a=e=>!!e&&t.isOn()&&typeof e.animate=="function",s=e=>Promise.all(e.map(n=>n.finished.catch(()=>{}))).then(()=>{});function l(e,n){if(!e||!t.get().originFromTrigger)return;let r=n.getBoundingClientRect(),i="getBoundingClientRect"in e?e.getBoundingClientRect():{left:e.x,top:e.y,width:0,height:0},o=(m,u)=>Math.max(0,Math.min(m,u));return`${o(i.left+i.width/2-r.left,r.width)}px ${o(i.top+i.height/2-r.top,r.height)}px`}function c(e,n,r="dropdown"){if(!a(e))return null;let i=l(n,e);i&&(e.style.transformOrigin=i);let o=t.get().popover.scale;return s([e.animate([{opacity:0,transform:`scale(${o})`},{opacity:1,transform:"scale(1)"}],{duration:t.ms(r),easing:t.easing("enter"),fill:"backwards"})])}function g(e,n,r="dropdown"){if(!a(e))return null;let i=l(n,e);i&&(e.style.transformOrigin=i);let o=t.get().popover.scale;return s([e.animate([{opacity:1,transform:"scale(1)"},{opacity:0,transform:`scale(${o})`}],{duration:t.ms(r,"exit"),easing:t.easing("exit"),fill:"forwards"})])}var d=(e,n={})=>Math.min(e,n.max??t.get().stagger.max)*(n.step??t.get().stagger.step);function p(e,n={}){let r=Array.from(e);return!r.length||!a(r[0])?null:s(r.map((i,o)=>i.animate([{opacity:0,transform:`translateY(${n.dy??6}px)`},{opacity:1,transform:"none"}],{duration:t.ms("enter"),easing:t.easing("enter"),delay:d(o,n),fill:"backwards"})))}function y(e,n,r={}){let i=n.flatMap(o=>Array.from(e.querySelectorAll(o)));return p(i,r)}function x(e,n="var(--op-color-success)"){return a(e)?s([e.animate([{boxShadow:`0 0 0 0 color-mix(in srgb, ${n} 55%, transparent)`,transform:"scale(1)"},{transform:"scale(1.03)",offset:.35},{boxShadow:`0 0 0 0.6rem color-mix(in srgb, ${n} 0%, transparent)`,transform:"scale(1)"}],{duration:t.get().duration.pulse,easing:t.easing("enter")})]):null}function b(e,n={}){return a(e)?s([e.animate([{opacity:0,transform:`translateY(${n.dy??8}px)`},{opacity:1,transform:"none"}],{duration:t.ms("enter"),easing:t.easing("enter"),delay:n.delay??0,fill:"backwards"})]):null}function h(e,n={}){return a(e)?s([e.animate([{opacity:1,transform:"none"},{opacity:0,transform:`translateY(${n.dy??8}px)`}],{duration:t.ms("enter","exit"),easing:t.easing("exit"),fill:"forwards"})]):null}export{l as a,c as b,g as c,d,p as e,y as f,x as g,b as h,h as i};
2
+ //# sourceMappingURL=chunk-4AA4FQEM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/motion/core.ts"],
4
+ "sourcesContent": ["import { motion } from './config';\n\n/** True when this element can be animated now (motion is on and the browser has the Web Animations API). */\nconst can = (el: Element | undefined): el is HTMLElement => !!el && motion.isOn() && typeof (el as HTMLElement).animate === 'function';\nconst settled = (a: Animation[]): Promise<void> => Promise.all(a.map((x) => x.finished.catch(() => undefined))).then(() => undefined);\n\ntype Trigger = Element | { x: number; y: number } | undefined;\n\n/** `transform-origin` that puts the popover's growth point at the trigger (rules 11 and 12). */\nexport function originFor(trigger: Trigger, el: HTMLElement): string | undefined {\n if (!trigger || !motion.get().originFromTrigger) return undefined;\n const r = el.getBoundingClientRect();\n const t = 'getBoundingClientRect' in trigger ? trigger.getBoundingClientRect() : { left: trigger.x, top: trigger.y, width: 0, height: 0 };\n const clamp = (v: number, max: number) => Math.max(0, Math.min(v, max));\n return `${clamp(t.left + t.width / 2 - r.left, r.width)}px ${clamp(t.top + t.height / 2 - r.top, r.height)}px`;\n}\n\ntype Kind = 'dropdown' | 'popover' | 'modal';\n\n/**\n * A floating element appears: fades in and scales up from `popover.scale` (0.95), growing out of the trigger, ease-out.\n * Resolves when it finished; `null` when nothing was animated (motion off, no Web Animations).\n */\nexport function popIn(el: HTMLElement, trigger?: Trigger, kind: Kind = 'dropdown'): Promise<void> | null {\n if (!can(el)) return null;\n const o = originFor(trigger, el);\n if (o) el.style.transformOrigin = o;\n const s = motion.get().popover.scale;\n return settled([el.animate([{ opacity: 0, transform: `scale(${s})` }, { opacity: 1, transform: 'scale(1)' }], { duration: motion.ms(kind), easing: motion.easing('enter'), fill: 'backwards' })]);\n}\n\n/** The inverse: shrinks back toward the trigger, `exitRatio` (80 %) as long as the entrance, ease-in. The caller hides the element when it resolves. */\nexport function popOut(el: HTMLElement, trigger?: Trigger, kind: Kind = 'dropdown'): Promise<void> | null {\n if (!can(el)) return null;\n const o = originFor(trigger, el);\n if (o) el.style.transformOrigin = o;\n const s = motion.get().popover.scale;\n return settled([el.animate([{ opacity: 1, transform: 'scale(1)' }, { opacity: 0, transform: `scale(${s})` }], { duration: motion.ms(kind, 'exit'), easing: motion.easing('exit'), fill: 'forwards' })]);\n}\n\nexport interface StaggerOptions {\n /** Delay between consecutive items (ms). Default `stagger.step` (30). */\n step?: number;\n /** After this many items the delay stops growing. Default `stagger.max` (12). */\n max?: number;\n /** Start offset in px (rises from below). Default 6. */\n dy?: number;\n}\n\n/** The delay (ms) of the item at `index` in a staggered group. */\nexport const staggerDelay = (index: number, o: StaggerOptions = {}): number => Math.min(index, o.max ?? motion.get().stagger.max) * (o.step ?? motion.get().stagger.step);\n\n/** Items of a list enter one after the other, 30 ms apart (rule 3), each ease-out. */\nexport function stagger(els: ArrayLike<Element>, o: StaggerOptions = {}): Promise<void> | null {\n const list = Array.from(els);\n if (!list.length || !can(list[0])) return null;\n return settled(list.map((el, i) => (el as HTMLElement).animate([{ opacity: 0, transform: `translateY(${o.dy ?? 6}px)` }, { opacity: 1, transform: 'none' }], { duration: motion.ms('enter'), easing: motion.easing('enter'), delay: staggerDelay(i, o), fill: 'backwards' })));\n}\n\n/** The parts of a card settle in order: every match of the first selector, then the second... one stagger step apart (rule 6). */\nexport function staggerDetails(root: ParentNode, selectors: string[], o: StaggerOptions = {}): Promise<void> | null {\n const els = selectors.flatMap((s) => Array.from(root.querySelectorAll(s)));\n return stagger(els, o);\n}\n\n/** A subtle ring and a tiny swell to confirm that something worked (rule 8). */\nexport function pulse(el: HTMLElement, color = 'var(--op-color-success)'): Promise<void> | null {\n if (!can(el)) return null;\n return settled([\n el.animate(\n [\n { boxShadow: `0 0 0 0 color-mix(in srgb, ${color} 55%, transparent)`, transform: 'scale(1)' },\n { transform: 'scale(1.03)', offset: 0.35 },\n { boxShadow: `0 0 0 0.6rem color-mix(in srgb, ${color} 0%, transparent)`, transform: 'scale(1)' },\n ],\n { duration: motion.get().duration.pulse, easing: motion.easing('enter') },\n ),\n ]);\n}\n\n/** A plain entrance: fade in while rising a little, ease-out (rule 1). */\nexport function enter(el: HTMLElement, o: { dy?: number; delay?: number } = {}): Promise<void> | null {\n if (!can(el)) return null;\n return settled([el.animate([{ opacity: 0, transform: `translateY(${o.dy ?? 8}px)` }, { opacity: 1, transform: 'none' }], { duration: motion.ms('enter'), easing: motion.easing('enter'), delay: o.delay ?? 0, fill: 'backwards' })]);\n}\n\n/** The same motion going out: shorter by `exitRatio`, ease-in (rules 1 and 15). */\nexport function exit(el: HTMLElement, o: { dy?: number } = {}): Promise<void> | null {\n if (!can(el)) return null;\n return settled([el.animate([{ opacity: 1, transform: 'none' }, { opacity: 0, transform: `translateY(${o.dy ?? 8}px)` }], { duration: motion.ms('enter', 'exit'), easing: motion.easing('exit'), fill: 'forwards' })]);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["can", "el", "motion", "settled", "a", "x", "originFor", "trigger", "t", "clamp", "v", "max", "popIn", "kind", "o", "s", "popOut", "staggerDelay", "index", "stagger", "els", "list", "i", "staggerDetails", "root", "selectors", "pulse", "color", "enter", "exit"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var d=Object.defineProperty;var e=(c,a)=>{for(var b in a)d(c,b,{get:a[b],enumerable:!0})};export{e as a};
2
+ //# sourceMappingURL=chunk-4C666HHU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as l}from"./chunk-A2NKDOYN.js";import{b as M}from"./chunk-PZSHOSOS.js";import{a as h}from"./chunk-TIPK3SCJ.js";var e=r=>`<path d="${r}"/>`,n={"chevron-down":e("m6 9 6 6 6-6"),"chevron-up":e("m18 15-6-6-6 6"),"chevron-left":e("m15 18-6-6 6-6"),"chevron-right":e("m9 18 6-6-6-6"),"chevrons-left":e("m11 17-5-5 5-5M18 17l-5-5 5-5"),"chevrons-right":e("m6 17 5-5-5-5M13 17l5-5-5-5"),x:e("M18 6 6 18M6 6l12 12"),check:e("M20 6 9 17l-5-5"),plus:e("M5 12h14M12 5v14"),minus:e("M5 12h14"),search:'<circle cx="11" cy="11" r="8"/>'+e("m21 21-4.3-4.3"),calendar:'<rect x="3" y="4" width="18" height="18" rx="2"/>'+e("M16 2v4M8 2v4M3 10h18"),info:'<circle cx="12" cy="12" r="10"/>'+e("M12 16v-4M12 8h.01"),alert:e("m21.7 18-8-14a2 2 0 0 0-3.5 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3ZM12 9v4M12 17h.01"),error:'<circle cx="12" cy="12" r="10"/>'+e("m15 9-6 6M9 9l6 6"),success:'<circle cx="12" cy="12" r="10"/>'+e("m9 12 2 2 4-4"),menu:e("M4 6h16M4 12h16M4 18h16"),"arrow-up":e("m5 12 7-7 7 7M12 19V5"),"arrow-down":e("M12 5v14M19 12l-7 7-7-7"),columns:'<rect x="3" y="3" width="18" height="18" rx="2"/>'+e("M9 3v18M15 3v18"),filter:e("M22 3H2l8 9.5V19l4 2v-8.5z"),send:e("m22 2-7 20-4-9-9-4zM22 2 11 13"),sparkles:e("M12 3l1.9 5.6L19.5 10.5l-5.6 1.9L12 18l-1.9-5.6L4.5 10.5l5.6-1.9zM19 3v4M21 5h-4M5 17v4M7 19H3"),file:e("M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zM14 2v6h6M8 13h8M8 17h8"),box:e("M21 8 12 3 3 8v8l9 5 9-5zM3 8l9 5 9-5M12 13v8"),truck:e("M1 3h15v13H1zM16 8h4l3 3v5h-7")+'<circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/>',clock:'<circle cx="12" cy="12" r="10"/>'+e("M12 6v6l4 2"),shield:e("M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"),list:e("M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01"),eye:e("M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7S2 12 2 12z")+'<circle cx="12" cy="12" r="3"/>',"eye-off":e("M17.9 17.9A10.1 10.1 0 0 1 12 19c-6.4 0-10-7-10-7a18.5 18.5 0 0 1 5.1-5.9M9.9 5.2A9.7 9.7 0 0 1 12 5c6.4 0 10 7 10 7a18.5 18.5 0 0 1-2.2 3.2M14.1 14.1a3 3 0 1 1-4.2-4.2M2 2l20 20"),heart:e("M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8l1 1.1L12 21l7.8-7.5 1-1.1a5.5 5.5 0 0 0 0-7.8z"),image:'<rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="9" cy="9" r="2"/>'+e("m21 15-5-5L5 21"),cloud:e("M18 10h-1.3A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"),folder:e("M4 4h5l2 3h9a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z"),share:e("M4 12v7a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-7M16 6l-4-4-4 4M12 2v14"),message:e("M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"),more:'<circle cx="12" cy="12" r="1"/><circle cx="19" cy="12" r="1"/><circle cx="5" cy="12" r="1"/>',user:e("M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2")+'<circle cx="12" cy="7" r="4"/>',home:e("m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM9 22V12h6v10"),trash:e("M3 6h18M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6M10 11v6M14 11v6M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"),edit:e("M12 20h9M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z"),sun:'<circle cx="12" cy="12" r="4"/>'+e("M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"),moon:e("M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"),bell:e("M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9M10.3 21a1.9 1.9 0 0 0 3.4 0"),chart:e("M3 3v18h18M19 9l-5 5-4-4-3 3"),settings:'<circle cx="12" cy="12" r="3"/>'+e("M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M4.9 19.1 7 17M17 7l2.1-2.1"),users:e("M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2M23 21v-2a4 4 0 0 0-3-3.9M16 3.1a4 4 0 0 1 0 7.8")+'<circle cx="9" cy="7" r="4"/>'};function m(r){Object.assign(n,r)}var d=r=>r in n;function x(r,c){let t=M("span","op-icon");return i(t,r,c),t}function i(r,c,t){c&&!(c in n)&&console.warn(`Optikos: unknown icon "${c}" (register it with registerIcons)`);let o=n[c]??"";r.innerHTML=o.startsWith("<svg")?o:`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${o}</svg>`,t?(r.setAttribute("role","img"),r.setAttribute("aria-label",t),r.removeAttribute("aria-hidden")):(r.setAttribute("aria-hidden","true"),r.removeAttribute("role"),r.removeAttribute("aria-label"))}var s=class extends l{baseCls="op-icon";tag="span";onRender(){i(this.el,this.config.name??"",this.config.label)}setName(c){this.config.name=c,this.rendered&&i(this.el,c,this.config.label)}setLabel(c){this.config.label=c,this.rendered&&i(this.el,this.config.name??"",c)}};h("icon",s);export{m as a,d as b,x as c,s as d};
2
+ //# sourceMappingURL=chunk-4EZJ5FKJ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/base/icon/icon.ts"],
4
+ "sourcesContent": ["// Built-in icon paths come from Lucide (ISC) and Feather (MIT); see THIRD_PARTY_NOTICES.md.\nimport { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\n\nconst s = (d: string) => `<path d=\"${d}\"/>`;\nconst icons: Record<string, string> = {\n 'chevron-down': s('m6 9 6 6 6-6'),\n 'chevron-up': s('m18 15-6-6-6 6'),\n 'chevron-left': s('m15 18-6-6 6-6'),\n 'chevron-right': s('m9 18 6-6-6-6'),\n 'chevrons-left': s('m11 17-5-5 5-5M18 17l-5-5 5-5'),\n 'chevrons-right': s('m6 17 5-5-5-5M13 17l5-5-5-5'),\n x: s('M18 6 6 18M6 6l12 12'),\n check: s('M20 6 9 17l-5-5'),\n plus: s('M5 12h14M12 5v14'),\n minus: s('M5 12h14'),\n search: '<circle cx=\"11\" cy=\"11\" r=\"8\"/>' + s('m21 21-4.3-4.3'),\n calendar: '<rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"/>' + s('M16 2v4M8 2v4M3 10h18'),\n info: '<circle cx=\"12\" cy=\"12\" r=\"10\"/>' + s('M12 16v-4M12 8h.01'),\n alert: s('m21.7 18-8-14a2 2 0 0 0-3.5 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.7-3ZM12 9v4M12 17h.01'),\n error: '<circle cx=\"12\" cy=\"12\" r=\"10\"/>' + s('m15 9-6 6M9 9l6 6'),\n success: '<circle cx=\"12\" cy=\"12\" r=\"10\"/>' + s('m9 12 2 2 4-4'),\n menu: s('M4 6h16M4 12h16M4 18h16'),\n 'arrow-up': s('m5 12 7-7 7 7M12 19V5'),\n 'arrow-down': s('M12 5v14M19 12l-7 7-7-7'),\n columns: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/>' + s('M9 3v18M15 3v18'),\n filter: s('M22 3H2l8 9.5V19l4 2v-8.5z'),\n send: s('m22 2-7 20-4-9-9-4zM22 2 11 13'),\n sparkles: s('M12 3l1.9 5.6L19.5 10.5l-5.6 1.9L12 18l-1.9-5.6L4.5 10.5l5.6-1.9zM19 3v4M21 5h-4M5 17v4M7 19H3'),\n file: s('M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8zM14 2v6h6M8 13h8M8 17h8'),\n box: s('M21 8 12 3 3 8v8l9 5 9-5zM3 8l9 5 9-5M12 13v8'),\n truck: s('M1 3h15v13H1zM16 8h4l3 3v5h-7') + '<circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\"/><circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\"/>',\n clock: '<circle cx=\"12\" cy=\"12\" r=\"10\"/>' + s('M12 6v6l4 2'),\n shield: s('M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z'),\n list: s('M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01'),\n eye: s('M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7S2 12 2 12z') + '<circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n 'eye-off': s('M17.9 17.9A10.1 10.1 0 0 1 12 19c-6.4 0-10-7-10-7a18.5 18.5 0 0 1 5.1-5.9M9.9 5.2A9.7 9.7 0 0 1 12 5c6.4 0 10 7 10 7a18.5 18.5 0 0 1-2.2 3.2M14.1 14.1a3 3 0 1 1-4.2-4.2M2 2l20 20'),\n heart: s('M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8l1 1.1L12 21l7.8-7.5 1-1.1a5.5 5.5 0 0 0 0-7.8z'),\n image: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/>' + s('m21 15-5-5L5 21'),\n cloud: s('M18 10h-1.3A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z'),\n folder: s('M4 4h5l2 3h9a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z'),\n share: s('M4 12v7a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1v-7M16 6l-4-4-4 4M12 2v14'),\n message: s('M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'),\n more: '<circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"19\" cy=\"12\" r=\"1\"/><circle cx=\"5\" cy=\"12\" r=\"1\"/>',\n user: s('M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2') + '<circle cx=\"12\" cy=\"7\" r=\"4\"/>',\n home: s('m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2zM9 22V12h6v10'),\n trash: s('M3 6h18M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6M10 11v6M14 11v6M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2'),\n edit: s('M12 20h9M16.5 3.5a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4z'),\n sun: '<circle cx=\"12\" cy=\"12\" r=\"4\"/>' + s('M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'),\n moon: s('M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z'),\n bell: s('M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9M10.3 21a1.9 1.9 0 0 0 3.4 0'),\n chart: s('M3 3v18h18M19 9l-5 5-4-4-3 3'),\n settings: '<circle cx=\"12\" cy=\"12\" r=\"3\"/>' + s('M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9 7 7M17 17l2.1 2.1M4.9 19.1 7 17M17 7l2.1-2.1'),\n users: s('M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2M23 21v-2a4 4 0 0 0-3-3.9M16 3.1a4 4 0 0 1 0 7.8') + '<circle cx=\"9\" cy=\"7\" r=\"4\"/>',\n};\n\n/** Registers icons by name. A value is either SVG inner markup (24\u00D724 viewBox, stroke style) or a full `<svg>` string. Trusted: comes from your code. */\nexport function registerIcons(map: Record<string, string>): void {\n Object.assign(icons, map);\n}\n\nexport const hasIcon = (name: string): boolean => name in icons;\n\n/** A `<span class=\"op-icon\">` holding the SVG. Decorative unless `label` is given. */\nexport function iconEl(name: string, label?: string): HTMLElement {\n const el = h('span', 'op-icon');\n setIcon(el, name, label);\n return el;\n}\n\nfunction setIcon(el: HTMLElement, name: string, label?: string) {\n if (name && !(name in icons)) console.warn(`Optikos: unknown icon \"${name}\" (register it with registerIcons)`);\n const svg = icons[name] ?? '';\n el.innerHTML = svg.startsWith('<svg') ? svg : `<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">${svg}</svg>`;\n if (label) {\n el.setAttribute('role', 'img');\n el.setAttribute('aria-label', label);\n el.removeAttribute('aria-hidden');\n } else {\n el.setAttribute('aria-hidden', 'true');\n el.removeAttribute('role');\n el.removeAttribute('aria-label');\n }\n}\n\nexport interface IconConfig extends ComponentConfig {\n name?: string;\n label?: string;\n}\n\nexport class Icon extends Component<IconConfig> {\n protected override baseCls = 'op-icon';\n protected override tag = 'span' as const;\n protected override onRender() {\n setIcon(this.el, this.config.name ?? '', this.config.label);\n }\n setName(name: string) {\n this.config.name = name;\n if (this.rendered) setIcon(this.el, name, this.config.label);\n }\n setLabel(label: string) {\n this.config.label = label;\n if (this.rendered) setIcon(this.el, this.config.name ?? '', label);\n }\n}\nregister('icon', Icon);\n"],
5
+ "mappings": "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",
6
+ "names": ["s", "d", "icons", "registerIcons", "map", "hasIcon", "name", "iconEl", "label", "el", "h", "setIcon", "svg", "Icon", "Component", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as b}from"./chunk-LQRFNQ2N.js";import{b as a,c as f}from"./chunk-676AKAGF.js";import{a as l,b as m}from"./chunk-VV7CFMPZ.js";import{b as v,c as u}from"./chunk-4AA4FQEM.js";import{c as n}from"./chunk-2UPUC4RK.js";import{b as h}from"./chunk-PZSHOSOS.js";import{a as p}from"./chunk-TIPK3SCJ.js";var d=class extends b{baseCls="op-panel op-window";backdrop;visible=!1;cleanup=[];opener=null;moved=!1;leaving=0;constructor(e={}){super({closable:!0,...e})}onRender(){super.onRender();let e=this.config;this.el.setAttribute("role","dialog"),this.el.tabIndex=-1,e.modal!==!1&&this.el.setAttribute("aria-modal","true"),e.draggable!==!1&&this.initDrag()}initDrag(){this.headerEl.classList.add("op-window__handle"),this.listen(this.headerEl,"pointerdown",e=>{if(e.target.closest(".op-panel__tool")||e.button)return;let t=this.el.getBoundingClientRect(),o=e.clientX-t.left,s=e.clientY-t.top;this.el.classList.add("is-dragging");let i=c=>{this.el.style.left=`${Math.max(0,Math.min(c.clientX-o,innerWidth-40))}px`,this.el.style.top=`${Math.max(0,Math.min(c.clientY-s,innerHeight-40))}px`,this.moved=!0},r=()=>{this.el.classList.remove("is-dragging"),document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",i),document.addEventListener("pointerup",r),this.cleanup.push(r)})}setMask(e){this.config.mask=e,this.backdrop?.classList.toggle("is-clear",!e)}isVisible(){return this.visible}center(){let e=this.el;e.style.left=`${Math.max(0,(innerWidth-e.offsetWidth)/2)}px`,e.style.top=`${Math.max(0,(innerHeight-e.offsetHeight)/3)}px`}show(){if(this.visible||this.destroyed||this.emit("before-show")===!1)return;let e=this.config,t=this.el;this.opener=document.activeElement,e.modal!==!1?(this.backdrop=h("div",`op-window-backdrop${e.mask===!1?" is-clear":""}`,{},t),a(this.backdrop,this.opener),this.cleanup.push(f(this.backdrop)),this.listen(this.backdrop,"pointerdown",i=>{i.target===this.backdrop&&(e.closeOnBackdrop?this.close():t.focus())})):a(t,this.opener),this.visible=!0,this.leaving++,t.getAnimations?.().forEach(i=>i.cancel()),this.notifyMount(),this.center(),v(t,this.opener??void 0,"modal"),this.backdrop?.animate?.([{opacity:0},{opacity:1}],{duration:n.ms("modal"),easing:n.easing("enter")}),this.cleanup.push(m(t));let o=i=>{i.key==="Escape"&&e.closeOnEsc!==!1&&!i.defaultPrevented&&(i.stopPropagation(),this.close())};t.addEventListener("keydown",o);let s=()=>!this.moved&&this.center();window.addEventListener("resize",s),this.cleanup.push(()=>t.removeEventListener("keydown",o),()=>window.removeEventListener("resize",s)),e.autoFocus?this.focusFirst():t.focus(),this.emit("show")}focusFirst(){let e=l(this.bodyEl)[0],t=this.el.querySelector(".op-panel__footer .op-button--primary");(e??t??l(this.el).find(o=>!o.classList.contains("op-panel__tool"))??this.el).focus()}hide(){!this.visible||this.emit("before-hide")===!1||(this.release(),this.emit("hide"))}release(e=!0){this.visible=!1,this.cleanup.splice(0).reverse().forEach(i=>i());let t=this.backdrop;this.backdrop=void 0;let o=t??this.el,s=e?u(this.el,this.opener??void 0,"modal"):null;if(s){let i=++this.leaving;t?.animate?.([{opacity:1},{opacity:0}],{duration:n.ms("modal","exit"),easing:n.easing("exit"),fill:"forwards"}),s.then(()=>i===this.leaving&&!this.visible&&(o.remove(),t?.remove()))}else o.remove(),t?.remove();this.opener instanceof HTMLElement&&this.opener.isConnected&&this.opener.focus()}onDestroy(){this.visible?this.release(!1):this.leaving&&(this.el.closest(".op-window-backdrop")??this.el).remove(),super.onDestroy()}};p("window",d);export{d as a};
2
+ //# sourceMappingURL=chunk-4LZZ244E.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/overlays/window/window.ts"],
4
+ "sourcesContent": ["import { Panel, type PanelConfig } from '../../layout/panel/panel';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { toLayer, lockModal } from '../../../core/layer';\nimport { trapFocus, focusables } from '../../../core/focus';\nimport { popIn, popOut } from '../../../motion/core';\nimport { motion } from '../../../motion/config';\n\nexport interface WindowConfig extends PanelConfig {\n modal?: boolean;\n /** Dims the page behind a modal window. `false` keeps it modal (inert page, trapped focus) but clear. Default true. */\n mask?: boolean;\n draggable?: boolean;\n closeOnEsc?: boolean;\n closeOnBackdrop?: boolean;\n /**\n * On show the focus goes to the dialog itself (it is modal: the focus must be inside), so a phone keyboard does not\n * pop up. `true` focuses its first field instead. Default false.\n */\n autoFocus?: boolean;\n}\n\n/** Floating dialog. Modal by default: the page behind becomes inert and Tab stays inside. */\nexport class Window extends Panel<WindowConfig> {\n protected override baseCls = 'op-panel op-window';\n private backdrop?: HTMLElement;\n private visible = false;\n private cleanup: Array<() => void> = [];\n private opener: Element | null = null;\n private moved = false;\n private leaving = 0;\n\n constructor(config: WindowConfig = {}) {\n super({ closable: true, ...config });\n }\n\n protected override onRender() {\n super.onRender();\n const c = this.config;\n this.el.setAttribute('role', 'dialog');\n this.el.tabIndex = -1;\n if (c.modal !== false) this.el.setAttribute('aria-modal', 'true');\n if (c.draggable !== false) this.initDrag();\n }\n\n private initDrag() {\n this.headerEl.classList.add('op-window__handle');\n this.listen(this.headerEl, 'pointerdown', (e: PointerEvent) => {\n if ((e.target as HTMLElement).closest('.op-panel__tool') || e.button) return;\n const r = this.el.getBoundingClientRect();\n const dx = e.clientX - r.left;\n const dy = e.clientY - r.top;\n this.el.classList.add('is-dragging');\n const move = (m: PointerEvent) => {\n this.el.style.left = `${Math.max(0, Math.min(m.clientX - dx, innerWidth - 40))}px`;\n this.el.style.top = `${Math.max(0, Math.min(m.clientY - dy, innerHeight - 40))}px`;\n this.moved = true;\n };\n const up = () => {\n this.el.classList.remove('is-dragging');\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.cleanup.push(up);\n });\n }\n\n /** Dims (true) or not (false) the page behind the modal window. */\n setMask(mask: boolean): void {\n this.config.mask = mask;\n this.backdrop?.classList.toggle('is-clear', !mask);\n }\n\n isVisible(): boolean {\n return this.visible;\n }\n\n /** Centers in the viewport (also done on show and on resize until the user drags it). */\n center(): void {\n const el = this.el;\n el.style.left = `${Math.max(0, (innerWidth - el.offsetWidth) / 2)}px`;\n el.style.top = `${Math.max(0, (innerHeight - el.offsetHeight) / 3)}px`;\n }\n\n override show(): void {\n if (this.visible || this.destroyed || this.emit('before-show') === false) return;\n const c = this.config;\n const el = this.el;\n this.opener = document.activeElement;\n if (c.modal !== false) {\n this.backdrop = h('div', `op-window-backdrop${c.mask === false ? ' is-clear' : ''}`, {}, el);\n toLayer(this.backdrop, this.opener);\n this.cleanup.push(lockModal(this.backdrop));\n this.listen(this.backdrop, 'pointerdown', (e: Event) => {\n if (e.target !== this.backdrop) return;\n if (c.closeOnBackdrop) this.close();\n else el.focus();\n });\n } else toLayer(el, this.opener);\n this.visible = true;\n this.leaving++;\n el.getAnimations?.().forEach((a) => a.cancel());\n this.notifyMount();\n this.center();\n void popIn(el, this.opener ?? undefined, 'modal'); // grows out of the button that opened it\n this.backdrop?.animate?.([{ opacity: 0 }, { opacity: 1 }], { duration: motion.ms('modal'), easing: motion.easing('enter') });\n this.cleanup.push(trapFocus(el));\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && c.closeOnEsc !== false && !e.defaultPrevented) {\n e.stopPropagation();\n this.close();\n }\n };\n el.addEventListener('keydown', onKey);\n const onResize = () => !this.moved && this.center();\n window.addEventListener('resize', onResize);\n this.cleanup.push(() => el.removeEventListener('keydown', onKey), () => window.removeEventListener('resize', onResize));\n if (c.autoFocus) this.focusFirst();\n else el.focus();\n this.emit('show');\n }\n\n private focusFirst() {\n const inBody = focusables(this.bodyEl)[0];\n const primary = this.el.querySelector<HTMLElement>('.op-panel__footer .op-button--primary');\n (inBody ?? primary ?? focusables(this.el).find((e) => !e.classList.contains('op-panel__tool')) ?? this.el).focus();\n }\n\n override hide(): void {\n if (!this.visible || this.emit('before-hide') === false) return;\n this.release();\n this.emit('hide');\n }\n\n /** Cleans up at once (the page is usable again) and takes the window off the screen: shrinking toward its opener, 20 % faster than it came. */\n private release(animate = true) {\n this.visible = false;\n this.cleanup.splice(0).reverse().forEach((f) => f());\n const bd = this.backdrop;\n this.backdrop = undefined;\n const target = bd ?? this.el;\n const out = animate ? popOut(this.el, this.opener ?? undefined, 'modal') : null;\n if (out) {\n const id = ++this.leaving;\n bd?.animate?.([{ opacity: 1 }, { opacity: 0 }], { duration: motion.ms('modal', 'exit'), easing: motion.easing('exit'), fill: 'forwards' });\n void out.then(() => id === this.leaving && !this.visible && (target.remove(), bd?.remove()));\n } else {\n target.remove();\n bd?.remove();\n }\n if (this.opener instanceof HTMLElement && this.opener.isConnected) this.opener.focus();\n }\n\n protected override onDestroy() {\n if (this.visible) this.release(false);\n else if (this.leaving) (this.el.closest('.op-window-backdrop') ?? this.el).remove();\n super.onDestroy();\n }\n}\nregister('window', Window);\n"],
5
+ "mappings": "6SAuBO,IAAMA,EAAN,cAAqBC,CAAoB,CAC3B,QAAU,qBACrB,SACA,QAAU,GACV,QAA6B,CAAC,EAC9B,OAAyB,KACzB,MAAQ,GACR,QAAU,EAElB,YAAYC,EAAuB,CAAC,EAAG,CACrC,MAAM,CAAE,SAAU,GAAM,GAAGA,CAAO,CAAC,CACrC,CAEmB,UAAW,CAC5B,MAAM,SAAS,EACf,IAAMC,EAAI,KAAK,OACf,KAAK,GAAG,aAAa,OAAQ,QAAQ,EACrC,KAAK,GAAG,SAAW,GACfA,EAAE,QAAU,IAAO,KAAK,GAAG,aAAa,aAAc,MAAM,EAC5DA,EAAE,YAAc,IAAO,KAAK,SAAS,CAC3C,CAEQ,UAAW,CACjB,KAAK,SAAS,UAAU,IAAI,mBAAmB,EAC/C,KAAK,OAAO,KAAK,SAAU,cAAgB,GAAoB,CAC7D,GAAK,EAAE,OAAuB,QAAQ,iBAAiB,GAAK,EAAE,OAAQ,OACtE,IAAMC,EAAI,KAAK,GAAG,sBAAsB,EAClCC,EAAK,EAAE,QAAUD,EAAE,KACnBE,EAAK,EAAE,QAAUF,EAAE,IACzB,KAAK,GAAG,UAAU,IAAI,aAAa,EACnC,IAAMG,EAAQC,GAAoB,CAChC,KAAK,GAAG,MAAM,KAAO,GAAG,KAAK,IAAI,EAAG,KAAK,IAAIA,EAAE,QAAUH,EAAI,WAAa,EAAE,CAAC,CAAC,KAC9E,KAAK,GAAG,MAAM,IAAM,GAAG,KAAK,IAAI,EAAG,KAAK,IAAIG,EAAE,QAAUF,EAAI,YAAc,EAAE,CAAC,CAAC,KAC9E,KAAK,MAAQ,EACf,EACMG,EAAK,IAAM,CACf,KAAK,GAAG,UAAU,OAAO,aAAa,EACtC,SAAS,oBAAoB,cAAeF,CAAI,EAChD,SAAS,oBAAoB,YAAaE,CAAE,CAC9C,EACA,SAAS,iBAAiB,cAAeF,CAAI,EAC7C,SAAS,iBAAiB,YAAaE,CAAE,EACzC,KAAK,QAAQ,KAAKA,CAAE,CACtB,CAAC,CACH,CAGA,QAAQC,EAAqB,CAC3B,KAAK,OAAO,KAAOA,EACnB,KAAK,UAAU,UAAU,OAAO,WAAY,CAACA,CAAI,CACnD,CAEA,WAAqB,CACnB,OAAO,KAAK,OACd,CAGA,QAAe,CACb,IAAMC,EAAK,KAAK,GAChBA,EAAG,MAAM,KAAO,GAAG,KAAK,IAAI,GAAI,WAAaA,EAAG,aAAe,CAAC,CAAC,KACjEA,EAAG,MAAM,IAAM,GAAG,KAAK,IAAI,GAAI,YAAcA,EAAG,cAAgB,CAAC,CAAC,IACpE,CAES,MAAa,CACpB,GAAI,KAAK,SAAW,KAAK,WAAa,KAAK,KAAK,aAAa,IAAM,GAAO,OAC1E,IAAMR,EAAI,KAAK,OACTQ,EAAK,KAAK,GAChB,KAAK,OAAS,SAAS,cACnBR,EAAE,QAAU,IACd,KAAK,SAAW,EAAE,MAAO,qBAAqBA,EAAE,OAAS,GAAQ,YAAc,EAAE,GAAI,CAAC,EAAGQ,CAAE,EAC3FC,EAAQ,KAAK,SAAU,KAAK,MAAM,EAClC,KAAK,QAAQ,KAAKC,EAAU,KAAK,QAAQ,CAAC,EAC1C,KAAK,OAAO,KAAK,SAAU,cAAgBC,GAAa,CAClDA,EAAE,SAAW,KAAK,WAClBX,EAAE,gBAAiB,KAAK,MAAM,EAC7BQ,EAAG,MAAM,EAChB,CAAC,GACIC,EAAQD,EAAI,KAAK,MAAM,EAC9B,KAAK,QAAU,GACf,KAAK,UACLA,EAAG,gBAAgB,EAAE,QAASI,GAAMA,EAAE,OAAO,CAAC,EAC9C,KAAK,YAAY,EACjB,KAAK,OAAO,EACPC,EAAML,EAAI,KAAK,QAAU,OAAW,OAAO,EAChD,KAAK,UAAU,UAAU,CAAC,CAAE,QAAS,CAAE,EAAG,CAAE,QAAS,CAAE,CAAC,EAAG,CAAE,SAAUM,EAAO,GAAG,OAAO,EAAG,OAAQA,EAAO,OAAO,OAAO,CAAE,CAAC,EAC3H,KAAK,QAAQ,KAAKC,EAAUP,CAAE,CAAC,EAC/B,IAAMQ,EAASL,GAAqB,CAC9BA,EAAE,MAAQ,UAAYX,EAAE,aAAe,IAAS,CAACW,EAAE,mBACrDA,EAAE,gBAAgB,EAClB,KAAK,MAAM,EAEf,EACAH,EAAG,iBAAiB,UAAWQ,CAAK,EACpC,IAAMC,EAAW,IAAM,CAAC,KAAK,OAAS,KAAK,OAAO,EAClD,OAAO,iBAAiB,SAAUA,CAAQ,EAC1C,KAAK,QAAQ,KAAK,IAAMT,EAAG,oBAAoB,UAAWQ,CAAK,EAAG,IAAM,OAAO,oBAAoB,SAAUC,CAAQ,CAAC,EAClHjB,EAAE,UAAW,KAAK,WAAW,EAC5BQ,EAAG,MAAM,EACd,KAAK,KAAK,MAAM,CAClB,CAEQ,YAAa,CACnB,IAAMU,EAASC,EAAW,KAAK,MAAM,EAAE,CAAC,EAClCC,EAAU,KAAK,GAAG,cAA2B,uCAAuC,GACzFF,GAAUE,GAAWD,EAAW,KAAK,EAAE,EAAE,KAAMR,GAAM,CAACA,EAAE,UAAU,SAAS,gBAAgB,CAAC,GAAK,KAAK,IAAI,MAAM,CACnH,CAES,MAAa,CAChB,CAAC,KAAK,SAAW,KAAK,KAAK,aAAa,IAAM,KAClD,KAAK,QAAQ,EACb,KAAK,KAAK,MAAM,EAClB,CAGQ,QAAQU,EAAU,GAAM,CAC9B,KAAK,QAAU,GACf,KAAK,QAAQ,OAAO,CAAC,EAAE,QAAQ,EAAE,QAASC,GAAMA,EAAE,CAAC,EACnD,IAAMC,EAAK,KAAK,SAChB,KAAK,SAAW,OAChB,IAAMC,EAASD,GAAM,KAAK,GACpBE,EAAMJ,EAAUK,EAAO,KAAK,GAAI,KAAK,QAAU,OAAW,OAAO,EAAI,KAC3E,GAAID,EAAK,CACP,IAAME,EAAK,EAAE,KAAK,QAClBJ,GAAI,UAAU,CAAC,CAAE,QAAS,CAAE,EAAG,CAAE,QAAS,CAAE,CAAC,EAAG,CAAE,SAAUT,EAAO,GAAG,QAAS,MAAM,EAAG,OAAQA,EAAO,OAAO,MAAM,EAAG,KAAM,UAAW,CAAC,EACpIW,EAAI,KAAK,IAAME,IAAO,KAAK,SAAW,CAAC,KAAK,UAAYH,EAAO,OAAO,EAAGD,GAAI,OAAO,EAAE,CAC7F,MACEC,EAAO,OAAO,EACdD,GAAI,OAAO,EAET,KAAK,kBAAkB,aAAe,KAAK,OAAO,aAAa,KAAK,OAAO,MAAM,CACvF,CAEmB,WAAY,CACzB,KAAK,QAAS,KAAK,QAAQ,EAAK,EAC3B,KAAK,UAAU,KAAK,GAAG,QAAQ,qBAAqB,GAAK,KAAK,IAAI,OAAO,EAClF,MAAM,UAAU,CAClB,CACF,EACAK,EAAS,SAAU/B,CAAM",
6
+ "names": ["Window", "Panel", "config", "c", "r", "dx", "dy", "move", "m", "up", "mask", "el", "toLayer", "lockModal", "e", "a", "popIn", "motion", "trapFocus", "onKey", "onResize", "inBody", "focusables", "primary", "animate", "f", "bd", "target", "out", "popOut", "id", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{b as f,c as g}from"./chunk-676AKAGF.js";import{b as y}from"./chunk-VV7CFMPZ.js";import{c as p}from"./chunk-4EZJ5FKJ.js";import{a as u}from"./chunk-A2NKDOYN.js";import{b as o}from"./chunk-PZSHOSOS.js";import{a as v}from"./chunk-TIPK3SCJ.js";import{e as d,f as h}from"./chunk-MW3RWBZ7.js";d("en",{cpPlaceholder:"Type a command or search\u2026",cpLabel:"Command palette",cpFilters:"Categories",cpAll:"All",cpEmpty:"No matching commands",cpHint:"\u2191\u2193 navigate \xB7 Enter run \xB7 Esc close"});d("pt-BR",{cpPlaceholder:"Digite um comando ou pesquise\u2026",cpLabel:"Paleta de comandos",cpFilters:"Categorias",cpAll:"Todas",cpEmpty:"Nenhum comando encontrado",cpHint:"\u2191\u2193 navegar \xB7 Enter executar \xB7 Esc fechar"});var b=()=>/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent);function E(a,t){let e=t.toLowerCase().split("+"),i=e.pop(),n=r=>e.includes(r),s=b();return a.key.toLowerCase()===i&&a.ctrlKey===(n("ctrl")||n("mod")&&!s)&&a.metaKey===(n("meta")||n("mod")&&s)&&a.shiftKey===n("shift")&&a.altKey===n("alt")}var C=(a,t)=>{let e=0;for(let i of a)if(i===t[e]&&++e===t.length)return!0;return!t.length};function _(a,t){let e=a.title.toLowerCase(),i=[a.category,a.description,...a.keywords??[]].join(" ").toLowerCase(),n=0;for(let s of t.toLowerCase().split(/\s+/).filter(Boolean)){let r=e.indexOf(s),l=r===0?100:r>0?/[\s\-_/]/.test(e[r-1])?80:60:s.length>2&&C(e,s)?30:i.includes(s)?20:0;if(!l)return 0;n+=l}return n}function w(a,t){let e=t.toLowerCase().split(/\s+/).filter(Boolean),i=a.toLowerCase(),n=[];for(let l of e){let c=i.indexOf(l);c>=0&&n.push([c,c+l.length])}n.sort((l,c)=>l[0]-c[0]);let s=[],r=0;for(let[l,c]of n)l<r||(s.push(a.slice(r,l),o("mark","op-palette__mark",{},a.slice(l,c))),r=c);return s.push(a.slice(r)),s.filter(l=>l!=="")}var m=class extends u{baseCls="op-palette-backdrop";commands;levels=[];query="";cat=null;shown=[];active=0;opened=!1;opener=null;release=[];panel;input;filtersEl;listEl;live;crumb;constructor(t={}){super(t),this.commands=[...t.commands??[]];let e=t.hotkey===void 0?"mod+k":t.hotkey;e&&this.listen(document,"keydown",i=>{!E(i,e)||this.destroyed||(i.preventDefault(),this.toggle())},!0)}build(){let t=this.config;this.input=o("input","op-palette__input",{type:"text",role:"combobox","aria-expanded":"true","aria-autocomplete":"list",autocomplete:"off",spellcheck:"false",placeholder:t.placeholder??h("cpPlaceholder")}),this.crumb=o("span","op-palette__crumb"),this.crumb.hidden=!0,this.filtersEl=o("div","op-palette__filters",{role:"group","aria-label":h("cpFilters")}),this.listEl=o("div","op-palette__list",{role:"listbox",id:`${this.id}-list`}),this.input.setAttribute("aria-controls",this.listEl.id),this.live=o("div","op-sr-only",{"aria-live":"polite"}),this.panel=o("div","op-palette",{role:"dialog","aria-modal":"true","aria-label":h("cpLabel")},o("div","op-palette__search",{},p("search"),this.crumb,this.input),this.filtersEl,this.listEl,this.live,o("div","op-palette__hint",{},h("cpHint")));let e=o("div","op-palette-backdrop",{},this.panel);return this.listen(this.input,"input",()=>{this.query=this.input.value,this.active=0,this.paint()}),this.listen(this.panel,"keydown",i=>this.onKey(i)),this.listen(e,"pointerdown",i=>i.target===e&&this.close()),this.listen(this.listEl,"pointermove",i=>{let n=this.indexOf(i);n>=0&&n!==this.active&&this.setActive(n)}),this.listen(this.listEl,"click",i=>{let n=this.indexOf(i);n>=0&&this.choose(this.shown[n])}),this.listen(this.filtersEl,"click",i=>{let n=i.target.closest("[data-cat]");n&&(this.cat=n.dataset.cat||null,this.active=0,this.paint(),this.input.focus())}),e}getCommands(){return this.commands}setCommands(t){this.commands=[...t],this.levels[0]&&(this.levels[0].commands=this.commands),this.opened&&this.paint()}register(t){let e=Array.isArray(t)?t:[t];return this.commands.push(...e),this.opened&&this.paint(),()=>this.setCommands(this.commands.filter(i=>!e.includes(i)))}run(t){let e=this.commands.find(i=>i.id===t);return e?this.exec(e):Promise.resolve()}isOpen(){return this.opened}toggle(){this.opened?this.close():this.open()}open(){if(this.opened||this.destroyed||this.emit("before-open")===!1)return;this.opener=document.activeElement;let t=this.el;this.levels=[{title:"",commands:this.commands}],this.query=this.input.value="",this.cat=null,this.active=0,f(t,this.opener),this.release.push(g(t),y(this.panel)),this.opened=!0,t.classList.add("is-open"),this.notifyMount(),this.paint(),this.input.focus(),this.emit("open")}close(){this.opened&&(this.opened=!1,this.release.splice(0).reverse().forEach(t=>t()),this.el.classList.remove("is-open"),this.el.remove(),this.opener instanceof HTMLElement&&this.opener.isConnected&&this.opener.focus(),this.emit("close"))}onDestroy(){this.opened=!1,this.release.splice(0).forEach(t=>t()),this.panel&&this.el.remove()}level(){return this.levels[this.levels.length-1]}results(){let t=this.level().commands.filter(s=>!s.hidden?.()&&(!this.cat||s.category===this.cat)),e=this.query.trim();if(e)return t.map(s=>({c:s,s:_(s,e)})).filter(s=>s.s>0).sort((s,r)=>r.s-s.s).map(s=>s.c).slice(0,this.config.maxResults??50);let i=this.config.categories??[],n=s=>s.category===void 0?1e6:i.includes(s.category)?i.indexOf(s.category):i.length;return t.map((s,r)=>({c:s,i:r})).sort((s,r)=>n(s.c)-n(r.c)||s.i-r.i).map(s=>s.c).slice(0,this.config.maxResults??50)}paint(){let t=this.level();this.crumb.hidden=this.levels.length<2,this.crumb.textContent=t.title,this.paintFilters(),this.shown=this.results(),this.active=Math.min(this.active,Math.max(0,this.shown.length-1));let e=!!this.query.trim(),i=[],n;this.shown.forEach((s,r)=>{!e&&s.category!==n&&(n=s.category,n&&i.push(o("div","op-palette__group",{role:"presentation"},n)));let l=o("div",`op-palette__item${s.disabled?" is-disabled":""}`,{role:"option",id:`${this.id}-o${r}`,"aria-disabled":s.disabled?"true":null,"data-i":r},s.icon?o("span","op-palette__icon",{},p(s.icon)):o("span","op-palette__icon"),o("span","op-palette__text",{},o("span","op-palette__title",{},...w(s.title,this.query)),s.description?o("span","op-palette__desc",{},s.description):""),e&&s.category?o("span","op-palette__cat",{},s.category):"",s.children?o("span","op-palette__more",{"aria-hidden":"true"},p("chevron-right")):"",s.shortcut?o("kbd","op-palette__kbd",{},s.shortcut):"");i.push(l)}),this.shown.length||i.push(o("div","op-palette__empty",{},this.config.emptyText??h("cpEmpty"))),this.listEl.replaceChildren(...i),this.live.textContent=this.shown.length?h("results",{n:this.shown.length}):h("noResults"),this.setActive(this.active,!1)}paintFilters(){let t=[...new Set(this.level().commands.filter(i=>!i.hidden?.()&&i.category).map(i=>i.category))];this.filtersEl.hidden=this.config.filters===!1||t.length<2,this.cat&&!t.includes(this.cat)&&(this.cat=null);let e=(i,n)=>o("button",`op-palette__chip${(this.cat??"")===n?" is-on":""}`,{type:"button","data-cat":n,"aria-pressed":String((this.cat??"")===n)},i);this.filtersEl.replaceChildren(e(h("cpAll"),""),...t.map(i=>e(i,i)))}indexOf(t){let e=t.target.closest(".op-palette__item");return e?Number(e.dataset.i):-1}setActive(t,e=!0){this.active=t;for(let i of Array.from(this.listEl.querySelectorAll(".op-palette__item"))){let n=Number(i.dataset.i)===t;i.classList.toggle("is-active",n),i.setAttribute("aria-selected",String(n)),n&&(this.input.setAttribute("aria-activedescendant",i.id),e&&i.scrollIntoView?.({block:"nearest"}))}this.shown.length||this.input.removeAttribute("aria-activedescendant")}onKey(t){let e=this.shown.length;switch(t.key){case"ArrowDown":case"ArrowUp":t.preventDefault(),e&&this.setActive((this.active+(t.key==="ArrowDown"?1:e-1))%e);break;case"Home":case"End":t.target===this.input&&!this.input.value&&(t.preventDefault(),e&&this.setActive(t.key==="Home"?0:e-1));break;case"Enter":if(t.target.closest(".op-palette__chip"))return;t.preventDefault(),this.shown[this.active]&&this.choose(this.shown[this.active]);break;case"Escape":t.preventDefault(),t.stopPropagation(),this.levels.length>1?this.back():this.close();break;case"Backspace":!this.input.value&&this.levels.length>1&&(t.preventDefault(),this.back());break}}back(){this.levels.pop(),this.query=this.input.value="",this.cat=null,this.active=0,this.paint(),this.input.focus()}async choose(t){if(!(!t||t.disabled)){if(t.children){try{let e=typeof t.children=="function"?await t.children():t.children;this.levels.push({title:t.title,commands:e}),this.query=this.input.value="",this.cat=null,this.active=0,this.paint(),this.input.focus()}catch(e){this.emit("error",e)}return}this.close(),await this.exec(t)}}async exec(t){try{this.emit("run",t),await t.handler?.({palette:this,command:t})}catch(e){this.emit("error",e)}}};v("commandpalette",m);export{m as a};
2
+ //# sourceMappingURL=chunk-4SYIIX5A.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/overlays/commandpalette/commandpalette.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { toLayer, lockModal } from '../../../core/layer';\nimport { trapFocus } from '../../../core/focus';\nimport { iconEl } from '../../base/icon/icon';\n\naddMessages('en', {\n cpPlaceholder: 'Type a command or search\u2026',\n cpLabel: 'Command palette',\n cpFilters: 'Categories',\n cpAll: 'All',\n cpEmpty: 'No matching commands',\n cpHint: '\u2191\u2193 navigate \u00B7 Enter run \u00B7 Esc close',\n});\naddMessages('pt-BR', {\n cpPlaceholder: 'Digite um comando ou pesquise\u2026',\n cpLabel: 'Paleta de comandos',\n cpFilters: 'Categorias',\n cpAll: 'Todas',\n cpEmpty: 'Nenhum comando encontrado',\n cpHint: '\u2191\u2193 navegar \u00B7 Enter executar \u00B7 Esc fechar',\n});\n\nexport interface Command {\n id: string;\n title: string;\n /** Groups the command and gives it a filter chip. */\n category?: string;\n icon?: string;\n description?: string;\n /** Extra words that find the command. */\n keywords?: string[];\n /** Only displayed (the app binds the key itself). */\n shortcut?: string;\n disabled?: boolean;\n hidden?: () => boolean;\n /** Runs after the palette closed. Errors become the palette's `error` event. */\n handler?: (ctx: { palette: CommandPalette; command: Command }) => unknown;\n /** A second level: choosing this command shows these (Backspace on an empty field goes back). */\n children?: Command[] | (() => Command[] | Promise<Command[]>);\n}\n\nexport interface CommandPaletteConfig extends ComponentConfig {\n commands?: Command[];\n /** `mod` is Ctrl on Windows/Linux and \u2318 on macOS. `false` turns the global key off. Default `'mod+k'`. */\n hotkey?: string | false;\n placeholder?: string;\n emptyText?: string;\n maxResults?: number;\n /** Order of the category groups; the others follow. */\n categories?: string[];\n /** Category chips under the field. Default true. */\n filters?: boolean;\n}\n\ntype Level = { title: string; commands: Command[] };\n\nconst isMac = () => /mac|iphone|ipad/i.test(navigator.platform || navigator.userAgent);\n\nfunction matchesKey(e: KeyboardEvent, spec: string): boolean {\n const parts = spec.toLowerCase().split('+');\n const key = parts.pop()!;\n const has = (m: string) => parts.includes(m);\n const mac = isMac();\n return (\n e.key.toLowerCase() === key &&\n e.ctrlKey === (has('ctrl') || (has('mod') && !mac)) &&\n e.metaKey === (has('meta') || (has('mod') && mac)) &&\n e.shiftKey === has('shift') &&\n e.altKey === has('alt')\n );\n}\n\nconst subsequence = (text: string, q: string) => {\n let i = 0;\n for (const ch of text) if (ch === q[i] && ++i === q.length) return true;\n return !q.length;\n};\n\n/** How well a command answers the query (0 = not at all). Every word of the query must match somewhere. */\nfunction score(c: Command, query: string): number {\n const title = c.title.toLowerCase();\n const rest = [c.category, c.description, ...(c.keywords ?? [])].join(' ').toLowerCase();\n let total = 0;\n for (const w of query.toLowerCase().split(/\\s+/).filter(Boolean)) {\n const at = title.indexOf(w);\n const s = at === 0 ? 100 : at > 0 ? (/[\\s\\-_/]/.test(title[at - 1]) ? 80 : 60) : w.length > 2 && subsequence(title, w) ? 30 : rest.includes(w) ? 20 : 0;\n if (!s) return 0;\n total += s;\n }\n return total;\n}\n\n/** Title with the matched words marked. */\nfunction marked(title: string, query: string): Array<string | Node> {\n const words = query.toLowerCase().split(/\\s+/).filter(Boolean);\n const lower = title.toLowerCase();\n const spans: Array<[number, number]> = [];\n for (const w of words) {\n const at = lower.indexOf(w);\n if (at >= 0) spans.push([at, at + w.length]);\n }\n spans.sort((a, b) => a[0] - b[0]);\n const out: Array<string | Node> = [];\n let pos = 0;\n for (const [a, b] of spans) {\n if (a < pos) continue;\n out.push(title.slice(pos, a), h('mark', 'op-palette__mark', {}, title.slice(a, b)));\n pos = b;\n }\n out.push(title.slice(pos));\n return out.filter((x) => x !== '');\n}\n\n/**\n * Command palette: Ctrl/\u2318+K opens a searchable, categorized list of the actions the app registered. Choosing one closes\n * the palette and runs it; a command with `children` opens a second level instead.\n */\nexport class CommandPalette extends Component<CommandPaletteConfig> {\n protected override baseCls = 'op-palette-backdrop';\n private commands: Command[];\n private levels: Level[] = [];\n private query = '';\n private cat: string | null = null;\n private shown: Command[] = [];\n private active = 0;\n private opened = false;\n private opener: Element | null = null;\n private release: Array<() => void> = [];\n private panel!: HTMLElement;\n private input!: HTMLInputElement;\n private filtersEl!: HTMLElement;\n private listEl!: HTMLElement;\n private live!: HTMLElement;\n private crumb!: HTMLElement;\n\n constructor(config: CommandPaletteConfig = {}) {\n super(config);\n this.commands = [...(config.commands ?? [])];\n const key = config.hotkey === undefined ? 'mod+k' : config.hotkey;\n if (key) {\n this.listen(document, 'keydown', (e: KeyboardEvent) => {\n if (!matchesKey(e, key) || this.destroyed) return;\n e.preventDefault();\n this.toggle();\n }, true);\n }\n }\n\n protected override build() {\n const c = this.config;\n this.input = h('input', 'op-palette__input', { type: 'text', role: 'combobox', 'aria-expanded': 'true', 'aria-autocomplete': 'list', autocomplete: 'off', spellcheck: 'false', placeholder: c.placeholder ?? t('cpPlaceholder') });\n this.crumb = h('span', 'op-palette__crumb');\n this.crumb.hidden = true;\n this.filtersEl = h('div', 'op-palette__filters', { role: 'group', 'aria-label': t('cpFilters') });\n this.listEl = h('div', 'op-palette__list', { role: 'listbox', id: `${this.id}-list` });\n this.input.setAttribute('aria-controls', this.listEl.id);\n this.live = h('div', 'op-sr-only', { 'aria-live': 'polite' });\n this.panel = h('div', 'op-palette', { role: 'dialog', 'aria-modal': 'true', 'aria-label': t('cpLabel') },\n h('div', 'op-palette__search', {}, iconEl('search'), this.crumb, this.input),\n this.filtersEl, this.listEl, this.live,\n h('div', 'op-palette__hint', {}, t('cpHint')));\n const el = h('div', 'op-palette-backdrop', {}, this.panel);\n this.listen(this.input, 'input', () => {\n this.query = this.input.value;\n this.active = 0;\n this.paint();\n });\n this.listen(this.panel, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.listen(el, 'pointerdown', (e: Event) => e.target === el && this.close());\n this.listen(this.listEl, 'pointermove', (e: Event) => {\n const i = this.indexOf(e);\n if (i >= 0 && i !== this.active) this.setActive(i);\n });\n this.listen(this.listEl, 'click', (e: Event) => {\n const i = this.indexOf(e);\n if (i >= 0) void this.choose(this.shown[i]);\n });\n this.listen(this.filtersEl, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('[data-cat]');\n if (!b) return;\n this.cat = b.dataset.cat || null;\n this.active = 0;\n this.paint();\n this.input.focus();\n });\n return el;\n }\n\n // ---- commands ------------------------------------------------------------------------------\n\n getCommands(): Command[] {\n return this.commands;\n }\n setCommands(list: Command[]): void {\n this.commands = [...list];\n if (this.levels[0]) this.levels[0].commands = this.commands;\n if (this.opened) this.paint();\n }\n /** Adds commands; returns the function that removes them again. */\n register(cmd: Command | Command[]): () => void {\n const list = Array.isArray(cmd) ? cmd : [cmd];\n this.commands.push(...list);\n if (this.opened) this.paint();\n return () => this.setCommands(this.commands.filter((c) => !list.includes(c)));\n }\n /** Runs a command by id (searching every level that is not a submenu), without opening the palette. */\n run(id: string): Promise<void> {\n const c = this.commands.find((x) => x.id === id);\n return c ? this.exec(c) : Promise.resolve();\n }\n\n // ---- open / close --------------------------------------------------------------------------\n\n isOpen(): boolean {\n return this.opened;\n }\n toggle(): void {\n if (this.opened) this.close();\n else this.open();\n }\n\n open(): void {\n if (this.opened || this.destroyed || this.emit('before-open') === false) return;\n this.opener = document.activeElement;\n const el = this.el;\n this.levels = [{ title: '', commands: this.commands }];\n this.query = this.input.value = '';\n this.cat = null;\n this.active = 0;\n toLayer(el, this.opener);\n this.release.push(lockModal(el), trapFocus(this.panel));\n this.opened = true;\n el.classList.add('is-open');\n this.notifyMount();\n this.paint();\n this.input.focus();\n this.emit('open');\n }\n\n close(): void {\n if (!this.opened) return;\n this.opened = false;\n this.release.splice(0).reverse().forEach((f) => f());\n this.el.classList.remove('is-open');\n this.el.remove();\n if (this.opener instanceof HTMLElement && this.opener.isConnected) this.opener.focus();\n this.emit('close');\n }\n\n protected override onDestroy(): void {\n this.opened = false;\n this.release.splice(0).forEach((f) => f());\n if (this.panel) this.el.remove();\n }\n\n // ---- rendering -----------------------------------------------------------------------------\n\n private level(): Level {\n return this.levels[this.levels.length - 1];\n }\n\n /** Commands for the current query/filter, in display order. */\n private results(): Command[] {\n const pool = this.level().commands.filter((c) => !c.hidden?.() && (!this.cat || c.category === this.cat));\n const q = this.query.trim();\n if (q) {\n return pool\n .map((c) => ({ c, s: score(c, q) }))\n .filter((x) => x.s > 0)\n .sort((a, b) => b.s - a.s)\n .map((x) => x.c)\n .slice(0, this.config.maxResults ?? 50);\n }\n const order = this.config.categories ?? [];\n const rank = (c: Command) => (c.category === undefined ? 1e6 : order.includes(c.category) ? order.indexOf(c.category) : order.length);\n return pool.map((c, i) => ({ c, i })).sort((a, b) => rank(a.c) - rank(b.c) || a.i - b.i).map((x) => x.c).slice(0, this.config.maxResults ?? 50);\n }\n\n private paint(): void {\n const lvl = this.level();\n this.crumb.hidden = this.levels.length < 2;\n this.crumb.textContent = lvl.title;\n this.paintFilters();\n this.shown = this.results();\n this.active = Math.min(this.active, Math.max(0, this.shown.length - 1));\n const searching = !!this.query.trim();\n const rows: HTMLElement[] = [];\n let group: string | undefined;\n this.shown.forEach((c, i) => {\n if (!searching && c.category !== group) {\n group = c.category;\n if (group) rows.push(h('div', 'op-palette__group', { role: 'presentation' }, group));\n }\n const item = h('div', `op-palette__item${c.disabled ? ' is-disabled' : ''}`, { role: 'option', id: `${this.id}-o${i}`, 'aria-disabled': c.disabled ? 'true' : null, 'data-i': i },\n c.icon ? h('span', 'op-palette__icon', {}, iconEl(c.icon)) : h('span', 'op-palette__icon'),\n h('span', 'op-palette__text', {}, h('span', 'op-palette__title', {}, ...marked(c.title, this.query)), c.description ? h('span', 'op-palette__desc', {}, c.description) : ''),\n searching && c.category ? h('span', 'op-palette__cat', {}, c.category) : '',\n c.children ? h('span', 'op-palette__more', { 'aria-hidden': 'true' }, iconEl('chevron-right')) : '',\n c.shortcut ? h('kbd', 'op-palette__kbd', {}, c.shortcut) : '');\n rows.push(item);\n });\n if (!this.shown.length) rows.push(h('div', 'op-palette__empty', {}, this.config.emptyText ?? t('cpEmpty')));\n this.listEl.replaceChildren(...rows);\n this.live.textContent = this.shown.length ? t('results', { n: this.shown.length }) : t('noResults');\n this.setActive(this.active, false);\n }\n\n private paintFilters(): void {\n const cats = [...new Set(this.level().commands.filter((c) => !c.hidden?.() && c.category).map((c) => c.category!))];\n this.filtersEl.hidden = this.config.filters === false || cats.length < 2;\n if (this.cat && !cats.includes(this.cat)) this.cat = null;\n const chip = (label: string, cat: string) => h('button', `op-palette__chip${(this.cat ?? '') === cat ? ' is-on' : ''}`, { type: 'button', 'data-cat': cat, 'aria-pressed': String((this.cat ?? '') === cat) }, label);\n this.filtersEl.replaceChildren(chip(t('cpAll'), ''), ...cats.map((c) => chip(c, c)));\n }\n\n private indexOf(e: Event): number {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-palette__item');\n return row ? Number(row.dataset.i) : -1;\n }\n\n private setActive(i: number, scroll = true): void {\n this.active = i;\n for (const row of Array.from(this.listEl.querySelectorAll<HTMLElement>('.op-palette__item'))) {\n const on = Number(row.dataset.i) === i;\n row.classList.toggle('is-active', on);\n row.setAttribute('aria-selected', String(on));\n if (on) {\n this.input.setAttribute('aria-activedescendant', row.id);\n if (scroll) row.scrollIntoView?.({ block: 'nearest' });\n }\n }\n if (!this.shown.length) this.input.removeAttribute('aria-activedescendant');\n }\n\n // ---- behavior ------------------------------------------------------------------------------\n\n private onKey(e: KeyboardEvent): void {\n const n = this.shown.length;\n switch (e.key) {\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n if (n) this.setActive((this.active + (e.key === 'ArrowDown' ? 1 : n - 1)) % n);\n break;\n case 'Home':\n case 'End':\n if (e.target === this.input && !this.input.value) {\n e.preventDefault();\n if (n) this.setActive(e.key === 'Home' ? 0 : n - 1);\n }\n break;\n case 'Enter':\n if ((e.target as HTMLElement).closest('.op-palette__chip')) return;\n e.preventDefault();\n if (this.shown[this.active]) void this.choose(this.shown[this.active]);\n break;\n case 'Escape':\n e.preventDefault();\n e.stopPropagation();\n if (this.levels.length > 1) this.back();\n else this.close();\n break;\n case 'Backspace':\n if (!this.input.value && this.levels.length > 1) {\n e.preventDefault();\n this.back();\n }\n break;\n }\n }\n\n private back(): void {\n this.levels.pop();\n this.query = this.input.value = '';\n this.cat = null;\n this.active = 0;\n this.paint();\n this.input.focus();\n }\n\n private async choose(c: Command | undefined): Promise<void> {\n if (!c || c.disabled) return;\n if (c.children) {\n try {\n const kids = typeof c.children === 'function' ? await c.children() : c.children;\n this.levels.push({ title: c.title, commands: kids });\n this.query = this.input.value = '';\n this.cat = null;\n this.active = 0;\n this.paint();\n this.input.focus();\n } catch (err) {\n this.emit('error', err);\n }\n return;\n }\n this.close();\n await this.exec(c);\n }\n\n private async exec(c: Command): Promise<void> {\n try {\n this.emit('run', c);\n await c.handler?.({ palette: this, command: c });\n } catch (err) {\n this.emit('error', err);\n }\n }\n}\nregister('commandpalette', CommandPalette);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "isMac", "matchesKey", "e", "spec", "parts", "key", "has", "m", "mac", "subsequence", "text", "q", "i", "ch", "score", "c", "query", "title", "rest", "total", "w", "at", "s", "marked", "words", "lower", "spans", "a", "b", "out", "pos", "h", "x", "CommandPalette", "Component", "config", "t", "iconEl", "el", "list", "cmd", "id", "toLayer", "lockModal", "trapFocus", "f", "pool", "order", "rank", "lvl", "searching", "rows", "group", "item", "cats", "chip", "label", "cat", "row", "scroll", "on", "n", "kids", "err", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as m}from"./chunk-LQRFNQ2N.js";import{b as f}from"./chunk-676AKAGF.js";import{a as u}from"./chunk-VV7CFMPZ.js";import{b as p}from"./chunk-PZSHOSOS.js";import{a as g}from"./chunk-TIPK3SCJ.js";import{e as d,f as l}from"./chunk-MW3RWBZ7.js";d("en",{wDockLeft:"Dock to the left",wDockRight:"Dock to the right",wDockTop:"Dock to the top",wDockBottom:"Dock to the bottom",wResize:"Resize"});d("pt-BR",{wDockLeft:"Fixar \xE0 esquerda",wDockRight:"Fixar \xE0 direita",wDockTop:"Fixar em cima",wDockBottom:"Fixar embaixo",wResize:"Redimensionar"});var v=160,w={left:"chevron-left",right:"chevron-right",top:"chevron-up",bottom:"chevron-down"},y={left:"wDockLeft",right:"wDockRight",top:"wDockTop",bottom:"wDockBottom"},b=["right","left","top","bottom"],a=class extends m{baseCls="op-panel op-widget";opened=!1;opener=null;cancelHide;userTools;pos;grip;constructor(e={}){let t=[...e.tools??[]],i=e.sides??["left","right","bottom"];if(e.sideSwitcher)for(let o of i)t.push({icon:w[o],label:l(y[o]),handler:s=>s.setSide(o)});super({closable:!0,closeAction:"hide",floating:!0,side:"right",layout:"fit",hidden:!0,...e,tools:t}),this.userTools=e.tools?.length??0}onRender(){super.onRender();let e=this.config;this.el.setAttribute("role","complementary"),this.el.classList.toggle("is-floating",e.floating!==!1),e.sideSwitcher&&(e.sides??["left","right","bottom"]).forEach((t,i)=>{let o=this.el.querySelectorAll(".op-panel__tool")[this.userTools+i];o&&(o.dataset.side=t)}),this.paintSide(),e.size!=null&&this.setSize(e.size),e.draggable&&e.floating!==!1&&this.initDrag(),this.setResizable(!!e.resizable),this.listen(this.el,"keydown",t=>{t.key==="Escape"&&e.closeOnEsc!==!1&&!t.defaultPrevented&&e.floating!==!1&&(t.stopPropagation(),this.close())})}getSide(){return this.config.side??"right"}setSide(e){e===this.getSide()||!b.includes(e)||(this.config.side=e,this.resetPosition(),this.paintSide(),this.emit("side-change",e))}paintSide(){if(!this.rendered)return;let e=this.getSide();for(let t of b)this.el.classList.toggle(`op-widget--${t}`,t===e);for(let t of Array.from(this.el.querySelectorAll("[data-side]")))t.setAttribute("aria-pressed",String(t.dataset.side===e));this.paintGrip()}getPosition(){return this.pos}resetPosition(){if(!this.pos)return;this.pos=void 0;let e=this.el.style;for(let t of["inset","inset-inline","inset-block","left","top","width","height"])e.removeProperty(t);this.el.classList.remove("is-moved"),this.paintGrip(),this.emit("move",void 0)}moveTo(e,t){let i=this.el;if(!this.pos){let n=i.getBoundingClientRect();n.width&&(i.style.width=`${n.width}px`,i.style.height=`${n.height}px`),i.classList.add("is-moved")}let o=i.offsetWidth||i.getBoundingClientRect().width,s=i.offsetHeight||i.getBoundingClientRect().height;this.pos={x:Math.max(0,Math.min(e,innerWidth-Math.min(o,innerWidth))),y:Math.max(0,Math.min(t,innerHeight-Math.min(s,innerHeight)))},i.style.inset="auto",i.style.left=`${this.pos.x}px`,i.style.top=`${this.pos.y}px`,this.paintGrip(),this.emit("move",this.pos)}initDrag(){let e=this.headerEl;e.classList.add("op-widget__handle"),e.tabIndex=0,e.setAttribute("aria-roledescription","draggable"),this.listen(e,"pointerdown",t=>{if(t.target.closest(".op-panel__tool")||t.button)return;let i=this.el.getBoundingClientRect(),o=t.clientX-i.left,s=t.clientY-i.top;this.el.classList.add("is-dragging");let n=h=>this.moveTo(h.clientX-o,h.clientY-s),r=()=>{this.el.classList.remove("is-dragging"),document.removeEventListener("pointermove",n),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",n),document.addEventListener("pointerup",r),this.own(r)}),this.listen(e,"keydown",t=>{if(!t.altKey)return;let i=t.shiftKey?64:16,o=this.el.getBoundingClientRect(),s={ArrowLeft:[o.left-i,o.top],ArrowRight:[o.left+i,o.top],ArrowUp:[o.left,o.top-i],ArrowDown:[o.left,o.top+i]};t.key==="Home"?(t.preventDefault(),this.resetPosition()):s[t.key]&&(t.preventDefault(),this.moveTo(...s[t.key]))})}setSize(e){this.config.size=e,this.rendered&&this.el.style.setProperty("--op-widget-size",typeof e=="number"?`${e}px`:e)}setResizable(e){if(this.config.resizable=e,!this.rendered||(this.grip?.remove(),this.grip=void 0,!e||this.config.floating===!1))return;let t=this.grip=p("div","op-widget__resize",{role:"separator",tabindex:0,"aria-label":l("wResize")});this.el.append(t),this.listen(t,"pointerdown",i=>{if(i.button)return;i.preventDefault();let o=this.el.getBoundingClientRect(),s=i.clientX,n=i.clientY;this.el.classList.add("is-resizing");let r=c=>this.resizeBy(o,c.clientX-s,c.clientY-n),h=()=>{this.el.classList.remove("is-resizing"),document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",h)};document.addEventListener("pointermove",r),document.addEventListener("pointerup",h),this.own(h)}),this.listen(t,"keydown",i=>{let o=i.shiftKey?64:16,s={ArrowLeft:[-o,0],ArrowRight:[o,0],ArrowUp:[0,-o],ArrowDown:[0,o]};!s[i.key]||i.altKey||(i.preventDefault(),this.resizeBy(this.el.getBoundingClientRect(),...s[i.key]))}),this.paintGrip()}resizeBy(e,t,i){let o=(n,r)=>Math.round(Math.max(v,Math.min(n,r)));if(this.pos)t&&(this.el.style.width=`${o(e.width+t,innerWidth-this.pos.x)}px`),i&&(this.el.style.height=`${o(e.height+i,innerHeight-this.pos.y)}px`);else{let n=this.getSide(),r=n==="left"||n==="right",h=n==="right"?-t:n==="left"?t:n==="bottom"?-i:i;this.setSize(o((r?e.width:e.height)+h,(r?innerWidth:innerHeight)-32))}this.paintGrip();let s=this.el.getBoundingClientRect();this.emit("resize",{width:Math.round(s.width),height:Math.round(s.height)})}paintGrip(){let e=this.grip;if(!e)return;let t=this.getSide(),i=!!this.pos||t==="left"||t==="right",o=this.el.getBoundingClientRect();e.setAttribute("aria-orientation",i?"vertical":"horizontal"),e.setAttribute("aria-valuemin",String(v)),e.setAttribute("aria-valuenow",String(Math.round(i?o.width:o.height)))}isOpen(){return this.config.floating===!1?!this.isHidden():this.opened}open(){this.show()}setOpen(e=!this.isOpen()){e?this.show():this.hide()}show(){if(this.config.floating===!1)return super.show();if(this.opened||this.destroyed||this.emit("before-show")===!1)return;this.cancelHide?.(),this.opener=document.activeElement;let e=this.el;this.opened=!0,this.config.hidden=!1,f(e,this.opener),e.hidden=!1,this.notifyMount(),requestAnimationFrame(()=>this.opened&&e.classList.add("is-open")),e.tabIndex<0&&!e.hasAttribute("tabindex")&&(e.tabIndex=-1),(this.config.autoFocus&&u(this.getBody())[0]||e).focus(),this.emit("show")}hide(){if(this.config.floating===!1)return super.hide();if(!this.opened||this.emit("before-hide")===!1)return;this.opened=!1,this.config.hidden=!0,this.el.classList.remove("is-open"),this.cancelHide=this.later(()=>this.el.hidden=!0,250);let e=this.opener;e instanceof HTMLElement&&e.isConnected&&this.el.contains(document.activeElement)&&e.focus(),this.emit("hide")}onDestroy(){super.onDestroy(),this.el.remove()}};g("widget",a);export{a};
2
+ //# sourceMappingURL=chunk-5BC72727.js.map