optikos 0.3.0 → 0.5.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 (466) hide show
  1. package/CHANGELOG.md +58 -1
  2. package/dist/bind.js +1 -1
  3. package/dist/bind.js.map +4 -4
  4. package/dist/build.js +2 -0
  5. package/dist/build.js.map +7 -0
  6. package/dist/chunk-2CVMT3IW.js +3 -0
  7. package/dist/chunk-2CVMT3IW.js.map +7 -0
  8. package/dist/{chunk-5JEXM5S7.js → chunk-2GKIF7A6.js} +2 -2
  9. package/dist/{chunk-5BC72727.js → chunk-2I4Y7I7C.js} +2 -2
  10. package/dist/{chunk-Z2Z52GFT.js → chunk-2I7HDIOU.js} +2 -2
  11. package/dist/chunk-2QMI2RRB.js +2 -0
  12. package/dist/chunk-2QMI2RRB.js.map +7 -0
  13. package/dist/chunk-34KVSA2V.js +3 -0
  14. package/dist/chunk-34KVSA2V.js.map +7 -0
  15. package/dist/chunk-37PYJAA2.js +2 -0
  16. package/dist/{chunk-UXXJOU5J.js.map → chunk-37PYJAA2.js.map} +1 -1
  17. package/dist/{chunk-ZPPELYNJ.js → chunk-3BG75P7T.js} +2 -2
  18. package/dist/{chunk-GNU4VOOE.js → chunk-3F4MN2BU.js} +2 -2
  19. package/dist/{chunk-5DJTP53N.js → chunk-3FK52VQX.js} +2 -2
  20. package/dist/chunk-3OA3P37P.js +2 -0
  21. package/dist/chunk-3OA3P37P.js.map +7 -0
  22. package/dist/chunk-3TCITFUU.js +2 -0
  23. package/dist/chunk-3TCITFUU.js.map +7 -0
  24. package/dist/chunk-3VDLX7ET.js +2 -0
  25. package/dist/chunk-3VDLX7ET.js.map +7 -0
  26. package/dist/{chunk-REW4LR46.js → chunk-4OB2IM5L.js} +2 -2
  27. package/dist/chunk-5G5PHOZJ.js +2 -0
  28. package/dist/chunk-5G5PHOZJ.js.map +7 -0
  29. package/dist/{chunk-EDUMAMK4.js → chunk-5GCTM37D.js} +2 -2
  30. package/dist/chunk-5PYJ6FJK.js +2 -0
  31. package/dist/chunk-5PYJ6FJK.js.map +7 -0
  32. package/dist/chunk-632LUU52.js +2 -0
  33. package/dist/chunk-632LUU52.js.map +7 -0
  34. package/dist/{chunk-JOFQJGZK.js → chunk-6BOM5KZR.js} +2 -2
  35. package/dist/{chunk-Z2JBUHKA.js → chunk-6NP4AEV4.js} +2 -2
  36. package/dist/chunk-6PPRYSLN.js +2 -0
  37. package/dist/chunk-6PPRYSLN.js.map +7 -0
  38. package/dist/{chunk-NXSTUFS7.js → chunk-6TZJO2G2.js} +2 -2
  39. package/dist/chunk-7Y2GHQRB.js +2 -0
  40. package/dist/chunk-A36JFIA3.js +2 -0
  41. package/dist/chunk-A36JFIA3.js.map +7 -0
  42. package/dist/{chunk-G2KUK6AT.js → chunk-ADHKL2GM.js} +2 -2
  43. package/dist/{chunk-JI265XFO.js → chunk-AJN66F32.js} +2 -2
  44. package/dist/{chunk-YHEMA56R.js → chunk-AQ3RTHG5.js} +2 -2
  45. package/dist/{chunk-ZVK4L5GK.js → chunk-BCVOUMJJ.js} +2 -2
  46. package/dist/{chunk-HOF4JGMQ.js → chunk-BIGL3ZVD.js} +2 -2
  47. package/dist/{chunk-ZWNQREWS.js → chunk-BQEFLPDA.js} +2 -2
  48. package/dist/{chunk-ZWNQREWS.js.map → chunk-BQEFLPDA.js.map} +2 -2
  49. package/dist/{chunk-HXDTGP2K.js → chunk-BRGT4O6Q.js} +2 -2
  50. package/dist/{chunk-OGRFQTXA.js → chunk-BTGJ3MP4.js} +2 -2
  51. package/dist/{chunk-TOLTUOZS.js → chunk-CWIE74NX.js} +2 -2
  52. package/dist/{chunk-M242VYZA.js → chunk-CXZKCBQE.js} +2 -2
  53. package/dist/{chunk-4EZJ5FKJ.js → chunk-DIOJGTUN.js} +2 -2
  54. package/dist/chunk-DJUSVBD5.js +2 -0
  55. package/dist/chunk-DJUSVBD5.js.map +7 -0
  56. package/dist/chunk-DLRGB5NY.js +2 -0
  57. package/dist/chunk-DLRGB5NY.js.map +7 -0
  58. package/dist/chunk-DY3ZYMXD.js +2 -0
  59. package/dist/chunk-DY3ZYMXD.js.map +7 -0
  60. package/dist/chunk-EO777UIN.js +2 -0
  61. package/dist/chunk-EO777UIN.js.map +7 -0
  62. package/dist/chunk-ESCLDVFS.js +2 -0
  63. package/dist/{chunk-YBAYEU25.js.map → chunk-ESCLDVFS.js.map} +1 -1
  64. package/dist/{chunk-2ZUZ5HDL.js → chunk-ESRS5ZQV.js} +2 -2
  65. package/dist/{chunk-RNN55473.js → chunk-FNZI6MFG.js} +2 -2
  66. package/dist/{chunk-RNN55473.js.map → chunk-FNZI6MFG.js.map} +1 -1
  67. package/dist/{chunk-JK74QK3M.js → chunk-FSR6BDVO.js} +2 -2
  68. package/dist/{chunk-6VBK2I5B.js → chunk-G26R2F3W.js} +2 -2
  69. package/dist/{chunk-G2DAD3MQ.js → chunk-GEJKFE4X.js} +2 -2
  70. package/dist/chunk-GFJRGBQR.js +2 -0
  71. package/dist/chunk-GFJRGBQR.js.map +7 -0
  72. package/dist/chunk-GLAY4RJF.js +2 -0
  73. package/dist/chunk-GLAY4RJF.js.map +7 -0
  74. package/dist/chunk-GNKVLJ5H.js +2 -0
  75. package/dist/chunk-GNKVLJ5H.js.map +7 -0
  76. package/dist/chunk-GZIDE5K2.js +2 -0
  77. package/dist/chunk-GZIDE5K2.js.map +7 -0
  78. package/dist/{chunk-5Q76ACVI.js → chunk-H25XXQVH.js} +2 -2
  79. package/dist/chunk-HG7OOHGD.js +2 -0
  80. package/dist/chunk-HG7OOHGD.js.map +7 -0
  81. package/dist/chunk-HRW25TMU.js +2 -0
  82. package/dist/chunk-HX6TWXTX.js +2 -0
  83. package/dist/chunk-HX6TWXTX.js.map +7 -0
  84. package/dist/chunk-I5A74NMJ.js +2 -0
  85. package/dist/chunk-I5A74NMJ.js.map +7 -0
  86. package/dist/chunk-IODSL7KU.js +2 -0
  87. package/dist/chunk-IODSL7KU.js.map +7 -0
  88. package/dist/chunk-J2TCHWYD.js +2 -0
  89. package/dist/chunk-J2TCHWYD.js.map +7 -0
  90. package/dist/chunk-J5BZAKC6.js +2 -0
  91. package/dist/chunk-J5BZAKC6.js.map +7 -0
  92. package/dist/chunk-JBOKM5YA.js +2 -0
  93. package/dist/{chunk-KLLAY2IM.js.map → chunk-JBOKM5YA.js.map} +2 -2
  94. package/dist/chunk-L5SQQFO7.js +2 -0
  95. package/dist/chunk-L5SQQFO7.js.map +7 -0
  96. package/dist/chunk-L6DOWGBO.js +2 -0
  97. package/dist/chunk-L6DOWGBO.js.map +7 -0
  98. package/dist/{chunk-W3H7GTJY.js → chunk-LHWY6G6Q.js} +2 -2
  99. package/dist/chunk-LLHDEUIA.js +2 -0
  100. package/dist/chunk-LLHDEUIA.js.map +7 -0
  101. package/dist/chunk-LXWCTCZV.js +2 -0
  102. package/dist/chunk-LXWCTCZV.js.map +7 -0
  103. package/dist/chunk-M2ZRKHE4.js +2 -0
  104. package/dist/chunk-M2ZRKHE4.js.map +7 -0
  105. package/dist/{chunk-Q26YZYTD.js → chunk-M7HLHGQV.js} +2 -2
  106. package/dist/{chunk-IHE2MQ3W.js → chunk-MGSCSS7X.js} +2 -2
  107. package/dist/chunk-MM2OC66E.js +4 -0
  108. package/dist/{chunk-XX2MVWFS.js.map → chunk-MM2OC66E.js.map} +1 -1
  109. package/dist/{chunk-DBMWS3O5.js → chunk-MQ5BYGFY.js} +2 -2
  110. package/dist/chunk-MQEALOU3.js +3 -0
  111. package/dist/chunk-MQEALOU3.js.map +7 -0
  112. package/dist/chunk-NAUSRVB6.js +2 -0
  113. package/dist/chunk-NAUSRVB6.js.map +7 -0
  114. package/dist/chunk-NEVDHDJ4.js +3 -0
  115. package/dist/chunk-NEVDHDJ4.js.map +7 -0
  116. package/dist/{chunk-5QUY72FX.js → chunk-NWHH3CYH.js} +2 -2
  117. package/dist/chunk-OADWLPSF.js +2 -0
  118. package/dist/chunk-OADWLPSF.js.map +7 -0
  119. package/dist/{chunk-3TAW4AKH.js → chunk-OB3VIRQR.js} +2 -2
  120. package/dist/{chunk-MB3MU6HR.js → chunk-PGVLRMTQ.js} +2 -2
  121. package/dist/chunk-Q6FY4L2F.js +2 -0
  122. package/dist/chunk-Q6FY4L2F.js.map +7 -0
  123. package/dist/{chunk-TZOQWCVH.js → chunk-QOSTS5I3.js} +2 -2
  124. package/dist/chunk-QVBDBGS4.js +2 -0
  125. package/dist/chunk-QVBDBGS4.js.map +7 -0
  126. package/dist/{chunk-3S24ZRPK.js → chunk-RMATRKXV.js} +2 -2
  127. package/dist/{chunk-I4SP6JTU.js → chunk-S3ILIWSW.js} +2 -2
  128. package/dist/chunk-S4QD5NID.js +2 -0
  129. package/dist/chunk-S4QD5NID.js.map +7 -0
  130. package/dist/{chunk-XHOBNSBO.js → chunk-SEUIIPHS.js} +2 -2
  131. package/dist/{chunk-23XLG2EM.js → chunk-SEW5OCQF.js} +2 -2
  132. package/dist/chunk-T5OGUCY2.js +2 -0
  133. package/dist/chunk-T5OGUCY2.js.map +7 -0
  134. package/dist/chunk-TMBGEZSD.js +2 -0
  135. package/dist/chunk-TMBGEZSD.js.map +7 -0
  136. package/dist/chunk-TVO3Z2BM.js +2 -0
  137. package/dist/chunk-TVO3Z2BM.js.map +7 -0
  138. package/dist/{chunk-LQRFNQ2N.js → chunk-U25QSLAH.js} +2 -2
  139. package/dist/chunk-UCWICDYG.js +2 -0
  140. package/dist/chunk-UCWICDYG.js.map +7 -0
  141. package/dist/chunk-UDXO3KM3.js +2 -0
  142. package/dist/chunk-UDXO3KM3.js.map +7 -0
  143. package/dist/{chunk-FEHGU6EP.js → chunk-UL364TLO.js} +2 -2
  144. package/dist/chunk-UUAGMZD2.js +2 -0
  145. package/dist/chunk-UUAGMZD2.js.map +7 -0
  146. package/dist/chunk-V5G5JECN.js +2 -0
  147. package/dist/chunk-V5G5JECN.js.map +7 -0
  148. package/dist/chunk-XFDNXSU5.js +2 -0
  149. package/dist/chunk-XFDNXSU5.js.map +7 -0
  150. package/dist/{chunk-JBLRAM7Z.js → chunk-XNRZJP4E.js} +2 -2
  151. package/dist/chunk-YJTUFK4P.js +2 -0
  152. package/dist/chunk-YLFSCQL3.js +2 -0
  153. package/dist/chunk-YLFSCQL3.js.map +7 -0
  154. package/dist/chunk-Z6HZY2YG.js +2 -0
  155. package/dist/chunk-Z6HZY2YG.js.map +7 -0
  156. package/dist/chunk-ZEIE2OCQ.js +2 -0
  157. package/dist/chunk-ZEIE2OCQ.js.map +7 -0
  158. package/dist/{chunk-2YZB6XQR.js → chunk-ZLYZFHEN.js} +2 -2
  159. package/dist/components/avatar.js +2 -0
  160. package/dist/components/avatar.js.map +7 -0
  161. package/dist/components/badge.js +1 -1
  162. package/dist/components/breadcrumb.js +1 -1
  163. package/dist/components/button.js +1 -1
  164. package/dist/components/calendar.js +1 -1
  165. package/dist/components/carousel.js +2 -0
  166. package/dist/components/carousel.js.map +7 -0
  167. package/dist/components/cellediting.js +1 -1
  168. package/dist/components/chart.js +2 -0
  169. package/dist/components/chart.js.map +7 -0
  170. package/dist/components/chat.js +1 -1
  171. package/dist/components/checkbox.js +1 -1
  172. package/dist/components/checkboxgroup.js +1 -1
  173. package/dist/components/chip.js +1 -1
  174. package/dist/components/codeviewer.js +1 -1
  175. package/dist/components/columntotals.js +2 -0
  176. package/dist/components/columntotals.js.map +7 -0
  177. package/dist/components/combobox.js +1 -1
  178. package/dist/components/commandpalette.js +1 -1
  179. package/dist/components/container.js +1 -1
  180. package/dist/components/dataview.js +1 -1
  181. package/dist/components/datefield.js +1 -1
  182. package/dist/components/daterangefield.js +1 -1
  183. package/dist/components/datetimefield.js +2 -0
  184. package/dist/components/datetimefield.js.map +7 -0
  185. package/dist/components/dial.js +1 -1
  186. package/dist/components/dropdown.js +1 -1
  187. package/dist/components/exportbar.js +2 -0
  188. package/dist/components/exportbar.js.map +7 -0
  189. package/dist/components/fieldgroup.js +1 -1
  190. package/dist/components/fieldlist.js +1 -1
  191. package/dist/components/fieldset.js +1 -1
  192. package/dist/components/filterbuilder.js +1 -1
  193. package/dist/components/form.js +1 -1
  194. package/dist/components/formactions.js +1 -1
  195. package/dist/components/formerrors.js +1 -1
  196. package/dist/components/formsection.js +1 -1
  197. package/dist/components/grid.js +1 -1
  198. package/dist/components/gridexport.js +2 -0
  199. package/dist/components/gridexport.js.map +7 -0
  200. package/dist/components/gridstate.js +2 -0
  201. package/dist/components/gridstate.js.map +7 -0
  202. package/dist/components/grouping.js +2 -0
  203. package/dist/components/grouping.js.map +7 -0
  204. package/dist/components/icon.js +1 -1
  205. package/dist/components/image.js +2 -0
  206. package/dist/components/image.js.map +7 -0
  207. package/dist/components/imagecanvas.js +2 -0
  208. package/dist/components/imagecanvas.js.map +7 -0
  209. package/dist/components/imagefield.js +2 -0
  210. package/dist/components/imagefield.js.map +7 -0
  211. package/dist/components/inputgroup.js +1 -1
  212. package/dist/components/label.js +1 -1
  213. package/dist/components/listbox.js +1 -1
  214. package/dist/components/lookupfield.js +1 -1
  215. package/dist/components/maskfield.js +2 -0
  216. package/dist/components/maskfield.js.map +7 -0
  217. package/dist/components/menu.js +1 -1
  218. package/dist/components/messagebox.js +1 -1
  219. package/dist/components/navmenu.js +1 -1
  220. package/dist/components/numberfield.js +1 -1
  221. package/dist/components/pagination.js +1 -1
  222. package/dist/components/panel.js +1 -1
  223. package/dist/components/pickerfield.js +1 -1
  224. package/dist/components/radiogroup.js +1 -1
  225. package/dist/components/rowediting.js +2 -0
  226. package/dist/components/rowediting.js.map +7 -0
  227. package/dist/components/searchgrid.js +1 -1
  228. package/dist/components/secretfield.js +1 -1
  229. package/dist/components/select.js +1 -1
  230. package/dist/components/shortcuts.js +2 -0
  231. package/dist/components/shortcuts.js.map +7 -0
  232. package/dist/components/slider.js +1 -1
  233. package/dist/components/spacer.js +1 -1
  234. package/dist/components/spinner.js +1 -1
  235. package/dist/components/stat.js +2 -0
  236. package/dist/components/stat.js.map +7 -0
  237. package/dist/components/stepform.js +1 -1
  238. package/dist/components/stepper.js +1 -1
  239. package/dist/components/suggestfield.js +1 -1
  240. package/dist/components/table.js +1 -1
  241. package/dist/components/tabs.js +1 -1
  242. package/dist/components/textarea.js +1 -1
  243. package/dist/components/textfield.js +1 -1
  244. package/dist/components/timeentry.js +2 -0
  245. package/dist/components/timeentry.js.map +7 -0
  246. package/dist/components/timefield.js +2 -0
  247. package/dist/components/timefield.js.map +7 -0
  248. package/dist/components/timeline.js +2 -0
  249. package/dist/components/timeline.js.map +7 -0
  250. package/dist/components/toast.js +1 -1
  251. package/dist/components/toggle.js +1 -1
  252. package/dist/components/toolbar.js +1 -1
  253. package/dist/components/tree.js +1 -1
  254. package/dist/components/treegrid.js +2 -0
  255. package/dist/components/treegrid.js.map +7 -0
  256. package/dist/components/viewmanager.js +1 -1
  257. package/dist/components/viewport.js +1 -1
  258. package/dist/components/widget.js +1 -1
  259. package/dist/components/window.js +1 -1
  260. package/dist/core.js +1 -1
  261. package/dist/css/avatar.css +68 -0
  262. package/dist/css/base.css +9 -0
  263. package/dist/css/carousel.css +119 -0
  264. package/dist/css/chart.css +168 -0
  265. package/dist/css/columntotals.css +56 -0
  266. package/dist/css/core.css +36 -0
  267. package/dist/css/datetimefield.css +15 -0
  268. package/dist/css/exportbar.css +9 -0
  269. package/dist/css/grid.css +52 -0
  270. package/dist/css/gridexport.css +35 -0
  271. package/dist/css/grouping.css +56 -0
  272. package/dist/css/image.css +46 -0
  273. package/dist/css/imagecanvas.css +75 -0
  274. package/dist/css/imagefield.css +103 -0
  275. package/dist/css/rowediting.css +39 -0
  276. package/dist/css/shortcuts.css +34 -0
  277. package/dist/css/stat.css +64 -0
  278. package/dist/css/stepform.css +1 -0
  279. package/dist/css/timeentry.css +116 -0
  280. package/dist/css/timeline.css +185 -0
  281. package/dist/css/treegrid.css +35 -0
  282. package/dist/css/window.css +2 -2
  283. package/dist/data.js +1 -1
  284. package/dist/dev.js +2 -0
  285. package/dist/dev.js.map +7 -0
  286. package/dist/index.js +16 -5
  287. package/dist/index.js.map +4 -4
  288. package/dist/optikos.css +1480 -142
  289. package/dist/testing.js +2 -0
  290. package/dist/testing.js.map +7 -0
  291. package/dist/themes/dark.css +7 -0
  292. package/dist/types/bind/index.d.ts +1 -1
  293. package/dist/types/bind/viewmodel.d.ts +33 -0
  294. package/dist/types/build/build.d.ts +49 -0
  295. package/dist/types/build/index.d.ts +1 -0
  296. package/dist/types/components/avatar.d.ts +1 -0
  297. package/dist/types/components/base/avatar/avatar.d.ts +22 -0
  298. package/dist/types/components/base/image/image.d.ts +25 -0
  299. package/dist/types/components/base/imagecanvas/imagecanvas.d.ts +39 -0
  300. package/dist/types/components/carousel.d.ts +1 -0
  301. package/dist/types/components/chart.d.ts +1 -0
  302. package/dist/types/components/charts/chart/chart.d.ts +64 -0
  303. package/dist/types/components/charts/stat/stat.d.ts +34 -0
  304. package/dist/types/components/columntotals.d.ts +1 -0
  305. package/dist/types/components/data/cellediting/cellediting.d.ts +3 -0
  306. package/dist/types/components/data/columntotals/columntotals.d.ts +24 -0
  307. package/dist/types/components/data/exportbar/exportbar.d.ts +24 -0
  308. package/dist/types/components/data/grid/footer.d.ts +6 -0
  309. package/dist/types/components/data/grid/grid.d.ts +37 -0
  310. package/dist/types/components/data/gridexport/gridexport.d.ts +29 -0
  311. package/dist/types/components/data/gridstate/gridstate.d.ts +23 -0
  312. package/dist/types/components/data/grouping/controls.d.ts +27 -0
  313. package/dist/types/components/data/grouping/grouping.d.ts +43 -0
  314. package/dist/types/components/data/rowediting/rowediting.d.ts +13 -0
  315. package/dist/types/components/data/searchgrid/searchgrid.d.ts +9 -2
  316. package/dist/types/components/data/timeentry/timeentry.d.ts +37 -0
  317. package/dist/types/components/data/timeline/timeline.d.ts +63 -0
  318. package/dist/types/components/data/treegrid/treegrid.d.ts +32 -0
  319. package/dist/types/components/datetimefield.d.ts +1 -0
  320. package/dist/types/components/exportbar.d.ts +1 -0
  321. package/dist/types/components/fields/datetimefield/datetimefield.d.ts +28 -0
  322. package/dist/types/components/fields/imagefield/imagefield.d.ts +48 -0
  323. package/dist/types/components/fields/maskfield/maskfield.d.ts +28 -0
  324. package/dist/types/components/fields/numberfield/numberfield.d.ts +9 -0
  325. package/dist/types/components/fields/pickerfield/pickerfield.d.ts +3 -0
  326. package/dist/types/components/fields/timefield/timefield.d.ts +24 -0
  327. package/dist/types/components/form/fieldlist/fieldlist.d.ts +2 -0
  328. package/dist/types/components/form/form/form.d.ts +5 -0
  329. package/dist/types/components/form/stepform/stepform.d.ts +1 -1
  330. package/dist/types/components/gridexport.d.ts +1 -0
  331. package/dist/types/components/gridstate.d.ts +1 -0
  332. package/dist/types/components/grouping.d.ts +1 -0
  333. package/dist/types/components/image.d.ts +1 -0
  334. package/dist/types/components/imagecanvas.d.ts +1 -0
  335. package/dist/types/components/imagefield.d.ts +1 -0
  336. package/dist/types/components/layout/carousel/carousel.d.ts +58 -0
  337. package/dist/types/components/maskfield.d.ts +1 -0
  338. package/dist/types/components/navigation/navmenu/navmenu.d.ts +2 -0
  339. package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +2 -0
  340. package/dist/types/components/overlays/menu/menu.d.ts +4 -1
  341. package/dist/types/components/overlays/shortcuts/shortcuts.d.ts +27 -0
  342. package/dist/types/components/overlays/window/window.d.ts +14 -1
  343. package/dist/types/components/rowediting.d.ts +1 -0
  344. package/dist/types/components/shortcuts.d.ts +1 -0
  345. package/dist/types/components/stat.d.ts +1 -0
  346. package/dist/types/components/timeentry.d.ts +1 -0
  347. package/dist/types/components/timefield.d.ts +1 -0
  348. package/dist/types/components/timeline.d.ts +1 -0
  349. package/dist/types/components/treegrid.d.ts +1 -0
  350. package/dist/types/core/component.d.ts +7 -0
  351. package/dist/types/core/container.d.ts +10 -1
  352. package/dist/types/core/dev.d.ts +2 -0
  353. package/dist/types/core/field.d.ts +4 -0
  354. package/dist/types/core/i18n.d.ts +2 -0
  355. package/dist/types/core/index.d.ts +4 -1
  356. package/dist/types/core/path.d.ts +2 -0
  357. package/dist/types/core/permission.d.ts +11 -0
  358. package/dist/types/core/state.d.ts +9 -0
  359. package/dist/types/data/column.d.ts +11 -1
  360. package/dist/types/data/index.d.ts +1 -1
  361. package/dist/types/data/model.d.ts +2 -0
  362. package/dist/types/data/store.d.ts +21 -0
  363. package/dist/types/dev/index.d.ts +2 -0
  364. package/dist/types/dev/keys.d.ts +1 -0
  365. package/dist/types/index.d.ts +21 -0
  366. package/dist/types/testing/index.d.ts +25 -0
  367. package/dist/types/themes/color.d.ts +14 -0
  368. package/dist/types/themes/contrast.d.ts +15 -0
  369. package/dist/types/themes/define.d.ts +25 -3
  370. package/dist/types/themes/index.d.ts +3 -1
  371. package/dist/types/themes/seeds.d.ts +11 -0
  372. package/dist/types/ui/ui.d.ts +6 -0
  373. package/dist/ui.js +1 -1
  374. package/package.json +13 -1
  375. package/dist/chunk-2ZRNGG2N.js +0 -2
  376. package/dist/chunk-2ZRNGG2N.js.map +0 -7
  377. package/dist/chunk-4EQEHJB3.js +0 -2
  378. package/dist/chunk-4EQEHJB3.js.map +0 -7
  379. package/dist/chunk-4LZZ244E.js +0 -2
  380. package/dist/chunk-4LZZ244E.js.map +0 -7
  381. package/dist/chunk-4SYIIX5A.js +0 -2
  382. package/dist/chunk-4SYIIX5A.js.map +0 -7
  383. package/dist/chunk-7KMIFXHZ.js +0 -2
  384. package/dist/chunk-7KMIFXHZ.js.map +0 -7
  385. package/dist/chunk-A2NKDOYN.js +0 -2
  386. package/dist/chunk-A2NKDOYN.js.map +0 -7
  387. package/dist/chunk-CKXS375P.js +0 -2
  388. package/dist/chunk-CKXS375P.js.map +0 -7
  389. package/dist/chunk-EJGWCKE4.js +0 -2
  390. package/dist/chunk-EJGWCKE4.js.map +0 -7
  391. package/dist/chunk-ELYARUCN.js +0 -2
  392. package/dist/chunk-EV73ADN2.js +0 -2
  393. package/dist/chunk-EV73ADN2.js.map +0 -7
  394. package/dist/chunk-GD5JGKM7.js +0 -2
  395. package/dist/chunk-GD5JGKM7.js.map +0 -7
  396. package/dist/chunk-GZ7X34QP.js +0 -2
  397. package/dist/chunk-KCEUD232.js +0 -2
  398. package/dist/chunk-KCEUD232.js.map +0 -7
  399. package/dist/chunk-KLLAY2IM.js +0 -2
  400. package/dist/chunk-LBJSMXLV.js +0 -2
  401. package/dist/chunk-LBJSMXLV.js.map +0 -7
  402. package/dist/chunk-LW2WRUVL.js +0 -2
  403. package/dist/chunk-LW2WRUVL.js.map +0 -7
  404. package/dist/chunk-MW3RWBZ7.js +0 -2
  405. package/dist/chunk-MW3RWBZ7.js.map +0 -7
  406. package/dist/chunk-OEAXCCVM.js +0 -2
  407. package/dist/chunk-OEAXCCVM.js.map +0 -7
  408. package/dist/chunk-UB5RYS7T.js +0 -2
  409. package/dist/chunk-UB5RYS7T.js.map +0 -7
  410. package/dist/chunk-UXXJOU5J.js +0 -2
  411. package/dist/chunk-VU3GIDZ3.js +0 -2
  412. package/dist/chunk-VU3GIDZ3.js.map +0 -7
  413. package/dist/chunk-W2BAFOCN.js +0 -3
  414. package/dist/chunk-W2BAFOCN.js.map +0 -7
  415. package/dist/chunk-WFGTQZIQ.js +0 -2
  416. package/dist/chunk-WFGTQZIQ.js.map +0 -7
  417. package/dist/chunk-XX2MVWFS.js +0 -4
  418. package/dist/chunk-XYZ6VZ5T.js +0 -2
  419. package/dist/chunk-YBAYEU25.js +0 -2
  420. package/dist/chunk-YF75HKL6.js +0 -2
  421. package/dist/chunk-YF75HKL6.js.map +0 -7
  422. /package/dist/{chunk-5JEXM5S7.js.map → chunk-2GKIF7A6.js.map} +0 -0
  423. /package/dist/{chunk-5BC72727.js.map → chunk-2I4Y7I7C.js.map} +0 -0
  424. /package/dist/{chunk-Z2Z52GFT.js.map → chunk-2I7HDIOU.js.map} +0 -0
  425. /package/dist/{chunk-ZPPELYNJ.js.map → chunk-3BG75P7T.js.map} +0 -0
  426. /package/dist/{chunk-GNU4VOOE.js.map → chunk-3F4MN2BU.js.map} +0 -0
  427. /package/dist/{chunk-5DJTP53N.js.map → chunk-3FK52VQX.js.map} +0 -0
  428. /package/dist/{chunk-REW4LR46.js.map → chunk-4OB2IM5L.js.map} +0 -0
  429. /package/dist/{chunk-EDUMAMK4.js.map → chunk-5GCTM37D.js.map} +0 -0
  430. /package/dist/{chunk-JOFQJGZK.js.map → chunk-6BOM5KZR.js.map} +0 -0
  431. /package/dist/{chunk-Z2JBUHKA.js.map → chunk-6NP4AEV4.js.map} +0 -0
  432. /package/dist/{chunk-NXSTUFS7.js.map → chunk-6TZJO2G2.js.map} +0 -0
  433. /package/dist/{chunk-GZ7X34QP.js.map → chunk-7Y2GHQRB.js.map} +0 -0
  434. /package/dist/{chunk-G2KUK6AT.js.map → chunk-ADHKL2GM.js.map} +0 -0
  435. /package/dist/{chunk-JI265XFO.js.map → chunk-AJN66F32.js.map} +0 -0
  436. /package/dist/{chunk-YHEMA56R.js.map → chunk-AQ3RTHG5.js.map} +0 -0
  437. /package/dist/{chunk-ZVK4L5GK.js.map → chunk-BCVOUMJJ.js.map} +0 -0
  438. /package/dist/{chunk-HOF4JGMQ.js.map → chunk-BIGL3ZVD.js.map} +0 -0
  439. /package/dist/{chunk-HXDTGP2K.js.map → chunk-BRGT4O6Q.js.map} +0 -0
  440. /package/dist/{chunk-OGRFQTXA.js.map → chunk-BTGJ3MP4.js.map} +0 -0
  441. /package/dist/{chunk-TOLTUOZS.js.map → chunk-CWIE74NX.js.map} +0 -0
  442. /package/dist/{chunk-M242VYZA.js.map → chunk-CXZKCBQE.js.map} +0 -0
  443. /package/dist/{chunk-4EZJ5FKJ.js.map → chunk-DIOJGTUN.js.map} +0 -0
  444. /package/dist/{chunk-2ZUZ5HDL.js.map → chunk-ESRS5ZQV.js.map} +0 -0
  445. /package/dist/{chunk-JK74QK3M.js.map → chunk-FSR6BDVO.js.map} +0 -0
  446. /package/dist/{chunk-6VBK2I5B.js.map → chunk-G26R2F3W.js.map} +0 -0
  447. /package/dist/{chunk-G2DAD3MQ.js.map → chunk-GEJKFE4X.js.map} +0 -0
  448. /package/dist/{chunk-5Q76ACVI.js.map → chunk-H25XXQVH.js.map} +0 -0
  449. /package/dist/{chunk-XYZ6VZ5T.js.map → chunk-HRW25TMU.js.map} +0 -0
  450. /package/dist/{chunk-W3H7GTJY.js.map → chunk-LHWY6G6Q.js.map} +0 -0
  451. /package/dist/{chunk-Q26YZYTD.js.map → chunk-M7HLHGQV.js.map} +0 -0
  452. /package/dist/{chunk-IHE2MQ3W.js.map → chunk-MGSCSS7X.js.map} +0 -0
  453. /package/dist/{chunk-DBMWS3O5.js.map → chunk-MQ5BYGFY.js.map} +0 -0
  454. /package/dist/{chunk-5QUY72FX.js.map → chunk-NWHH3CYH.js.map} +0 -0
  455. /package/dist/{chunk-3TAW4AKH.js.map → chunk-OB3VIRQR.js.map} +0 -0
  456. /package/dist/{chunk-MB3MU6HR.js.map → chunk-PGVLRMTQ.js.map} +0 -0
  457. /package/dist/{chunk-TZOQWCVH.js.map → chunk-QOSTS5I3.js.map} +0 -0
  458. /package/dist/{chunk-3S24ZRPK.js.map → chunk-RMATRKXV.js.map} +0 -0
  459. /package/dist/{chunk-I4SP6JTU.js.map → chunk-S3ILIWSW.js.map} +0 -0
  460. /package/dist/{chunk-XHOBNSBO.js.map → chunk-SEUIIPHS.js.map} +0 -0
  461. /package/dist/{chunk-23XLG2EM.js.map → chunk-SEW5OCQF.js.map} +0 -0
  462. /package/dist/{chunk-LQRFNQ2N.js.map → chunk-U25QSLAH.js.map} +0 -0
  463. /package/dist/{chunk-FEHGU6EP.js.map → chunk-UL364TLO.js.map} +0 -0
  464. /package/dist/{chunk-JBLRAM7Z.js.map → chunk-XNRZJP4E.js.map} +0 -0
  465. /package/dist/{chunk-ELYARUCN.js.map → chunk-YJTUFK4P.js.map} +0 -0
  466. /package/dist/{chunk-2YZB6XQR.js.map → chunk-ZLYZFHEN.js.map} +0 -0
@@ -0,0 +1,4 @@
1
+ import{a as b}from"./chunk-ESRS5ZQV.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-UDXO3KM3.js";import{b as r}from"./chunk-PZSHOSOS.js";import{e as g,f as p}from"./chunk-S4QD5NID.js";g("en",{codeCopy:"Copy",codeCopied:"Copied"});g("pt-BR",{codeCopy:"Copiar",codeCopied:"Copiado"});var w={ts:"TypeScript",js:"JavaScript",json:"JSON",css:"CSS",html:"HTML",sh:"Shell",text:"Text"},y="import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined",c=`'(?:[^'\\\\\\n]|\\\\.)*'|"(?:[^"\\\\\\n]|\\\\.)*"`,l={ts:[new RegExp(`(\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?\\*\\/)|(${c}|\`(?:[^\`\\\\]|\\\\.)*\`)|\\b(${y})\\b|\\b(\\d+(?:\\.\\d+)?)\\b`,"g"),["comment","string","keyword","number"]],js:[/./g,[]],json:[new RegExp(`("(?:[^"\\\\\\n]|\\\\.)*")(?=\\s*:)|(${c})|\\b(true|false|null)\\b|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)`,"g"),["property","string","keyword","number"]],css:[new RegExp(`(\\/\\*[\\s\\S]*?\\*\\/)|(${c})|(@[\\w-]+)|([\\w-]+)(?=\\s*:[^:{;]*[;}\\n])|(#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:%|[a-z]+)?)`,"g"),["comment","string","keyword","property","number"]],html:[new RegExp(`(<!--[\\s\\S]*?-->)|(<\\/?[\\w-]+|\\/?>)|([\\w:-]+)(?==)|(${c})`,"g"),["comment","tag","attr","string"]],sh:[new RegExp(`(#[^\\n]*)|(${c})|\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\b|(\\$\\{?[\\w]+\\}?|--?[\\w-]+)`,"g"),["comment","string","keyword","attr"]]};l.js=l.ts;function x(s,e="ts"){if(e==="text"||!l[e])return[["",s]];let[t,a]=l[e],i=[],n=0;for(let o of s.matchAll(t))o.index>n&&i.push(["",s.slice(n,o.index)]),i.push([a[o.slice(1).findIndex(d=>d!==void 0)]??"",o[0]]),n=o.index+o[0].length;return n<s.length&&i.push(["",s.slice(n)]),i}var v=s=>{if(Array.isArray(s))return new Set(s);let e=new Set;for(let t of(s??"").split(",")){let[a,i]=t.split("-").map(n=>Number(n.trim()));if(Number.isFinite(a))for(let n=a;n<=(Number.isFinite(i)?i:a);n++)e.add(n)}return e},u=class extends f{baseCls="op-codeviewer";titleEl;bar;pre;codeEl;status;copyBtn;build(){return this.titleEl=r("span","op-codeviewer__title"),this.copyBtn=new b({text:p("codeCopy"),icon:"file",variant:"ghost",handler:()=>{this.copy()}}),this.status=r("span","op-sr-only op-codeviewer__status",{"aria-live":"polite"}),this.bar=r("div","op-codeviewer__bar",{},this.titleEl,this.copyBtn.el,this.status),this.codeEl=r("code","op-codeviewer__code"),this.pre=r("pre","op-codeviewer__pre",{tabindex:0},this.codeEl),r("div","op-codeviewer",{},this.bar,this.pre)}onRender(){this.own(()=>this.copyBtn.destroy()),this.paintBar(),this.paintCode(),this.setWrap(!!this.config.wrap),this.setMaxHeight(this.config.maxHeight)}get language(){return this.config.language??"ts"}paintBar(){let e=this.config,t=e.title??w[this.language]??this.language;this.titleEl.textContent=t,this.pre.setAttribute("aria-label",t),this.bar.hidden=e.bar===!1,this.copyBtn.el.hidden=e.copyable===!1}paintCode(){let e=this.config,t=e.startLine??1,a=v(e.highlight),i=[r("span","op-codeviewer__line")];for(let[o,d]of x(e.code??"",this.language))d.split(`
2
+ `).forEach((h,C)=>{C&&i.push(r("span","op-codeviewer__line")),h&&i[i.length-1].append(o?r("span",`op-codeviewer__tok--${o}`,{},h):h)});i.forEach((o,d)=>{a.has(t+d)&&o.classList.add("is-marked"),d<i.length-1&&o.append(`
3
+ `)}),this.codeEl.replaceChildren(...i);let n=e.lineNumbers!==!1;this.el.classList.toggle("has-numbers",n),this.codeEl.style.counterReset=`op-codeline ${t-1}`,this.codeEl.style.setProperty("--op-codeviewer-gutter",`${String(t+i.length-1).length}ch`)}getCode(){return this.config.code??""}async copy(){let e=this.getCode();try{await navigator.clipboard.writeText(e)}catch{let t=document.createRange();return t.selectNodeContents(this.codeEl),getSelection()?.removeAllRanges(),getSelection()?.addRange(t),!1}return this.copyBtn.setText(p("codeCopied")),this.copyBtn.setIcon("check"),this.status.textContent=p("codeCopied"),this.later(()=>{this.copyBtn.setText(p("codeCopy")),this.copyBtn.setIcon("file"),this.status.textContent=""},1600),this.emit("copy",e),!0}update(e,t=!1){Object.assign(this.config,e),this.rendered&&(t&&this.paintBar(),this.paintCode())}setCode(e){this.update({code:e})}setLanguage(e){this.update({language:e},!0)}setTitle(e){this.update({title:e},!0)}setLineNumbers(e){this.update({lineNumbers:e})}setStartLine(e){this.update({startLine:e})}setHighlight(e){this.update({highlight:e})}setWrap(e){this.config.wrap=e,this.rendered&&this.el.classList.toggle("is-wrapped",e)}setMaxHeight(e){this.config.maxHeight=e,this.rendered&&(this.pre.style.maxBlockSize=e==null?"":typeof e=="number"?`${e}px`:e)}};m("codeviewer",u);export{x as a,u as b};
4
+ //# sourceMappingURL=chunk-MM2OC66E.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/base/codeviewer/codeviewer.ts"],
4
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 } from '../button/button';\n\nexport type CodeLanguage = 'ts' | 'js' | 'json' | 'css' | 'html' | 'sh' | 'text';\n\nexport interface CodeViewerConfig extends ComponentConfig {\n code?: string;\n language?: CodeLanguage;\n /** The bar text. Default: the language name. */\n title?: string;\n lineNumbers?: boolean;\n startLine?: number;\n /** Lines to mark: `[3, 4]` or `'3-5,8'` (numbers as shown, so they follow `startLine`). */\n highlight?: number[] | string;\n wrap?: boolean;\n copyable?: boolean;\n bar?: boolean;\n maxHeight?: number | string;\n}\n\naddMessages('en', { codeCopy: 'Copy', codeCopied: 'Copied' });\naddMessages('pt-BR', { codeCopy: 'Copiar', codeCopied: 'Copiado' });\n\nconst NAMES: Record<CodeLanguage, string> = { ts: 'TypeScript', js: 'JavaScript', json: 'JSON', css: 'CSS', html: 'HTML', sh: 'Shell', text: 'Text' };\n\n// One regex per language: each capture group is a token kind, in the order of KINDS[lang]. Anything else is plain text.\nconst JS_WORDS = 'import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined';\nconst STR = `'(?:[^'\\\\\\\\\\\\n]|\\\\\\\\.)*'|\"(?:[^\"\\\\\\\\\\\\n]|\\\\\\\\.)*\"`;\nconst RULES: Record<Exclude<CodeLanguage, 'text'>, [RegExp, string[]]> = {\n ts: [new RegExp(`(\\\\/\\\\/[^\\\\n]*|\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)|(${STR}|\\`(?:[^\\`\\\\\\\\]|\\\\\\\\.)*\\`)|\\\\b(${JS_WORDS})\\\\b|\\\\b(\\\\d+(?:\\\\.\\\\d+)?)\\\\b`, 'g'), ['comment', 'string', 'keyword', 'number']],\n js: [/./g, []], // same as ts (filled below)\n json: [new RegExp(`(\"(?:[^\"\\\\\\\\\\\\n]|\\\\\\\\.)*\")(?=\\\\s*:)|(${STR})|\\\\b(true|false|null)\\\\b|(-?\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?)`, 'g'), ['property', 'string', 'keyword', 'number']],\n css: [new RegExp(`(\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)|(${STR})|(@[\\\\w-]+)|([\\\\w-]+)(?=\\\\s*:[^:{;]*[;}\\\\n])|(#[0-9a-fA-F]{3,8}\\\\b|-?\\\\d*\\\\.?\\\\d+(?:%|[a-z]+)?)`, 'g'), ['comment', 'string', 'keyword', 'property', 'number']],\n html: [new RegExp(`(<!--[\\\\s\\\\S]*?-->)|(<\\\\/?[\\\\w-]+|\\\\/?>)|([\\\\w:-]+)(?==)|(${STR})`, 'g'), ['comment', 'tag', 'attr', 'string']],\n sh: [new RegExp(`(#[^\\\\n]*)|(${STR})|\\\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\\\b|(\\\\$\\\\{?[\\\\w]+\\\\}?|--?[\\\\w-]+)`, 'g'), ['comment', 'string', 'keyword', 'attr']],\n};\nRULES.js = RULES.ts;\n\ntype Tok = [kind: string, text: string];\n\n/** Splits code into tokens (kind '' = plain). Pure: no DOM. */\nexport function tokenize(code: string, language: CodeLanguage = 'ts'): Tok[] {\n if (language === 'text' || !RULES[language]) return [['', code]];\n const [re, kinds] = RULES[language];\n const out: Tok[] = [];\n let last = 0;\n for (const m of code.matchAll(re)) {\n if (m.index! > last) out.push(['', code.slice(last, m.index)]);\n out.push([kinds[m.slice(1).findIndex((g) => g !== undefined)] ?? '', m[0]]);\n last = m.index! + m[0].length;\n }\n if (last < code.length) out.push(['', code.slice(last)]);\n return out;\n}\n\n/** `'3-5,8'` or `[3, 4]` \u2192 a set of line numbers. */\nconst lineSet = (v: CodeViewerConfig['highlight']): Set<number> => {\n if (Array.isArray(v)) return new Set(v);\n const out = new Set<number>();\n for (const part of (v ?? '').split(',')) {\n const [a, b] = part.split('-').map((x) => Number(x.trim()));\n if (Number.isFinite(a)) for (let n = a; n <= (Number.isFinite(b) ? b : a); n++) out.add(n);\n }\n return out;\n};\n\n/** Read-only code: syntax colors, line numbers (CSS counters, never copied), marked lines and a copy button. */\nexport class CodeViewer extends Component<CodeViewerConfig> {\n protected override baseCls = 'op-codeviewer';\n private titleEl!: HTMLElement;\n private bar!: HTMLElement;\n private pre!: HTMLElement;\n private codeEl!: HTMLElement;\n private status!: HTMLElement;\n private copyBtn!: Button;\n\n protected override build() {\n this.titleEl = h('span', 'op-codeviewer__title');\n this.copyBtn = new Button({ text: t('codeCopy'), icon: 'file', variant: 'ghost', handler: () => void this.copy() });\n this.status = h('span', 'op-sr-only op-codeviewer__status', { 'aria-live': 'polite' });\n this.bar = h('div', 'op-codeviewer__bar', {}, this.titleEl, this.copyBtn.el, this.status);\n this.codeEl = h('code', 'op-codeviewer__code');\n this.pre = h('pre', 'op-codeviewer__pre', { tabindex: 0 }, this.codeEl);\n return h('div', 'op-codeviewer', {}, this.bar, this.pre);\n }\n\n protected override onRender() {\n this.own(() => this.copyBtn.destroy());\n this.paintBar();\n this.paintCode();\n this.setWrap(!!this.config.wrap);\n this.setMaxHeight(this.config.maxHeight);\n }\n\n private get language(): CodeLanguage {\n return this.config.language ?? 'ts';\n }\n\n private paintBar() {\n const c = this.config;\n const title = c.title ?? NAMES[this.language] ?? this.language;\n this.titleEl.textContent = title;\n this.pre.setAttribute('aria-label', title);\n this.bar.hidden = c.bar === false;\n this.copyBtn.el.hidden = c.copyable === false;\n }\n\n /** One line element per line, tokens split at line breaks so a comment or string can span lines. */\n private paintCode() {\n const c = this.config;\n const start = c.startLine ?? 1;\n const marks = lineSet(c.highlight);\n const lines: HTMLElement[] = [h('span', 'op-codeviewer__line')];\n for (const [kind, text] of tokenize(c.code ?? '', this.language)) {\n text.split('\\n').forEach((piece, i) => {\n if (i) lines.push(h('span', 'op-codeviewer__line'));\n if (piece) lines[lines.length - 1].append(kind ? h('span', `op-codeviewer__tok--${kind}`, {}, piece) : piece);\n });\n }\n lines.forEach((l, i) => {\n if (marks.has(start + i)) l.classList.add('is-marked');\n if (i < lines.length - 1) l.append('\\n');\n });\n this.codeEl.replaceChildren(...lines);\n const numbers = c.lineNumbers !== false;\n this.el.classList.toggle('has-numbers', numbers);\n this.codeEl.style.counterReset = `op-codeline ${start - 1}`;\n this.codeEl.style.setProperty('--op-codeviewer-gutter', `${String(start + lines.length - 1).length}ch`);\n }\n\n getCode(): string {\n return this.config.code ?? '';\n }\n\n /** Copies the code. Without a clipboard (an insecure page) it selects the code instead and resolves false. */\n async copy(): Promise<boolean> {\n const code = this.getCode();\n try {\n await navigator.clipboard.writeText(code);\n } catch {\n const range = document.createRange();\n range.selectNodeContents(this.codeEl);\n getSelection()?.removeAllRanges();\n getSelection()?.addRange(range);\n return false;\n }\n this.copyBtn.setText(t('codeCopied'));\n this.copyBtn.setIcon('check');\n this.status.textContent = t('codeCopied');\n this.later(() => {\n this.copyBtn.setText(t('codeCopy'));\n this.copyBtn.setIcon('file');\n this.status.textContent = '';\n }, 1600);\n this.emit('copy', code);\n return true;\n }\n\n private update(patch: Partial<CodeViewerConfig>, bar = false) {\n Object.assign(this.config, patch);\n if (!this.rendered) return;\n if (bar) this.paintBar();\n this.paintCode();\n }\n setCode(code: string) {\n this.update({ code });\n }\n setLanguage(language: CodeLanguage) {\n this.update({ language }, true);\n }\n setTitle(title: string) {\n this.update({ title }, true);\n }\n setLineNumbers(lineNumbers: boolean) {\n this.update({ lineNumbers });\n }\n setStartLine(startLine: number) {\n this.update({ startLine });\n }\n setHighlight(highlight: CodeViewerConfig['highlight']) {\n this.update({ highlight });\n }\n setWrap(wrap: boolean) {\n this.config.wrap = wrap;\n if (this.rendered) this.el.classList.toggle('is-wrapped', wrap);\n }\n setMaxHeight(maxHeight: CodeViewerConfig['maxHeight']) {\n this.config.maxHeight = maxHeight;\n if (this.rendered) this.pre.style.maxBlockSize = maxHeight == null ? '' : typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n}\nregister('codeviewer', CodeViewer);\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["addMessages", "NAMES", "JS_WORDS", "STR", "RULES", "tokenize", "code", "language", "re", "kinds", "out", "last", "m", "g", "lineSet", "v", "part", "b", "x", "CodeViewer", "Component", "h", "Button", "t", "c", "title", "start", "marks", "lines", "kind", "text", "piece", "i", "l", "numbers", "range", "patch", "bar", "lineNumbers", "startLine", "highlight", "wrap", "maxHeight", "register"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{c}from"./chunk-4EZJ5FKJ.js";import{a as m}from"./chunk-A2NKDOYN.js";import{b as o}from"./chunk-PZSHOSOS.js";import{a as k}from"./chunk-TIPK3SCJ.js";import{e as f,f as u}from"./chunk-MW3RWBZ7.js";f("en",{treeLoading:"Loading\u2026",treeEmpty:"Nothing here"});f("pt-BR",{treeLoading:"Carregando\u2026",treeEmpty:"Nada aqui"});var g=class extends m{baseCls="op-tree";items=[];open=new Set;selected=new Set;loading=new Set;query="";focusId;root;onRender(){let e=this.config;this.items=e.items??[];let t=i=>i.forEach(s=>(s.expanded&&this.open.add(s.id),s.children&&t(s.children)));t(this.items),this.root=o("ul","op-tree__root",{role:"tree","aria-label":e.ariaLabel??null,"aria-multiselectable":e.selection==="multi"?"true":null}),this.el.removeAttribute("aria-label"),this.el.append(this.root),this.listen(this.root,"click",i=>{let s=i.target.closest(".op-tree__item");if(!s)return;let r=s.dataset.id;if(this.focusId=r,i.target.closest(".op-tree__toggle"))return this.toggle(r);if(i.target.closest(".op-tree__check"))return this.toggleChecked(r);this.pick(r,i.ctrlKey||i.metaKey)}),this.listen(this.root,"dblclick",i=>{let s=i.target.closest(".op-tree__item"),r=s&&this.getNode(s.dataset.id);r&&!r.disabled&&this.emit("activate",r)}),this.listen(this.root,"keydown",i=>this.onKey(i)),this.paint()}getNode(e,t=this.items){for(let i of t){if(i.id===e)return i;let s=i.children&&this.getNode(e,i.children);if(s)return s}}getPath(e,t=this.items,i=[]){for(let s of t){if(s.id===e)return i;let r=s.children&&this.getPath(e,s.children,[...i,s]);if(r)return r}}isLeaf(e){return e.leaf??(!e.children&&!this.config.load)}matches(e,t){return e.text.toLowerCase().includes(t)||!!e.children?.some(i=>this.matches(i,t))}walk(e,t){for(let i of e)t(i),i.children&&this.walk(i.children,t)}paint(){let e=this.items.filter(s=>!this.query||this.matches(s,this.query));this.root.replaceChildren(...e.map(s=>this.node(s,1))),e.length||this.root.append(o("li","op-tree__empty",{role:"none"},this.config.emptyText??u("treeEmpty")));let t=this.rows(),i=t.find(s=>s.dataset.id===this.focusId)??t.find(s=>s.getAttribute("aria-selected")==="true")??t[0];t.forEach(s=>s.tabIndex=s===i?0:-1)}node(e,t){let i=this.isLeaf(e),s=!i&&(this.query?!0:this.open.has(e.id)),r=this.loading.has(e.id),h=this.selected.has(e.id),l=this.config.selection??"single",n=this.checkState(e),d=o("li","op-tree__node",{role:"none"}),a=o("div",`op-tree__item${h?" is-selected":""}${e.disabled?" is-disabled":""}${s?" is-expanded":""}${r?" is-loading":""}`,{role:"treeitem","data-id":e.id,"aria-level":t,tabindex:-1,"aria-expanded":i?null:String(s),"aria-selected":l==="none"?null:String(h),"aria-checked":this.config.checkboxes?String(n):null,"aria-disabled":e.disabled?"true":null,"aria-busy":r?"true":null});if(a.style.setProperty("--_level",String(t-1)),a.append(o("span","op-tree__toggle",{"aria-hidden":"true"},i?"":r?o("span","op-spinner op-tree__spinner"):c("chevron-right"))),this.config.checkboxes&&a.append(o("span",`op-tree__check${n===!0?" is-checked":n==="mixed"?" is-mixed":""}`,{"aria-hidden":"true"},n==="mixed"?c("minus"):n?c("check"):"")),e.icon&&a.append(o("span","op-tree__icon",{},c(e.icon))),a.append(o("span","op-tree__text",{},e.text)),d.append(a),s&&e.children?.length){let b=e.children.filter(p=>!this.query||this.matches(p,this.query));d.append(o("ul","op-tree__group",{role:"group"},...b.map(p=>this.node(p,t+1))))}return d}async expand(e){let t=this.getNode(e);if(!(!t||this.isLeaf(t)||this.open.has(e)||this.loading.has(e))){if(!t.children&&this.config.load){this.loading.add(e),this.rendered&&this.paint();try{t.children=await this.config.load(t),this.config.checkboxes&&this.checkState(t)===!0&&t.children.forEach(i=>this.setBranch(i,!0)),this.emit("load",t,t.children)}catch(i){this.loading.delete(e),this.rendered&&this.paint(),this.emit("error",i,t);return}this.loading.delete(e)}this.open.add(e),this.rendered&&this.paint(),this.emit("expand",t)}}collapse(e){let t=this.getNode(e);!t||!this.open.delete(e)||(this.rendered&&this.paint(),this.emit("collapse",t))}toggle(e){this.open.has(e)?this.collapse(e):this.expand(e)}expandAll(){this.walk(this.items,e=>e.children?.length&&this.open.add(e.id)),this.rendered&&this.paint()}collapseAll(){this.open.clear(),this.rendered&&this.paint()}pick(e,t){let i=this.getNode(e),s=this.config.selection??"single";!i||i.disabled||s==="none"||(s==="multi"&&t?this.selected.delete(e)||this.selected.add(e):(this.selected.clear(),this.selected.add(e)),this.rendered&&this.paint(),this.emit("select",this.getSelection()))}select(e,t={}){for(let i of this.getPath(e)??[])this.open.add(i.id);this.focusId=e,this.pick(e,!!t.add)}getSelection(){return[...this.selected].map(e=>this.getNode(e)).filter(e=>!!e)}deselectAll(){this.selected.clear(),this.rendered&&this.paint(),this.emit("select",[])}checkState(e){if(!e.children?.length)return!!e.checked;let t=e.children.map(i=>this.checkState(i));return t.every(i=>i===!0)?!0:t.some(i=>i!==!1)?"mixed":!1}setBranch(e,t){e.checked=t,e.children?.forEach(i=>this.setBranch(i,t))}setChecked(e,t){let i=this.getNode(e);!i||i.disabled||(this.setBranch(i,t),this.rendered&&this.paint(),this.emit("check",this.getChecked(),i))}toggleChecked(e){let t=this.getNode(e);t&&this.setChecked(e,this.checkState(t)!==!0)}getChecked(){let e=[];return this.walk(this.items,t=>this.checkState(t)===!0&&e.push(t)),e}setItems(e){this.items=e,this.config.items=e,this.selected.clear(),this.rendered&&this.paint()}filter(e){this.query=e.trim().toLowerCase(),this.rendered&&this.paint()}rows(){return Array.from(this.root.querySelectorAll(".op-tree__item"))}focusRow(e){e&&(this.rows().forEach(t=>t.tabIndex=t===e?0:-1),this.focusId=e.dataset.id,e.focus())}onKey(e){let t=e.target.closest(".op-tree__item");if(!t)return;let i=this.rows(),s=i.indexOf(t),r=this.getNode(t.dataset.id),h=t.getAttribute("aria-expanded")==="true",l=t.getAttribute("aria-expanded")==="false";switch(e.key){case"ArrowDown":this.focusRow(i[s+1]);break;case"ArrowUp":this.focusRow(i[s-1]);break;case"Home":this.focusRow(i[0]);break;case"End":this.focusRow(i[i.length-1]);break;case"ArrowRight":l?this.expand(r.id):h&&this.focusRow(i[s+1]);break;case"ArrowLeft":if(h)this.collapse(r.id);else{let d=this.getPath(r.id)?.pop();d&&this.focusRow(i.find(a=>a.dataset.id===d.id))}break;case" ":this.config.checkboxes?this.toggleChecked(r.id):this.pick(r.id,this.config.selection==="multi");break;case"Enter":this.pick(r.id,!1),r.disabled||this.emit("activate",r);break;default:return}e.preventDefault();let n=this.root.querySelector(`[data-id="${CSS.escape(this.focusId??r.id)}"]`);n&&document.activeElement!==n&&this.focusRow(n)}};k("tree",g);export{g as a};
2
- //# sourceMappingURL=chunk-DBMWS3O5.js.map
1
+ import{c}from"./chunk-DIOJGTUN.js";import{a as k}from"./chunk-TIPK3SCJ.js";import{f as m}from"./chunk-UDXO3KM3.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as f,f as u}from"./chunk-S4QD5NID.js";f("en",{treeLoading:"Loading\u2026",treeEmpty:"Nothing here"});f("pt-BR",{treeLoading:"Carregando\u2026",treeEmpty:"Nada aqui"});var g=class extends m{baseCls="op-tree";items=[];open=new Set;selected=new Set;loading=new Set;query="";focusId;root;onRender(){let e=this.config;this.items=e.items??[];let t=i=>i.forEach(s=>(s.expanded&&this.open.add(s.id),s.children&&t(s.children)));t(this.items),this.root=o("ul","op-tree__root",{role:"tree","aria-label":e.ariaLabel??null,"aria-multiselectable":e.selection==="multi"?"true":null}),this.el.removeAttribute("aria-label"),this.el.append(this.root),this.listen(this.root,"click",i=>{let s=i.target.closest(".op-tree__item");if(!s)return;let r=s.dataset.id;if(this.focusId=r,i.target.closest(".op-tree__toggle"))return this.toggle(r);if(i.target.closest(".op-tree__check"))return this.toggleChecked(r);this.pick(r,i.ctrlKey||i.metaKey)}),this.listen(this.root,"dblclick",i=>{let s=i.target.closest(".op-tree__item"),r=s&&this.getNode(s.dataset.id);r&&!r.disabled&&this.emit("activate",r)}),this.listen(this.root,"keydown",i=>this.onKey(i)),this.paint()}getNode(e,t=this.items){for(let i of t){if(i.id===e)return i;let s=i.children&&this.getNode(e,i.children);if(s)return s}}getPath(e,t=this.items,i=[]){for(let s of t){if(s.id===e)return i;let r=s.children&&this.getPath(e,s.children,[...i,s]);if(r)return r}}isLeaf(e){return e.leaf??(!e.children&&!this.config.load)}matches(e,t){return e.text.toLowerCase().includes(t)||!!e.children?.some(i=>this.matches(i,t))}walk(e,t){for(let i of e)t(i),i.children&&this.walk(i.children,t)}paint(){let e=this.items.filter(s=>!this.query||this.matches(s,this.query));this.root.replaceChildren(...e.map(s=>this.node(s,1))),e.length||this.root.append(o("li","op-tree__empty",{role:"none"},this.config.emptyText??u("treeEmpty")));let t=this.rows(),i=t.find(s=>s.dataset.id===this.focusId)??t.find(s=>s.getAttribute("aria-selected")==="true")??t[0];t.forEach(s=>s.tabIndex=s===i?0:-1)}node(e,t){let i=this.isLeaf(e),s=!i&&(this.query?!0:this.open.has(e.id)),r=this.loading.has(e.id),h=this.selected.has(e.id),l=this.config.selection??"single",n=this.checkState(e),d=o("li","op-tree__node",{role:"none"}),a=o("div",`op-tree__item${h?" is-selected":""}${e.disabled?" is-disabled":""}${s?" is-expanded":""}${r?" is-loading":""}`,{role:"treeitem","data-id":e.id,"aria-level":t,tabindex:-1,"aria-expanded":i?null:String(s),"aria-selected":l==="none"?null:String(h),"aria-checked":this.config.checkboxes?String(n):null,"aria-disabled":e.disabled?"true":null,"aria-busy":r?"true":null});if(a.style.setProperty("--_level",String(t-1)),a.append(o("span","op-tree__toggle",{"aria-hidden":"true"},i?"":r?o("span","op-spinner op-tree__spinner"):c("chevron-right"))),this.config.checkboxes&&a.append(o("span",`op-tree__check${n===!0?" is-checked":n==="mixed"?" is-mixed":""}`,{"aria-hidden":"true"},n==="mixed"?c("minus"):n?c("check"):"")),e.icon&&a.append(o("span","op-tree__icon",{},c(e.icon))),a.append(o("span","op-tree__text",{},e.text)),d.append(a),s&&e.children?.length){let b=e.children.filter(p=>!this.query||this.matches(p,this.query));d.append(o("ul","op-tree__group",{role:"group"},...b.map(p=>this.node(p,t+1))))}return d}async expand(e){let t=this.getNode(e);if(!(!t||this.isLeaf(t)||this.open.has(e)||this.loading.has(e))){if(!t.children&&this.config.load){this.loading.add(e),this.rendered&&this.paint();try{t.children=await this.config.load(t),this.config.checkboxes&&this.checkState(t)===!0&&t.children.forEach(i=>this.setBranch(i,!0)),this.emit("load",t,t.children)}catch(i){this.loading.delete(e),this.rendered&&this.paint(),this.emit("error",i,t);return}this.loading.delete(e)}this.open.add(e),this.rendered&&this.paint(),this.emit("expand",t)}}collapse(e){let t=this.getNode(e);!t||!this.open.delete(e)||(this.rendered&&this.paint(),this.emit("collapse",t))}toggle(e){this.open.has(e)?this.collapse(e):this.expand(e)}expandAll(){this.walk(this.items,e=>e.children?.length&&this.open.add(e.id)),this.rendered&&this.paint()}collapseAll(){this.open.clear(),this.rendered&&this.paint()}pick(e,t){let i=this.getNode(e),s=this.config.selection??"single";!i||i.disabled||s==="none"||(s==="multi"&&t?this.selected.delete(e)||this.selected.add(e):(this.selected.clear(),this.selected.add(e)),this.rendered&&this.paint(),this.emit("select",this.getSelection()))}select(e,t={}){for(let i of this.getPath(e)??[])this.open.add(i.id);this.focusId=e,this.pick(e,!!t.add)}getSelection(){return[...this.selected].map(e=>this.getNode(e)).filter(e=>!!e)}deselectAll(){this.selected.clear(),this.rendered&&this.paint(),this.emit("select",[])}checkState(e){if(!e.children?.length)return!!e.checked;let t=e.children.map(i=>this.checkState(i));return t.every(i=>i===!0)?!0:t.some(i=>i!==!1)?"mixed":!1}setBranch(e,t){e.checked=t,e.children?.forEach(i=>this.setBranch(i,t))}setChecked(e,t){let i=this.getNode(e);!i||i.disabled||(this.setBranch(i,t),this.rendered&&this.paint(),this.emit("check",this.getChecked(),i))}toggleChecked(e){let t=this.getNode(e);t&&this.setChecked(e,this.checkState(t)!==!0)}getChecked(){let e=[];return this.walk(this.items,t=>this.checkState(t)===!0&&e.push(t)),e}setItems(e){this.items=e,this.config.items=e,this.selected.clear(),this.rendered&&this.paint()}filter(e){this.query=e.trim().toLowerCase(),this.rendered&&this.paint()}rows(){return Array.from(this.root.querySelectorAll(".op-tree__item"))}focusRow(e){e&&(this.rows().forEach(t=>t.tabIndex=t===e?0:-1),this.focusId=e.dataset.id,e.focus())}onKey(e){let t=e.target.closest(".op-tree__item");if(!t)return;let i=this.rows(),s=i.indexOf(t),r=this.getNode(t.dataset.id),h=t.getAttribute("aria-expanded")==="true",l=t.getAttribute("aria-expanded")==="false";switch(e.key){case"ArrowDown":this.focusRow(i[s+1]);break;case"ArrowUp":this.focusRow(i[s-1]);break;case"Home":this.focusRow(i[0]);break;case"End":this.focusRow(i[i.length-1]);break;case"ArrowRight":l?this.expand(r.id):h&&this.focusRow(i[s+1]);break;case"ArrowLeft":if(h)this.collapse(r.id);else{let d=this.getPath(r.id)?.pop();d&&this.focusRow(i.find(a=>a.dataset.id===d.id))}break;case" ":this.config.checkboxes?this.toggleChecked(r.id):this.pick(r.id,this.config.selection==="multi");break;case"Enter":this.pick(r.id,!1),r.disabled||this.emit("activate",r);break;default:return}e.preventDefault();let n=this.root.querySelector(`[data-id="${CSS.escape(this.focusId??r.id)}"]`);n&&document.activeElement!==n&&this.focusRow(n)}};k("tree",g);export{g as a};
2
+ //# sourceMappingURL=chunk-MQ5BYGFY.js.map
@@ -0,0 +1,3 @@
1
+ import{a as E}from"./chunk-6NP4AEV4.js";import{c as u}from"./chunk-DIOJGTUN.js";import{c as b}from"./chunk-VV7CFMPZ.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{e as d,f as m}from"./chunk-UDXO3KM3.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";import{e as v}from"./chunk-4AA4FQEM.js";var n=".op-menu__item",p=class y extends m{baseCls="op-menu";parentMenu;dd;sub;subOwner;opener=null;hoverCancel;list;searchEl;emptyEl;build(){return s("div","op-menu")}shell(){let t=!!this.config.search;t&&!this.searchEl&&(this.searchEl=s("input","op-menu__search",{type:"search",placeholder:`${h("search")}\u2026`,"aria-label":h("search"),autocomplete:"off"}),this.emptyEl=s("div","op-menu__empty",{},h("noResults")),this.listen(this.searchEl,"input",()=>this.filter()),this.listen(this.searchEl,"keydown",e=>{let i=this.first();i&&(e.key==="ArrowDown"||e.key==="Enter")&&(e.preventDefault(),e.key==="Enter"?this.activate(i):i.focus())})),this.list=t?this.list!==this.el&&this.list||s("div","op-menu__list",{role:"menu"}):this.el,this.el.setAttribute("role",t?"none":"menu"),t&&this.el.replaceChildren(this.searchEl,this.list,this.emptyEl)}first(){return this.list.querySelector(`${n}:not([hidden]):not([aria-disabled=true])`)}filter(){let t=(this.searchEl?.value??"").trim().toLowerCase();this.el.classList.toggle("is-searching",!!t);for(let e of Array.from(this.list.querySelectorAll(n))){let i=e.parentElement.getAttribute("aria-label")??"";e.hidden=!!t&&!`${i}
2
+ ${e.textContent}`.toLowerCase().includes(t)}this.emptyEl&&(this.emptyEl.hidden=!!this.first()||!this.list.querySelector(n))}onRender(){this.shell(),this.renderItems();let t=b(this.el,{selector:n,orientation:"vertical"});this.own(()=>t.destroy()),this.listen(this.el,"click",e=>{let i=e.target.closest(n);i&&this.activate(i)}),this.listen(this.el,"keydown",e=>{let i=e.target.closest(n);if(e.target!==this.searchEl){if(e.key==="Tab")return this.closeAll();if(this.searchEl&&e.key.length===1&&e.key!==" "&&!e.ctrlKey&&!e.metaKey&&!e.altKey)return e.preventDefault(),this.searchEl.focus(),this.searchEl.value+=e.key,this.filter();i&&(e.key==="Enter"||e.key===" "?(e.preventDefault(),this.activate(i)):e.key==="ArrowRight"&&i.getAttribute("aria-haspopup")?(e.preventDefault(),this.openSub(i,!0)):e.key==="ArrowLeft"&&this.parentMenu&&(e.preventDefault(),this.hide()))}}),this.listen(this.el,"pointerover",e=>{let i=e.target.closest(n);!i||i.getAttribute("aria-disabled")==="true"||(this.hoverCancel?.(),i.focus(),i.getAttribute("aria-haspopup")?this.hoverCancel=this.later(()=>this.openSub(i,!1),150):this.sub?.hide())})}entries(){return(this.config.items??[]).flatMap(t=>typeof t=="string"?["-"]:d([t])??[])}renderItems(){let t=this.entries(),e=t.map((r,o)=>{if(r==="-")return s("div","op-menu__sep",{role:"separator"});let a=r.checked!==void 0,l=s("div","op-menu__item",{role:a?"menuitemcheckbox":"menuitem",tabindex:-1,"data-i":o,"aria-disabled":r.disabled?"true":null,"aria-checked":a?String(!!r.checked):null,"aria-haspopup":r.items?"menu":null,"aria-expanded":r.items?"false":null});return l.append(s("span","op-menu__icon",{},r.icon?u(r.icon):a&&r.checked?u("check"):null),s("span","op-menu__text",{},r.text??"")),r.badge!=null&&r.badge!==""&&l.append(s("span","op-menu__badge",{},String(r.badge))),r.items&&l.append(s("span","op-menu__arrow",{},u("chevron-right"))),l}),i=r=>t[r]==="-"?"":t[r].group??"",c=[...new Set(t.map((r,o)=>i(o)).filter(Boolean))];if(!c.length)return this.list.replaceChildren(...e),this.filter();this.list.replaceChildren(...e.filter((r,o)=>!i(o)),...c.map(r=>s("div","op-menu__group",{role:"group","aria-label":r},s("div","op-menu__group-label",{"aria-hidden":"true"},r),...e.filter((o,a)=>i(a)===r)))),this.filter()}setItems(t){this.config.items=t,this.rendered&&this.renderItems()}setSearch(t){this.config.search=t,this.rendered&&(this.shell(),this.renderItems())}activate(t){let e=this.entries()[Number(t.dataset.i)];if(!(!e||e.disabled)){if(e.items)return this.openSub(t,!0);e.checked!==void 0&&(e.checked=!e.checked),e.handler?.(e),this.root().emit("click",e),this.root().hide()}}root(){return this.parentMenu?this.parentMenu.root():this}openSub(t,e){let i=this.entries()[Number(t.dataset.i)];if(this.sub&&this.subOwner===t&&this.sub.isOpen())return e?this.sub.focusFirst():void 0;this.sub?.destroy(),this.sub=new y({items:i.items}),this.sub.parentMenu=this,this.subOwner=t,this.sub.on("hide",()=>t.setAttribute("aria-expanded","false")),t.setAttribute("aria-expanded","true"),this.sub.showBy(t,"right-start",e)}isOpen(){return!!this.dd?.isOpen()}focusFirst(){this.first()?.focus()}showBy(t,e="bottom-start",i=!0){this.open({anchor:t,placement:e},i)}showAt(t,e){this.open({anchor:{x:t,y:e},placement:"bottom-start"},!0)}open(t,e){this.opener=document.activeElement,this.dd?(this.dd.setAnchor(t.anchor),this.dd.setPlacement(t.placement)):(this.dd=new E({...t,content:this.el,role:"presentation",flip:!0}),this.dd.on("close",()=>{this.sub?.hide(),this.emit("hide")})),this.searchEl&&this.config.search&&(this.searchEl.value="",this.filter()),this.dd.open(),v(Array.from(this.el.querySelectorAll(n)),{dy:4}),e&&this.focusFirst(),this.emit("show")}hide(){if(!this.dd?.isOpen())return;this.dd.close();let t=this.parentMenu?this.parentMenu.subOwner:this.opener;t instanceof HTMLElement&&t.isConnected&&t.focus()}closeAll(){this.root().hide()}onDestroy(){this.sub?.destroy(),this.dd?.destroy()}};f("menu",p);export{p as a};
3
+ //# sourceMappingURL=chunk-MQEALOU3.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/overlays/menu/menu.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport { roving } from '../../../core/focus';\nimport type { Placement } from '../../../core/position';\nimport { gate } from '../../../core/permission';\nimport { iconEl } from '../../base/icon/icon';\nimport { Dropdown } from '../dropdown/dropdown';\nimport { stagger } from '../../../motion/core';\n\nexport interface MenuItem {\n text?: string;\n icon?: string;\n handler?: (item: MenuItem) => void;\n disabled?: boolean;\n /** Present (true/false) makes it a checkable item. */\n checked?: boolean;\n items?: MenuEntry[];\n /** Items with the same group sit together under its name (ungrouped items come first). */\n group?: string;\n /** A count or short label at the end of the row. */\n badge?: string | number;\n /** Hidden (or disabled) while `setPermissionResolver` denies it. */\n permission?: string;\n}\n/** An item, or `'-'` for a separator (typed `string` so an array built in a variable still fits). */\nexport type MenuEntry = MenuItem | string;\n\nexport interface MenuConfig extends ComponentConfig {\n items?: MenuEntry[];\n /** A search field over the items: filters as you type; a search that names a group shows the whole group. */\n search?: boolean;\n}\n\nconst ITEM = '.op-menu__item';\n\n/** Floating menu with submenus. Use `showBy(button)` for button menus and `showAt(x, y)` for context menus. */\nexport class Menu extends Component<MenuConfig> {\n protected override baseCls = 'op-menu';\n parentMenu?: Menu;\n private dd?: Dropdown;\n private sub?: Menu;\n private subOwner?: HTMLElement;\n private opener: Element | null = null;\n private hoverCancel?: () => void;\n /** The `role=menu` element: the root itself, or a list under the search field. */\n private list!: HTMLElement;\n private searchEl?: HTMLInputElement;\n private emptyEl?: HTMLElement;\n\n protected override build() {\n return h('div', 'op-menu');\n }\n\n /** Without search the root is the menu; with it, the root holds the field, the menu and the \"no results\" line. */\n private shell() {\n const on = !!this.config.search;\n if (on && !this.searchEl) {\n this.searchEl = h('input', 'op-menu__search', { type: 'search', placeholder: `${t('search')}\u2026`, 'aria-label': t('search'), autocomplete: 'off' });\n this.emptyEl = h('div', 'op-menu__empty', {}, t('noResults'));\n this.listen(this.searchEl, 'input', () => this.filter());\n this.listen(this.searchEl, 'keydown', (e: KeyboardEvent) => {\n const first = this.first();\n if (first && (e.key === 'ArrowDown' || e.key === 'Enter')) (e.preventDefault(), e.key === 'Enter' ? this.activate(first) : first.focus());\n });\n }\n this.list = on ? (this.list !== this.el && this.list) || h('div', 'op-menu__list', { role: 'menu' }) : this.el;\n this.el.setAttribute('role', on ? 'none' : 'menu');\n if (on) this.el.replaceChildren(this.searchEl!, this.list, this.emptyEl!);\n }\n\n private first(): HTMLElement | null {\n return this.list.querySelector<HTMLElement>(`${ITEM}:not([hidden]):not([aria-disabled=true])`);\n }\n\n /** Hides the items that do not match the search (a group whose name matches keeps all of them); empty groups hide in CSS. */\n private filter() {\n const q = (this.searchEl?.value ?? '').trim().toLowerCase();\n this.el.classList.toggle('is-searching', !!q);\n for (const row of Array.from(this.list.querySelectorAll<HTMLElement>(ITEM))) {\n const group = row.parentElement!.getAttribute('aria-label') ?? '';\n row.hidden = !!q && !`${group}\\n${row.textContent}`.toLowerCase().includes(q);\n }\n if (this.emptyEl) this.emptyEl.hidden = !!this.first() || !this.list.querySelector(ITEM);\n }\n\n protected override onRender() {\n this.shell();\n this.renderItems();\n const rover = roving(this.el, { selector: ITEM, orientation: 'vertical' });\n this.own(() => rover.destroy());\n this.listen(this.el, 'click', (e: Event) => {\n const row = (e.target as HTMLElement).closest<HTMLElement>(ITEM);\n if (row) this.activate(row);\n });\n this.listen(this.el, 'keydown', (e: KeyboardEvent) => {\n const row = (e.target as HTMLElement).closest<HTMLElement>(ITEM);\n if (e.target === this.searchEl) return;\n if (e.key === 'Tab') return this.closeAll();\n // type to search: a printable key on an item goes to the search field\n if (this.searchEl && e.key.length === 1 && e.key !== ' ' && !e.ctrlKey && !e.metaKey && !e.altKey) {\n e.preventDefault();\n this.searchEl.focus();\n this.searchEl.value += e.key;\n return this.filter();\n }\n if (!row) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.activate(row);\n } else if (e.key === 'ArrowRight' && row.getAttribute('aria-haspopup')) {\n e.preventDefault();\n this.openSub(row, true);\n } else if (e.key === 'ArrowLeft' && this.parentMenu) {\n e.preventDefault();\n this.hide();\n }\n });\n this.listen(this.el, 'pointerover', (e: Event) => {\n const row = (e.target as HTMLElement).closest<HTMLElement>(ITEM);\n if (!row || row.getAttribute('aria-disabled') === 'true') return;\n this.hoverCancel?.();\n row.focus();\n if (row.getAttribute('aria-haspopup')) this.hoverCancel = this.later(() => this.openSub(row, false), 150);\n else this.sub?.hide();\n });\n }\n\n private entries(): Array<MenuItem | '-'> {\n return (this.config.items ?? []).flatMap((e): Array<MenuItem | '-'> => (typeof e === 'string' ? ['-'] : (gate([e]) ?? [])));\n }\n\n private renderItems() {\n const entries = this.entries();\n const rows = entries.map((it, i) => {\n if (it === '-') return h('div', 'op-menu__sep', { role: 'separator' });\n const checkable = it.checked !== undefined;\n const row = h('div', 'op-menu__item', {\n role: checkable ? 'menuitemcheckbox' : 'menuitem',\n tabindex: -1,\n 'data-i': i,\n 'aria-disabled': it.disabled ? 'true' : null,\n 'aria-checked': checkable ? String(!!it.checked) : null,\n 'aria-haspopup': it.items ? 'menu' : null,\n 'aria-expanded': it.items ? 'false' : null,\n });\n row.append(h('span', 'op-menu__icon', {}, it.icon ? iconEl(it.icon) : checkable && it.checked ? iconEl('check') : null), h('span', 'op-menu__text', {}, it.text ?? ''));\n if (it.badge != null && it.badge !== '') row.append(h('span', 'op-menu__badge', {}, String(it.badge)));\n if (it.items) row.append(h('span', 'op-menu__arrow', {}, iconEl('chevron-right')));\n return row;\n });\n const groupOf = (i: number) => (entries[i] === '-' ? '' : ((entries[i] as MenuItem).group ?? ''));\n const groups = [...new Set(entries.map((_, i) => groupOf(i)).filter(Boolean))];\n if (!groups.length) return (this.list.replaceChildren(...rows), this.filter());\n // ungrouped entries first, then one role=group per name (its header is only visual: the group carries the name)\n this.list.replaceChildren(\n ...rows.filter((_, i) => !groupOf(i)),\n ...groups.map((g) => h('div', 'op-menu__group', { role: 'group', 'aria-label': g }, h('div', 'op-menu__group-label', { 'aria-hidden': 'true' }, g), ...rows.filter((_, i) => groupOf(i) === g))),\n );\n this.filter();\n }\n\n setItems(items: MenuEntry[]) {\n this.config.items = items;\n if (this.rendered) this.renderItems();\n }\n\n /** Turns the search field on or off. */\n setSearch(search: boolean) {\n this.config.search = search;\n if (!this.rendered) return;\n this.shell();\n this.renderItems();\n }\n\n private activate(row: HTMLElement) {\n const item = this.entries()[Number(row.dataset.i)] as MenuItem;\n if (!item || item.disabled) return;\n if (item.items) return this.openSub(row, true);\n if (item.checked !== undefined) item.checked = !item.checked;\n item.handler?.(item);\n this.root().emit('click', item);\n this.root().hide();\n }\n\n private root(): Menu {\n return this.parentMenu ? this.parentMenu.root() : this;\n }\n\n private openSub(row: HTMLElement, focus: boolean) {\n const item = this.entries()[Number(row.dataset.i)] as MenuItem;\n if (this.sub && this.subOwner === row && this.sub.isOpen()) return focus ? this.sub.focusFirst() : undefined;\n this.sub?.destroy();\n this.sub = new Menu({ items: item.items });\n this.sub.parentMenu = this;\n this.subOwner = row;\n this.sub.on('hide', () => row.setAttribute('aria-expanded', 'false'));\n row.setAttribute('aria-expanded', 'true');\n this.sub.showBy(row, 'right-start', focus);\n }\n\n isOpen(): boolean {\n return !!this.dd?.isOpen();\n }\n\n private focusFirst() {\n this.first()?.focus(); // never the search field on open: a phone keyboard would cover the menu\n }\n\n showBy(anchor: HTMLElement | Component, placement: Placement = 'bottom-start', focus = true) {\n this.open({ anchor, placement }, focus);\n }\n\n showAt(x: number, y: number) {\n this.open({ anchor: { x, y }, placement: 'bottom-start' }, true);\n }\n\n private open(cfg: { anchor: HTMLElement | Component | { x: number; y: number }; placement: Placement }, focus: boolean) {\n this.opener = document.activeElement;\n if (!this.dd) {\n this.dd = new Dropdown({ ...cfg, content: this.el, role: 'presentation', flip: true });\n this.dd.on('close', () => {\n this.sub?.hide();\n this.emit('hide');\n });\n } else {\n this.dd.setAnchor(cfg.anchor);\n this.dd.setPlacement(cfg.placement);\n }\n if (this.searchEl && this.config.search) {\n this.searchEl.value = '';\n this.filter();\n }\n this.dd.open();\n void stagger(Array.from(this.el.querySelectorAll(ITEM)), { dy: 4 }); // the rows settle one after the other\n if (focus) this.focusFirst();\n this.emit('show');\n }\n\n override hide() {\n if (!this.dd?.isOpen()) return;\n this.dd.close();\n // Closing a submenu returns to its parent item; closing the root returns to whatever opened it.\n const back = this.parentMenu ? this.parentMenu.subOwner : this.opener;\n if (back instanceof HTMLElement && back.isConnected) back.focus();\n }\n\n closeAll() {\n this.root().hide();\n }\n\n protected override onDestroy() {\n this.sub?.destroy();\n this.dd?.destroy();\n }\n}\nregister('menu', Menu);\n"],
5
+ "mappings": "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",
6
+ "names": ["ITEM", "Menu", "_Menu", "Component", "h", "on", "t", "first", "q", "row", "group", "rover", "roving", "e", "gate", "entries", "rows", "it", "i", "checkable", "iconEl", "groupOf", "groups", "_", "g", "items", "search", "item", "focus", "anchor", "placement", "x", "y", "cfg", "Dropdown", "stagger", "back", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as c}from"./chunk-EO777UIN.js";import{a as h}from"./chunk-OB3VIRQR.js";import{a as p}from"./chunk-QVBDBGS4.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as m}from"./chunk-PZSHOSOS.js";import{e as n,f as a}from"./chunk-S4QD5NID.js";n("en",{dtDate:"Date",dtTime:"Time",datetime:"Enter a date and a time"});n("pt-BR",{dtDate:"Data",dtTime:"Hora",datetime:"Informe a data e a hora"});var r=o=>String(o).padStart(2,"0"),d=class extends p{baseCls="op-field op-datetimefield";date;time;emptyValue(){return null}isEmpty(e){return!e}createControl(){let{min:e,max:t,step:s}=this.config;this.date=new h({min:e,max:t,ariaLabel:a("dtDate")}),this.time=new c({step:s,ariaLabel:a("dtTime")});for(let i of[this.date,this.time])i.on("change",()=>this.compose());return this.own(()=>(this.date.destroy(),this.time.destroy())),this.inputEl=this.date.el.querySelector("input"),m("div","op-datetimefield__parts",{role:"group"},this.date.el,this.time.el)}compose(){let e=this.date.getValue(),t=this.time.getValue(),s=null;e&&t&&(s=this.config.utc?new Date(+e.slice(0,4),+e.slice(5,7)-1,+e.slice(8),+t.slice(0,2),+t.slice(3)).toISOString():`${e}T${t}`),this.commit(s)}applyValue(e){let t=null,s=null;if(e){let i=this.config.utc?new Date(e):void 0;[t,s]=i?[`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`,`${r(i.getHours())}:${r(i.getMinutes())}`]:e.split("T").map(l=>l.slice(0,l.includes(":")?5:10))}this.date.setValue(t,!0),this.time.setValue(s,!0)}getDisplayText(){return this.value?[this.date.getDisplayText(),this.time.getDisplayText()].join(" "):""}check(){let[e,t]=[this.date.getValue(),this.time.getValue()];return!this.date.isValid()||!this.time.isValid()||!!e!=!!t?a("datetime"):super.check()}onDisabled(e){this.date.setDisabled(e),this.time.setDisabled(e)}onReadonly(e){this.date.setReadonly(e),this.time.setReadonly(e)}setMin(e){this.config.min=e,this.date.setMin(e)}setMax(e){this.config.max=e,this.date.setMax(e)}};u("datetimefield",d);export{d as a};
2
+ //# sourceMappingURL=chunk-NAUSRVB6.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/fields/datetimefield/datetimefield.ts"],
4
+ "sourcesContent": ["import { Field, type FieldConfig } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { DateField } from '../datefield/datefield';\nimport { TimeField } from '../timefield/timefield';\n\naddMessages('en', { dtDate: 'Date', dtTime: 'Time', datetime: 'Enter a date and a time' });\naddMessages('pt-BR', { dtDate: 'Data', dtTime: 'Hora', datetime: 'Informe a data e a hora' });\n\nexport interface DateTimeFieldConfig extends FieldConfig<string | null> {\n /** Earliest and latest date, `YYYY-MM-DD`. */\n min?: string;\n max?: string;\n /** Minutes moved by \u2191/\u2193 in the time part. */\n step?: number;\n /** The value is the ISO instant (`2026-11-10T17:30:00.000Z`) of what the user typed, in their time zone. Default: the local `YYYY-MM-DDTHH:mm`. */\n utc?: boolean;\n}\n\nconst pad = (n: number) => String(n).padStart(2, '0');\n\n/** A date and a time of day side by side. The value is one ISO string (local, or UTC with `utc`) or null. */\nexport class DateTimeField extends Field<string | null, DateTimeFieldConfig> {\n protected override baseCls = 'op-field op-datetimefield';\n private date!: DateField;\n private time!: TimeField;\n\n protected override emptyValue() {\n return null;\n }\n protected override isEmpty(v: string | null) {\n return !v;\n }\n\n protected createControl() {\n const { min, max, step } = this.config;\n this.date = new DateField({ min, max, ariaLabel: t('dtDate') });\n this.time = new TimeField({ step, ariaLabel: t('dtTime') });\n for (const f of [this.date, this.time]) f.on('change', () => this.compose());\n this.own(() => (this.date.destroy(), this.time.destroy()));\n this.inputEl = this.date.el.querySelector('input')!;\n return h('div', 'op-datetimefield__parts', { role: 'group' }, this.date.el, this.time.el);\n }\n\n /** Both parts \u2192 the value. One part alone is not a value yet (`check` says so). */\n private compose() {\n const d = this.date.getValue();\n const tm = this.time.getValue();\n let v: string | null = null;\n if (d && tm) v = this.config.utc ? new Date(+d.slice(0, 4), +d.slice(5, 7) - 1, +d.slice(8), +tm.slice(0, 2), +tm.slice(3)).toISOString() : `${d}T${tm}`;\n this.commit(v);\n }\n\n protected applyValue(v: string | null) {\n let d: string | null = null;\n let tm: string | null = null;\n if (v) {\n const x = this.config.utc ? new Date(v) : undefined;\n [d, tm] = x ? [`${x.getFullYear()}-${pad(x.getMonth() + 1)}-${pad(x.getDate())}`, `${pad(x.getHours())}:${pad(x.getMinutes())}`] : v.split('T').map((s) => s.slice(0, s.includes(':') ? 5 : 10));\n }\n this.date.setValue(d, true);\n this.time.setValue(tm, true);\n }\n\n override getDisplayText() {\n return this.value ? [this.date.getDisplayText(), this.time.getDisplayText()].join(' ') : '';\n }\n\n protected override check(): string {\n const [d, tm] = [this.date.getValue(), this.time.getValue()];\n if (!this.date.isValid() || !this.time.isValid() || (!!d !== !!tm)) return t('datetime');\n return super.check();\n }\n\n protected override onDisabled(disabled: boolean) {\n this.date.setDisabled(disabled);\n this.time.setDisabled(disabled);\n }\n protected override onReadonly(readonly: boolean) {\n this.date.setReadonly(readonly);\n this.time.setReadonly(readonly);\n }\n\n setMin(min: string | undefined) {\n this.config.min = min;\n this.date.setMin(min);\n }\n setMax(max: string | undefined) {\n this.config.max = max;\n this.date.setMax(max);\n }\n}\nregister('datetimefield', DateTimeField);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "pad", "n", "DateTimeField", "Field", "v", "min", "max", "step", "DateField", "t", "TimeField", "f", "h", "d", "tm", "x", "s", "disabled", "readonly", "register"]
7
+ }
@@ -0,0 +1,3 @@
1
+ import{a as S}from"./chunk-6BOM5KZR.js";import{a as F}from"./chunk-OADWLPSF.js";import{a as w}from"./chunk-3F4MN2BU.js";import{a as f}from"./chunk-ESRS5ZQV.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as x}from"./chunk-QVBDBGS4.js";import{a as y}from"./chunk-TIPK3SCJ.js";import{f as b}from"./chunk-UDXO3KM3.js";import{b as h}from"./chunk-PZSHOSOS.js";import{e as c,f as l}from"./chunk-S4QD5NID.js";c("en",{stepBack:"Back",stepNext:"Next",stepFinish:"Finish",stepReview:"Review"});c("pt-BR",{stepBack:"Voltar",stepNext:"Pr\xF3ximo",stepFinish:"Concluir",stepReview:"Revis\xE3o"});var u=class extends b{baseCls="op-stepform__review";setContent(e){this.el.replaceChildren(...e)}},m=class extends F{baseCls="op-form op-stepform";stepper;body;pane;backBtn;nextBtn;finishBtn;index=0;pending;notes=[];noteEl;constructor(e){let n,t=e.steps??[],i=e.review?new u:void 0,s=new S({steps:[...t.map(({title:a,description:_,icon:k,optional:R})=>({title:a,description:_,icon:k,optional:R})),...i?[{title:e.reviewTitle??l("stepReview")}]:[]]}),r=[...t.map(a=>({type:"container",title:a.title,cls:"op-stepform__step",layout:a.layout??{type:"grid",columns:2,gap:12},items:a.items})),...i?[{type:"container",title:e.reviewTitle??l("stepReview"),cls:"op-stepform__step",items:[i]}]:[]],o=new d({cls:"op-stepform__body",flex:1,layout:{type:"card"},items:r}),p=new f({text:e.backText??l("stepBack"),handler:()=>n.back()}),g=new f({text:e.nextText??l("stepNext"),variant:"primary",handler:()=>n.next()}),v=new f({text:e.finishText??l("stepFinish"),variant:"primary",htmlType:"submit"}),B=e.cancelText?[new f({text:e.cancelText,variant:"ghost",handler:()=>n.emit("cancel")})]:[],T=new w({cls:"op-stepform__footer",items:[...B,"->",p,g,v]});super({...e,layout:{type:"vbox"},items:[s,o,T]}),n=this,Object.assign(this,{stepper:s,body:o,pane:i,backBtn:p,nextBtn:g,finishBtn:v}),s.on("before-select",a=>(n.goTo(a),!1)),o.on("activate",()=>n.onActivate()),this.own(()=>this.stop())}cfg(){return this.config}count(){return this.body.items.length}real(){return this.count()-(this.pane?1:0)}getStep(){return this.index}getStepCount(){return this.count()}getStepper(){return this.stepper}stepFields(e){let n=this.body.items[e];return n instanceof d?n.query(t=>t instanceof x):[]}validateStep(e){if(e>=this.real())return!0;let n=this.stepFields(e).filter(t=>!t.validate());return this.stepper.setStepState(e,n.length?"error":"done"),!n.length}note(e,n){this.notes[e]=n,e===this.index&&this.showNote()}showNote(){if(!this.rendered)return;let e=this.notes[this.index]??"";if(!this.noteEl){if(!e)return;this.body.el.before(this.noteEl=h("div","op-stepform__note",{role:"alert"}))}this.noteEl.textContent=e,this.noteEl.hidden=!e}busy(e){this.el.classList.toggle("is-validating",e),this.nextBtn.setLoading(e),this.finishBtn.setLoading(e)}stop(){this.pending&&(this.pending.abort(),this.pending=void 0,this.busy(!1))}async check(e){let n=this.cfg().steps[e]?.validate;if(!n)return!0;this.stop();let t=this.pending=new AbortController;this.busy(!0);let i;try{i=await n(this.getValues(),this,t.signal)}catch(r){i=String(r?.message??r)}if(t.signal.aborted)return!1;this.pending=void 0,this.busy(!1);let s=i===!0||i==null;if(this.note(e,typeof i=="string"?i:""),!s&&typeof i=="object")for(let[r,o]of Object.entries(i))this.getField(r)?.setError(o);return s||this.stepper.setStepState(e,"error"),s}goTo(e){if(e<0||e>=this.count()||e===this.index||this.pending&&e>this.index||(this.stop(),this.emit("before-step-change",this.index,e)===!1))return Promise.resolve(!1);let n=this.index,t=s=>this.index!==n?!1:(s!==this.index&&this.body.setActiveItem(s),s!==e&&this.stepFields(s).find(r=>r.getError())?.focus(),s===e);if(this.cfg().linear===!1||e<n)return Promise.resolve(t(e));let i=s=>{for(;s<e;s++){if(!this.validateStep(s))return t(s);if(this.cfg().steps[s]?.validate)return this.check(s).then(r=>r?i(s+1):t(s))}return t(e)};return Promise.resolve(i(n))}next(){return this.goTo(this.index+1)}back(){return this.goTo(this.index-1)}onActivate(){let e=this.body.items.indexOf(this.body.getActiveItem());if(e<0)return;let n=this.index;this.index=e,this.stepper.setActive(e);let t=this.count()-1;this.backBtn.config.hidden=e===0,this.nextBtn.config.hidden=e===t,this.finishBtn.config.hidden=e!==t;for(let[i,s]of[[this.backBtn,e===0],[this.nextBtn,e===t],[this.finishBtn,e!==t]])i.rendered&&(i.el.hidden=s);if(this.pane&&e===t&&this.refreshReview(),this.showNote(),e!==n&&(this.emit("step-change",e,n),this.rendered&&this.el.isConnected&&!this.stepFields(e).some(i=>i.getError()))){let i=this.body.items[e]?.el;this.config.autoFocus?this.stepFields(e)[0]?.focus():i&&(i.tabIndex=-1,i.focus())}}refreshReview(){let e=this.getValues(),n=this.cfg().review;if(typeof n=="function")return this.pane.setContent([n(e,this)]);let t=[];for(let i=0;i<this.real();i++){let s=this.stepFields(i).filter(r=>r.name);s.length&&(t.push(h("h3","op-stepform__review-title",{},String(this.body.items[i].config.title??""))),t.push(h("dl","op-stepform__review-list",{},...s.flatMap(r=>[h("dt","",{},r.config.label??r.config.boxLabel??r.name),h("dd","",{},this.show_(r))]))))}this.pane.setContent(t)}show_(e){let n=e;if(n.getRows)return n.getRows().map((r,o)=>n.getRowFields(o).map(p=>this.show_(p)).filter(p=>p!=="\u2014").join(" \xB7 ")).join(`
2
+ `)||"\u2014";let t=e.getValue();if(typeof t=="boolean")return t?"\u2713":"\u2014";if(e.config.inputType==="password")return t?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":"\u2014";let i=e.getDisplayText();if(i)return i;let s=r=>Array.isArray(r)?r.map(s).join(", "):r&&typeof r=="object"?Object.values(r).map(s).join(" \u2013 "):`${r??""}`;return s(t)||"\u2014"}submit(){if(this.index<this.count()-1)return this.next(),!1;let e=()=>{for(let t=0;t<this.real();t++)this.stepper.setStepState(t,this.stepFields(t).some(i=>i.getError())?"error":"done")};if(this.cfg().steps.some(t=>t.validate)){if(this.pending||this.emit("before-submit")===!1||!this.validate())return e(),!1;let t=this.index;return(async()=>{for(let s=0;s<this.real();s++)if(!await this.check(s)){if(this.index!==t||this.destroyed)return;s!==t&&this.body.setActiveItem(s),this.stepFields(s).find(r=>r.getError())?.focus();return}e();let i=this.getValues();this.emit("submit",i),this.emit("finish",i)})(),!1}let n=super.submit();return e(),n&&this.emit("finish",this.getValues()),n}reset(){this.stop(),this.notes=[],super.reset(),this.clearErrors();for(let e=0;e<this.count();e++)this.stepper.setStepState(e,"pending");this.index!==0&&this.body.setActiveItem(0),this.showNote()}};y("stepform",m);export{m as a};
3
+ //# sourceMappingURL=chunk-NEVDHDJ4.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/form/stepform/stepform.ts"],
4
+ "sourcesContent": ["import { Form, type FormConfig } from '../form/form';\nimport { Container, type ContainerConfig } from '../../../core/container';\nimport { Component } from '../../../core/component';\nimport { Field } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport type { LayoutSpec } from '../../../layout/layout';\nimport { Stepper } from '../../navigation/stepper/stepper';\nimport { Button } from '../../base/button/button';\nimport { Toolbar } from '../../layout/toolbar/toolbar';\nimport '../../layout/container/container';\n\naddMessages('en', {\n stepBack: 'Back',\n stepNext: 'Next',\n stepFinish: 'Finish',\n stepReview: 'Review',\n});\naddMessages('pt-BR', {\n stepBack: 'Voltar',\n stepNext: 'Pr\u00F3ximo',\n stepFinish: 'Concluir',\n stepReview: 'Revis\u00E3o',\n});\n\nexport interface FormStep {\n title: string;\n description?: string;\n icon?: string;\n /** May be left alone: the stepper says \"optional\" (its fields are still validated if filled wrongly). */\n optional?: boolean;\n items: ContainerConfig['items'];\n /** Default: two columns (one on a phone). */\n layout?: LayoutSpec;\n /**\n * A check that may ask the server (an email already taken, a free slug), run when leaving the step forward and on Finish.\n * Return `true`, a message for the whole step, or `{ field: message }`. The signal aborts when the user goes elsewhere.\n */\n validate?: (values: Record<string, any>, form: StepForm, signal: AbortSignal) => StepCheck | Promise<StepCheck>;\n}\n\n/** The result of a step's `validate`: ok, a message for the whole step, or messages per field name. */\nexport type StepCheck = true | string | Record<string, string>;\n\nexport interface StepFormConfig extends FormConfig {\n steps: FormStep[];\n /** Moving forward validates the steps on the way. `false` lets the user click any step. Default true. */\n linear?: boolean;\n /** Adds a last \"Review\" step with a summary of the values; a function renders the summary yourself. */\n review?: boolean | ((values: Record<string, any>, form: StepForm) => string | Node);\n reviewTitle?: string;\n backText?: string;\n nextText?: string;\n finishText?: string;\n /** Shows a Cancel button (fires `cancel`). */\n cancelText?: string;\n /** On a new step, focus its first field (a phone keyboard pops up). Default false: the step panel gets the focus. */\n autoFocus?: boolean;\n}\n\n/** The summary pane of the review step. */\nclass ReviewPane extends Component {\n protected override baseCls = 'op-stepform__review';\n setContent(nodes: Array<Node | string>) {\n this.el.replaceChildren(...nodes);\n }\n}\n\n/** One form, several steps: a Stepper on top, one step at a time, Back / Next / Finish, validation per step and an optional review. */\nexport class StepForm extends Form {\n protected override baseCls = 'op-form op-stepform';\n private stepper!: Stepper;\n private body!: Container;\n private pane?: ReviewPane;\n private backBtn!: Button;\n private nextBtn!: Button;\n private finishBtn!: Button;\n private index = 0;\n /** The step check in flight (Next waits for it; going elsewhere aborts it). */\n private pending?: AbortController;\n /** Each step's general message (from its `validate`), shown in one alert line above the steps. */\n private notes: string[] = [];\n private noteEl?: HTMLElement;\n\n constructor(config: StepFormConfig) {\n let me!: StepForm;\n const steps = config.steps ?? [];\n const review = config.review ? new ReviewPane() : undefined;\n const stepper = new Stepper({ steps: [...steps.map(({ title, description, icon, optional }) => ({ title, description, icon, optional })), ...(review ? [{ title: config.reviewTitle ?? t('stepReview') }] : [])] });\n const panels = [\n ...steps.map((s) => ({ type: 'container', title: s.title, cls: 'op-stepform__step', layout: s.layout ?? { type: 'grid', columns: 2, gap: 12 }, items: s.items })),\n ...(review ? [{ type: 'container', title: config.reviewTitle ?? t('stepReview'), cls: 'op-stepform__step', items: [review] }] : []),\n ];\n const body = new Container({ cls: 'op-stepform__body', flex: 1, layout: { type: 'card' }, items: panels });\n const backBtn = new Button({ text: config.backText ?? t('stepBack'), handler: () => me.back() });\n const nextBtn = new Button({ text: config.nextText ?? t('stepNext'), variant: 'primary', handler: () => me.next() });\n const finishBtn = new Button({ text: config.finishText ?? t('stepFinish'), variant: 'primary', htmlType: 'submit' });\n const cancel = config.cancelText ? [new Button({ text: config.cancelText, variant: 'ghost', handler: () => me.emit('cancel') })] : [];\n const footer = new Toolbar({ cls: 'op-stepform__footer', items: [...cancel, '->', backBtn, nextBtn, finishBtn] });\n super({ ...config, layout: { type: 'vbox' }, items: [stepper, body, footer] });\n me = this;\n Object.assign(this, { stepper, body, pane: review, backBtn, nextBtn, finishBtn });\n stepper.on('before-select', (i: number) => (me.goTo(i), false));\n body.on('activate', () => me.onActivate());\n this.own(() => this.stop());\n }\n\n private cfg(): StepFormConfig {\n return this.config as unknown as StepFormConfig;\n }\n\n private count(): number {\n return this.body.items.length;\n }\n private real(): number {\n return this.count() - (this.pane ? 1 : 0);\n }\n\n getStep(): number {\n return this.index;\n }\n getStepCount(): number {\n return this.count();\n }\n getStepper(): Stepper {\n return this.stepper;\n }\n\n private stepFields(i: number): Field<any>[] {\n const step = this.body.items[i];\n return step instanceof Container ? (step.query((c) => c instanceof Field) as Field<any>[]) : [];\n }\n\n /** Validates one step's fields (marks the errors, sets its state on the stepper). */\n validateStep(i: number): boolean {\n if (i >= this.real()) return true;\n const bad = this.stepFields(i).filter((f) => !f.validate());\n this.stepper.setStepState(i, bad.length ? 'error' : 'done');\n return !bad.length;\n }\n\n /** Sets step `i`'s general message ('' clears it); it shows while that step is the current one. */\n private note(i: number, text: string): void {\n this.notes[i] = text;\n if (i === this.index) this.showNote();\n }\n private showNote(): void {\n if (!this.rendered) return;\n const text = this.notes[this.index] ?? '';\n if (!this.noteEl) {\n if (!text) return;\n this.body.el.before((this.noteEl = h('div', 'op-stepform__note', { role: 'alert' })));\n }\n this.noteEl.textContent = text;\n this.noteEl.hidden = !text;\n }\n\n /** Busy while a step check runs: Next and Finish show their loading state. */\n private busy(on: boolean): void {\n this.el.classList.toggle('is-validating', on);\n this.nextBtn.setLoading(on);\n this.finishBtn.setLoading(on);\n }\n /** Cancels the step check in flight, if any. */\n private stop(): void {\n if (!this.pending) return;\n this.pending.abort();\n this.pending = undefined;\n this.busy(false);\n }\n\n /** Runs step `k`'s `validate`. A failure marks the fields or shows the step's message. Resolves false when aborted too. */\n private async check(k: number): Promise<boolean> {\n const fn = this.cfg().steps[k]?.validate;\n if (!fn) return true;\n this.stop();\n const ctl = (this.pending = new AbortController());\n this.busy(true);\n let res: StepCheck;\n try {\n res = await fn(this.getValues(), this, ctl.signal);\n } catch (e) {\n res = String((e as Error)?.message ?? e); // a failing check is a message, not a broken wizard\n }\n if (ctl.signal.aborted) return false; // gone elsewhere (or destroyed) meanwhile\n this.pending = undefined;\n this.busy(false);\n const ok = res === true || res == null;\n this.note(k, typeof res === 'string' ? res : '');\n if (!ok && typeof res === 'object') for (const [name, msg] of Object.entries(res)) this.getField(name)?.setError(msg);\n if (!ok) this.stepper.setStepState(k, 'error');\n return ok;\n }\n\n /**\n * Moves to a step. Forward with `linear` validates the steps on the way (their fields, then their `validate`) and stops\n * at the first invalid one. Resolves with whether it got there; without a step `validate` on the way it moves at once.\n */\n goTo(j: number): Promise<boolean> {\n if (j < 0 || j >= this.count() || j === this.index) return Promise.resolve(false);\n if (this.pending && j > this.index) return Promise.resolve(false); // a check is running: a second Next does nothing\n this.stop(); // going back cancels it\n if (this.emit('before-step-change', this.index, j) === false) return Promise.resolve(false);\n const from = this.index;\n const land = (target: number) => {\n if (this.index !== from) return false; // the user moved on while a check was running\n if (target !== this.index) this.body.setActiveItem(target);\n if (target !== j) this.stepFields(target).find((f) => f.getError())?.focus();\n return target === j;\n };\n if (this.cfg().linear === false || j < from) return Promise.resolve(land(j));\n const walk = (k: number): boolean | Promise<boolean> => {\n for (; k < j; k++) {\n if (!this.validateStep(k)) return land(k);\n if (this.cfg().steps[k]?.validate) return this.check(k).then((ok) => (ok ? walk(k + 1) : land(k)));\n }\n return land(j);\n };\n return Promise.resolve(walk(from));\n }\n next(): Promise<boolean> {\n return this.goTo(this.index + 1);\n }\n back(): Promise<boolean> {\n return this.goTo(this.index - 1);\n }\n\n /** The card layout changed the visible step (by `goTo`, or because `validate` brought an invalid field into view). */\n private onActivate(): void {\n const i = this.body.items.indexOf(this.body.getActiveItem()!);\n if (i < 0) return;\n const from = this.index;\n this.index = i;\n this.stepper.setActive(i);\n const last = this.count() - 1;\n this.backBtn.config.hidden = i === 0;\n this.nextBtn.config.hidden = i === last;\n this.finishBtn.config.hidden = i !== last;\n for (const [b, hide] of [[this.backBtn, i === 0], [this.nextBtn, i === last], [this.finishBtn, i !== last]] as const) if (b.rendered) b.el.hidden = hide;\n if (this.pane && i === last) this.refreshReview();\n this.showNote();\n if (i !== from) {\n this.emit('step-change', i, from);\n if (this.rendered && this.el.isConnected && !this.stepFields(i).some((f) => f.getError())) {\n const panel = this.body.items[i]?.el;\n if ((this.config as StepFormConfig).autoFocus) this.stepFields(i)[0]?.focus();\n else if (panel) ((panel.tabIndex = -1), panel.focus());\n }\n }\n }\n\n private refreshReview(): void {\n const values = this.getValues();\n const fn = this.cfg().review;\n if (typeof fn === 'function') return this.pane!.setContent([fn(values, this)]);\n const out: Array<Node | string> = [];\n for (let i = 0; i < this.real(); i++) {\n const rows = this.stepFields(i).filter((f) => f.name);\n if (!rows.length) continue;\n out.push(h('h3', 'op-stepform__review-title', {}, String((this.body.items[i].config as { title?: string }).title ?? '')));\n out.push(h('dl', 'op-stepform__review-list', {}, ...rows.flatMap((f) => [h('dt', '', {}, f.config.label ?? (f.config as { boxLabel?: string }).boxLabel ?? f.name!), h('dd', '', {}, this.show_(f))])));\n }\n this.pane!.setContent(out);\n }\n\n /** What the user sees for a field (its display text; ticks for booleans, dots for passwords; one line per FieldList row). */\n private show_(f: Field<any>): string {\n const fl = f as Field<any> & { getRows?(): unknown[]; getRowFields(i: number): Field<any>[] };\n if (fl.getRows)\n return fl.getRows().map((_, i) => fl.getRowFields(i).map((x) => this.show_(x)).filter((t) => t !== '\u2014').join(' \u00B7 ')).join('\\n') || '\u2014';\n const v = f.getValue();\n if (typeof v === 'boolean') return v ? '\u2713' : '\u2014';\n if ((f.config as { inputType?: string }).inputType === 'password') return v ? '\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022' : '\u2014';\n const text = f.getDisplayText();\n if (text) return text;\n const flat = (x: unknown): string => (Array.isArray(x) ? x.map(flat).join(', ') : x && typeof x === 'object' ? Object.values(x).map(flat).join(' \u2013 ') : `${x ?? ''}`);\n return flat(v) || '\u2014';\n }\n\n /** Enter and the Finish button: Next on every step but the last; on the last, validate everything and `finish`. */\n override submit(): boolean {\n if (this.index < this.count() - 1) {\n void this.next();\n return false;\n }\n const states = () => {\n for (let i = 0; i < this.real(); i++) this.stepper.setStepState(i, this.stepFields(i).some((f) => f.getError()) ? 'error' : 'done');\n };\n // with step checks, Finish waits for them (it returns false now; `finish` fires when they pass)\n if (this.cfg().steps.some((s) => s.validate)) {\n if (this.pending || this.emit('before-submit') === false || !this.validate()) return states(), false;\n const at = this.index;\n void (async () => {\n for (let k = 0; k < this.real(); k++) {\n if (!(await this.check(k))) {\n if (this.index !== at || this.destroyed) return; // the user went back: the check was aborted\n if (k !== at) this.body.setActiveItem(k);\n this.stepFields(k).find((f) => f.getError())?.focus();\n return;\n }\n }\n states();\n const values = this.getValues();\n this.emit('submit', values);\n this.emit('finish', values);\n })();\n return false;\n }\n const ok = super.submit();\n states();\n if (ok) this.emit('finish', this.getValues());\n return ok;\n }\n\n /** Clears the values and goes back to the first step. */\n override reset(): void {\n this.stop();\n this.notes = [];\n super.reset();\n this.clearErrors();\n for (let i = 0; i < this.count(); i++) this.stepper.setStepState(i, 'pending');\n if (this.index !== 0) this.body.setActiveItem(0);\n this.showNote();\n }\n}\nregister('stepform', StepForm);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "ReviewPane", "Component", "nodes", "StepForm", "Form", "config", "me", "steps", "review", "stepper", "Stepper", "title", "description", "icon", "optional", "t", "panels", "s", "body", "Container", "backBtn", "Button", "nextBtn", "finishBtn", "cancel", "footer", "Toolbar", "i", "step", "c", "Field", "bad", "f", "text", "on", "k", "fn", "ctl", "res", "e", "ok", "name", "msg", "j", "from", "land", "target", "walk", "last", "b", "hide", "panel", "values", "out", "rows", "fl", "_", "x", "v", "flat", "states", "at", "register"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{c as d}from"./chunk-ZWNQREWS.js";import{a as c}from"./chunk-2ZRNGG2N.js";import{c as x}from"./chunk-4EZJ5FKJ.js";import{b as n}from"./chunk-PZSHOSOS.js";import{a as l}from"./chunk-TIPK3SCJ.js";var a=class extends d{baseCls="op-inputgroup";affixes=[];getField(){return this.query(i=>i instanceof c)[0]}onRender(){super.onRender(),this.paint();for(let i of["invalid","valid"])this.getField()?.on(i,()=>this.describe())}describe(){let i=this.getField()?.el.querySelector("[aria-invalid]");if(!i)return;let t=[...(i.getAttribute("aria-describedby")??"").split(" ").filter(r=>r&&!r.startsWith(`${this.id}-`)),...this.affixes.filter(r=>r.tagName==="SPAN").map(r=>r.id)];t.length?i.setAttribute("aria-describedby",t.join(" ")):i.removeAttribute("aria-describedby")}paint(){let i=this.getField();if(!i)return;this.affixes.forEach(e=>e.remove()),this.affixes=[];let o=i.el.querySelector(".op-field__control"),t=o.querySelector(":scope > .op-inputgroup__row");t||(t=n("div","op-inputgroup__row"),t.append(...Array.from(o.childNodes)),o.append(t));let r=(e,p)=>{if(typeof e=="string")return n("span",`op-inputgroup__affix op-inputgroup__affix--${p}`,{id:`${this.id}-${p}`},e);let u=n("button",`op-inputgroup__affix op-inputgroup__btn op-inputgroup__affix--${p}`,{type:"button","aria-label":e.ariaLabel??null},e.icon?x(e.icon):"",e.text?n("span","",{},e.text):"");return this.listen(u,"click",()=>e.handler?.(i)),u},{prefix:f,suffix:s}=this.config;f!=null&&t.prepend(this.track(r(f,"prefix"))),s!=null&&t.append(this.track(r(s,"suffix"))),i.el.classList.toggle("has-prefix",f!=null),i.el.classList.toggle("has-suffix",s!=null),this.describe()}track(i){return this.affixes.push(i),i}setPrefix(i){this.config.prefix=i,this.rendered&&this.paint()}setSuffix(i){this.config.suffix=i,this.rendered&&this.paint()}};l("inputgroup",a);export{a};
2
- //# sourceMappingURL=chunk-5QUY72FX.js.map
1
+ import{c as x}from"./chunk-DIOJGTUN.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as c}from"./chunk-QVBDBGS4.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as n}from"./chunk-PZSHOSOS.js";var a=class extends d{baseCls="op-inputgroup";affixes=[];getField(){return this.query(i=>i instanceof c)[0]}onRender(){super.onRender(),this.paint();for(let i of["invalid","valid"])this.getField()?.on(i,()=>this.describe())}describe(){let i=this.getField()?.el.querySelector("[aria-invalid]");if(!i)return;let t=[...(i.getAttribute("aria-describedby")??"").split(" ").filter(r=>r&&!r.startsWith(`${this.id}-`)),...this.affixes.filter(r=>r.tagName==="SPAN").map(r=>r.id)];t.length?i.setAttribute("aria-describedby",t.join(" ")):i.removeAttribute("aria-describedby")}paint(){let i=this.getField();if(!i)return;this.affixes.forEach(e=>e.remove()),this.affixes=[];let o=i.el.querySelector(".op-field__control"),t=o.querySelector(":scope > .op-inputgroup__row");t||(t=n("div","op-inputgroup__row"),t.append(...Array.from(o.childNodes)),o.append(t));let r=(e,p)=>{if(typeof e=="string")return n("span",`op-inputgroup__affix op-inputgroup__affix--${p}`,{id:`${this.id}-${p}`},e);let u=n("button",`op-inputgroup__affix op-inputgroup__btn op-inputgroup__affix--${p}`,{type:"button","aria-label":e.ariaLabel??null},e.icon?x(e.icon):"",e.text?n("span","",{},e.text):"");return this.listen(u,"click",()=>e.handler?.(i)),u},{prefix:f,suffix:s}=this.config;f!=null&&t.prepend(this.track(r(f,"prefix"))),s!=null&&t.append(this.track(r(s,"suffix"))),i.el.classList.toggle("has-prefix",f!=null),i.el.classList.toggle("has-suffix",s!=null),this.describe()}track(i){return this.affixes.push(i),i}setPrefix(i){this.config.prefix=i,this.rendered&&this.paint()}setSuffix(i){this.config.suffix=i,this.rendered&&this.paint()}};l("inputgroup",a);export{a};
2
+ //# sourceMappingURL=chunk-NWHH3CYH.js.map
@@ -0,0 +1,2 @@
1
+ import{c as d}from"./chunk-BQEFLPDA.js";import{a as r}from"./chunk-QVBDBGS4.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{e as u}from"./chunk-PZSHOSOS.js";import{b as c}from"./chunk-V5G5JECN.js";var h=class extends d{baseCls="op-form";tag="form";ruledOut=new Set;dirty=!1;constructor(t={}){let e=[...t.items??[]];t.tabs&&e.push({type:"tabs",flex:1,items:t.tabs.map(i=>({type:"container",title:i.title,icon:i.icon,cls:"op-form__tab",layout:i.layout??{type:"grid",columns:2,gap:12},items:i.items}))}),super({...t,items:e})}build(){let t=super.build();return t.setAttribute("novalidate",""),t}onRender(){if(this.config.layout??=this.config.columns?{type:"grid",columns:this.config.columns}:{type:"vbox"},this.config.labelWidth!=null&&this.setLabelWidth(this.config.labelWidth),this.config.labelPos)for(let t of this.getFields())t.config.labelPos??=this.config.labelPos;super.onRender(),this.config.readonly&&this.setReadonly(!0);for(let t of this.getFields())for(let e of["invalid","valid","dirty-change","change"])t.on(e,()=>this.syncTabs());for(let t of this.getFields())t.on("change",()=>this.changed());for(let t of this.getFields())t.on("dirty-change",()=>this.changed());this.applyRules(),this.listen(this.el,"submit",t=>{t.preventDefault(),this.submit()}),this.listen(this.el,"keydown",t=>{let e=t.target;t.key==="Enter"&&e instanceof HTMLInputElement&&!t.defaultPrevented&&e.type!=="button"&&(t.preventDefault(),this.submit())})}getFields(){return this.query(t=>t instanceof r)}getField(t){return this.getFields().find(e=>e.name===t)}getValues(t={}){let e={};for(let i of this.counted())i.name&&(!t.dirtyOnly||i.isDirty())&&c(e,i.name,i.getValue());return e}counted(){return this.getFields().filter(t=>{for(let e=t;e&&e!==this;e=e.parent)if(this.ruledOut.has(e))return!1;return!0})}changed(){this.applyRules();let t=this.isDirty();t!==this.dirty&&this.emit("dirty-change",this.dirty=t)}applyRules(){let t={};for(let e of this.getFields())e.name&&c(t,e.name,e.getValue());for(let e of this.query(i=>!!(i.config.showIf||i.config.enableIf))){let{showIf:i,enableIf:s}=e.config;if(i){let a=!!i(t);if(a===this.ruledOut.has(e))if(a)this.ruledOut.delete(e),e.show();else{this.ruledOut.add(e),e.hide();for(let l of e instanceof r?[e]:e instanceof d?e.query(o=>o instanceof r):[])l.clearError()}}s&&e.setDisabled(!s(t))}}focusField(t){this.reveal(t),t.focus()}setValues(t){for(let e of this.getFields())e.fillFrom(t)}load(t){this.setValues("data"in t&&"get"in t?t.data:t),this.markClean(),this.clearErrors(),this.emit("load",t)}reveal(t){let e=t;for(;e.parent;){let i=e.parent;i.items?.includes(e)&&(typeof i.setActive=="function"?i.setActive(e):i.layout?.activate&&i.layout.activate(i,e)),e=i}}syncTabs(){for(let t of this.query(e=>typeof e.setTabState=="function"))for(let e of t.items){let i=e instanceof d?e.query(s=>s instanceof r):[];t.setTabState(e,{errors:i.filter(s=>s.getError()).length,dirty:i.some(s=>s.isDirty())})}}updateRecord(t){let e=this.getValues(),i=new Set(this.getFields().filter(s=>s.name&&s.isDirty()).map(s=>s.name.split(".")[0]));for(let s of i)t.set(s,e[s])}markClean(){this.getFields().forEach(t=>t.markClean()),this.syncTabs()}reset(){this.getFields().forEach(t=>t.reset()),this.syncTabs()}isDirty(){return this.getFields().some(t=>t.isDirty())}isValid(){return this.counted().every(t=>t.config.disabled||t.isValid())}clearErrors(){this.getFields().forEach(t=>t.clearError()),this.syncTabs()}validate(){let t=this.counted().filter(i=>!i.config.disabled);for(let i of this.getFields())t.includes(i)||i.clearError();let e=t.filter(i=>!i.validate());return this.syncTabs(),e.length&&(this.reveal(e[0]),e[0].focus(),this.emit("invalid",e)),this.el.classList.toggle("is-invalid",!!e.length),!e.length}setErrors(t){this.clearErrors();let e=[],i;for(let[s,a]of Object.entries(t)){let l=this.getFields().filter(n=>n.name),o=l.find(n=>n.name===s)??l.filter(n=>s.startsWith(n.name+".")).sort((n,g)=>g.name.length-n.name.length)[0];o&&o.render();let f=o?.name===s?o:o?.fieldAt?.(s.slice(o.name.length+1));f?(f.setError(a),i??={host:o,target:f}):e.push(s)}return this.syncTabs(),i&&(this.el.classList.add("is-invalid"),this.emit("invalid",this.getFields().filter(s=>s.getError())),this.reveal(i.host),i.target.focus()),e}submit(){return this.emit("before-submit")===!1||!this.validate()?!1:(this.emit("submit",this.getValues()),!0)}setLabelWidth(t){this.config.labelWidth=t,this.rendered&&this.el.style.setProperty("--op-field-label-width",u(t))}setReadonly(t){this.config.readonly=t,this.getFields().forEach(e=>e.setReadonly(t))}};m("form",h);export{h as a};
2
+ //# sourceMappingURL=chunk-OADWLPSF.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/form/form/form.ts"],
4
+ "sourcesContent": ["import { Container, type ContainerConfig } from '../../../core/container';\nimport { Field } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport type { Model } from '../../../data/model';\nimport type { Component } from '../../../core/component';\nimport type { LayoutSpec } from '../../../layout/layout';\nimport { px } from '../../../core/dom';\nimport { setPath } from '../../../core/path';\n\nexport interface FormTab {\n title: string;\n icon?: string;\n items: ContainerConfig['items'];\n /** Default: two columns (one on a phone). */\n layout?: LayoutSpec;\n}\n\nexport interface FormConfig extends ContainerConfig {\n /** Shortcut: the fields in tabs, still one form (one `getValues`, one `validate`, one dirty). */\n tabs?: FormTab[];\n /** Default `labelPos` for fields that do not set their own. */\n labelPos?: 'top' | 'left';\n /** Width of the labels on the left (`labelPos: 'left'`), so they line up in a column. Number = px. */\n labelWidth?: number | string;\n /** Shortcut for a responsive grid layout (one column on narrow screens); items take `colspan` (a number or `'full'`). */\n columns?: number;\n readonly?: boolean;\n}\n\nexport class Form extends Container<FormConfig> {\n protected override baseCls = 'op-form';\n protected override tag = 'form' as const;\n /** Components hidden by their `showIf` rule: their fields do not count (no validation, not in `getValues`). */\n private ruledOut = new Set<Component>();\n private dirty = false;\n\n constructor(config: FormConfig = {}) {\n const items = [...(config.items ?? [])];\n if (config.tabs) {\n items.push({\n type: 'tabs',\n flex: 1,\n items: config.tabs.map((t) => ({ type: 'container', title: t.title, icon: t.icon, cls: 'op-form__tab', layout: t.layout ?? { type: 'grid', columns: 2, gap: 12 }, items: t.items })),\n });\n }\n super({ ...config, items });\n }\n\n protected override build() {\n const el = super.build();\n el.setAttribute('novalidate', '');\n return el;\n }\n\n protected override onRender() {\n this.config.layout ??= this.config.columns ? { type: 'grid', columns: this.config.columns } : { type: 'vbox' };\n if (this.config.labelWidth != null) this.setLabelWidth(this.config.labelWidth);\n if (this.config.labelPos) for (const f of this.getFields()) f.config.labelPos ??= this.config.labelPos;\n super.onRender();\n if (this.config.readonly) this.setReadonly(true);\n for (const f of this.getFields()) for (const ev of ['invalid', 'valid', 'dirty-change', 'change']) f.on(ev, () => this.syncTabs());\n for (const f of this.getFields()) f.on('change', () => this.changed());\n for (const f of this.getFields()) f.on('dirty-change', () => this.changed());\n this.applyRules();\n // Native submit (a `type=submit` button) and Enter inside a single-line field both go through submit().\n this.listen(this.el, 'submit', (e: Event) => {\n e.preventDefault();\n this.submit();\n });\n this.listen(this.el, 'keydown', (e: KeyboardEvent) => {\n const t = e.target as HTMLElement;\n if (e.key === 'Enter' && t instanceof HTMLInputElement && !e.defaultPrevented && t.type !== 'button') {\n e.preventDefault();\n this.submit();\n }\n });\n }\n\n getFields(): Field<any>[] {\n return this.query((c) => c instanceof Field) as Field<any>[];\n }\n\n getField(name: string): Field<any> | undefined {\n return this.getFields().find((f) => f.name === name);\n }\n\n /** Nested object built from field names (`address.city` \u2192 `{ address: { city } }`). Fields hidden by `showIf` are left out. */\n getValues(opts: { dirtyOnly?: boolean } = {}): Record<string, any> {\n const out: Record<string, any> = {};\n for (const f of this.counted()) if (f.name && (!opts.dirtyOnly || f.isDirty())) setPath(out, f.name, f.getValue());\n return out;\n }\n\n /** The fields that count: not inside something its `showIf` rule hid. */\n private counted(): Field<any>[] {\n return this.getFields().filter((f) => {\n for (let c: Component | undefined = f; c && c !== this; c = c.parent as Component | undefined) if (this.ruledOut.has(c)) return false;\n return true;\n });\n }\n\n /** A field changed: rerun the `showIf`/`enableIf` rules and say when the form as a whole became (un)changed. */\n private changed(): void {\n this.applyRules();\n const d = this.isDirty();\n if (d !== this.dirty) this.emit('dirty-change', (this.dirty = d));\n }\n\n /** Shows/hides and enables/disables every item that has a rule, from the current values (hidden fields included). */\n applyRules(): void {\n const values: Record<string, any> = {};\n for (const f of this.getFields()) if (f.name) setPath(values, f.name, f.getValue());\n for (const c of this.query((x) => !!(x.config.showIf || x.config.enableIf))) {\n const { showIf, enableIf } = c.config;\n if (showIf) {\n const show = !!showIf(values);\n if (show === this.ruledOut.has(c)) {\n if (show) (this.ruledOut.delete(c), c.show());\n else {\n this.ruledOut.add(c);\n c.hide();\n // what nobody can see has nothing to fix: its errors go with it\n for (const f of c instanceof Field ? [c] : c instanceof Container ? (c.query((x) => x instanceof Field) as Field<any>[]) : []) f.clearError();\n }\n }\n }\n if (enableIf) c.setDisabled(!enableIf(values));\n }\n }\n\n /** Brings a field into view (opening its tab or step) and focuses it. */\n focusField(field: Field<any>): void {\n this.reveal(field);\n field.focus();\n }\n\n /** Sets the fields present in `values` (silently). */\n setValues(values: Record<string, any>): void {\n for (const f of this.getFields()) f.fillFrom(values);\n }\n\n /** Fills the form from a plain object or a Model, and makes it the \"clean\" state. */\n load(record: Record<string, any> | Model): void {\n this.setValues('data' in record && 'get' in record ? (record as Model).data : record);\n this.markClean();\n this.clearErrors();\n this.emit('load', record);\n }\n\n /** Brings a field into view: asks every ancestor that shows one child at a time (Tabs, a card layout) to show the branch. */\n protected reveal(field: Component): void {\n let node: Component = field;\n while (node.parent) {\n const p = node.parent as any;\n if (p.items?.includes(node)) {\n if (typeof p.setActive === 'function') p.setActive(node);\n else if (p.layout?.activate) p.layout.activate(p, node);\n }\n node = p;\n }\n }\n\n /** Error counts and \"changed\" dots on the headers of every Tabs inside the form. */\n protected syncTabs(): void {\n for (const tabs of this.query((c) => typeof (c as any).setTabState === 'function') as any[]) {\n for (const panel of tabs.items as Component[]) {\n const fields = panel instanceof Container ? (panel.query((c) => c instanceof Field) as Field<any>[]) : [];\n tabs.setTabState(panel, { errors: fields.filter((f) => f.getError()).length, dirty: fields.some((f) => f.isDirty()) });\n }\n }\n }\n\n /** Writes the changed fields back into a Model. */\n updateRecord(model: Model): void {\n const all = this.getValues();\n const keys = new Set(this.getFields().filter((f) => f.name && f.isDirty()).map((f) => f.name!.split('.')[0]));\n for (const k of keys) model.set(k, all[k]);\n }\n\n markClean(): void {\n this.getFields().forEach((f) => f.markClean());\n this.syncTabs();\n }\n reset(): void {\n this.getFields().forEach((f) => f.reset());\n this.syncTabs();\n }\n isDirty(): boolean {\n return this.getFields().some((f) => f.isDirty());\n }\n isValid(): boolean {\n return this.counted().every((f) => f.config.disabled || f.isValid());\n }\n clearErrors(): void {\n this.getFields().forEach((f) => f.clearError());\n this.syncTabs();\n }\n\n /** Validates every field that counts (marks errors) and focuses the first invalid one. */\n validate(): boolean {\n // a hidden or disabled field is not validated: the user could not fix it\n const counted = this.counted().filter((f) => !f.config.disabled);\n for (const f of this.getFields()) if (!counted.includes(f)) f.clearError();\n const bad = counted.filter((f) => !f.validate());\n this.syncTabs();\n if (bad.length) {\n this.reveal(bad[0]); // the tab / step that holds it comes forward first\n bad[0].focus();\n this.emit('invalid', bad);\n }\n this.el.classList.toggle('is-invalid', !!bad.length);\n return !bad.length;\n }\n\n /**\n * Marks server-side errors by dotted path (`slug`, `items.0.name` for a row of a FieldList), brings the first into\n * view (its tab or step) and focuses it. Returns the paths that matched no field, for the caller to show some other way.\n */\n setErrors(errors: Record<string, string>): string[] {\n this.clearErrors();\n const unmatched: string[] = [];\n let first: { host: Field<any>; target: Field<any> } | undefined;\n for (const [path, msg] of Object.entries(errors)) {\n const fields = this.getFields().filter((f) => f.name);\n const host = fields.find((f) => f.name === path) ?? fields.filter((f) => path.startsWith(f.name + '.')).sort((a, b) => b.name!.length - a.name!.length)[0];\n if (host) host.render();\n const target = host?.name === path ? host : (host as any)?.fieldAt?.(path.slice(host!.name!.length + 1));\n if (!target) unmatched.push(path);\n else {\n target.setError(msg);\n first ??= { host: host!, target };\n }\n }\n this.syncTabs();\n if (first) {\n this.el.classList.add('is-invalid');\n this.emit('invalid', this.getFields().filter((f) => f.getError()));\n this.reveal(first.host);\n first.target.focus();\n }\n return unmatched;\n }\n\n submit(): boolean {\n if (this.emit('before-submit') === false) return false;\n if (!this.validate()) return false;\n this.emit('submit', this.getValues());\n return true;\n }\n\n /** Width of the labels on the left (number = px); they line up in a column. */\n setLabelWidth(width: number | string): void {\n this.config.labelWidth = width;\n if (this.rendered) this.el.style.setProperty('--op-field-label-width', px(width));\n }\n\n setReadonly(readonly: boolean): void {\n this.config.readonly = readonly;\n this.getFields().forEach((f) => f.setReadonly(readonly));\n }\n}\nregister('form', Form);\n"],
5
+ "mappings": "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",
6
+ "names": ["Form", "Container", "config", "items", "t", "el", "f", "ev", "e", "c", "Field", "name", "opts", "out", "setPath", "d", "values", "x", "showIf", "enableIf", "show", "field", "record", "node", "p", "tabs", "panel", "fields", "model", "all", "keys", "k", "counted", "bad", "errors", "unmatched", "first", "path", "msg", "host", "a", "b", "target", "width", "px", "readonly", "register"]
7
+ }
@@ -1,2 +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
1
+ import{a as f}from"./chunk-GEJKFE4X.js";import{a as h}from"./chunk-LHWY6G6Q.js";import{a as u}from"./chunk-6NP4AEV4.js";import{c}from"./chunk-DIOJGTUN.js";import{f as o,g as p}from"./chunk-2GKIF7A6.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{f as n}from"./chunk-S4QD5NID.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-OB3VIRQR.js.map
@@ -1,2 +1,2 @@
1
- import{c as r}from"./chunk-4EZJ5FKJ.js";import{a as o}from"./chunk-A2NKDOYN.js";import{b as t}from"./chunk-PZSHOSOS.js";import{a as i}from"./chunk-TIPK3SCJ.js";var n=class extends o{baseCls="op-badge";tag="span";textEl;onRender(){let e=this.config;e.dot&&this.el.append(t("span","op-badge__dot",{"aria-hidden":"true"})),e.icon&&this.el.append(r(e.icon)),this.textEl=this.el.appendChild(t("span","op-badge__text")),this.setText(e.text??""),this.setTone(e.tone??"neutral")}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=String(e))}setTone(e){this.config.tone=e,this.rendered&&(this.el.className=this.el.className.replace(/\bop-badge--\w+/g,"").trim(),this.el.classList.add(`op-badge--${e}`))}};i("badge",n);export{n as a};
2
- //# sourceMappingURL=chunk-MB3MU6HR.js.map
1
+ import{c as r}from"./chunk-DIOJGTUN.js";import{a as i}from"./chunk-TIPK3SCJ.js";import{f as o}from"./chunk-UDXO3KM3.js";import{b as t}from"./chunk-PZSHOSOS.js";var n=class extends o{baseCls="op-badge";tag="span";textEl;onRender(){let e=this.config;e.dot&&this.el.append(t("span","op-badge__dot",{"aria-hidden":"true"})),e.icon&&this.el.append(r(e.icon)),this.textEl=this.el.appendChild(t("span","op-badge__text")),this.setText(e.text??""),this.setTone(e.tone??"neutral")}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=String(e))}setTone(e){this.config.tone=e,this.rendered&&(this.el.className=this.el.className.replace(/\bop-badge--\w+/g,"").trim(),this.el.classList.add(`op-badge--${e}`))}};i("badge",n);export{n as a};
2
+ //# sourceMappingURL=chunk-PGVLRMTQ.js.map
@@ -0,0 +1,2 @@
1
+ import{c}from"./chunk-DIOJGTUN.js";import{b as g,c as y}from"./chunk-676AKAGF.js";import{b}from"./chunk-VV7CFMPZ.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{c as m,f as v}from"./chunk-UDXO3KM3.js";import{b as o}from"./chunk-PZSHOSOS.js";import{e as d,f as h}from"./chunk-S4QD5NID.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 E=()=>/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent);function C(a,t){let e=t.toLowerCase().split("+"),i=e.pop(),n=r=>e.includes(r),s=E();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 _=(a,t)=>{let e=0;for(let i of a)if(i===t[e]&&++e===t.length)return!0;return!t.length};function w(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&&_(e,s)?30:i.includes(s)?20:0;if(!l)return 0;n+=l}return n}function k(a,t){let e=t.toLowerCase().split(/\s+/).filter(Boolean),i=a.toLowerCase(),n=[];for(let l of e){let p=i.indexOf(l);p>=0&&n.push([p,p+l.length])}n.sort((l,p)=>l[0]-p[0]);let s=[],r=0;for(let[l,p]of n)l<r||(s.push(a.slice(r,l),o("mark","op-palette__mark",{},a.slice(l,p))),r=p);return s.push(a.slice(r)),s.filter(l=>l!=="")}var u=class extends v{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=>{!C(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",{},c("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,g(t,this.opener),this.release.push(y(t),b(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=>m(s.permission)&&!s.hidden?.()&&(!this.cat||s.category===this.cat)),e=this.query.trim();if(e)return t.map(s=>({c:s,s:w(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",{},c(s.icon)):o("span","op-palette__icon"),o("span","op-palette__text",{},o("span","op-palette__title",{},...k(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"},c("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=>m(i.permission)&&!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)}}};f("commandpalette",u);export{u as a};
2
+ //# sourceMappingURL=chunk-Q6FY4L2F.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 { allowed } from '../../../core/permission';\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 /** The command is left out while `setPermissionResolver` denies it. */\n permission?: 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) => allowed(c.permission) && !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) => allowed(c.permission) && !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", "allowed", "order", "rank", "lvl", "searching", "rows", "group", "item", "cats", "chip", "label", "cat", "row", "scroll", "on", "n", "kids", "err", "register"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as l}from"./chunk-EV73ADN2.js";import{c as a}from"./chunk-4EZJ5FKJ.js";import{b as s}from"./chunk-PZSHOSOS.js";import{a as h}from"./chunk-TIPK3SCJ.js";import{f as o}from"./chunk-MW3RWBZ7.js";var n=class extends l{baseCls="op-field op-textfield op-picker op-suggest";seq=0;abort;cancelWait;live;hasTrigger(){return!1}emptyValue(){return null}isEmpty(e){return e==null||e===""}createControl(){let e=super.createControl();return this.config.icon!==!1&&(e.classList.add("has-icon"),e.prepend(s("span","op-suggest__icon",{"aria-hidden":"true"},a(this.config.icon??"search")))),e.append(s("span","op-spinner op-picker__spinner",{"aria-hidden":"true"})),this.live=s("div","op-sr-only",{"aria-live":"polite"}),e.append(this.live),this.own(()=>this.abort?.abort()),e}onRender(){super.onRender(),this.config.store?.on("load",()=>this.showResults(this.items))}onType(e){if(this.cancelWait?.(),this.abort?.abort(),e.trim().length<(this.config.minChars??1))return this.items=[],this.refreshList(),this.setSearching(!1),this.close();this.cancelWait=this.later(()=>{this.search(e)},this.config.delay??250)}async search(e){if(this.emit("before-query",e)===!1)return;let i=++this.seq,c=this.abort=new AbortController;this.setSearching(!0),this.emit("query",e);try{let t=this.config,r;if(t.store?(await t.store.load({query:e}),r=t.store.getData()):r=await t.query?.(e,{signal:c.signal})??[],i!==this.seq)return;this.items=r.map(p=>this.toItem(p)),this.showResults(this.items,e),this.emit("load",this.items)}catch(t){if(i!==this.seq)return;this.setSearching(!1),this.close(),this.emit("error",t)}}showResults(e,i=this.input.value){this.setSearching(!1),this.typed=!0,this.refreshList(),this.list.setHighlight(this.config.highlight===!1?"":i),this.live.textContent=e.length?o("results",{n:e.length}):o("noResults"),document.activeElement===this.input&&this.open()}setSearching(e){this.el.classList.toggle("is-searching",e),this.input.setAttribute("aria-busy",String(e))}setQuery(e){this.config.query=e}clearSuggestions(){this.items=[],this.refreshList(),this.close()}pick(e){super.pick(e),this.list.setHighlight("")}};h("suggestfield",n);export{n as a};
2
- //# sourceMappingURL=chunk-TZOQWCVH.js.map
1
+ import{a as l}from"./chunk-L6DOWGBO.js";import{c as a}from"./chunk-DIOJGTUN.js";import{a as h}from"./chunk-TIPK3SCJ.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as o}from"./chunk-S4QD5NID.js";var n=class extends l{baseCls="op-field op-textfield op-picker op-suggest";seq=0;abort;cancelWait;live;hasTrigger(){return!1}emptyValue(){return null}isEmpty(e){return e==null||e===""}createControl(){let e=super.createControl();return this.config.icon!==!1&&(e.classList.add("has-icon"),e.prepend(s("span","op-suggest__icon",{"aria-hidden":"true"},a(this.config.icon??"search")))),e.append(s("span","op-spinner op-picker__spinner",{"aria-hidden":"true"})),this.live=s("div","op-sr-only",{"aria-live":"polite"}),e.append(this.live),this.own(()=>this.abort?.abort()),e}onRender(){super.onRender(),this.config.store?.on("load",()=>this.showResults(this.items))}onType(e){if(this.cancelWait?.(),this.abort?.abort(),e.trim().length<(this.config.minChars??1))return this.items=[],this.refreshList(),this.setSearching(!1),this.close();this.cancelWait=this.later(()=>{this.search(e)},this.config.delay??250)}async search(e){if(this.emit("before-query",e)===!1)return;let i=++this.seq,c=this.abort=new AbortController;this.setSearching(!0),this.emit("query",e);try{let t=this.config,r;if(t.store?(await t.store.load({query:e}),r=t.store.getData()):r=await t.query?.(e,{signal:c.signal})??[],i!==this.seq)return;this.items=r.map(p=>this.toItem(p)),this.showResults(this.items,e),this.emit("load",this.items)}catch(t){if(i!==this.seq)return;this.setSearching(!1),this.close(),this.emit("error",t)}}showResults(e,i=this.input.value){this.setSearching(!1),this.typed=!0,this.refreshList(),this.list.setHighlight(this.config.highlight===!1?"":i),this.live.textContent=e.length?o("results",{n:e.length}):o("noResults"),document.activeElement===this.input&&this.open()}setSearching(e){this.el.classList.toggle("is-searching",e),this.input.setAttribute("aria-busy",String(e))}setQuery(e){this.config.query=e}clearSuggestions(){this.items=[],this.refreshList(),this.close()}pick(e){super.pick(e),this.list.setHighlight("")}};h("suggestfield",n);export{n as a};
2
+ //# sourceMappingURL=chunk-QOSTS5I3.js.map
@@ -0,0 +1,2 @@
1
+ import{f as o}from"./chunk-UDXO3KM3.js";import{b as r,c as s}from"./chunk-PZSHOSOS.js";import{f as l}from"./chunk-S4QD5NID.js";import{a as n}from"./chunk-V5G5JECN.js";var a=class extends o{baseCls="op-field";value;original;error="";inputEl;labelEl;helpEl;errorEl;dirty=!1;cancelSettle;constructor(e={}){super(e),this.value=this.original=e.value??this.emptyValue()}get name(){return this.config.name}emptyValue(){return""}isEmpty(e){return e==null||e===""||Array.isArray(e)&&!e.length}isEqual(e,t){return e===t||JSON.stringify(e)===JSON.stringify(t)}build(){let e=this.config,t=r("div",`${this.baseCls}${e.labelPos==="left"?" op-field--label-left":""}`);this.labelEl=r("label","op-field__label");let i=r("div","op-field__control",{},this.createControl());return this.helpEl=r("div","op-field__help",{id:`${this.id}-help`}),this.errorEl=r("div","op-field__error",{id:`${this.id}-error`,role:"alert"}),t.append(this.labelEl,i,this.helpEl,this.errorEl),t}onRender(){let e=this.config,t=this.inputEl;t.id||=s("op-input"),this.labelEl.htmlFor=t.id,e.ariaLabel&&t!==this.el&&(t.setAttribute("aria-label",e.ariaLabel),this.el.removeAttribute("aria-label")),this.setLabel(e.label??""),this.setHelp(e.help??""),this.setRequired(!!e.required),this.setReadonly(!!e.readonly),this.applyValue(this.value),this.paintError(),this.listen(this.el,"focusin",()=>{this.el.classList.add("is-focused"),this.emit("focus")}),this.listen(this.el,"focusout",i=>{this.el.contains(i.relatedTarget)||(this.flushSettled(),this.el.classList.remove("is-focused"),(e.validateOn??"blur")==="blur"&&this.validate(),this.emit("blur"))})}focusEl(){return this.render(),this.inputEl}getValue(){return this.value}setValue(e,t=!1){let i=this.value;this.value=e,this.rendered&&this.applyValue(e),this.isEqual(i,e)||this.changed(i,t)}fillFrom(e){let t=this.name?n(e,this.name):void 0;t!==void 0&&this.setValue(t,!0)}commit(e){let t=this.value;this.value=e,this.isEqual(t,e)||this.changed(t,!1)}changed(e,t){this.updateDirty(),!t&&((this.config.validateOn==="change"||this.error)&&this.validate(),this.emit("change",this.value,e),this.queueSettled())}queueSettled(){this.cancelSettle?.(),this.cancelSettle=void 0;let e=this.config.debounce;if(!e)return void this.emit("settled",this.value);this.cancelSettle=this.later(()=>{this.cancelSettle=void 0,this.emit("settled",this.value)},e)}flushSettled(){this.cancelSettle&&(this.cancelSettle(),this.cancelSettle=void 0,this.emit("settled",this.value))}updateDirty(){let e=this.isDirty();e!==this.dirty&&(this.dirty=e,this.rendered&&this.el.classList.toggle("is-dirty",e),this.emit("dirty-change",e))}getDisplayText(){let e=this.value;return this.isEmpty(e)?"":String(e)}clear(){this.setValue(this.emptyValue())}isDirty(){return!this.isEqual(this.value,this.original)}markClean(){this.original=this.value,this.updateDirty()}reset(){this.setValue(this.original,!0),this.clearError()}check(){let e=this.value;if(this.isEmpty(e))return this.config.required?l("required"):"";for(let t of this.config.validators??[]){let i=t(e,this);if(typeof i=="string")return i}return""}validate(){let e=this.check();return e?this.setError(e):this.clearError(),!e}isValid(){return!this.check()}getError(){return this.error}setError(e){let t=this.error;this.error=e,this.paintError(),e&&e!==t&&this.emit("invalid",e)}clearError(){this.error&&(this.error="",this.paintError(),this.emit("valid"))}paintError(){this.rendered&&(this.errorEl.textContent=this.error,this.el.classList.toggle("is-invalid",!!this.error),this.inputEl.setAttribute("aria-invalid",String(!!this.error)),this.describe())}describe(){let e=[this.error&&this.errorEl.id,this.config.help&&this.helpEl.id].filter(Boolean);e.length?this.inputEl.setAttribute("aria-describedby",e.join(" ")):this.inputEl.removeAttribute("aria-describedby")}setLabel(e){this.config.label=e,this.rendered&&(this.labelEl.textContent=e,this.labelEl.hidden=!e)}setHelp(e){this.config.help=e,this.rendered&&(this.helpEl.textContent=e,this.helpEl.hidden=!e,this.describe())}setRequired(e){this.config.required=e,this.rendered&&(this.el.classList.toggle("is-required",e),this.inputEl.setAttribute("aria-required",String(e)))}setReadonly(e){this.config.readonly=e,this.rendered&&(this.el.classList.toggle("is-readonly",e),this.onReadonly(e))}setValidators(e){this.config.validators=e}onReadonly(e){}};export{a};
2
+ //# sourceMappingURL=chunk-QVBDBGS4.js.map