optikos 0.1.0 → 0.3.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 (390) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +13 -11
  3. package/dist/chunk-23XLG2EM.js +2 -0
  4. package/dist/{chunk-666O2GKD.js.map → chunk-23XLG2EM.js.map} +1 -1
  5. package/dist/chunk-2YZB6XQR.js +2 -0
  6. package/dist/chunk-2YZB6XQR.js.map +7 -0
  7. package/dist/chunk-2ZRNGG2N.js +2 -0
  8. package/dist/chunk-2ZRNGG2N.js.map +7 -0
  9. package/dist/chunk-2ZUZ5HDL.js +2 -0
  10. package/dist/chunk-2ZUZ5HDL.js.map +7 -0
  11. package/dist/chunk-3S24ZRPK.js +2 -0
  12. package/dist/chunk-3S24ZRPK.js.map +7 -0
  13. package/dist/chunk-3TAW4AKH.js +2 -0
  14. package/dist/chunk-3TAW4AKH.js.map +7 -0
  15. package/dist/chunk-4EQEHJB3.js +2 -0
  16. package/dist/chunk-4EQEHJB3.js.map +7 -0
  17. package/dist/chunk-4EZJ5FKJ.js +2 -0
  18. package/dist/{chunk-IHAYOSBR.js.map → chunk-4EZJ5FKJ.js.map} +1 -1
  19. package/dist/chunk-4LZZ244E.js +2 -0
  20. package/dist/chunk-4LZZ244E.js.map +7 -0
  21. package/dist/chunk-4SYIIX5A.js +2 -0
  22. package/dist/chunk-4SYIIX5A.js.map +7 -0
  23. package/dist/chunk-5BC72727.js +2 -0
  24. package/dist/chunk-5BC72727.js.map +7 -0
  25. package/dist/chunk-5DJTP53N.js +2 -0
  26. package/dist/{chunk-ODWPBBVL.js.map → chunk-5DJTP53N.js.map} +1 -1
  27. package/dist/{chunk-NWTTHDIM.js → chunk-5JEXM5S7.js} +2 -2
  28. package/dist/chunk-5Q76ACVI.js +2 -0
  29. package/dist/{chunk-O4DCHALR.js.map → chunk-5Q76ACVI.js.map} +1 -1
  30. package/dist/chunk-5QUY72FX.js +2 -0
  31. package/dist/chunk-5QUY72FX.js.map +7 -0
  32. package/dist/{chunk-NV5AIBQP.js → chunk-6VBK2I5B.js} +2 -2
  33. package/dist/{chunk-ZYUXCZX7.js → chunk-7KMIFXHZ.js} +2 -2
  34. package/dist/{chunk-IYPKPLCU.js → chunk-A2NKDOYN.js} +2 -2
  35. package/dist/chunk-A2NKDOYN.js.map +7 -0
  36. package/dist/chunk-CKXS375P.js +2 -0
  37. package/dist/chunk-CKXS375P.js.map +7 -0
  38. package/dist/chunk-DBMWS3O5.js +2 -0
  39. package/dist/chunk-DBMWS3O5.js.map +7 -0
  40. package/dist/chunk-E4VNLYO2.js +2 -0
  41. package/dist/chunk-E4VNLYO2.js.map +7 -0
  42. package/dist/chunk-EDUMAMK4.js +2 -0
  43. package/dist/chunk-EDUMAMK4.js.map +7 -0
  44. package/dist/chunk-EJGWCKE4.js +2 -0
  45. package/dist/{chunk-4DHQKECB.js.map → chunk-EJGWCKE4.js.map} +1 -1
  46. package/dist/chunk-ELYARUCN.js +2 -0
  47. package/dist/{chunk-Z25NC4CS.js → chunk-EV73ADN2.js} +2 -2
  48. package/dist/{chunk-LV6HXFHU.js → chunk-FEHGU6EP.js} +3 -3
  49. package/dist/chunk-FEHGU6EP.js.map +7 -0
  50. package/dist/chunk-G2DAD3MQ.js +2 -0
  51. package/dist/chunk-G2DAD3MQ.js.map +7 -0
  52. package/dist/chunk-G2KUK6AT.js +2 -0
  53. package/dist/chunk-GD5JGKM7.js +2 -0
  54. package/dist/chunk-GD5JGKM7.js.map +7 -0
  55. package/dist/{chunk-LBCWEWPN.js → chunk-GNU4VOOE.js} +2 -2
  56. package/dist/{chunk-IW7PK4VS.js → chunk-GZ7X34QP.js} +2 -2
  57. package/dist/chunk-HOF4JGMQ.js +2 -0
  58. package/dist/chunk-HOF4JGMQ.js.map +7 -0
  59. package/dist/chunk-HXDTGP2K.js +2 -0
  60. package/dist/chunk-HXDTGP2K.js.map +7 -0
  61. package/dist/{chunk-QEQIJAAB.js → chunk-I4SP6JTU.js} +2 -2
  62. package/dist/chunk-IHE2MQ3W.js +2 -0
  63. package/dist/{chunk-OW2ZSMGS.js.map → chunk-IHE2MQ3W.js.map} +1 -1
  64. package/dist/chunk-JBLRAM7Z.js +2 -0
  65. package/dist/{chunk-JZNEB7A7.js.map → chunk-JBLRAM7Z.js.map} +1 -1
  66. package/dist/{chunk-4SUKNSCY.js → chunk-JI265XFO.js} +2 -2
  67. package/dist/chunk-JK74QK3M.js +2 -0
  68. package/dist/chunk-JK74QK3M.js.map +7 -0
  69. package/dist/chunk-JOFQJGZK.js +2 -0
  70. package/dist/chunk-JOFQJGZK.js.map +7 -0
  71. package/dist/chunk-KCEUD232.js +2 -0
  72. package/dist/chunk-KCEUD232.js.map +7 -0
  73. package/dist/chunk-KLLAY2IM.js +2 -0
  74. package/dist/chunk-KLLAY2IM.js.map +7 -0
  75. package/dist/chunk-LBJSMXLV.js +2 -0
  76. package/dist/chunk-LBJSMXLV.js.map +7 -0
  77. package/dist/chunk-LQRFNQ2N.js +2 -0
  78. package/dist/chunk-LQRFNQ2N.js.map +7 -0
  79. package/dist/{chunk-NDBFYIL6.js → chunk-LW2WRUVL.js} +2 -2
  80. package/dist/{chunk-NDBFYIL6.js.map → chunk-LW2WRUVL.js.map} +2 -2
  81. package/dist/chunk-M242VYZA.js +2 -0
  82. package/dist/{chunk-XVIC24AW.js.map → chunk-M242VYZA.js.map} +1 -1
  83. package/dist/chunk-MB3MU6HR.js +2 -0
  84. package/dist/chunk-MB3MU6HR.js.map +7 -0
  85. package/dist/chunk-MW3RWBZ7.js +2 -0
  86. package/dist/chunk-MW3RWBZ7.js.map +7 -0
  87. package/dist/chunk-NXSTUFS7.js +2 -0
  88. package/dist/chunk-NXSTUFS7.js.map +7 -0
  89. package/dist/chunk-OEAXCCVM.js +2 -0
  90. package/dist/chunk-OEAXCCVM.js.map +7 -0
  91. package/dist/chunk-OGRFQTXA.js +2 -0
  92. package/dist/chunk-OGRFQTXA.js.map +7 -0
  93. package/dist/chunk-Q26YZYTD.js +2 -0
  94. package/dist/chunk-Q26YZYTD.js.map +7 -0
  95. package/dist/chunk-REW4LR46.js +2 -0
  96. package/dist/chunk-REW4LR46.js.map +7 -0
  97. package/dist/chunk-RNN55473.js +2 -0
  98. package/dist/chunk-RNN55473.js.map +7 -0
  99. package/dist/{chunk-6NJW7QFD.js → chunk-SA53QUBF.js} +2 -2
  100. package/dist/chunk-TIPK3SCJ.js +2 -0
  101. package/dist/chunk-TIPK3SCJ.js.map +7 -0
  102. package/dist/{chunk-TBLICXWW.js → chunk-TOLTUOZS.js} +2 -2
  103. package/dist/{chunk-DXO3UJKL.js → chunk-TZOQWCVH.js} +2 -2
  104. package/dist/chunk-UB5RYS7T.js +2 -0
  105. package/dist/chunk-UB5RYS7T.js.map +7 -0
  106. package/dist/chunk-UXXJOU5J.js +2 -0
  107. package/dist/chunk-UXXJOU5J.js.map +7 -0
  108. package/dist/chunk-VU3GIDZ3.js +2 -0
  109. package/dist/chunk-VU3GIDZ3.js.map +7 -0
  110. package/dist/chunk-W2BAFOCN.js +3 -0
  111. package/dist/chunk-W2BAFOCN.js.map +7 -0
  112. package/dist/{chunk-SNTHW4K2.js → chunk-W3H7GTJY.js} +2 -2
  113. package/dist/chunk-WFGTQZIQ.js +2 -0
  114. package/dist/chunk-WFGTQZIQ.js.map +7 -0
  115. package/dist/{chunk-ZHVSHDLH.js → chunk-XHOBNSBO.js} +2 -2
  116. package/dist/chunk-XX2MVWFS.js +4 -0
  117. package/dist/chunk-XX2MVWFS.js.map +7 -0
  118. package/dist/chunk-XYZ6VZ5T.js +2 -0
  119. package/dist/chunk-XYZ6VZ5T.js.map +7 -0
  120. package/dist/chunk-YBAYEU25.js +2 -0
  121. package/dist/chunk-YBAYEU25.js.map +7 -0
  122. package/dist/chunk-YF75HKL6.js +2 -0
  123. package/dist/chunk-YF75HKL6.js.map +7 -0
  124. package/dist/chunk-YHEMA56R.js +2 -0
  125. package/dist/{chunk-5GNEFX6F.js.map → chunk-YHEMA56R.js.map} +1 -1
  126. package/dist/chunk-Z2JBUHKA.js +2 -0
  127. package/dist/chunk-Z2JBUHKA.js.map +7 -0
  128. package/dist/{chunk-6O2BXCRN.js → chunk-Z2Z52GFT.js} +2 -2
  129. package/dist/chunk-ZPPELYNJ.js +2 -0
  130. package/dist/chunk-ZPPELYNJ.js.map +7 -0
  131. package/dist/chunk-ZVK4L5GK.js +2 -0
  132. package/dist/chunk-ZVK4L5GK.js.map +7 -0
  133. package/dist/chunk-ZWNQREWS.js +2 -0
  134. package/dist/chunk-ZWNQREWS.js.map +7 -0
  135. package/dist/components/badge.js +2 -0
  136. package/dist/components/badge.js.map +7 -0
  137. package/dist/components/breadcrumb.js +1 -1
  138. package/dist/components/button.js +1 -1
  139. package/dist/components/calendar.js +1 -1
  140. package/dist/components/cellediting.js +2 -0
  141. package/dist/components/cellediting.js.map +7 -0
  142. package/dist/components/chat.js +1 -1
  143. package/dist/components/checkbox.js +1 -1
  144. package/dist/components/checkboxgroup.js +2 -0
  145. package/dist/components/checkboxgroup.js.map +7 -0
  146. package/dist/components/chip.js +2 -0
  147. package/dist/components/chip.js.map +7 -0
  148. package/dist/components/codeviewer.js +2 -0
  149. package/dist/components/codeviewer.js.map +7 -0
  150. package/dist/components/combobox.js +1 -1
  151. package/dist/components/commandpalette.js +1 -1
  152. package/dist/components/container.js +1 -1
  153. package/dist/components/dataview.js +1 -1
  154. package/dist/components/datefield.js +1 -1
  155. package/dist/components/daterangefield.js +1 -1
  156. package/dist/components/dial.js +2 -0
  157. package/dist/components/dial.js.map +7 -0
  158. package/dist/components/dropdown.js +1 -1
  159. package/dist/components/fieldgroup.js +2 -0
  160. package/dist/components/fieldgroup.js.map +7 -0
  161. package/dist/components/fieldlist.js +2 -0
  162. package/dist/components/fieldlist.js.map +7 -0
  163. package/dist/components/fieldset.js +1 -1
  164. package/dist/components/filterbuilder.js +1 -1
  165. package/dist/components/form.js +1 -1
  166. package/dist/components/formactions.js +2 -0
  167. package/dist/components/formactions.js.map +7 -0
  168. package/dist/components/formerrors.js +2 -0
  169. package/dist/components/formerrors.js.map +7 -0
  170. package/dist/components/formsection.js +2 -0
  171. package/dist/components/formsection.js.map +7 -0
  172. package/dist/components/grid.js +1 -1
  173. package/dist/components/icon.js +1 -1
  174. package/dist/components/inputgroup.js +2 -0
  175. package/dist/components/inputgroup.js.map +7 -0
  176. package/dist/components/label.js +1 -1
  177. package/dist/components/listbox.js +1 -1
  178. package/dist/components/lookupfield.js +1 -1
  179. package/dist/components/menu.js +1 -1
  180. package/dist/components/messagebox.js +1 -1
  181. package/dist/components/navmenu.js +1 -1
  182. package/dist/components/numberfield.js +1 -1
  183. package/dist/components/pagination.js +1 -1
  184. package/dist/components/panel.js +1 -1
  185. package/dist/components/pickerfield.js +1 -1
  186. package/dist/components/radiogroup.js +1 -1
  187. package/dist/components/searchgrid.js +1 -1
  188. package/dist/components/secretfield.js +1 -1
  189. package/dist/components/select.js +1 -1
  190. package/dist/components/slider.js +1 -1
  191. package/dist/components/spacer.js +1 -1
  192. package/dist/components/spinner.js +1 -1
  193. package/dist/components/stepform.js +1 -1
  194. package/dist/components/stepper.js +1 -1
  195. package/dist/components/suggestfield.js +1 -1
  196. package/dist/components/table.js +1 -1
  197. package/dist/components/tabs.js +1 -1
  198. package/dist/components/textarea.js +1 -1
  199. package/dist/components/textfield.js +1 -1
  200. package/dist/components/toast.js +1 -1
  201. package/dist/components/toggle.js +2 -0
  202. package/dist/components/toggle.js.map +7 -0
  203. package/dist/components/toolbar.js +1 -1
  204. package/dist/components/tooltip.js +1 -1
  205. package/dist/components/tree.js +2 -0
  206. package/dist/components/tree.js.map +7 -0
  207. package/dist/components/viewmanager.js +1 -1
  208. package/dist/components/viewport.js +1 -1
  209. package/dist/components/widget.js +1 -1
  210. package/dist/components/window.js +1 -1
  211. package/dist/core.js +1 -1
  212. package/dist/css/badge.css +39 -0
  213. package/dist/css/base.css +71 -51
  214. package/dist/css/button.css +2 -0
  215. package/dist/css/cellediting.css +33 -0
  216. package/dist/css/chat.css +0 -1
  217. package/dist/css/checkboxgroup.css +12 -0
  218. package/dist/css/chip.css +64 -0
  219. package/dist/css/codeviewer.css +109 -0
  220. package/dist/css/dial.css +203 -0
  221. package/dist/css/fieldgroup.css +26 -0
  222. package/dist/css/fieldlist.css +84 -0
  223. package/dist/css/fieldset.css +36 -0
  224. package/dist/css/formactions.css +40 -0
  225. package/dist/css/formerrors.css +39 -0
  226. package/dist/css/formsection.css +45 -0
  227. package/dist/css/grid.css +14 -3
  228. package/dist/css/inputgroup.css +58 -0
  229. package/dist/css/menu.css +54 -0
  230. package/dist/css/navmenu.css +9 -7
  231. package/dist/css/panel.css +8 -1
  232. package/dist/css/stepform.css +9 -0
  233. package/dist/css/stepper.css +7 -2
  234. package/dist/css/tabs.css +12 -3
  235. package/dist/css/toggle.css +39 -0
  236. package/dist/css/tree.css +94 -0
  237. package/dist/css/widget.css +58 -0
  238. package/dist/css/window.css +4 -0
  239. package/dist/data.js +1 -1
  240. package/dist/index.js +3 -3
  241. package/dist/index.js.map +3 -3
  242. package/dist/optikos.css +1221 -106
  243. package/dist/themes/dark.css +47 -32
  244. package/dist/types/components/badge.d.ts +1 -0
  245. package/dist/types/components/base/badge/badge.d.ts +18 -0
  246. package/dist/types/components/base/chip/chip.d.ts +27 -0
  247. package/dist/types/components/base/codeviewer/codeviewer.d.ts +48 -0
  248. package/dist/types/components/cellediting.d.ts +1 -0
  249. package/dist/types/components/checkboxgroup.d.ts +1 -0
  250. package/dist/types/components/chip.d.ts +1 -0
  251. package/dist/types/components/codeviewer.d.ts +1 -0
  252. package/dist/types/components/data/cellediting/cellediting.d.ts +10 -0
  253. package/dist/types/components/data/filterbuilder/filterbuilder.d.ts +3 -1
  254. package/dist/types/components/data/grid/grid.d.ts +42 -16
  255. package/dist/types/components/data/tree/tree.d.ts +71 -0
  256. package/dist/types/components/dial.d.ts +1 -0
  257. package/dist/types/components/fieldgroup.d.ts +1 -0
  258. package/dist/types/components/fieldlist.d.ts +1 -0
  259. package/dist/types/components/fields/checkboxgroup/checkboxgroup.d.ts +27 -0
  260. package/dist/types/components/fields/dial/dial.d.ts +84 -0
  261. package/dist/types/components/fields/toggle/toggle.d.ts +9 -0
  262. package/dist/types/components/form/fieldgroup/fieldgroup.d.ts +33 -0
  263. package/dist/types/components/form/fieldlist/fieldlist.d.ts +58 -0
  264. package/dist/types/components/form/form/form.d.ts +19 -2
  265. package/dist/types/components/form/formactions/formactions.d.ts +34 -0
  266. package/dist/types/components/form/formerrors/formerrors.d.ts +23 -0
  267. package/dist/types/components/form/formsection/formsection.d.ts +26 -0
  268. package/dist/types/components/form/inputgroup/inputgroup.d.ts +28 -0
  269. package/dist/types/components/form/stepform/stepform.d.ts +30 -4
  270. package/dist/types/components/formactions.d.ts +1 -0
  271. package/dist/types/components/formerrors.d.ts +1 -0
  272. package/dist/types/components/formsection.d.ts +1 -0
  273. package/dist/types/components/inputgroup.d.ts +1 -0
  274. package/dist/types/components/layout/fieldset/fieldset.d.ts +9 -0
  275. package/dist/types/components/layout/panel/panel.d.ts +6 -0
  276. package/dist/types/components/layout/panel/reload.d.ts +1 -0
  277. package/dist/types/components/navigation/navmenu/navmenu.d.ts +6 -0
  278. package/dist/types/components/navigation/tabs/tabs.d.ts +8 -0
  279. package/dist/types/components/overlays/menu/menu.d.ts +17 -0
  280. package/dist/types/components/overlays/messagebox/messagebox.d.ts +8 -0
  281. package/dist/types/components/overlays/widget/widget.d.ts +13 -0
  282. package/dist/types/components/overlays/window/window.d.ts +8 -1
  283. package/dist/types/components/toggle.d.ts +1 -0
  284. package/dist/types/components/tree.d.ts +1 -0
  285. package/dist/types/core/component.d.ts +6 -2
  286. package/dist/types/core/i18n.d.ts +5 -0
  287. package/dist/types/core/index.d.ts +1 -1
  288. package/dist/types/core/position.d.ts +4 -1
  289. package/dist/types/data/column.d.ts +9 -4
  290. package/dist/types/index.d.ts +14 -0
  291. package/dist/types/themes/define.d.ts +4 -3
  292. package/dist/types/ui/enums.d.ts +0 -6
  293. package/dist/types/ui/ui.d.ts +12 -3
  294. package/dist/ui.js +1 -1
  295. package/package.json +6 -1
  296. package/dist/chunk-4COBH4QJ.js +0 -2
  297. package/dist/chunk-4COBH4QJ.js.map +0 -7
  298. package/dist/chunk-4DHQKECB.js +0 -2
  299. package/dist/chunk-4Q67QI7J.js +0 -2
  300. package/dist/chunk-4Q67QI7J.js.map +0 -7
  301. package/dist/chunk-5AXLYDKU.js +0 -2
  302. package/dist/chunk-5AXLYDKU.js.map +0 -7
  303. package/dist/chunk-5GNEFX6F.js +0 -2
  304. package/dist/chunk-5Q6Y6CM4.js +0 -2
  305. package/dist/chunk-5Q6Y6CM4.js.map +0 -7
  306. package/dist/chunk-666O2GKD.js +0 -2
  307. package/dist/chunk-A66MDXHL.js +0 -2
  308. package/dist/chunk-A66MDXHL.js.map +0 -7
  309. package/dist/chunk-ARCW54L2.js +0 -2
  310. package/dist/chunk-ARCW54L2.js.map +0 -7
  311. package/dist/chunk-BIYNHKSA.js +0 -2
  312. package/dist/chunk-BIYNHKSA.js.map +0 -7
  313. package/dist/chunk-BNPVRIFT.js +0 -2
  314. package/dist/chunk-BNPVRIFT.js.map +0 -7
  315. package/dist/chunk-C3N7QTQB.js +0 -2
  316. package/dist/chunk-C3N7QTQB.js.map +0 -7
  317. package/dist/chunk-CEXY5A4T.js +0 -2
  318. package/dist/chunk-CN7USUJR.js +0 -2
  319. package/dist/chunk-CN7USUJR.js.map +0 -7
  320. package/dist/chunk-CQRHNTEX.js +0 -2
  321. package/dist/chunk-CUPAPOKC.js +0 -2
  322. package/dist/chunk-CUPAPOKC.js.map +0 -7
  323. package/dist/chunk-GZNQPENR.js +0 -2
  324. package/dist/chunk-GZNQPENR.js.map +0 -7
  325. package/dist/chunk-HFFK6K4K.js +0 -2
  326. package/dist/chunk-HFFK6K4K.js.map +0 -7
  327. package/dist/chunk-IHAYOSBR.js +0 -2
  328. package/dist/chunk-IO66A6G5.js +0 -2
  329. package/dist/chunk-IO66A6G5.js.map +0 -7
  330. package/dist/chunk-IYPKPLCU.js.map +0 -7
  331. package/dist/chunk-JTYWZMSZ.js +0 -2
  332. package/dist/chunk-JTYWZMSZ.js.map +0 -7
  333. package/dist/chunk-JVEPKW5X.js +0 -2
  334. package/dist/chunk-JVEPKW5X.js.map +0 -7
  335. package/dist/chunk-JZNEB7A7.js +0 -2
  336. package/dist/chunk-K2DGY6MP.js +0 -2
  337. package/dist/chunk-K2DGY6MP.js.map +0 -7
  338. package/dist/chunk-LEE2FEEL.js +0 -2
  339. package/dist/chunk-LEE2FEEL.js.map +0 -7
  340. package/dist/chunk-LMGCV35W.js +0 -2
  341. package/dist/chunk-LMGCV35W.js.map +0 -7
  342. package/dist/chunk-LV6HXFHU.js.map +0 -7
  343. package/dist/chunk-MA5BJL3S.js +0 -2
  344. package/dist/chunk-MA5BJL3S.js.map +0 -7
  345. package/dist/chunk-NHVEP72K.js +0 -2
  346. package/dist/chunk-NHVEP72K.js.map +0 -7
  347. package/dist/chunk-O4DCHALR.js +0 -2
  348. package/dist/chunk-ODWPBBVL.js +0 -2
  349. package/dist/chunk-OW2ZSMGS.js +0 -2
  350. package/dist/chunk-PSPQH35P.js +0 -2
  351. package/dist/chunk-PSPQH35P.js.map +0 -7
  352. package/dist/chunk-T4OYVG2X.js +0 -2
  353. package/dist/chunk-T4OYVG2X.js.map +0 -7
  354. package/dist/chunk-TK2RC3T5.js +0 -2
  355. package/dist/chunk-TK2RC3T5.js.map +0 -7
  356. package/dist/chunk-U3X2FW6U.js +0 -2
  357. package/dist/chunk-U3X2FW6U.js.map +0 -7
  358. package/dist/chunk-UPOBGNJ5.js +0 -2
  359. package/dist/chunk-UPOBGNJ5.js.map +0 -7
  360. package/dist/chunk-XVIC24AW.js +0 -2
  361. package/dist/chunk-XZ5CUZZP.js +0 -2
  362. package/dist/chunk-XZ5CUZZP.js.map +0 -7
  363. package/dist/chunk-XZEOSW3Q.js +0 -2
  364. package/dist/chunk-XZEOSW3Q.js.map +0 -7
  365. package/dist/chunk-YET5PM6F.js +0 -2
  366. package/dist/chunk-YET5PM6F.js.map +0 -7
  367. package/dist/chunk-ZCAAM4NH.js +0 -2
  368. package/dist/chunk-ZCAAM4NH.js.map +0 -7
  369. package/dist/themes/brand.css +0 -240
  370. package/dist/themes/brutal.css +0 -100
  371. package/dist/themes/corporate.css +0 -112
  372. package/dist/themes/editorial.css +0 -110
  373. package/dist/themes/soft.css +0 -101
  374. package/dist/themes/terminal.css +0 -91
  375. /package/dist/{chunk-NWTTHDIM.js.map → chunk-5JEXM5S7.js.map} +0 -0
  376. /package/dist/{chunk-NV5AIBQP.js.map → chunk-6VBK2I5B.js.map} +0 -0
  377. /package/dist/{chunk-ZYUXCZX7.js.map → chunk-7KMIFXHZ.js.map} +0 -0
  378. /package/dist/{chunk-CEXY5A4T.js.map → chunk-ELYARUCN.js.map} +0 -0
  379. /package/dist/{chunk-Z25NC4CS.js.map → chunk-EV73ADN2.js.map} +0 -0
  380. /package/dist/{chunk-CQRHNTEX.js.map → chunk-G2KUK6AT.js.map} +0 -0
  381. /package/dist/{chunk-LBCWEWPN.js.map → chunk-GNU4VOOE.js.map} +0 -0
  382. /package/dist/{chunk-IW7PK4VS.js.map → chunk-GZ7X34QP.js.map} +0 -0
  383. /package/dist/{chunk-QEQIJAAB.js.map → chunk-I4SP6JTU.js.map} +0 -0
  384. /package/dist/{chunk-4SUKNSCY.js.map → chunk-JI265XFO.js.map} +0 -0
  385. /package/dist/{chunk-6NJW7QFD.js.map → chunk-SA53QUBF.js.map} +0 -0
  386. /package/dist/{chunk-TBLICXWW.js.map → chunk-TOLTUOZS.js.map} +0 -0
  387. /package/dist/{chunk-DXO3UJKL.js.map → chunk-TZOQWCVH.js.map} +0 -0
  388. /package/dist/{chunk-SNTHW4K2.js.map → chunk-W3H7GTJY.js.map} +0 -0
  389. /package/dist/{chunk-ZHVSHDLH.js.map → chunk-XHOBNSBO.js.map} +0 -0
  390. /package/dist/{chunk-6O2BXCRN.js.map → chunk-Z2Z52GFT.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/core/field.ts"],
4
- "sourcesContent": ["import { Component, type ComponentConfig } from './component';\nimport { h, uid } from './dom';\nimport { t } from './i18n';\nimport type { Validator } from './validators';\n\nexport interface FieldConfig<V = unknown> extends ComponentConfig {\n name?: string;\n label?: string;\n labelPos?: 'top' | 'left';\n value?: V;\n required?: boolean;\n readonly?: boolean;\n help?: string;\n validators?: Validator<V>[];\n /** When to validate on its own. After the first error it revalidates on every change. Default `blur`. */\n validateOn?: 'blur' | 'change' | 'submit';\n /** ms of quiet after the last change before `settled` fires (0 = right away). `change` itself is never delayed. */\n debounce?: number;\n}\n\n/**\n * Base of every field: value, validation, dirty tracking, label and messages.\n * Subclasses implement `createControl` (build the control, assign `inputEl`), `applyValue` (value \u2192 DOM)\n * and call `commit` when the user edits (DOM \u2192 value).\n */\nexport abstract class Field<V = unknown, C extends FieldConfig<V> = FieldConfig<V>> extends Component<C> {\n protected override baseCls = 'op-field';\n protected value: V;\n protected original: V;\n protected error = '';\n /** The focusable control; `label for`, `aria-invalid` and `aria-describedby` point at it. */\n protected inputEl!: HTMLElement;\n private labelEl!: HTMLElement;\n private helpEl!: HTMLElement;\n private errorEl!: HTMLElement;\n private dirty = false;\n private cancelSettle?: () => void;\n\n constructor(config: C = {} as C) {\n super(config);\n this.value = this.original = config.value ?? this.emptyValue();\n }\n\n get name(): string | undefined {\n return this.config.name;\n }\n\n protected abstract createControl(): HTMLElement;\n protected abstract applyValue(value: V): void;\n protected emptyValue(): V {\n return '' as V;\n }\n protected isEmpty(v: V): boolean {\n return v == null || (v as unknown) === '' || (Array.isArray(v) && !v.length);\n }\n protected isEqual(a: V, b: V): boolean {\n return a === b || JSON.stringify(a) === JSON.stringify(b);\n }\n\n protected override build(): HTMLElement {\n const c = this.config;\n const el = h('div', `${this.baseCls}${c.labelPos === 'left' ? ' op-field--label-left' : ''}`);\n this.labelEl = h('label', 'op-field__label');\n const control = h('div', 'op-field__control', {}, this.createControl());\n this.helpEl = h('div', 'op-field__help', { id: `${this.id}-help` });\n this.errorEl = h('div', 'op-field__error', { id: `${this.id}-error`, role: 'alert' });\n el.append(this.labelEl, control, this.helpEl, this.errorEl);\n return el;\n }\n\n protected override onRender(): void {\n const c = this.config;\n const input = this.inputEl;\n input.id ||= uid('op-input');\n (this.labelEl as HTMLLabelElement).htmlFor = input.id;\n this.setLabel(c.label ?? '');\n this.setHelp(c.help ?? '');\n this.setRequired(!!c.required);\n this.setReadonly(!!c.readonly);\n this.applyValue(this.value);\n this.paintError();\n this.listen(this.el, 'focusin', () => {\n this.el.classList.add('is-focused');\n this.emit('focus');\n });\n this.listen(this.el, 'focusout', (e: FocusEvent) => {\n if (this.el.contains(e.relatedTarget as Node)) return;\n this.flushSettled();\n this.el.classList.remove('is-focused');\n if ((c.validateOn ?? 'blur') === 'blur') this.validate();\n this.emit('blur');\n });\n }\n\n protected override focusEl(): HTMLElement {\n this.render();\n return this.inputEl;\n }\n\n // ---- value ---------------------------------------------------------------------------------\n\n getValue(): V {\n return this.value;\n }\n\n /** Sets the value programmatically. `silent` skips the `change` event and validation. */\n setValue(v: V, silent = false): void {\n const old = this.value;\n this.value = v;\n if (this.rendered) this.applyValue(v);\n if (!this.isEqual(old, v)) this.changed(old, silent);\n }\n\n /** For subclasses: the user edited the control and the DOM already shows `v`. */\n protected commit(v: V): void {\n const old = this.value;\n this.value = v;\n if (!this.isEqual(old, v)) this.changed(old, false);\n }\n\n private changed(old: V, silent: boolean): void {\n this.updateDirty();\n if (silent) return;\n if (this.config.validateOn === 'change' || this.error) this.validate();\n this.emit('change', this.value, old);\n this.queueSettled();\n }\n\n /** `settled(value)`: the value after the user stopped changing it for `debounce` ms (immediately without `debounce`). */\n private queueSettled(): void {\n this.cancelSettle?.();\n this.cancelSettle = undefined;\n const ms = this.config.debounce;\n if (!ms) return void this.emit('settled', this.value);\n this.cancelSettle = this.later(() => {\n this.cancelSettle = undefined;\n this.emit('settled', this.value);\n }, ms);\n }\n\n /** Fires a pending `settled` now (Enter, blur, end of a drag...). No-op when nothing is waiting. */\n protected flushSettled(): void {\n if (!this.cancelSettle) return;\n this.cancelSettle();\n this.cancelSettle = undefined;\n this.emit('settled', this.value);\n }\n\n private updateDirty(): void {\n const d = this.isDirty();\n if (d === this.dirty) return;\n this.dirty = d;\n if (this.rendered) this.el.classList.toggle('is-dirty', d);\n this.emit('dirty-change', d);\n }\n\n /** What the user sees as this field's value (a select's label, a formatted date); used by summaries such as the StepForm review. */\n getDisplayText(): string {\n const v = this.value;\n return this.isEmpty(v) ? '' : String(v);\n }\n\n /** Sets the empty value (`''`, `null`, `false`...) and emits `change`. */\n clear(): void {\n this.setValue(this.emptyValue());\n }\n\n isDirty(): boolean {\n return !this.isEqual(this.value, this.original);\n }\n\n /** The current value becomes the \"original\" (as after loading or saving). */\n markClean(): void {\n this.original = this.value;\n this.updateDirty();\n }\n\n reset(): void {\n this.setValue(this.original, true);\n this.clearError();\n }\n\n // ---- validation ----------------------------------------------------------------------------\n\n /** Returns the error message for the current value, or `''`. No UI side effects. */\n protected check(): string {\n const v = this.value;\n if (this.isEmpty(v)) return this.config.required ? t('required') : '';\n for (const fn of this.config.validators ?? []) {\n const r = fn(v, this as Field<any>);\n if (typeof r === 'string') return r;\n }\n return '';\n }\n\n validate(): boolean {\n const msg = this.check();\n if (msg) this.setError(msg);\n else this.clearError();\n return !msg;\n }\n\n isValid(): boolean {\n return !this.check();\n }\n\n getError(): string {\n return this.error;\n }\n\n setError(msg: string): void {\n const was = this.error;\n this.error = msg;\n this.paintError();\n if (msg && msg !== was) this.emit('invalid', msg);\n }\n\n clearError(): void {\n if (!this.error) return;\n this.error = '';\n this.paintError();\n this.emit('valid');\n }\n\n private paintError(): void {\n if (!this.rendered) return;\n this.errorEl.textContent = this.error;\n this.el.classList.toggle('is-invalid', !!this.error);\n this.inputEl.setAttribute('aria-invalid', String(!!this.error));\n this.describe();\n }\n\n private describe(): void {\n const ids = [this.error && this.errorEl.id, this.config.help && this.helpEl.id].filter(Boolean);\n if (ids.length) this.inputEl.setAttribute('aria-describedby', ids.join(' '));\n else this.inputEl.removeAttribute('aria-describedby');\n }\n\n // ---- setters -------------------------------------------------------------------------------\n\n setLabel(label: string): void {\n this.config.label = label;\n if (!this.rendered) return;\n this.labelEl.textContent = label;\n this.labelEl.hidden = !label;\n }\n\n setHelp(help: string): void {\n this.config.help = help;\n if (!this.rendered) return;\n this.helpEl.textContent = help;\n this.helpEl.hidden = !help;\n this.describe();\n }\n\n setRequired(required: boolean): void {\n this.config.required = required;\n if (!this.rendered) return;\n this.el.classList.toggle('is-required', required);\n this.inputEl.setAttribute('aria-required', String(required));\n }\n\n setReadonly(readonly: boolean): void {\n this.config.readonly = readonly;\n if (!this.rendered) return;\n this.el.classList.toggle('is-readonly', readonly);\n this.onReadonly(readonly);\n }\n\n setValidators(validators: Validator<V>[]): void {\n this.config.validators = validators;\n }\n\n protected onReadonly(_readonly: boolean): void {}\n}\n"],
5
- "mappings": "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",
6
- "names": ["Field", "Component", "config", "v", "a", "b", "c", "el", "h", "control", "input", "uid", "e", "silent", "old", "ms", "d", "t", "fn", "r", "msg", "was", "ids", "label", "help", "required", "readonly", "validators", "_readonly"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as u}from"./chunk-DXO3UJKL.js";import{a as f}from"./chunk-PSPQH35P.js";import{b as c,c as h,d as g}from"./chunk-4DHQKECB.js";import{c as a}from"./chunk-IHAYOSBR.js";import{b as p}from"./chunk-IYPKPLCU.js";import{b as d}from"./chunk-PZSHOSOS.js";import{e as s}from"./chunk-MA5BJL3S.js";var l=class extends u{baseCls="op-field op-textfield op-picker op-suggest op-lookup";def;suggestStore;win;constructor(e){let t=c(e.lookup);super({...e,icon:!1,valueField:t.valueField??"id",displayField:t.displayField??"name",query:o=>this.suggest(o)}),this.def=t}async suggest(e){let t=this.suggestStore??=h(this.def),o=this.def.queryField??this.def.filters?.[0]?.name??this.config.displayField,i=this.def.filters?.find(n=>n.name===o)?.field??o;return await t.filter({field:i,op:"contains",value:e}),t.getData()}createControl(){let e=super.createControl(),t=d("button","op-picker__trigger op-lookup__btn",{type:"button",tabindex:-1,"aria-label":s("lookupOpen"),"aria-haspopup":"dialog"},a("search"));return this.listen(t,"mousedown",o=>o.preventDefault()),this.listen(t,"click",()=>this.openDialog()),e.append(t),this.own(()=>this.win?.destroy()),e}onKey(e){e.key==="F4"||e.altKey&&e.key==="ArrowDown"?(e.preventDefault(),this.openDialog()):super.onKey(e)}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-lookup__btn").disabled=e}openDialog(){if(this.win||this.config.disabled||this.config.readonly||!this.rendered)return;this.close();let e=this.def,t=new g({lookup:e,flex:1}),o=this.typed?this.input.value:"";t.on("confirm",r=>i(r));let i=r=>{r[0]&&this.pickRecord(r[0]),n.close()},n=this.win=new f({title:e.title??s("search"),width:e.width??720,height:e.height??520,layout:"fit",items:[t],buttons:[{text:s("cancel"),handler:()=>n.close()},{text:s("lookupSelect"),variant:"primary",handler:()=>i(t.getSelection())}]});n.on("destroy",()=>{this.win=void 0,this.rendered&&this.input.focus()}),n.show(),o&&t.search(o),t.focus()}pickRecord(e){let{valueField:t,displayField:o}=this.config,i={value:e.get(t),label:String(e.get(o)??e.get(t)??""),raw:e.data};this.pick(i)}};p("lookupfield",l);export{l as a};
2
- //# sourceMappingURL=chunk-LEE2FEEL.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/components/fields/lookupfield/lookupfield.ts"],
4
- "sourcesContent": ["import { SuggestField, type SuggestConfig } from '../suggestfield/suggestfield';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport type { Model } from '../../../data/model';\nimport type { Store } from '../../../data/store';\nimport { iconEl } from '../../base/icon/icon';\nimport { Window } from '../../overlays/window/window';\nimport { SearchGrid, resolveLookup, lookupStore, type LookupDef } from '../../data/searchgrid/searchgrid';\n\nexport interface LookupFieldConfig<V = unknown> extends SuggestConfig<V> {\n /** A definition or the name given to `registerLookup`. */\n lookup: LookupDef | string;\n}\n\n/**\n * Pick a record from a big set: type to get suggestions, or press the magnifier (or F4) to open a search window\n * with filters and a grid. The value is the record's `valueField`; the text is its `displayField`.\n */\nexport class LookupField<V = unknown> extends SuggestField<V> {\n protected override baseCls = 'op-field op-textfield op-picker op-suggest op-lookup';\n private def: LookupDef;\n private suggestStore?: Store<any>;\n private win?: Window;\n\n constructor(config: LookupFieldConfig<V>) {\n const def = resolveLookup(config.lookup);\n super({\n ...config,\n icon: false,\n valueField: def.valueField ?? 'id',\n displayField: def.displayField ?? 'name',\n query: (text) => this.suggest(text),\n });\n this.def = def;\n }\n\n /** Typing: filter a private store by the quick-search field and offer its page of records. */\n private async suggest(text: string) {\n const s = (this.suggestStore ??= lookupStore(this.def));\n const name = this.def.queryField ?? this.def.filters?.[0]?.name ?? this.config.displayField!;\n const field = this.def.filters?.find((f) => f.name === name)?.field ?? name;\n await s.filter({ field, op: 'contains', value: text });\n return s.getData();\n }\n\n protected override createControl() {\n const wrap = super.createControl();\n const btn = h('button', 'op-picker__trigger op-lookup__btn', { type: 'button', tabindex: -1, 'aria-label': t('lookupOpen'), 'aria-haspopup': 'dialog' }, iconEl('search'));\n this.listen(btn, 'mousedown', (e: Event) => e.preventDefault());\n this.listen(btn, 'click', () => this.openDialog());\n wrap.append(btn);\n this.own(() => this.win?.destroy());\n return wrap;\n }\n\n protected override onKey(e: KeyboardEvent) {\n if (e.key === 'F4' || (e.altKey && e.key === 'ArrowDown')) {\n e.preventDefault();\n this.openDialog();\n } else super.onKey(e);\n }\n\n protected override onDisabled(disabled: boolean) {\n super.onDisabled(disabled);\n (this.el.querySelector('.op-lookup__btn') as HTMLButtonElement).disabled = disabled;\n }\n\n /** Opens the search window; the text typed so far pre-fills the quick-search field. */\n openDialog(): void {\n if (this.win || this.config.disabled || this.config.readonly || !this.rendered) return;\n this.close();\n const d = this.def;\n const sg = new SearchGrid({ lookup: d, flex: 1 });\n const text = this.typed ? this.input.value : '';\n sg.on('confirm', (recs: Model[]) => done(recs));\n const done = (recs: Model[]) => {\n if (recs[0]) this.pickRecord(recs[0]);\n win.close();\n };\n const win: Window = (this.win = new Window({\n title: d.title ?? t('search'),\n width: d.width ?? 720,\n height: d.height ?? 520,\n layout: 'fit',\n items: [sg],\n buttons: [{ text: t('cancel'), handler: () => win.close() }, { text: t('lookupSelect'), variant: 'primary', handler: () => done(sg.getSelection()) }],\n }));\n win.on('destroy', () => {\n this.win = undefined;\n if (this.rendered) this.input.focus();\n });\n win.show();\n if (text) void sg.search(text);\n sg.focus();\n }\n\n private pickRecord(rec: Model): void {\n const { valueField, displayField } = this.config;\n const item = { value: rec.get(valueField!), label: String(rec.get(displayField!) ?? rec.get(valueField!) ?? ''), raw: rec.data };\n this.pick(item as any);\n }\n}\nregister('lookupfield', LookupField);\n"],
5
- "mappings": "sSAmBO,IAAMA,EAAN,cAAuCC,CAAgB,CACzC,QAAU,uDACrB,IACA,aACA,IAER,YAAYC,EAA8B,CACxC,IAAMC,EAAMC,EAAcF,EAAO,MAAM,EACvC,MAAM,CACJ,GAAGA,EACH,KAAM,GACN,WAAYC,EAAI,YAAc,KAC9B,aAAcA,EAAI,cAAgB,OAClC,MAAQE,GAAS,KAAK,QAAQA,CAAI,CACpC,CAAC,EACD,KAAK,IAAMF,CACb,CAGA,MAAc,QAAQE,EAAc,CAClC,IAAMC,EAAK,KAAK,eAAiBC,EAAY,KAAK,GAAG,EAC/CC,EAAO,KAAK,IAAI,YAAc,KAAK,IAAI,UAAU,CAAC,GAAG,MAAQ,KAAK,OAAO,aACzEC,EAAQ,KAAK,IAAI,SAAS,KAAMC,GAAMA,EAAE,OAASF,CAAI,GAAG,OAASA,EACvE,aAAMF,EAAE,OAAO,CAAE,MAAAG,EAAO,GAAI,WAAY,MAAOJ,CAAK,CAAC,EAC9CC,EAAE,QAAQ,CACnB,CAEmB,eAAgB,CACjC,IAAMK,EAAO,MAAM,cAAc,EAC3BC,EAAMC,EAAE,SAAU,oCAAqC,CAAE,KAAM,SAAU,SAAU,GAAI,aAAcC,EAAE,YAAY,EAAG,gBAAiB,QAAS,EAAGC,EAAO,QAAQ,CAAC,EACzK,YAAK,OAAOH,EAAK,YAAcI,GAAaA,EAAE,eAAe,CAAC,EAC9D,KAAK,OAAOJ,EAAK,QAAS,IAAM,KAAK,WAAW,CAAC,EACjDD,EAAK,OAAOC,CAAG,EACf,KAAK,IAAI,IAAM,KAAK,KAAK,QAAQ,CAAC,EAC3BD,CACT,CAEmB,MAAM,EAAkB,CACrC,EAAE,MAAQ,MAAS,EAAE,QAAU,EAAE,MAAQ,aAC3C,EAAE,eAAe,EACjB,KAAK,WAAW,GACX,MAAM,MAAM,CAAC,CACtB,CAEmB,WAAWM,EAAmB,CAC/C,MAAM,WAAWA,CAAQ,EACxB,KAAK,GAAG,cAAc,iBAAiB,EAAwB,SAAWA,CAC7E,CAGA,YAAmB,CACjB,GAAI,KAAK,KAAO,KAAK,OAAO,UAAY,KAAK,OAAO,UAAY,CAAC,KAAK,SAAU,OAChF,KAAK,MAAM,EACX,IAAMC,EAAI,KAAK,IACTC,EAAK,IAAIC,EAAW,CAAE,OAAQF,EAAG,KAAM,CAAE,CAAC,EAC1Cb,EAAO,KAAK,MAAQ,KAAK,MAAM,MAAQ,GAC7Cc,EAAG,GAAG,UAAYE,GAAkBC,EAAKD,CAAI,CAAC,EAC9C,IAAMC,EAAQD,GAAkB,CAC1BA,EAAK,CAAC,GAAG,KAAK,WAAWA,EAAK,CAAC,CAAC,EACpCE,EAAI,MAAM,CACZ,EACMA,EAAe,KAAK,IAAM,IAAIC,EAAO,CACzC,MAAON,EAAE,OAASJ,EAAE,QAAQ,EAC5B,MAAOI,EAAE,OAAS,IAClB,OAAQA,EAAE,QAAU,IACpB,OAAQ,MACR,MAAO,CAACC,CAAE,EACV,QAAS,CAAC,CAAE,KAAML,EAAE,QAAQ,EAAG,QAAS,IAAMS,EAAI,MAAM,CAAE,EAAG,CAAE,KAAMT,EAAE,cAAc,EAAG,QAAS,UAAW,QAAS,IAAMQ,EAAKH,EAAG,aAAa,CAAC,CAAE,CAAC,CACtJ,CAAC,EACDI,EAAI,GAAG,UAAW,IAAM,CACtB,KAAK,IAAM,OACP,KAAK,UAAU,KAAK,MAAM,MAAM,CACtC,CAAC,EACDA,EAAI,KAAK,EACLlB,GAAWc,EAAG,OAAOd,CAAI,EAC7Bc,EAAG,MAAM,CACX,CAEQ,WAAWM,EAAkB,CACnC,GAAM,CAAE,WAAAC,EAAY,aAAAC,CAAa,EAAI,KAAK,OACpCC,EAAO,CAAE,MAAOH,EAAI,IAAIC,CAAW,EAAG,MAAO,OAAOD,EAAI,IAAIE,CAAa,GAAKF,EAAI,IAAIC,CAAW,GAAK,EAAE,EAAG,IAAKD,EAAI,IAAK,EAC/H,KAAK,KAAKG,CAAW,CACvB,CACF,EACAC,EAAS,cAAe7B,CAAW",
6
- "names": ["LookupField", "SuggestField", "config", "def", "resolveLookup", "text", "s", "lookupStore", "name", "field", "f", "wrap", "btn", "h", "t", "iconEl", "e", "disabled", "d", "sg", "SearchGrid", "recs", "done", "win", "Window", "rec", "valueField", "displayField", "item", "register"]
7
- }
@@ -1,2 +0,0 @@
1
- import{c as g}from"./chunk-IHAYOSBR.js";import{a as m,b}from"./chunk-IYPKPLCU.js";import{b as h,f}from"./chunk-PZSHOSOS.js";import{e as s}from"./chunk-MA5BJL3S.js";var c=class extends m{baseCls="op-pagination";tag="nav";unsub;onRender(){this.el.setAttribute("aria-label",s("pageLabel")),this.listen(this.el,"click",t=>{let n=t.target.closest("button[data-page]");n&&!n.disabled&&this.setPage(Number(n.dataset.page))}),this.bindStore(this.config.store),this.own(()=>this.unsub?.()),this.paint()}bindStore(t){this.unsub?.(),this.unsub=t?.subscribe(()=>this.paint())}getPage(){return this.config.store?.page??this.config.page??1}size(){return this.config.store?.pageSize||this.config.pageSize||20}total(){return this.config.store?.totalCount??this.config.total??0}pages(){return Math.max(1,Math.ceil(this.total()/this.size()))}setPage(t){t=f(t,1,this.pages()),!(t===this.getPage()||this.emit("before-page-change",t)===!1)&&(this.config.store?this.config.store.setPage(t):(this.config.page=t,this.paint()),this.emit("page-change",t))}setTotal(t){this.config.total=t,this.paint()}setPageSize(t){this.config.pageSize=t,this.paint()}setStore(t){this.config.store=t,this.bindStore(t),this.paint()}window(){let t=this.pages(),n=this.getPage(),o=this.config.siblings??1;if(t<=o*2+5)return Array.from({length:t},(i,a)=>a+1);let p=new Set([1,t,...Array.from({length:o*2+1},(i,a)=>n-o+a)].filter(i=>i>=1&&i<=t)),r=[],e=0;for(let i of[...p].sort((a,l)=>a-l))i-e>1&&r.push(i-e===2?i-1:null),r.push(i),e=i;return r}paint(){if(!this.rendered)return;let t=this.getPage(),n=this.pages(),o=(e,i,a,l=!1,u=!1)=>h("button",`op-button op-button--ghost op-pagination__btn${u?" is-current":""}`,{type:"button","data-page":e,"aria-label":a,"aria-current":u?"page":null,disabled:l},i),p=[o(1,g("chevrons-left"),s("pageFirst"),t===1),o(t-1,g("chevron-left"),s("pagePrev"),t===1),...this.window().map(e=>e==null?h("span","op-pagination__gap",{"aria-hidden":"true"},"\u2026"):o(e,String(e),s("pageGoto",{n:e}),!1,e===t)),o(t+1,g("chevron-right"),s("pageNext"),t===n),o(n,g("chevrons-right"),s("pageLast"),t===n)];if(this.config.showInfo!==!1){let e=this.total(),i=this.size();p.push(h("span","op-pagination__info",{},e?s("pageInfo",{from:(t-1)*i+1,to:Math.min(t*i,e),total:e}):""))}let r=this.el.contains(document.activeElement)?document.activeElement.dataset.page:void 0;this.el.replaceChildren(...p),r&&this.el.querySelector(`[data-page="${r}"]:not(:disabled)`)?.focus()}};b("pagination",c);export{c as a};
2
- //# sourceMappingURL=chunk-LMGCV35W.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/components/data/pagination/pagination.ts"],
4
- "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h, clamp } from '../../../core/dom';\nimport { t } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport type { Store } from '../../../data/store';\n\nexport interface PaginationConfig extends ComponentConfig {\n /** Reads and drives the store's page. Without it, use `total`/`pageSize`/`page`. */\n store?: Store<any>;\n total?: number;\n pageSize?: number;\n page?: number;\n /** Page buttons shown on each side of the current one. Default 1. */\n siblings?: number;\n showInfo?: boolean;\n}\n\nexport class Pagination extends Component<PaginationConfig> {\n protected override baseCls = 'op-pagination';\n protected override tag = 'nav' as const;\n private unsub?: () => void;\n\n protected override onRender() {\n this.el.setAttribute('aria-label', t('pageLabel'));\n this.listen(this.el, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLButtonElement>('button[data-page]');\n if (b && !b.disabled) this.setPage(Number(b.dataset.page));\n });\n this.bindStore(this.config.store);\n this.own(() => this.unsub?.());\n this.paint();\n }\n\n private bindStore(store?: Store<any>) {\n this.unsub?.();\n this.unsub = store?.subscribe(() => this.paint());\n }\n\n getPage(): number {\n return this.config.store?.page ?? this.config.page ?? 1;\n }\n private size(): number {\n return this.config.store?.pageSize || this.config.pageSize || 20;\n }\n private total(): number {\n return this.config.store?.totalCount ?? this.config.total ?? 0;\n }\n private pages(): number {\n return Math.max(1, Math.ceil(this.total() / this.size()));\n }\n\n /** Goes to a page (`before-page-change` can cancel), updating the store when there is one. */\n setPage(page: number): void {\n page = clamp(page, 1, this.pages());\n if (page === this.getPage() || this.emit('before-page-change', page) === false) return;\n if (this.config.store) this.config.store.setPage(page);\n else {\n this.config.page = page;\n this.paint();\n }\n this.emit('page-change', page);\n }\n setTotal(total: number) {\n this.config.total = total;\n this.paint();\n }\n setPageSize(size: number) {\n this.config.pageSize = size;\n this.paint();\n }\n setStore(store: Store<any>) {\n this.config.store = store;\n this.bindStore(store);\n this.paint();\n }\n\n /** Page numbers with `null` where a gap is collapsed: 1 \u2026 4 5 6 \u2026 20. */\n private window(): Array<number | null> {\n const last = this.pages();\n const cur = this.getPage();\n const s = this.config.siblings ?? 1;\n if (last <= s * 2 + 5) return Array.from({ length: last }, (_, i) => i + 1); // small sets: no gaps\n const set = new Set([1, last, ...Array.from({ length: s * 2 + 1 }, (_, i) => cur - s + i)].filter((n) => n >= 1 && n <= last));\n const out: Array<number | null> = [];\n let prev = 0;\n for (const n of [...set].sort((a, b) => a - b)) {\n if (n - prev > 1) out.push(n - prev === 2 ? n - 1 : null);\n out.push(n);\n prev = n;\n }\n return out;\n }\n\n private paint() {\n if (!this.rendered) return;\n const cur = this.getPage();\n const last = this.pages();\n const btn = (page: number, content: Node | string, label: string, disabled = false, current = false) =>\n h('button', `op-button op-button--ghost op-pagination__btn${current ? ' is-current' : ''}`, { type: 'button', 'data-page': page, 'aria-label': label, 'aria-current': current ? 'page' : null, disabled }, content);\n const nodes: Node[] = [\n btn(1, iconEl('chevrons-left'), t('pageFirst'), cur === 1),\n btn(cur - 1, iconEl('chevron-left'), t('pagePrev'), cur === 1),\n ...this.window().map((n) => (n == null ? h('span', 'op-pagination__gap', { 'aria-hidden': 'true' }, '\u2026') : btn(n, String(n), t('pageGoto', { n }), false, n === cur))),\n btn(cur + 1, iconEl('chevron-right'), t('pageNext'), cur === last),\n btn(last, iconEl('chevrons-right'), t('pageLast'), cur === last),\n ];\n if (this.config.showInfo !== false) {\n const total = this.total();\n const size = this.size();\n nodes.push(h('span', 'op-pagination__info', {}, total ? t('pageInfo', { from: (cur - 1) * size + 1, to: Math.min(cur * size, total), total }) : ''));\n }\n const focusPage = this.el.contains(document.activeElement) ? (document.activeElement as HTMLElement).dataset.page : undefined;\n this.el.replaceChildren(...nodes);\n if (focusPage) this.el.querySelector<HTMLElement>(`[data-page=\"${focusPage}\"]:not(:disabled)`)?.focus();\n }\n}\nregister('pagination', Pagination);\n"],
5
- "mappings": "oKAkBO,IAAMA,EAAN,cAAyBC,CAA4B,CACvC,QAAU,gBACV,IAAM,MACjB,MAEW,UAAW,CAC5B,KAAK,GAAG,aAAa,aAAcC,EAAE,WAAW,CAAC,EACjD,KAAK,OAAO,KAAK,GAAI,QAAUC,GAAa,CAC1C,IAAMC,EAAKD,EAAE,OAAuB,QAA2B,mBAAmB,EAC9EC,GAAK,CAACA,EAAE,UAAU,KAAK,QAAQ,OAAOA,EAAE,QAAQ,IAAI,CAAC,CAC3D,CAAC,EACD,KAAK,UAAU,KAAK,OAAO,KAAK,EAChC,KAAK,IAAI,IAAM,KAAK,QAAQ,CAAC,EAC7B,KAAK,MAAM,CACb,CAEQ,UAAUC,EAAoB,CACpC,KAAK,QAAQ,EACb,KAAK,MAAQA,GAAO,UAAU,IAAM,KAAK,MAAM,CAAC,CAClD,CAEA,SAAkB,CAChB,OAAO,KAAK,OAAO,OAAO,MAAQ,KAAK,OAAO,MAAQ,CACxD,CACQ,MAAe,CACrB,OAAO,KAAK,OAAO,OAAO,UAAY,KAAK,OAAO,UAAY,EAChE,CACQ,OAAgB,CACtB,OAAO,KAAK,OAAO,OAAO,YAAc,KAAK,OAAO,OAAS,CAC/D,CACQ,OAAgB,CACtB,OAAO,KAAK,IAAI,EAAG,KAAK,KAAK,KAAK,MAAM,EAAI,KAAK,KAAK,CAAC,CAAC,CAC1D,CAGA,QAAQC,EAAoB,CAC1BA,EAAOC,EAAMD,EAAM,EAAG,KAAK,MAAM,CAAC,EAC9B,EAAAA,IAAS,KAAK,QAAQ,GAAK,KAAK,KAAK,qBAAsBA,CAAI,IAAM,MACrE,KAAK,OAAO,MAAO,KAAK,OAAO,MAAM,QAAQA,CAAI,GAEnD,KAAK,OAAO,KAAOA,EACnB,KAAK,MAAM,GAEb,KAAK,KAAK,cAAeA,CAAI,EAC/B,CACA,SAASE,EAAe,CACtB,KAAK,OAAO,MAAQA,EACpB,KAAK,MAAM,CACb,CACA,YAAYC,EAAc,CACxB,KAAK,OAAO,SAAWA,EACvB,KAAK,MAAM,CACb,CACA,SAASJ,EAAmB,CAC1B,KAAK,OAAO,MAAQA,EACpB,KAAK,UAAUA,CAAK,EACpB,KAAK,MAAM,CACb,CAGQ,QAA+B,CACrC,IAAMK,EAAO,KAAK,MAAM,EAClBC,EAAM,KAAK,QAAQ,EACnBC,EAAI,KAAK,OAAO,UAAY,EAClC,GAAIF,GAAQE,EAAI,EAAI,EAAG,OAAO,MAAM,KAAK,CAAE,OAAQF,CAAK,EAAG,CAACG,EAAGC,IAAMA,EAAI,CAAC,EAC1E,IAAMC,EAAM,IAAI,IAAI,CAAC,EAAGL,EAAM,GAAG,MAAM,KAAK,CAAE,OAAQE,EAAI,EAAI,CAAE,EAAG,CAACC,EAAGC,IAAMH,EAAMC,EAAIE,CAAC,CAAC,EAAE,OAAQE,GAAMA,GAAK,GAAKA,GAAKN,CAAI,CAAC,EACvHO,EAA4B,CAAC,EAC/BC,EAAO,EACX,QAAWF,IAAK,CAAC,GAAGD,CAAG,EAAE,KAAK,CAAC,EAAGX,IAAM,EAAIA,CAAC,EACvCY,EAAIE,EAAO,GAAGD,EAAI,KAAKD,EAAIE,IAAS,EAAIF,EAAI,EAAI,IAAI,EACxDC,EAAI,KAAKD,CAAC,EACVE,EAAOF,EAET,OAAOC,CACT,CAEQ,OAAQ,CACd,GAAI,CAAC,KAAK,SAAU,OACpB,IAAMN,EAAM,KAAK,QAAQ,EACnBD,EAAO,KAAK,MAAM,EAClBS,EAAM,CAACb,EAAcc,EAAwBC,EAAeC,EAAW,GAAOC,EAAU,KAC5F,EAAE,SAAU,gDAAgDA,EAAU,cAAgB,EAAE,GAAI,CAAE,KAAM,SAAU,YAAajB,EAAM,aAAce,EAAO,eAAgBE,EAAU,OAAS,KAAM,SAAAD,CAAS,EAAGF,CAAO,EAC9MI,EAAgB,CACpBL,EAAI,EAAGM,EAAO,eAAe,EAAGvB,EAAE,WAAW,EAAGS,IAAQ,CAAC,EACzDQ,EAAIR,EAAM,EAAGc,EAAO,cAAc,EAAGvB,EAAE,UAAU,EAAGS,IAAQ,CAAC,EAC7D,GAAG,KAAK,OAAO,EAAE,IAAKK,GAAOA,GAAK,KAAO,EAAE,OAAQ,qBAAsB,CAAE,cAAe,MAAO,EAAG,QAAG,EAAIG,EAAIH,EAAG,OAAOA,CAAC,EAAGd,EAAE,WAAY,CAAE,EAAAc,CAAE,CAAC,EAAG,GAAOA,IAAML,CAAG,CAAE,EACrKQ,EAAIR,EAAM,EAAGc,EAAO,eAAe,EAAGvB,EAAE,UAAU,EAAGS,IAAQD,CAAI,EACjES,EAAIT,EAAMe,EAAO,gBAAgB,EAAGvB,EAAE,UAAU,EAAGS,IAAQD,CAAI,CACjE,EACA,GAAI,KAAK,OAAO,WAAa,GAAO,CAClC,IAAMF,EAAQ,KAAK,MAAM,EACnBC,EAAO,KAAK,KAAK,EACvBe,EAAM,KAAK,EAAE,OAAQ,sBAAuB,CAAC,EAAGhB,EAAQN,EAAE,WAAY,CAAE,MAAOS,EAAM,GAAKF,EAAO,EAAG,GAAI,KAAK,IAAIE,EAAMF,EAAMD,CAAK,EAAG,MAAAA,CAAM,CAAC,EAAI,EAAE,CAAC,CACrJ,CACA,IAAMkB,EAAY,KAAK,GAAG,SAAS,SAAS,aAAa,EAAK,SAAS,cAA8B,QAAQ,KAAO,OACpH,KAAK,GAAG,gBAAgB,GAAGF,CAAK,EAC5BE,GAAW,KAAK,GAAG,cAA2B,eAAeA,CAAS,mBAAmB,GAAG,MAAM,CACxG,CACF,EACAC,EAAS,aAAc3B,CAAU",
6
- "names": ["Pagination", "Component", "t", "e", "b", "store", "page", "clamp", "total", "size", "last", "cur", "s", "_", "i", "set", "n", "out", "prev", "btn", "content", "label", "disabled", "current", "nodes", "iconEl", "focusPage", "register"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/components/chat/chat/chat.ts"],
4
- "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, getLocale } from '../../../core/i18n';\nimport { Button } from '../../base/button/button';\nimport { iconEl } from '../../base/icon/icon';\n\nexport interface ChatMessage {\n id?: string | number;\n /** The author's id (compare with the `me` of the config). */\n from: string;\n text: string;\n time?: number | Date | string;\n status?: 'sending' | 'sent' | 'delivered' | 'read' | 'error';\n /** The id of the message this one answers (shown as a quote). */\n replyTo?: string | number;\n /** Anything the app wants to keep with the message. */\n meta?: unknown;\n}\n\nexport interface ChatConfig extends ComponentConfig {\n messages?: ChatMessage[];\n /** The id of whoever is using the chat: their messages go on the right. */\n me: string;\n users?: Record<string, { name: string; color?: string }>;\n /** Show the author's name above the first bubble of a group of theirs. Default true. */\n showAuthors?: boolean;\n placeholder?: string;\n /** Prompt chips above the composer; clicking one sends it. */\n suggestions?: string[];\n readonly?: boolean;\n /** Enter sends and Shift+Enter breaks the line. Default true. */\n sendOnEnter?: boolean;\n maxLength?: number;\n /** Custom bubble content. The default is a minimal, safe formatting (`**bold**`, `*italic*`, `` `code` ``, line breaks). */\n renderer?: (msg: ChatMessage) => string | Node;\n}\n\ntype Msg = ChatMessage & { id: string | number; at: number };\n\nconst INLINE = /(\\*\\*[^*\\n]+\\*\\*|\\*[^*\\n]+\\*|`[^`\\n]+`)/;\n\n/** Text \u2192 nodes: bold, italic, code and line breaks only. Everything else stays text, so nothing can inject markup. */\nfunction format(text: string): Node[] {\n const out: Node[] = [];\n text.split('\\n').forEach((line, i) => {\n if (i) out.push(document.createElement('br'));\n for (const part of line.split(INLINE)) {\n if (!part) continue;\n if (part.startsWith('**') && part.endsWith('**') && part.length > 4) out.push(h('strong', '', {}, part.slice(2, -2)));\n else if (part.startsWith('`') && part.endsWith('`') && part.length > 2) out.push(h('code', 'op-chat__code', {}, part.slice(1, -1)));\n else if (part.startsWith('*') && part.endsWith('*') && part.length > 2) out.push(h('em', '', {}, part.slice(1, -1)));\n else out.push(document.createTextNode(part));\n }\n });\n return out;\n}\n\nconst dayKey = (at: number) => new Date(at).toDateString();\nconst lang = () => getLocale()._lang;\n\n/** Conversation view: bubbles grouped by author and day, delivery ticks, typing dots, streaming text, prompt chips and a composer. */\nexport class Chat extends Component<ChatConfig> {\n protected override baseCls = 'op-chat';\n private msgs: Msg[] = [];\n private seq = 0;\n private logEl!: HTMLElement;\n private emptyEl!: HTMLElement;\n private typingEl!: HTMLElement;\n private chipsEl!: HTMLElement;\n private input!: HTMLTextAreaElement;\n private sendBtn!: Button;\n private busy = false;\n\n protected override build() {\n const c = this.config;\n this.logEl = h('div', 'op-chat__log', { role: 'log', 'aria-live': 'polite', 'aria-relevant': 'additions', 'aria-label': t('chatLog'), tabindex: 0 });\n this.emptyEl = h('div', 'op-chat__empty', {}, t('chatEmpty'));\n this.typingEl = h('div', 'op-chat__typing', { 'aria-hidden': 'true' }, h('span', 'op-chat__dots', {}, h('i'), h('i'), h('i')), h('span', 'op-chat__typing-text'));\n this.typingEl.hidden = true;\n this.chipsEl = h('div', 'op-chat__suggestions', { role: 'group', 'aria-label': t('chatSuggestions') });\n this.input = h('textarea', 'op-chat__input', { rows: 1, placeholder: c.placeholder ?? t('chatPlaceholder'), 'aria-label': c.placeholder ?? t('chatPlaceholder'), maxlength: c.maxLength ?? null });\n this.sendBtn = new Button({ icon: 'send', variant: 'primary', ariaLabel: t('chatSend'), handler: () => this.submit() });\n this.own(() => this.sendBtn.destroy());\n return h('div', this.baseCls, {}, this.logEl, this.chipsEl, h('div', 'op-chat__composer', {}, this.input, this.sendBtn.el));\n }\n\n protected override onRender() {\n const c = this.config;\n this.listen(this.input, 'input', () => this.grow());\n this.listen(this.input, 'keydown', (e: KeyboardEvent) => {\n if (e.key !== 'Enter' || e.shiftKey || e.isComposing || c.sendOnEnter === false) return;\n e.preventDefault();\n this.submit();\n });\n this.listen(this.chipsEl, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('[data-s]');\n if (!b) return;\n this.emit('suggestion', b.dataset.s);\n this.send(b.dataset.s!);\n });\n this.listen(this.logEl, 'click', (e: Event) => {\n const el = (e.target as HTMLElement).closest<HTMLElement>('.op-chat__msg');\n const m = el && this.msgs.find((x) => String(x.id) === el.dataset.id);\n if (m) this.emit('message-click', m);\n });\n this.setReadonly(!!c.readonly);\n this.msgs = (c.messages ?? []).map((m) => this.norm(m));\n this.setSuggestions(c.suggestions ?? []);\n this.renderAll();\n }\n\n override notifyMount() {\n super.notifyMount();\n if (!this.rendered) return; // a Chat in a lazy tab is told it is mounted before it has a DOM\n this.sendBtn.notifyMount();\n this.scrollToBottom();\n }\n\n // ---- messages ------------------------------------------------------------------------------\n\n private norm(m: ChatMessage): Msg {\n const at = m.time == null ? Date.now() : new Date(m.time).getTime();\n return { ...m, id: m.id ?? `m${++this.seq}`, at };\n }\n\n getMessages(): ChatMessage[] {\n return this.msgs;\n }\n\n addMessage(msg: ChatMessage): ChatMessage {\n const m = this.norm(msg);\n this.msgs.push(m);\n if (!this.rendered) return (this.config.messages = this.msgs, m);\n const stick = this.nearBottom() || m.from === this.config.me;\n this.mountMsg(m, this.msgs.length - 1);\n this.syncEmpty();\n if (stick) this.scrollToBottom();\n return m;\n }\n\n setMessages(list: ChatMessage[]): void {\n this.msgs = list.map((m) => this.norm(m));\n this.config.messages = this.msgs; // so a chat that is not rendered yet (a lazy tab) starts with them\n if (this.rendered) {\n this.renderAll();\n this.scrollToBottom();\n }\n }\n\n updateMessage(id: string | number, patch: Partial<ChatMessage>): void {\n const i = this.msgs.findIndex((m) => m.id === id);\n if (i < 0) return;\n const stick = this.nearBottom();\n this.msgs[i] = { ...this.msgs[i], ...patch, at: patch.time != null ? new Date(patch.time).getTime() : this.msgs[i].at };\n if (!this.rendered) return;\n const old = this.msgEl(id);\n const fresh = this.buildMsg(this.msgs[i], i);\n old ? old.replaceWith(fresh) : this.logEl.insertBefore(fresh, this.typingEl);\n this.decorate(i);\n if (stick) this.scrollToBottom();\n }\n\n /** Adds text to a message: for answers that arrive in pieces (AI streaming). Only that bubble's text is redrawn. */\n appendToMessage(id: string | number, text: string): void {\n const m = this.msgs.find((x) => x.id === id);\n if (!m) return;\n m.text += text;\n const el = this.msgEl(id)?.querySelector('.op-chat__text');\n if (!el) return;\n const stick = this.nearBottom();\n this.fill(el as HTMLElement, m);\n if (stick) this.scrollToBottom();\n }\n\n removeMessage(id: string | number): void {\n this.msgs = this.msgs.filter((m) => m.id !== id);\n if (this.rendered) this.renderAll();\n }\n\n private msgEl(id: string | number): HTMLElement | null {\n return this.logEl.querySelector(`[data-id=\"${CSS.escape(String(id))}\"]`);\n }\n\n // ---- rendering -----------------------------------------------------------------------------\n\n private renderAll(): void {\n this.logEl.replaceChildren(this.emptyEl, ...this.msgs.flatMap((m, i) => this.nodesFor(m, i)), this.typingEl);\n this.syncEmpty();\n }\n\n /** The day separator (when the day changes) and the message itself. */\n private nodesFor(m: Msg, i: number): HTMLElement[] {\n const prev = this.msgs[i - 1];\n const nodes: HTMLElement[] = [];\n if (!prev || dayKey(prev.at) !== dayKey(m.at)) nodes.push(h('div', 'op-chat__day', { role: 'separator' }, h('span', '', {}, this.dayLabel(m.at))));\n nodes.push(this.buildMsg(m, i));\n return nodes;\n }\n\n private mountMsg(m: Msg, i: number): void {\n for (const n of this.nodesFor(m, i)) this.logEl.insertBefore(n, this.typingEl);\n this.decorate(i - 1);\n this.decorate(i);\n }\n\n private dayLabel(at: number): string {\n const d = dayKey(at);\n const now = Date.now();\n if (d === dayKey(now)) return t('chatToday');\n if (d === dayKey(now - 864e5)) return t('chatYesterday');\n return new Intl.DateTimeFormat(lang(), { dateStyle: 'medium' }).format(at);\n }\n\n private fill(el: HTMLElement, m: Msg): void {\n const out = this.config.renderer ? this.config.renderer(m) : format(m.text);\n el.replaceChildren(...(Array.isArray(out) ? out : [out]));\n }\n\n private buildMsg(m: Msg, i: number): HTMLElement {\n const c = this.config;\n const mine = m.from === c.me;\n const user = c.users?.[m.from];\n const el = h('article', `op-chat__msg ${mine ? 'is-me' : 'is-them'}`, { 'data-id': String(m.id) });\n const bubble = h('div', 'op-chat__bubble');\n if (!mine && c.showAuthors !== false && user) {\n const name = h('div', 'op-chat__author', {}, user.name);\n if (user.color) name.style.color = user.color;\n bubble.append(name);\n }\n const quoted = m.replyTo != null ? this.msgs.find((x) => x.id === m.replyTo) : undefined;\n if (quoted) bubble.append(h('div', 'op-chat__reply', { 'aria-label': t('chatReply') }, h('strong', '', {}, quoted.from === c.me ? '' : (c.users?.[quoted.from]?.name ?? quoted.from)), quoted.text.length > 80 ? `${quoted.text.slice(0, 80)}\u2026` : quoted.text));\n const text = h('div', 'op-chat__text');\n this.fill(text, m);\n const time = new Intl.DateTimeFormat(lang(), { hour: '2-digit', minute: '2-digit' }).format(m.at);\n bubble.append(text, h('span', 'op-chat__meta', {}, h('time', '', { datetime: new Date(m.at).toISOString() }, time), mine && m.status ? this.statusEl(m.status) : ''));\n el.append(bubble);\n this.group(el, i);\n return el;\n }\n\n private statusEl(s: NonNullable<ChatMessage['status']>): HTMLElement {\n const el = h('span', `op-chat__status is-${s}`, { role: 'img', 'aria-label': s });\n if (s === 'error') el.append(iconEl('alert'));\n else if (s !== 'sending') el.append(iconEl('check'), ...(s === 'sent' ? [] : [iconEl('check')]));\n return el;\n }\n\n /** Group classes: first/last bubble of a run by the same author on the same day. */\n private group(el: HTMLElement, i: number): void {\n const m = this.msgs[i];\n const same = (a?: Msg, b?: Msg) => !!a && !!b && a.from === b.from && dayKey(a.at) === dayKey(b.at);\n el.classList.toggle('is-first', !same(this.msgs[i - 1], m));\n el.classList.toggle('is-last', !same(m, this.msgs[i + 1]));\n el.querySelector('.op-chat__author')?.toggleAttribute('hidden', same(this.msgs[i - 1], m));\n }\n\n private decorate(i: number): void {\n const m = this.msgs[i];\n const el = m && this.msgEl(m.id);\n if (el) this.group(el, i);\n }\n\n private syncEmpty(): void {\n this.emptyEl.hidden = this.msgs.length > 0;\n this.el.classList.toggle('is-empty', !this.msgs.length);\n }\n\n private nearBottom(): boolean {\n const l = this.logEl;\n return l.scrollHeight - l.scrollTop - l.clientHeight < 48;\n }\n\n scrollToBottom(): void {\n this.render();\n this.logEl.scrollTop = this.logEl.scrollHeight;\n }\n\n // ---- typing, suggestions, state ------------------------------------------------------------\n\n /** `true` shows the dots, a name shows \"name is typing\u2026\", `false` hides them. */\n setTyping(who: boolean | string): void {\n const stick = this.nearBottom();\n this.typingEl.hidden = !who;\n this.typingEl.querySelector('.op-chat__typing-text')!.textContent = typeof who === 'string' ? t('chatTyping', { n: who }) : '';\n if (who && stick) this.scrollToBottom();\n }\n\n setSuggestions(list: string[]): void {\n this.config.suggestions = list;\n if (!this.rendered) return;\n this.chipsEl.hidden = !list.length;\n this.chipsEl.replaceChildren(...list.map((s) => h('button', 'op-chat__chip', { type: 'button', 'data-s': s }, s)));\n }\n\n /** While busy (an answer is on its way) sending is off and the log tells assistive tech to wait. */\n setBusy(busy: boolean): void {\n this.busy = busy;\n this.el.classList.toggle('is-busy', busy);\n this.logEl.setAttribute('aria-busy', String(busy));\n this.sendBtn.setDisabled(busy || !!this.config.readonly);\n for (const b of Array.from(this.chipsEl.children) as HTMLButtonElement[]) b.disabled = busy || !!this.config.readonly;\n }\n\n setReadonly(readonly: boolean): void {\n this.config.readonly = readonly;\n if (!this.rendered) return;\n this.input.readOnly = readonly;\n this.el.classList.toggle('is-readonly', readonly);\n this.setBusy(this.busy);\n }\n\n setPlaceholder(text: string): void {\n this.config.placeholder = text;\n if (this.rendered) this.input.placeholder = text;\n }\n\n override focus(): void {\n this.render();\n this.input.focus();\n }\n\n // ---- sending -------------------------------------------------------------------------------\n\n private grow(): void {\n this.input.style.height = 'auto';\n this.input.style.height = `${this.input.scrollHeight}px`;\n }\n\n private submit(): void {\n const text = this.input.value;\n if (this.send(text)) {\n this.input.value = '';\n this.grow();\n }\n }\n\n /** The same path as the send button. Returns false when nothing was sent (empty, busy, read-only or cancelled). */\n send(text: string): boolean {\n text = text.trim();\n if (!text || this.busy || this.config.readonly || this.emit('before-send', text) === false) return false;\n const msg = this.addMessage({ from: this.config.me, text, time: Date.now(), status: 'sending' });\n this.emit('send', text, msg);\n return true;\n }\n}\nregister('chat', Chat);\n"],
5
- "mappings": "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",
6
- "names": ["INLINE", "format", "text", "out", "line", "i", "part", "h", "dayKey", "at", "lang", "getLocale", "Chat", "Component", "c", "t", "Button", "b", "el", "m", "x", "msg", "stick", "list", "id", "patch", "old", "fresh", "prev", "nodes", "n", "d", "now", "mine", "user", "bubble", "name", "quoted", "time", "s", "iconEl", "same", "a", "l", "who", "busy", "readonly", "register"]
7
- }
@@ -1,2 +0,0 @@
1
- var l=class{handlers=new Map;on(e,a){let t=this.handlers.get(e);return t?t.push(a):this.handlers.set(e,[a]),()=>this.off(e,a)}once(e,a){let t=this.on(e,(...r)=>(t(),a(...r)));return t}off(e,a){if(!a)this.handlers.delete(e);else{let t=this.handlers.get(e);t&&this.handlers.set(e,t.filter(r=>r!==a))}}emit(e,...a){let t=!0;for(let r of this.handlers.get(e)??[])r(...a)===!1&&(t=!1);return t}clearListeners(){this.handlers.clear()}};var i={_lang:"en",_currency:"USD",_firstDay:"0",required:"This field is required",minLength:"Enter at least {n} characters",maxLength:"Enter at most {n} characters",pattern:"Invalid format",email:"Enter a valid email address",min:"Must be at least {n}",max:"Must be at most {n}",range:"Must be between {min} and {max}",number:"Enter a valid number",date:"Enter a valid date",dateMin:"Date must be on or after {n}",dateMax:"Date must be on or before {n}",notInList:"Choose a value from the list",loading:"Loading",close:"Close",ok:"OK",cancel:"Cancel",clear:"Clear",collapse:"Collapse",expand:"Expand",empty:"No data",search:"Search",lookupOpen:"Open search",lookupSelect:"Select",fbEq:"equals",fbNe:"does not equal",fbContains:"contains",fbNotContains:"does not contain",fbStarts:"starts with",fbEnds:"ends with",fbGt:"greater than",fbGe:"greater than or equal",fbLt:"less than",fbLe:"less than or equal",fbBetween:"is between",fbNotBetween:"is not between",fbIn:"is any of",fbNin:"is none of",fbEmpty:"is empty",fbNotEmpty:"is not empty",fbAnd:"Match all (AND)",fbOr:"Match any (OR)",fbAddFilter:"Add filter",fbAddGroup:"Add group",fbRemove:"Remove",fbClear:"Clear all",fbApply:"Apply",fbField:"Field",fbOperator:"Operator",fbValue:"Value",fbTo:"and",fbList:"a, b, c",fbNone:"No filters",fbLabel:"Filters",views:"Views",viewsName:"Name for this view",viewsSave:"Save view",viewsSaveAs:"Save as new view\u2026",viewsDefault:"Open with this view",viewsDelete:"Delete view",viewsConfirmDelete:'Delete the view "{n}"?',viewsReset:"Reset to initial",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",chatPlaceholder:"Type a message",chatSend:"Send",chatTyping:"{n} is typing\u2026",chatToday:"Today",chatYesterday:"Yesterday",chatEmpty:"No messages yet",chatLog:"Conversation",chatSuggestions:"Suggestions",chatReply:"Reply",wDockLeft:"Dock to the left",wDockRight:"Dock to the right",wDockTop:"Dock to the top",wDockBottom:"Dock to the bottom",tabErrors:"errors",stepOptional:"optional",stepDone:"completed",stepError:"has errors",stepBack:"Back",stepNext:"Next",stepFinish:"Finish",stepReview:"Review",stepSteps:"Steps",stepOf:"Step {n} of {total}",secretShow:"Show value",secretHide:"Hide value",secretStored:"A value is saved. It cannot be shown again.",secretReplace:"Replace",secretKeep:"Keep current",secretWarnTitle:"Replace the saved value?",secretWarn:"The saved value cannot be displayed and will be discarded as soon as you replace it. Type the new value next; it takes effect when you save.",gridSelected:"{n} selected",gridSelectAll:"Select all {n}",gridClearSel:"Clear selection",gridSelectRow:"Select row",gridSelectPage:"Select all rows",gridRowActions:"Row actions",gridColumns:"Columns",gridResize:"Resize column",gridGroupAll:"All",gridOtherCols:"Other",gridGroups:"Column groups",gridColumnSearch:"Search columns",gridNoColumns:"No matching columns",noResults:"No results",results:"{n} results",pageFirst:"First page",pagePrev:"Previous page",pageNext:"Next page",pageLast:"Last page",pageLabel:"Pagination",pageGoto:"Page {n}",pageInfo:"{from}\u2013{to} of {total}",calPrev:"Previous",calNext:"Next",calOpen:"Open calendar",calMonth:"Choose month",breadcrumb:"Breadcrumb",breadcrumbMore:"Show more",sortAsc:"sorted ascending",sortDesc:"sorted descending"},c={_lang:"pt-BR",_currency:"BRL",_firstDay:"0",required:"Campo obrigat\xF3rio",minLength:"Informe ao menos {n} caracteres",maxLength:"Informe no m\xE1ximo {n} caracteres",pattern:"Formato inv\xE1lido",email:"Informe um e-mail v\xE1lido",min:"Deve ser no m\xEDnimo {n}",max:"Deve ser no m\xE1ximo {n}",range:"Deve estar entre {min} e {max}",number:"Informe um n\xFAmero v\xE1lido",date:"Informe uma data v\xE1lida",dateMin:"A data deve ser {n} ou posterior",dateMax:"A data deve ser {n} ou anterior",notInList:"Escolha um valor da lista",loading:"Carregando",close:"Fechar",ok:"OK",cancel:"Cancelar",clear:"Limpar",collapse:"Recolher",expand:"Expandir",empty:"Sem dados",search:"Pesquisar",lookupOpen:"Abrir pesquisa",lookupSelect:"Selecionar",fbEq:"igual a",fbNe:"diferente de",fbContains:"cont\xE9m",fbNotContains:"n\xE3o cont\xE9m",fbStarts:"come\xE7a com",fbEnds:"termina com",fbGt:"maior que",fbGe:"maior ou igual a",fbLt:"menor que",fbLe:"menor ou igual a",fbBetween:"entre",fbNotBetween:"fora do intervalo",fbIn:"\xE9 um de",fbNin:"n\xE3o \xE9 nenhum de",fbEmpty:"est\xE1 vazio",fbNotEmpty:"n\xE3o est\xE1 vazio",fbAnd:"Todas (E)",fbOr:"Qualquer uma (OU)",fbAddFilter:"Adicionar filtro",fbAddGroup:"Adicionar grupo",fbRemove:"Remover",fbClear:"Limpar tudo",fbApply:"Aplicar",fbField:"Campo",fbOperator:"Operador",fbValue:"Valor",fbTo:"e",fbList:"a, b, c",fbNone:"Sem filtros",fbLabel:"Filtros",views:"Vis\xF5es",viewsName:"Nome desta vis\xE3o",viewsSave:"Salvar vis\xE3o",viewsSaveAs:"Salvar como nova vis\xE3o\u2026",viewsDefault:"Abrir com esta vis\xE3o",viewsDelete:"Excluir vis\xE3o",viewsConfirmDelete:'Excluir a vis\xE3o "{n}"?',viewsReset:"Voltar ao inicial",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",chatPlaceholder:"Digite uma mensagem",chatSend:"Enviar",chatTyping:"{n} est\xE1 digitando\u2026",chatToday:"Hoje",chatYesterday:"Ontem",chatEmpty:"Nenhuma mensagem ainda",chatLog:"Conversa",chatSuggestions:"Sugest\xF5es",chatReply:"Responder",wDockLeft:"Fixar \xE0 esquerda",wDockRight:"Fixar \xE0 direita",wDockTop:"Fixar em cima",wDockBottom:"Fixar embaixo",tabErrors:"erros",stepOptional:"opcional",stepDone:"conclu\xEDda",stepError:"com erros",stepBack:"Voltar",stepNext:"Pr\xF3ximo",stepFinish:"Concluir",stepReview:"Revis\xE3o",stepSteps:"Etapas",stepOf:"Etapa {n} de {total}",secretShow:"Mostrar valor",secretHide:"Ocultar valor",secretStored:"H\xE1 um valor salvo. Ele n\xE3o pode ser exibido novamente.",secretReplace:"Substituir",secretKeep:"Manter o atual",secretWarnTitle:"Substituir o valor salvo?",secretWarn:"O valor salvo n\xE3o pode ser exibido e ser\xE1 descartado assim que voc\xEA o substituir. Digite o novo valor em seguida; ele s\xF3 vale quando voc\xEA salvar.",gridSelected:"{n} selecionado(s)",gridSelectAll:"Selecionar todos os {n}",gridClearSel:"Limpar sele\xE7\xE3o",gridSelectRow:"Selecionar linha",gridSelectPage:"Selecionar todas as linhas",gridRowActions:"A\xE7\xF5es da linha",gridColumns:"Colunas",gridResize:"Redimensionar coluna",gridGroupAll:"Todas",gridOtherCols:"Outras",gridGroups:"Grupos de colunas",gridColumnSearch:"Buscar colunas",gridNoColumns:"Nenhuma coluna encontrada",noResults:"Nenhum resultado",results:"{n} resultados",pageFirst:"Primeira p\xE1gina",pagePrev:"P\xE1gina anterior",pageNext:"Pr\xF3xima p\xE1gina",pageLast:"\xDAltima p\xE1gina",pageLabel:"Pagina\xE7\xE3o",pageGoto:"P\xE1gina {n}",pageInfo:"{from}\u2013{to} de {total}",calPrev:"Anterior",calNext:"Pr\xF3ximo",calOpen:"Abrir calend\xE1rio",calMonth:"Escolher m\xEAs",breadcrumb:"Trilha de navega\xE7\xE3o",breadcrumbMore:"Mostrar mais",sortAsc:"ordenado crescente",sortDesc:"ordenado decrescente"},n={en:i,"pt-BR":c},s=i;function p(o){typeof o=="string"?s=n[o]??n[Object.keys(n).find(e=>e.startsWith(o.split("-")[0]))??"en"]:(s={...i,...o},o._lang&&(n[o._lang]=s))}var m=()=>s;function u(o,e){let a=s[o]??i[o]??o;return e?a.replace(/\{(\w+)\}/g,(t,r)=>String(e[r]??"")):a}export{l as a,n as b,p as c,m as d,u as e};
2
- //# sourceMappingURL=chunk-MA5BJL3S.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/core/emitter.ts", "../src/core/i18n.ts"],
4
- "sourcesContent": ["export type Handler = (...args: any[]) => unknown;\n\n/** Minimal observer. A handler that returns `false` makes `emit` return `false` (used by `before-*` events). */\nexport class Emitter {\n private handlers = new Map<string, Handler[]>();\n\n /** Subscribes; returns the unsubscribe function. */\n on(name: string, fn: Handler): () => void {\n const list = this.handlers.get(name);\n if (list) list.push(fn);\n else this.handlers.set(name, [fn]);\n return () => this.off(name, fn);\n }\n\n once(name: string, fn: Handler): () => void {\n const off = this.on(name, (...a) => {\n off();\n return fn(...a);\n });\n return off;\n }\n\n off(name: string, fn?: Handler): void {\n if (!fn) this.handlers.delete(name);\n else {\n const list = this.handlers.get(name);\n if (list) this.handlers.set(name, list.filter((f) => f !== fn));\n }\n }\n\n /** Returns `false` if any handler returned `false` (the event was cancelled). */\n emit(name: string, ...args: unknown[]): boolean {\n let ok = true;\n for (const fn of this.handlers.get(name) ?? []) if (fn(...args) === false) ok = false;\n return ok;\n }\n\n clearListeners(): void {\n this.handlers.clear();\n }\n}\n", "export type Locale = Record<string, string>;\n\nconst en: Locale = {\n _lang: 'en',\n _currency: 'USD',\n _firstDay: '0',\n required: 'This field is required',\n minLength: 'Enter at least {n} characters',\n maxLength: 'Enter at most {n} characters',\n pattern: 'Invalid format',\n email: 'Enter a valid email address',\n min: 'Must be at least {n}',\n max: 'Must be at most {n}',\n range: 'Must be between {min} and {max}',\n number: 'Enter a valid number',\n date: 'Enter a valid date',\n dateMin: 'Date must be on or after {n}',\n dateMax: 'Date must be on or before {n}',\n notInList: 'Choose a value from the list',\n loading: 'Loading',\n close: 'Close',\n ok: 'OK',\n cancel: 'Cancel',\n clear: 'Clear',\n collapse: 'Collapse',\n expand: 'Expand',\n empty: 'No data',\n search: 'Search',\n lookupOpen: 'Open search',\n lookupSelect: 'Select',\n fbEq: 'equals',\n fbNe: 'does not equal',\n fbContains: 'contains',\n fbNotContains: 'does not contain',\n fbStarts: 'starts with',\n fbEnds: 'ends with',\n fbGt: 'greater than',\n fbGe: 'greater than or equal',\n fbLt: 'less than',\n fbLe: 'less than or equal',\n fbBetween: 'is between',\n fbNotBetween: 'is not between',\n fbIn: 'is any of',\n fbNin: 'is none of',\n fbEmpty: 'is empty',\n fbNotEmpty: 'is not empty',\n fbAnd: 'Match all (AND)',\n fbOr: 'Match any (OR)',\n fbAddFilter: 'Add filter',\n fbAddGroup: 'Add group',\n fbRemove: 'Remove',\n fbClear: 'Clear all',\n fbApply: 'Apply',\n fbField: 'Field',\n fbOperator: 'Operator',\n fbValue: 'Value',\n fbTo: 'and',\n fbList: 'a, b, c',\n fbNone: 'No filters',\n fbLabel: 'Filters',\n views: 'Views',\n viewsName: 'Name for this view',\n viewsSave: 'Save view',\n viewsSaveAs: 'Save as new view\u2026',\n viewsDefault: 'Open with this view',\n viewsDelete: 'Delete view',\n viewsConfirmDelete: 'Delete the view \"{n}\"?',\n viewsReset: 'Reset to initial',\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 chatPlaceholder: 'Type a message',\n chatSend: 'Send',\n chatTyping: '{n} is typing\u2026',\n chatToday: 'Today',\n chatYesterday: 'Yesterday',\n chatEmpty: 'No messages yet',\n chatLog: 'Conversation',\n chatSuggestions: 'Suggestions',\n chatReply: 'Reply',\n wDockLeft: 'Dock to the left',\n wDockRight: 'Dock to the right',\n wDockTop: 'Dock to the top',\n wDockBottom: 'Dock to the bottom',\n tabErrors: 'errors',\n stepOptional: 'optional',\n stepDone: 'completed',\n stepError: 'has errors',\n stepBack: 'Back',\n stepNext: 'Next',\n stepFinish: 'Finish',\n stepReview: 'Review',\n stepSteps: 'Steps',\n stepOf: 'Step {n} of {total}',\n secretShow: 'Show value',\n secretHide: 'Hide value',\n secretStored: 'A value is saved. It cannot be shown again.',\n secretReplace: 'Replace',\n secretKeep: 'Keep current',\n secretWarnTitle: 'Replace the saved value?',\n secretWarn: 'The saved value cannot be displayed and will be discarded as soon as you replace it. Type the new value next; it takes effect when you save.',\n gridSelected: '{n} selected',\n gridSelectAll: 'Select all {n}',\n gridClearSel: 'Clear selection',\n gridSelectRow: 'Select row',\n gridSelectPage: 'Select all rows',\n gridRowActions: 'Row actions',\n gridColumns: 'Columns',\n gridResize: 'Resize column',\n gridGroupAll: 'All',\n gridOtherCols: 'Other',\n gridGroups: 'Column groups',\n gridColumnSearch: 'Search columns',\n gridNoColumns: 'No matching columns',\n noResults: 'No results',\n results: '{n} results',\n pageFirst: 'First page',\n pagePrev: 'Previous page',\n pageNext: 'Next page',\n pageLast: 'Last page',\n pageLabel: 'Pagination',\n pageGoto: 'Page {n}',\n pageInfo: '{from}\u2013{to} of {total}',\n calPrev: 'Previous',\n calNext: 'Next',\n calOpen: 'Open calendar',\n calMonth: 'Choose month',\n breadcrumb: 'Breadcrumb',\n breadcrumbMore: 'Show more',\n sortAsc: 'sorted ascending',\n sortDesc: 'sorted descending',\n};\n\nconst ptBR: Locale = {\n _lang: 'pt-BR',\n _currency: 'BRL',\n _firstDay: '0',\n required: 'Campo obrigat\u00F3rio',\n minLength: 'Informe ao menos {n} caracteres',\n maxLength: 'Informe no m\u00E1ximo {n} caracteres',\n pattern: 'Formato inv\u00E1lido',\n email: 'Informe um e-mail v\u00E1lido',\n min: 'Deve ser no m\u00EDnimo {n}',\n max: 'Deve ser no m\u00E1ximo {n}',\n range: 'Deve estar entre {min} e {max}',\n number: 'Informe um n\u00FAmero v\u00E1lido',\n date: 'Informe uma data v\u00E1lida',\n dateMin: 'A data deve ser {n} ou posterior',\n dateMax: 'A data deve ser {n} ou anterior',\n notInList: 'Escolha um valor da lista',\n loading: 'Carregando',\n close: 'Fechar',\n ok: 'OK',\n cancel: 'Cancelar',\n clear: 'Limpar',\n collapse: 'Recolher',\n expand: 'Expandir',\n empty: 'Sem dados',\n search: 'Pesquisar',\n lookupOpen: 'Abrir pesquisa',\n lookupSelect: 'Selecionar',\n fbEq: 'igual a',\n fbNe: 'diferente de',\n fbContains: 'cont\u00E9m',\n fbNotContains: 'n\u00E3o cont\u00E9m',\n fbStarts: 'come\u00E7a com',\n fbEnds: 'termina com',\n fbGt: 'maior que',\n fbGe: 'maior ou igual a',\n fbLt: 'menor que',\n fbLe: 'menor ou igual a',\n fbBetween: 'entre',\n fbNotBetween: 'fora do intervalo',\n fbIn: '\u00E9 um de',\n fbNin: 'n\u00E3o \u00E9 nenhum de',\n fbEmpty: 'est\u00E1 vazio',\n fbNotEmpty: 'n\u00E3o est\u00E1 vazio',\n fbAnd: 'Todas (E)',\n fbOr: 'Qualquer uma (OU)',\n fbAddFilter: 'Adicionar filtro',\n fbAddGroup: 'Adicionar grupo',\n fbRemove: 'Remover',\n fbClear: 'Limpar tudo',\n fbApply: 'Aplicar',\n fbField: 'Campo',\n fbOperator: 'Operador',\n fbValue: 'Valor',\n fbTo: 'e',\n fbList: 'a, b, c',\n fbNone: 'Sem filtros',\n fbLabel: 'Filtros',\n views: 'Vis\u00F5es',\n viewsName: 'Nome desta vis\u00E3o',\n viewsSave: 'Salvar vis\u00E3o',\n viewsSaveAs: 'Salvar como nova vis\u00E3o\u2026',\n viewsDefault: 'Abrir com esta vis\u00E3o',\n viewsDelete: 'Excluir vis\u00E3o',\n viewsConfirmDelete: 'Excluir a vis\u00E3o \"{n}\"?',\n viewsReset: 'Voltar ao inicial',\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 chatPlaceholder: 'Digite uma mensagem',\n chatSend: 'Enviar',\n chatTyping: '{n} est\u00E1 digitando\u2026',\n chatToday: 'Hoje',\n chatYesterday: 'Ontem',\n chatEmpty: 'Nenhuma mensagem ainda',\n chatLog: 'Conversa',\n chatSuggestions: 'Sugest\u00F5es',\n chatReply: 'Responder',\n wDockLeft: 'Fixar \u00E0 esquerda',\n wDockRight: 'Fixar \u00E0 direita',\n wDockTop: 'Fixar em cima',\n wDockBottom: 'Fixar embaixo',\n tabErrors: 'erros',\n stepOptional: 'opcional',\n stepDone: 'conclu\u00EDda',\n stepError: 'com erros',\n stepBack: 'Voltar',\n stepNext: 'Pr\u00F3ximo',\n stepFinish: 'Concluir',\n stepReview: 'Revis\u00E3o',\n stepSteps: 'Etapas',\n stepOf: 'Etapa {n} de {total}',\n secretShow: 'Mostrar valor',\n secretHide: 'Ocultar valor',\n secretStored: 'H\u00E1 um valor salvo. Ele n\u00E3o pode ser exibido novamente.',\n secretReplace: 'Substituir',\n secretKeep: 'Manter o atual',\n secretWarnTitle: 'Substituir o valor salvo?',\n secretWarn: 'O valor salvo n\u00E3o pode ser exibido e ser\u00E1 descartado assim que voc\u00EA o substituir. Digite o novo valor em seguida; ele s\u00F3 vale quando voc\u00EA salvar.',\n gridSelected: '{n} selecionado(s)',\n gridSelectAll: 'Selecionar todos os {n}',\n gridClearSel: 'Limpar sele\u00E7\u00E3o',\n gridSelectRow: 'Selecionar linha',\n gridSelectPage: 'Selecionar todas as linhas',\n gridRowActions: 'A\u00E7\u00F5es da linha',\n gridColumns: 'Colunas',\n gridResize: 'Redimensionar coluna',\n gridGroupAll: 'Todas',\n gridOtherCols: 'Outras',\n gridGroups: 'Grupos de colunas',\n gridColumnSearch: 'Buscar colunas',\n gridNoColumns: 'Nenhuma coluna encontrada',\n noResults: 'Nenhum resultado',\n results: '{n} resultados',\n pageFirst: 'Primeira p\u00E1gina',\n pagePrev: 'P\u00E1gina anterior',\n pageNext: 'Pr\u00F3xima p\u00E1gina',\n pageLast: '\u00DAltima p\u00E1gina',\n pageLabel: 'Pagina\u00E7\u00E3o',\n pageGoto: 'P\u00E1gina {n}',\n pageInfo: '{from}\u2013{to} de {total}',\n calPrev: 'Anterior',\n calNext: 'Pr\u00F3ximo',\n calOpen: 'Abrir calend\u00E1rio',\n calMonth: 'Escolher m\u00EAs',\n breadcrumb: 'Trilha de navega\u00E7\u00E3o',\n breadcrumbMore: 'Mostrar mais',\n sortAsc: 'ordenado crescente',\n sortDesc: 'ordenado decrescente',\n};\n\nexport const locales: Record<string, Locale> = { en, 'pt-BR': ptBR };\nlet current: Locale = en;\n\n/** Picks a registered locale by name (`'pt-BR'`, or `'pt'` as a prefix) or merges a custom object over English. */\nexport function setLocale(l: string | Locale): void {\n if (typeof l === 'string') {\n current = locales[l] ?? locales[Object.keys(locales).find((k) => k.startsWith(l.split('-')[0])) ?? 'en'];\n } else {\n current = { ...en, ...l };\n if (l._lang) locales[l._lang] = current;\n }\n}\n\nexport const getLocale = (): Locale => current;\n\n/** Translates a key, replacing `{name}` placeholders. */\nexport function t(key: string, vars?: Record<string, string | number>): string {\n const s = current[key] ?? en[key] ?? key;\n return vars ? s.replace(/\\{(\\w+)\\}/g, (_, k) => String(vars[k] ?? '')) : s;\n}\n"],
5
- "mappings": "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",
6
- "names": ["Emitter", "name", "fn", "list", "off", "a", "f", "args", "ok", "en", "ptBR", "locales", "current", "setLocale", "l", "k", "getLocale", "t", "key", "vars", "s", "_"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as R}from"./chunk-ZCAAM4NH.js";import{a as T}from"./chunk-ARCW54L2.js";import{a as k}from"./chunk-SNTHW4K2.js";import{a as H}from"./chunk-LMGCV35W.js";import{a as S,b as y}from"./chunk-OWEQT2HN.js";import{c as A}from"./chunk-NDBFYIL6.js";import{c as x}from"./chunk-JTYWZMSZ.js";import{a as m}from"./chunk-XZEOSW3Q.js";import{c as w}from"./chunk-IHAYOSBR.js";import{a as L,b as M}from"./chunk-IYPKPLCU.js";import{b as l}from"./chunk-PZSHOSOS.js";import{e as u}from"./chunk-MA5BJL3S.js";var v="__select",g="__actions",B={field:v,width:44,align:"center",cls:"op-grid__selcell"},G={field:g,width:44,align:"center",cls:"op-grid__actcell"},z="var(--op-grid-row-height, var(--op-row-height))",E=class extends L{baseCls="op-grid";store;offStore;headEl;headRow;viewport;emptyEl;pager;v;selected=new Set;active=-1;anchor=-1;justDragged=!1;cv=0;selAll;barEl;bulkEl;bulkCount;bulkBtns=[];selectAllBtn;rowMenu;colDd;colList;colSearch;colChips;colGroup="";cols(){let e=this.config;return[...e.checkboxSelection?[B]:[],...this.userCols(),...e.rowActions?.length?[G]:[]]}userCols(){return(this.config.columns??[]).filter(e=>!e.hidden)}visibleActions(){return this.config.rowActionsMode==="visible"&&!!this.config.rowActions?.length}mode(){return this.config.checkboxSelection?"multi":this.config.selection??"single"}build(){let e=this.config,i=l("div",this.baseCls,{role:"grid",tabindex:0,"aria-multiselectable":e.selection==="multi"||e.checkboxSelection?"true":null});return this.headRow=l("div","op-grid__row op-grid__header-row",{role:"row"}),this.headEl=l("div","op-grid__header",{},this.headRow),this.viewport=l("div","op-grid__viewport"),this.emptyEl=l("div","op-grid__empty"),(e.columnMenu||e.bulkActions?.length)&&(this.bulkEl=l("div","op-grid__bulk"),this.bulkEl.hidden=!0,this.barEl=l("div","op-grid__bar",{},this.bulkEl),i.append(this.barEl)),i.append(this.headEl,this.viewport,this.emptyEl),i.classList.toggle("op-grid--striped",!!e.striped),e.paging&&(this.pager=new H({cls:"op-grid__pager"}),i.append(this.pager.el)),i}onRender(){let e=this.config;if(this.bindStore(e.store??new x({data:e.data??[]})),this.buildHeader(),this.buildBar(),this.v=S({scroller:this.viewport,count:this.store.count,rowHeight:e.rowHeight??(y(this.el,z)||36),render:(i,t)=>this.renderRow(i,t),rowCls:"op-grid__row op-grid__body-row"}),this.own(()=>this.v.destroy()),this.sync(),this.listen(this.viewport,"scroll",()=>this.headEl.scrollLeft=this.viewport.scrollLeft,{passive:!0}),this.listen(this.viewport,"click",i=>this.onRowEvent(i,"row-click")),this.listen(this.viewport,"dblclick",i=>this.onRowEvent(i,"row-dblclick")),this.listen(this.el,"keydown",i=>this.onKey(i)),this.listen(this.headRow,"change",i=>{i.target===this.selAll&&(this.selAll.checked?this.store.each(t=>this.selected.add(t)):this.config.keepSelection?this.store.each(t=>this.selected.delete(t)):this.selected.clear(),this.changed())}),e.reorderableColumns&&this.initColumnDrag(),e.resizableColumns&&this.initColumnResize(),this.listen(this.headRow,"click",i=>{if(this.justDragged||i.target.closest(".op-grid__resizer"))return;let t=i.target.closest("[data-field]"),s=t&&this.userCols().find(o=>o.field===t.dataset.field);s&&(this.emit("column-click",s),s.sortable&&this.sortBy(s))}),typeof ResizeObserver<"u"){let i=new ResizeObserver(()=>this.layout());i.observe(this.viewport),this.own(()=>i.disconnect())}this.pager&&(this.pager.setStore(this.store),this.store.pageSize||this.store.setPageSize(e.pageSize??20)),this.own(()=>this.pager?.destroy())}notifyMount(){super.notifyMount(),this.layout(),this.pager?.notifyMount()}layout(){if(this.rendered){if(!this.config.rowHeight){let e=y(this.el,z);e&&this.v.setRowHeight(e)}this.headEl.style.paddingInlineEnd=`${this.viewport.offsetWidth-this.viewport.clientWidth}px`,this.v.refresh()}}bindStore(e){this.offStore?.(),this.store=e;let i=e.subscribe(s=>{this.rendered&&(this.sync(),s.type==="sort"&&this.paintSort())}),t=e.on("loading",s=>this.setLoading(s));this.offStore=()=>(i(),t()),this.own(()=>this.offStore?.())}sync(){let e=this.selected.size;if(!this.config.keepSelection)for(let i of this.selected)this.store.indexOf(i)<0&&this.selected.delete(i);this.active=Math.min(this.active,this.store.count-1),this.v.setCount(this.store.count),this.el.setAttribute("aria-rowcount",String(this.store.totalCount+1)),this.emptyEl.textContent=this.config.emptyText??u("empty"),this.emptyEl.hidden=this.store.count>0||!!this.config.loading,this.el.classList.toggle("is-empty",this.store.count===0),this.updateActiveDescendant(),this.paintSelection(),this.selected.size!==e&&this.emit("select",this.getSelection())}setStore(e){this.config.store=e,this.selected.clear(),this.active=this.anchor=-1,this.rendered&&(this.bindStore(e),this.pager?.setStore(e),this.paintSort(),this.sync())}getStore(){return this.render(),this.store}layoutColumns(){let e=this.cols(),i=this.visibleActions()?this.config.rowActions.length:1,t=o=>o.field===g?`calc(${i} * var(--op-grid-action-size) + ${i+1} * var(--op-grid-action-gap))`:`${o.width}px`,s=e.map(o=>o.field===g?t(o):o.width?`${o.width}px`:`minmax(${o.minWidth??96}px, ${o.flex??1}fr)`).join(" ");this.el.style.setProperty("--op-grid-cols",s),this.el.style.setProperty("--op-grid-min-width",`${e.reduce((o,n)=>o+(n.field===g?i*36:n.width??n.minWidth??96),0)}px`)}buildHeader(){let e=this.cols();this.layoutColumns(),this.el.classList.toggle("op-grid--actions-visible",this.visibleActions()),this.el.classList.toggle("op-grid--reorderable",!!this.config.reorderableColumns),this.el.classList.toggle("op-grid--resizable",!!this.config.resizableColumns),this.el.setAttribute("aria-colcount",String(e.length)),this.selAll=void 0,this.headRow.replaceChildren(...e.map((t,s)=>{let o=t.header??t.field,n=l("div",`op-grid__cell op-grid__hcell${t.align?` op-grid__cell--${t.align}`:""}${t.sortable?" is-sortable":""}`,{role:"columnheader","aria-colindex":s+1,"data-field":t.field});t.field===v?n.append(this.selAll=l("input","op-grid__check",{type:"checkbox","aria-label":u("gridSelectPage")})):t.field===g?n.setAttribute("aria-label",u("gridRowActions")):t.sortable?n.append(l("button","op-grid__sort",{type:"button"},l("span","op-grid__label",{},o),l("span","op-grid__arrow",{"aria-hidden":"true"},w("arrow-up")))):n.append(l("span","op-grid__label",{},o));let r=t.field!==v&&t.field!==g;return this.config.reorderableColumns&&r&&n.classList.add("is-reorderable"),this.canResize(t)&&n.append(l("span","op-grid__resizer",{role:"separator","aria-orientation":"vertical","aria-label":`${u("gridResize")} ${o}`})),r&&!t.sortable&&(this.config.reorderableColumns||this.canResize(t))&&(n.tabIndex=0),n}));let i=this.groupBand(e);this.headEl.replaceChildren(...i?[i]:[],this.headRow),this.paintSort()}groupBand(e){if(this.config.groupHeaders===!1||!e.some(s=>s.group))return null;let i=[],t=0;for(;t<e.length;){let s=e[t].group??"",o=1;for(;t+o<e.length&&(e[t+o].group??"")===s;)o++;let n=l("div",`op-grid__gcell${s?"":" is-empty"}`,{role:"columnheader","aria-colindex":t+1,"aria-colspan":o},s);n.style.gridColumn=`span ${o}`,i.push(n),t+=o}return l("div","op-grid__row op-grid__group-row",{role:"row"},...i)}getColumnGroups(){return[...new Set(this.config.columns.map(e=>e.group).filter(e=>!!e))]}setColumnGroupVisible(e,i){let t=this.config.columns.filter(s=>(s.group??"")===e);if(t.length){for(let s of t)s.hidden=!i;this.config.columns.some(s=>!s.hidden)||(t[0].hidden=!1),this.setColumns(this.config.columns),this.emit("columns-change",this.getColumnState())}}setColumns(e){this.config.columns=e,this.rendered&&(this.cv++,this.buildHeader(),this.paintSelection(),this.v.refresh())}getColumnState(){return this.config.columns.map(e=>({field:e.field,hidden:!!e.hidden,width:e.width}))}setColumnState(e){let i=new Map(this.config.columns.map(s=>[s.field,s])),t=e.flatMap(s=>{let o=i.get(s.field);return i.delete(s.field),o?[{...o,hidden:s.hidden,width:s.width??o.width}]:[]});this.setColumns([...t,...i.values()]),this.emit("columns-change",this.getColumnState())}canResize(e){return!!this.config.resizableColumns&&e.field!==v&&e.field!==g&&e.resizable!==!1}setColumnWidth(e,i){let t=this.config.columns.find(s=>s.field===e);t&&(t.width=i==null?void 0:Math.round(Math.max(t.minWidth??48,Math.min(i,t.maxWidth??1/0))),this.layoutColumns(),this.emit("column-resize",e,t.width),this.emit("columns-change",this.getColumnState()))}initColumnResize(){let e=this.headRow;this.listen(e,"pointerdown",i=>{let t=i.target.closest(".op-grid__resizer");if(!t||i.button)return;i.preventDefault();let s=t.parentElement,o=s.dataset.field,n=this.config.columns.find(p=>p.field===o),r=i.clientX,a=s.getBoundingClientRect().width||n.width||96;this.el.classList.add("is-resizing");let h=n.width,c=p=>{let f=Math.round(Math.max(n.minWidth??48,Math.min(a+(p.clientX-r)*(this.dir()==="rtl"?-1:1),n.maxWidth??1/0)));n.width=h=f,this.layoutColumns()},d=()=>{document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",d),this.el.classList.remove("is-resizing"),this.justDragged=!0,setTimeout(()=>this.justDragged=!1),h!==void 0&&(this.emit("column-resize",o,h),this.emit("columns-change",this.getColumnState()))};document.addEventListener("pointermove",c),document.addEventListener("pointerup",d),this.own(()=>(document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",d)))}),this.listen(e,"dblclick",i=>{let t=i.target.closest(".op-grid__resizer");t&&this.setColumnWidth(t.parentElement.dataset.field,void 0)}),this.listen(e,"keydown",i=>{if(!(i.altKey&&i.shiftKey)||i.key!=="ArrowLeft"&&i.key!=="ArrowRight")return;let t=i.target.closest(".op-grid__hcell"),s=t&&this.config.columns.find(n=>n.field===t.dataset.field);if(!t||!s||!this.canResize(s))return;i.preventDefault();let o=t.getBoundingClientRect().width||s.width||96;this.setColumnWidth(s.field,o+(i.key==="ArrowRight"?16:-16))})}dir(){return getComputedStyle(this.el).direction}moveColumn(e,i){let t=this.config.columns,s=t.find(d=>d.field===e);if(!s||e===i)return;let o=this.userCols(),n=o.indexOf(s),r=[...t.filter(d=>d!==s)],a=i==null?void 0:r.find(d=>d.field===i),h=o.filter(d=>d!==s).pop(),c=a?r.indexOf(a):h?r.indexOf(h)+1:r.length;r.splice(c,0,s),!r.every((d,p)=>d===t[p])&&(this.setColumns(r),this.emit("column-move",e,n,this.userCols().indexOf(s)),this.emit("columns-change",this.getColumnState()))}initColumnDrag(){let e=this.headRow,i=()=>Array.from(e.querySelectorAll(".is-reorderable"));this.listen(e,"pointerdown",t=>{let s=t.target.closest(".is-reorderable");if(!s||t.button||t.target.closest(".op-grid__resizer"))return;let o=s.dataset.field,n=t.clientX,r,a,h=null,c=p=>{if(!r){if(Math.abs(p.clientX-n)<6)return;r=l("div","op-grid__ghost",{},s.textContent??""),a=l("div","op-grid__drop"),this.el.append(r),this.headEl.append(a),s.classList.add("is-dragging-col")}r.style.left=`${p.clientX}px`,r.style.top=`${p.clientY}px`;let f=i(),b=f.find(D=>{let _=D.getBoundingClientRect();return p.clientX<_.left+_.width/2});h=b?b.dataset.field:null;let C=(b??f[f.length-1])?.getBoundingClientRect(),$=this.headEl.getBoundingClientRect();C&&a&&(a.style.left=`${(b?C.left:C.right)-$.left+this.headEl.scrollLeft}px`)},d=()=>{document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",d),r&&(r.remove(),a?.remove(),s.classList.remove("is-dragging-col"),this.justDragged=!0,setTimeout(()=>this.justDragged=!1),this.moveColumn(o,h))};document.addEventListener("pointermove",c),document.addEventListener("pointerup",d),this.own(()=>(document.removeEventListener("pointermove",c),document.removeEventListener("pointerup",d)))}),this.listen(e,"keydown",t=>{if(!t.altKey||t.shiftKey||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;let s=t.target.closest(".is-reorderable");if(!s)return;t.preventDefault();let o=this.userCols(),n=o.findIndex(h=>h.field===s.dataset.field),r=t.key==="ArrowLeft"?n-1:n+1;if(r<0||r>=o.length)return;this.moveColumn(o[n].field,t.key==="ArrowLeft"?o[r].field:o[r+1]?.field??null);let a=e.querySelector(`[data-field="${CSS.escape(o[n].field)}"]`);(a?.querySelector("button")??a)?.focus()})}paintSort(){let e=this.store.getSorters()[0];for(let i of Array.from(this.headRow.children)){let t=!!e&&i.dataset.field===e.field;i.classList.toggle("is-sorted-asc",t&&e.dir==="asc"),i.classList.toggle("is-sorted-desc",t&&e.dir==="desc"),i.classList.contains("is-sortable")&&i.setAttribute("aria-sort",t?e.dir==="asc"?"ascending":"descending":"none")}}sortBy(e){let i=this.store.getSorters()[0],t=i?.field===e.field?i.dir==="asc"?"desc":null:"asc";this.emit("before-sort",e.field,t)!==!1&&(this.store.sort(t?e.field:null,t??void 0),this.emit("sort",e.field,t))}rowIndexOffset(){return this.store.pageSize?(this.store.page-1)*this.store.pageSize:0}renderRow(e,i){let t=this.store.getAt(i);if(!t)return;let s=this.cols();e.id=`${this.id}-r${i}`,e.dataset.i=String(i),e.setAttribute("role","row"),e.setAttribute("aria-rowindex",String(this.rowIndexOffset()+i+2));let o=this.selected.has(t);e.setAttribute("aria-selected",this.mode()==="none"?"false":String(o)),e.classList.toggle("is-selected",o),e.classList.toggle("is-active",i===this.active),e.classList.toggle("is-odd",i%2===1),(e.dataset.cv!==String(this.cv)||e.children.length!==s.length)&&(e.dataset.cv=String(this.cv),e.replaceChildren(...s.map((n,r)=>l("div",`op-grid__cell${n.align?` op-grid__cell--${n.align}`:""}${n.cls?` ${n.cls}`:""}`,{role:"gridcell","aria-colindex":r+1})))),s.forEach((n,r)=>{let a=e.children[r];if(n.field===v){let c=a.firstElementChild??a.appendChild(l("input","op-grid__check",{type:"checkbox",tabindex:-1,"aria-label":u("gridSelectRow")}));c.checked=o;return}if(n.field===g){let c=this.config.rowActions??[];if(!this.visibleActions()){a.firstChild||a.append(l("button","op-grid__actbtn",{type:"button",tabindex:-1,"aria-label":u("gridRowActions"),"aria-haspopup":"menu"},w("more")));return}(a.children.length!==c.length||a.firstElementChild?.dataset.a==null)&&a.replaceChildren(...c.map((d,p)=>l("button",`op-grid__actbtn${d.variant==="danger"?" is-danger":""}`,{type:"button",tabindex:-1,"data-a":p,"aria-label":d.text,title:d.text},d.icon?w(d.icon):d.text))),c.forEach((d,p)=>a.children[p].disabled=!!d.disabled?.(t));return}let h=A(n,t);typeof h=="string"?a.textContent=h:a.replaceChildren(h)})}indexOfEvent(e){let i=e.target.closest(".op-grid__body-row");return i?Number(i.dataset.i):-1}onRowEvent(e,i){let t=this.indexOfEvent(e),s=this.store.getAt(t);if(s){if(i==="row-click"){let o=e.target.closest(".op-grid__actbtn");if(o){if(o.dataset.a==null)return this.openRowMenu(s,o);o.disabled||this.config.rowActions[Number(o.dataset.a)].handler(s,this);return}this.setActive(t,!1),this.pick(t,e)}this.emit(i,s,t,e)}}getSelection(){return[...this.selected]}select(e,i={}){let t=typeof e=="number"?this.store.getAt(e):e,s=this.mode();!t||s==="none"||((s==="single"||!i.add)&&this.selected.clear(),this.selected.add(t),this.changed())}deselectAll(){this.selected.size&&(this.selected.clear(),this.changed())}changed(){this.v?.refresh(),this.paintSelection(),this.emit("select",this.getSelection())}selectAllFiltered(){if(this.mode()==="multi"){for(let e of this.store.getFiltered())this.selected.add(e);this.changed()}}pick(e,i){let t=this.mode(),s=this.store.getAt(e);if(!(!s||t==="none")){if(t==="multi"&&i.shiftKey&&this.anchor>=0){this.config.checkboxSelection||this.selected.clear();for(let o of this.store.getRange(Math.min(this.anchor,e),Math.max(this.anchor,e)+1))this.selected.add(o)}else t==="multi"&&(i.ctrlKey||i.metaKey||this.config.checkboxSelection)?(this.selected.delete(s)||this.selected.add(s),this.anchor=e):(this.selected.clear(),this.selected.add(s),this.anchor=e);this.changed()}}setActive(e,i=!0){this.active=e,i&&e>=0&&this.v.scrollTo(e),this.v.refresh(),this.updateActiveDescendant()}updateActiveDescendant(){this.active>=0&&this.active<this.store.count?this.el.setAttribute("aria-activedescendant",`${this.id}-r${this.active}`):this.el.removeAttribute("aria-activedescendant")}focusRow(e){this.render(),this.setActive(Math.max(0,Math.min(e,this.store.count-1))),this.el.focus()}scrollToRow(e){this.v?.scrollTo(e)}onKey(e){if(e.target.closest(".op-grid__header"))return;let i=this.store.count;if(!i)return;if((e.key==="ContextMenu"||e.shiftKey&&e.key==="F10")&&this.active>=0&&this.config.rowActions?.length)return e.preventDefault(),this.openRowMenu(this.store.getAt(this.active),document.getElementById(`${this.id}-r${this.active}`)??this.el);let t=Math.max(1,Math.floor((this.viewport.clientHeight||400)/this.config.rowHeight||10)),s=this.active<0?0:this.active,o=this.mode(),n={ArrowDown:Math.min(i-1,this.active<0?0:s+1),ArrowUp:Math.max(0,s-1),Home:0,End:i-1,PageDown:Math.min(i-1,s+t),PageUp:Math.max(0,s-t)};if(e.key in n){e.preventDefault();let r=n[e.key];this.setActive(r),(o==="single"||o==="multi"&&!e.ctrlKey&&!e.metaKey&&!this.config.checkboxSelection)&&this.pick(r,e)}else e.key===" "&&this.active>=0?(e.preventDefault(),o==="multi"?this.pick(this.active,{ctrlKey:!0}):this.pick(this.active,e)):e.key==="Enter"&&this.active>=0?this.emit("row-activate",this.store.getAt(this.active),this.active):(e.key==="a"||e.key==="A")&&(e.ctrlKey||e.metaKey)&&o==="multi"&&(e.preventDefault(),this.store.each(r=>this.selected.add(r)),this.changed())}refresh(){this.v?.refresh()}buildBar(){let e=this.config;if(!this.barEl)return;this.bulkCount=l("span","op-grid__count",{"aria-live":"polite"}),this.selectAllBtn=new m({text:"",variant:"ghost",handler:()=>this.selectAllFiltered()}),this.bulkBtns=(e.bulkActions??[]).map(t=>new m({text:t.text,icon:t.icon,variant:t.variant==="danger"?"danger":"default",handler:()=>t.handler(this.getSelection(),this)}));let i=new m({text:u("gridClearSel"),variant:"ghost",handler:()=>this.deselectAll()});this.bulkEl.append(this.bulkCount,this.selectAllBtn.el,...this.bulkBtns.map(t=>t.el),i.el),this.own(()=>[this.selectAllBtn,...this.bulkBtns,i].forEach(t=>t?.destroy())),e.columnMenu&&this.buildColumnMenu(),this.paintSelection()}paintSelection(){if(!this.rendered)return;let e=this.store.count,i=0;if(this.store.each(o=>this.selected.has(o)&&i++),this.selAll&&(this.selAll.checked=e>0&&i===e,this.selAll.indeterminate=i>0&&i<e),!this.bulkEl)return;let t=this.selected.size;if(this.bulkEl.hidden=!t||!this.config.bulkActions?.length,this.bulkEl.hidden)return;this.bulkCount.textContent=u("gridSelected",{n:t});let s=this.store.getFiltered().length;this.selectAllBtn.el.hidden=!(this.mode()==="multi"&&i===e&&s>e&&t<s),this.selectAllBtn.setText(u("gridSelectAll",{n:s}))}openRowMenu(e,i){this.rowMenu??=new R({}),this.rowMenu.setItems((this.config.rowActions??[]).map(t=>({text:t.text,icon:t.icon,disabled:!!t.disabled?.(e),handler:()=>t.handler(e,this)}))),this.rowMenu.showBy(i)}buildColumnMenu(){let e=new m({text:u("gridColumns"),icon:"columns",variant:"ghost"});this.colSearch=new k({placeholder:u("gridColumnSearch"),clearable:!0}),this.colChips=l("div","op-grid__colchips",{role:"group","aria-label":u("gridGroups")}),this.colList=l("div","op-grid__collist",{role:"group","aria-label":u("gridColumns")});let i=l("div","op-grid__colempty",{},u("gridNoColumns"));i.hidden=!0;let t=l("div","op-grid__colmenu",{},this.colSearch.el,this.colChips,this.colList,i);this.colDd=new T({anchor:e.el,content:t,placement:"bottom-end",role:"dialog",autoFocus:!1}),this.barEl.append(e.el),this.own(()=>e.destroy());let s=()=>{let o=(this.colSearch.getValue()??"").toLowerCase(),n=0,r,a=0,h=()=>r&&(r.hidden=a===0);for(let c of Array.from(this.colList.children)){if(c.classList.contains("op-grid__colgroup")){h(),r=c,a=0;continue}let d=c.dataset.group??"",p=!this.colGroup||d===this.colGroup,f=!o||d.toLowerCase().includes(o)||c.textContent.toLowerCase().includes(o);c.hidden=!(p&&f),c.hidden||(n++,a++)}h(),i.hidden=n>0};this.colSearch.on("change",s),this.listen(this.colChips,"click",o=>{let n=o.target.closest("[data-g]");n&&(this.colGroup=n.dataset.g,this.paintColumnList(),s())}),e.on("click",()=>{if(this.colDd.isOpen())return this.colDd.close();this.colSearch.setValue(""),this.colGroup="",this.paintColumnList(),this.colDd.open(),this.colSearch.focus()}),this.listen(this.colList,"change",o=>{let n=o.target;if(n.dataset.groupToggle!=null)this.setColumnGroupVisible(n.dataset.groupToggle,n.checked);else{let r=this.config.columns.find(a=>a.field===n.value);if(!r)return;r.hidden=!n.checked,this.setColumns(this.config.columns),this.emit("columns-change",this.getColumnState())}this.paintColumnList(),s()})}paintColumnList(){let e=this.config.columns,i=this.getColumnGroups(),t=this.userCols().length===1?this.userCols()[0]:null,s=n=>{let r=l("input","op-grid__check",{type:"checkbox",value:n.field});return r.checked=!n.hidden,r.disabled=n===t,l("label","op-grid__colitem",{"data-group":n.group??""},r,l("span","",{},n.header??n.field))};if(this.colChips.hidden=i.length<2,this.colChips.replaceChildren(...[["",u("gridGroupAll")],...i.map(n=>[n,n])].map(([n,r])=>l("button",`op-grid__colchip${this.colGroup===n?" is-on":""}`,{type:"button","data-g":n,"aria-pressed":String(this.colGroup===n)},r))),!i.length)return this.colList.replaceChildren(...e.map(s));let o=[];for(let n of[...i,""]){let r=e.filter(c=>(c.group??"")===n);if(!r.length)continue;let a=r.filter(c=>!c.hidden).length,h=l("input","op-grid__check",{type:"checkbox","data-group-toggle":n,"aria-label":n||u("gridOtherCols")});h.checked=a===r.length,h.indeterminate=a>0&&a<r.length,o.push(l("div","op-grid__colgroup",{"data-group":n},l("label","",{},h,l("span","",{},n||u("gridOtherCols"))),l("span","op-grid__colcount",{},`${a}/${r.length}`)),...r.map(s))}this.colList.replaceChildren(...o)}onDestroy(){this.pager?.destroy(),this.rowMenu?.destroy(),this.colDd?.destroy(),this.colSearch?.destroy()}};M("grid",E);export{E as a};
2
- //# sourceMappingURL=chunk-NHVEP72K.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/components/data/grid/grid.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 { virtualize, measure } from '../../../core/virtual';\nimport { Store } from '../../../data/store';\nimport type { Model } from '../../../data/model';\nimport { cellContent, type Column } from '../../../data/column';\nimport { iconEl } from '../../base/icon/icon';\nimport { Pagination } from '../pagination/pagination';\nimport { Button } from '../../base/button/button';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Dropdown } from '../../overlays/dropdown/dropdown';\nimport { Menu } from '../../overlays/menu/menu';\n\nexport interface GridConfig extends ComponentConfig {\n store?: Store<any>;\n /** Used when no `store` is given. */\n data?: Record<string, any>[];\n columns: Column[];\n selection?: 'none' | 'single' | 'multi';\n /** Row height in px. Default: measured from the `--op-grid-row-height` / `--op-row-height` tokens. */\n rowHeight?: number;\n /** Adds a Pagination bar bound to the store (give the store a `pageSize`, or set it here). */\n paging?: boolean;\n pageSize?: number;\n emptyText?: string;\n striped?: boolean;\n /** Adds a leading checkbox column with a select-all in the header. Implies multi selection; a row click toggles. */\n checkboxSelection?: boolean;\n /** Keep selected records when the page or the filters change. Default false. */\n keepSelection?: boolean;\n /** Buttons shown in a bar above the header while records are selected. */\n bulkActions?: GridAction[];\n /** Actions at the end of every row (see `rowActionsMode`). */\n rowActions?: GridRowAction[];\n /** `'menu'` (default): one \"\u22EF\" button opens a menu. `'visible'`: every action is an icon button, always shown (dimmed until the row is hovered, active or selected). */\n rowActionsMode?: 'menu' | 'visible';\n /** A \"Columns\" button in the bar: toggle columns on and off, with search. */\n columnMenu?: boolean;\n /** Drag a header to a new place (or Alt+\u2190/\u2192 on a focused header). `column-move` and `columns-change` fire; ViewManager saves the order. */\n reorderableColumns?: boolean;\n /** A handle on each header's edge: drag to resize (double-click resets), Alt+Shift+\u2190/\u2192 on a focused header. Widths are part of `getColumnState`. */\n resizableColumns?: boolean;\n /** Show the group labels (`Column.group`) as a band over the header. Default true when any column has a group. */\n groupHeaders?: boolean;\n}\n\nexport interface GridAction {\n text: string;\n icon?: string;\n variant?: 'default' | 'danger';\n handler: (records: Model[], grid: Grid) => void;\n}\nexport interface GridRowAction {\n text: string;\n icon?: string;\n variant?: 'default' | 'danger';\n /** Disabled for the records where this returns true. */\n disabled?: (record: Model) => boolean;\n handler: (record: Model, grid: Grid) => void;\n}\nexport interface ColumnState {\n field: string;\n hidden: boolean;\n width?: number;\n}\n\nconst SEL = '__select';\nconst ACT = '__actions';\nconst SEL_COL: Column = { field: SEL, width: 44, align: 'center', cls: 'op-grid__selcell' };\nconst ACT_COL: Column = { field: ACT, width: 44, align: 'center', cls: 'op-grid__actcell' };\n\nconst ROW = 'var(--op-grid-row-height, var(--op-row-height))';\n\n/** Data grid with a virtualized body: only the visible rows (plus a small overscan) exist in the DOM. */\nexport class Grid extends Component<GridConfig> {\n protected override baseCls = 'op-grid';\n private store!: Store<any>;\n private offStore?: () => void;\n private headEl!: HTMLElement;\n private headRow!: HTMLElement;\n private viewport!: HTMLElement;\n private emptyEl!: HTMLElement;\n private pager?: Pagination;\n private v!: ReturnType<typeof virtualize>;\n private selected = new Set<Model>();\n private active = -1;\n private anchor = -1;\n private justDragged = false;\n private cv = 0; // bumps when the columns change, so pooled rows rebuild their cells\n private selAll?: HTMLInputElement;\n private barEl?: HTMLElement;\n private bulkEl?: HTMLElement;\n private bulkCount?: HTMLElement;\n private bulkBtns: Button[] = [];\n private selectAllBtn?: Button;\n private rowMenu?: Menu;\n private colDd?: Dropdown;\n private colList?: HTMLElement;\n private colSearch?: TextField;\n private colChips?: HTMLElement;\n private colGroup = '';\n\n private cols(): Column[] {\n const c = this.config;\n return [...(c.checkboxSelection ? [SEL_COL] : []), ...this.userCols(), ...(c.rowActions?.length ? [ACT_COL] : [])];\n }\n private userCols(): Column[] {\n return (this.config.columns ?? []).filter((c) => !c.hidden);\n }\n private visibleActions(): boolean {\n return this.config.rowActionsMode === 'visible' && !!this.config.rowActions?.length;\n }\n private mode(): 'none' | 'single' | 'multi' {\n return this.config.checkboxSelection ? 'multi' : (this.config.selection ?? 'single');\n }\n\n protected override build() {\n const c = this.config;\n const el = h('div', this.baseCls, { role: 'grid', tabindex: 0, 'aria-multiselectable': c.selection === 'multi' || c.checkboxSelection ? 'true' : null });\n this.headRow = h('div', 'op-grid__row op-grid__header-row', { role: 'row' });\n this.headEl = h('div', 'op-grid__header', {}, this.headRow);\n this.viewport = h('div', 'op-grid__viewport');\n this.emptyEl = h('div', 'op-grid__empty');\n if (c.columnMenu || c.bulkActions?.length) {\n this.bulkEl = h('div', 'op-grid__bulk');\n this.bulkEl.hidden = true;\n this.barEl = h('div', 'op-grid__bar', {}, this.bulkEl);\n el.append(this.barEl);\n }\n el.append(this.headEl, this.viewport, this.emptyEl);\n el.classList.toggle('op-grid--striped', !!c.striped);\n if (c.paging) {\n this.pager = new Pagination({ cls: 'op-grid__pager' });\n el.append(this.pager.el);\n }\n return el;\n }\n\n protected override onRender() {\n const c = this.config;\n this.bindStore(c.store ?? new Store({ data: c.data ?? [] }));\n this.buildHeader();\n this.buildBar();\n this.v = virtualize({\n scroller: this.viewport,\n count: this.store.count,\n rowHeight: c.rowHeight ?? (measure(this.el, ROW) || 36),\n render: (row, i) => this.renderRow(row, i),\n rowCls: 'op-grid__row op-grid__body-row',\n });\n this.own(() => this.v.destroy());\n this.sync();\n\n this.listen(this.viewport, 'scroll', () => (this.headEl.scrollLeft = this.viewport.scrollLeft), { passive: true });\n this.listen(this.viewport, 'click', (e: MouseEvent) => this.onRowEvent(e, 'row-click'));\n this.listen(this.viewport, 'dblclick', (e: MouseEvent) => this.onRowEvent(e, 'row-dblclick'));\n this.listen(this.el, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.listen(this.headRow, 'change', (e: Event) => {\n if (e.target !== this.selAll) return;\n if (this.selAll!.checked) this.store.each((r) => this.selected.add(r));\n else if (this.config.keepSelection) this.store.each((r) => this.selected.delete(r));\n else this.selected.clear();\n this.changed();\n });\n if (c.reorderableColumns) this.initColumnDrag();\n if (c.resizableColumns) this.initColumnResize();\n this.listen(this.headRow, 'click', (e: Event) => {\n if (this.justDragged || (e.target as HTMLElement).closest('.op-grid__resizer')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('[data-field]');\n const col = cell && this.userCols().find((x) => x.field === cell.dataset.field);\n if (!col) return;\n this.emit('column-click', col);\n if (col.sortable) this.sortBy(col);\n });\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.layout());\n ro.observe(this.viewport);\n this.own(() => ro.disconnect());\n }\n if (this.pager) {\n this.pager.setStore(this.store);\n if (!this.store.pageSize) this.store.setPageSize(c.pageSize ?? 20);\n }\n this.own(() => this.pager?.destroy());\n }\n\n override notifyMount() {\n super.notifyMount();\n this.layout();\n this.pager?.notifyMount();\n }\n\n /** Re-measures row height and scrollbar (needed after the grid becomes visible or resizes). */\n private layout() {\n if (!this.rendered) return;\n if (!this.config.rowHeight) {\n const hgt = measure(this.el, ROW);\n if (hgt) this.v.setRowHeight(hgt);\n }\n this.headEl.style.paddingInlineEnd = `${this.viewport.offsetWidth - this.viewport.clientWidth}px`;\n this.v.refresh();\n }\n\n // ---- store ---------------------------------------------------------------------------------\n\n private bindStore(store: Store<any>) {\n this.offStore?.();\n this.store = store;\n const offChange = store.subscribe((c) => {\n if (!this.rendered) return;\n this.sync();\n if (c.type === 'sort') this.paintSort();\n });\n const offLoading = store.on('loading', (on: boolean) => this.setLoading(on));\n this.offStore = () => (offChange(), offLoading());\n this.own(() => this.offStore?.());\n }\n\n /** Brings count, selection and the empty state in line with the store. */\n private sync() {\n const before = this.selected.size;\n if (!this.config.keepSelection) for (const r of this.selected) if (this.store.indexOf(r) < 0) this.selected.delete(r);\n this.active = Math.min(this.active, this.store.count - 1);\n this.v.setCount(this.store.count);\n this.el.setAttribute('aria-rowcount', String(this.store.totalCount + 1));\n this.emptyEl.textContent = this.config.emptyText ?? t('empty');\n this.emptyEl.hidden = this.store.count > 0 || !!this.config.loading;\n this.el.classList.toggle('is-empty', this.store.count === 0);\n this.updateActiveDescendant();\n this.paintSelection();\n if (this.selected.size !== before) this.emit('select', this.getSelection());\n }\n\n setStore(store: Store<any>) {\n this.config.store = store;\n this.selected.clear();\n this.active = this.anchor = -1;\n if (!this.rendered) return;\n this.bindStore(store);\n this.pager?.setStore(store);\n this.paintSort();\n this.sync();\n }\n getStore(): Store<any> {\n this.render();\n return this.store;\n }\n\n // ---- header / columns ----------------------------------------------------------------------\n\n /** Column widths \u2192 the CSS grid template shared by the header and every row. */\n private layoutColumns() {\n const cols = this.cols();\n const n = this.visibleActions() ? this.config.rowActions!.length : 1;\n const wide = (c: Column) => (c.field === ACT ? `calc(${n} * var(--op-grid-action-size) + ${n + 1} * var(--op-grid-action-gap))` : `${c.width}px`);\n const tpl = cols.map((c) => (c.field === ACT ? wide(c) : c.width ? `${c.width}px` : `minmax(${c.minWidth ?? 96}px, ${c.flex ?? 1}fr)`)).join(' ');\n this.el.style.setProperty('--op-grid-cols', tpl);\n this.el.style.setProperty('--op-grid-min-width', `${cols.reduce((sum, c) => sum + (c.field === ACT ? n * 36 : (c.width ?? c.minWidth ?? 96)), 0)}px`);\n }\n\n private buildHeader() {\n const cols = this.cols();\n this.layoutColumns();\n this.el.classList.toggle('op-grid--actions-visible', this.visibleActions());\n this.el.classList.toggle('op-grid--reorderable', !!this.config.reorderableColumns);\n this.el.classList.toggle('op-grid--resizable', !!this.config.resizableColumns);\n this.el.setAttribute('aria-colcount', String(cols.length));\n this.selAll = undefined;\n this.headRow.replaceChildren(\n ...cols.map((c, i) => {\n const label = c.header ?? c.field;\n const cell = h('div', `op-grid__cell op-grid__hcell${c.align ? ` op-grid__cell--${c.align}` : ''}${c.sortable ? ' is-sortable' : ''}`, { role: 'columnheader', 'aria-colindex': i + 1, 'data-field': c.field });\n if (c.field === SEL) cell.append((this.selAll = h('input', 'op-grid__check', { type: 'checkbox', 'aria-label': t('gridSelectPage') })));\n else if (c.field === ACT) cell.setAttribute('aria-label', t('gridRowActions'));\n else if (c.sortable) cell.append(h('button', 'op-grid__sort', { type: 'button' }, h('span', 'op-grid__label', {}, label), h('span', 'op-grid__arrow', { 'aria-hidden': 'true' }, iconEl('arrow-up'))));\n else cell.append(h('span', 'op-grid__label', {}, label));\n const user = c.field !== SEL && c.field !== ACT;\n if (this.config.reorderableColumns && user) cell.classList.add('is-reorderable');\n if (this.canResize(c)) {\n cell.append(h('span', 'op-grid__resizer', { role: 'separator', 'aria-orientation': 'vertical', 'aria-label': `${t('gridResize')} ${label}` }));\n }\n // a sortable header already has its button to focus; the others need a tab stop to be moved/resized by keyboard\n if (user && !c.sortable && (this.config.reorderableColumns || this.canResize(c))) cell.tabIndex = 0;\n return cell;\n }),\n );\n const band = this.groupBand(cols);\n this.headEl.replaceChildren(...(band ? [band] : []), this.headRow);\n this.paintSort();\n }\n\n /** Labels over runs of neighbouring columns that share a group (a dragged column can split a group: it shows twice). */\n private groupBand(cols: Column[]): HTMLElement | null {\n if (this.config.groupHeaders === false || !cols.some((c) => c.group)) return null;\n const cells: HTMLElement[] = [];\n let i = 0;\n while (i < cols.length) {\n const g = cols[i].group ?? '';\n let n = 1;\n while (i + n < cols.length && (cols[i + n].group ?? '') === g) n++;\n const cell = h('div', `op-grid__gcell${g ? '' : ' is-empty'}`, { role: 'columnheader', 'aria-colindex': i + 1, 'aria-colspan': n }, g);\n cell.style.gridColumn = `span ${n}`;\n cells.push(cell);\n i += n;\n }\n return h('div', 'op-grid__row op-grid__group-row', { role: 'row' }, ...cells);\n }\n\n /** The group labels in the order they first appear. */\n getColumnGroups(): string[] {\n return [...new Set(this.config.columns.map((c) => c.group).filter((g): g is string => !!g))];\n }\n\n /** Shows or hides every column of a group at once (at least one column always stays visible). */\n setColumnGroupVisible(group: string, visible: boolean): void {\n const cols = this.config.columns.filter((c) => (c.group ?? '') === group);\n if (!cols.length) return;\n for (const c of cols) c.hidden = !visible;\n if (!this.config.columns.some((c) => !c.hidden)) cols[0].hidden = false;\n this.setColumns(this.config.columns);\n this.emit('columns-change', this.getColumnState());\n }\n\n setColumns(columns: Column[]) {\n this.config.columns = columns;\n if (!this.rendered) return;\n this.cv++;\n this.buildHeader();\n this.paintSelection();\n this.v.refresh();\n }\n\n /** Order, visibility and width of every column; save it and give it back to `setColumnState`. */\n getColumnState(): ColumnState[] {\n return this.config.columns.map((c) => ({ field: c.field, hidden: !!c.hidden, width: c.width }));\n }\n /** Restores a saved state: columns follow its order (unknown ones keep their place at the end). */\n setColumnState(state: ColumnState[]): void {\n const by = new Map(this.config.columns.map((c) => [c.field, c]));\n const ordered = state.flatMap((s) => {\n const c = by.get(s.field);\n by.delete(s.field);\n return c ? [{ ...c, hidden: s.hidden, width: s.width ?? c.width }] : [];\n });\n this.setColumns([...ordered, ...by.values()]);\n this.emit('columns-change', this.getColumnState());\n }\n\n // ---- column drag ---------------------------------------------------------------------------\n\n // ---- column resize -------------------------------------------------------------------------\n\n private canResize(c: Column): boolean {\n return !!this.config.resizableColumns && c.field !== SEL && c.field !== ACT && c.resizable !== false;\n }\n\n /** Sets a column's width in px (clamped to `minWidth`/`maxWidth`); `undefined` gives it back its flexible width. */\n setColumnWidth(field: string, width: number | undefined): void {\n const col = this.config.columns.find((x) => x.field === field);\n if (!col) return;\n col.width = width == null ? undefined : Math.round(Math.max(col.minWidth ?? 48, Math.min(width, col.maxWidth ?? Infinity)));\n this.layoutColumns();\n this.emit('column-resize', field, col.width);\n this.emit('columns-change', this.getColumnState());\n }\n\n private initColumnResize(): void {\n const head = this.headRow;\n this.listen(head, 'pointerdown', (e: PointerEvent) => {\n const grip = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__resizer');\n if (!grip || e.button) return;\n e.preventDefault();\n const cell = grip.parentElement!;\n const field = cell.dataset.field!;\n const col = this.config.columns.find((x) => x.field === field)!;\n const x0 = e.clientX;\n const w0 = cell.getBoundingClientRect().width || col.width || 96; // a flexible column starts from what it shows now\n this.el.classList.add('is-resizing');\n let last = col.width;\n const move = (m: PointerEvent) => {\n // set without events while dragging; one event when it ends\n const w = Math.round(Math.max(col.minWidth ?? 48, Math.min(w0 + (m.clientX - x0) * (this.dir() === 'rtl' ? -1 : 1), col.maxWidth ?? Infinity)));\n col.width = last = w;\n this.layoutColumns();\n };\n const up = () => {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n this.el.classList.remove('is-resizing');\n this.justDragged = true;\n setTimeout(() => (this.justDragged = false));\n if (last !== undefined) {\n this.emit('column-resize', field, last);\n this.emit('columns-change', this.getColumnState());\n }\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.own(() => (document.removeEventListener('pointermove', move), document.removeEventListener('pointerup', up)));\n });\n // double-click on the handle: back to the flexible width\n this.listen(head, 'dblclick', (e: Event) => {\n const grip = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__resizer');\n if (grip) this.setColumnWidth(grip.parentElement!.dataset.field!, undefined);\n });\n // keyboard: Alt+Shift+\u2190/\u2192 on a focused header\n this.listen(head, 'keydown', (e: KeyboardEvent) => {\n if (!(e.altKey && e.shiftKey) || (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__hcell');\n const col = cell && this.config.columns.find((x) => x.field === cell.dataset.field);\n if (!cell || !col || !this.canResize(col)) return;\n e.preventDefault();\n const w = cell.getBoundingClientRect().width || col.width || 96;\n this.setColumnWidth(col.field, w + (e.key === 'ArrowRight' ? 16 : -16));\n });\n }\n\n private dir(): string {\n return getComputedStyle(this.el).direction;\n }\n\n /** Moves a (user) column in front of `before` (or to the end when null). Hidden columns keep their places. */\n moveColumn(field: string, before: string | null): void {\n const cols = this.config.columns;\n const col = cols.find((x) => x.field === field);\n if (!col || field === before) return;\n const vis = this.userCols();\n const from = vis.indexOf(col);\n const next = [...cols.filter((x) => x !== col)];\n const target = before == null ? undefined : next.find((x) => x.field === before);\n const lastVis = vis.filter((x) => x !== col).pop();\n const at = target ? next.indexOf(target) : lastVis ? next.indexOf(lastVis) + 1 : next.length;\n next.splice(at, 0, col);\n if (next.every((x, i) => x === cols[i])) return;\n this.setColumns(next);\n this.emit('column-move', field, from, this.userCols().indexOf(col));\n this.emit('columns-change', this.getColumnState());\n }\n\n private initColumnDrag(): void {\n const head = this.headRow;\n const cellsOf = () => Array.from(head.querySelectorAll<HTMLElement>('.is-reorderable'));\n this.listen(head, 'pointerdown', (e: PointerEvent) => {\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.is-reorderable');\n if (!cell || e.button || (e.target as HTMLElement).closest('.op-grid__resizer')) return;\n const field = cell.dataset.field!;\n const x0 = e.clientX;\n let ghost: HTMLElement | undefined;\n let mark: HTMLElement | undefined;\n let before: string | null = null;\n const move = (m: PointerEvent) => {\n if (!ghost) {\n if (Math.abs(m.clientX - x0) < 6) return; // a click, not a drag\n ghost = h('div', 'op-grid__ghost', {}, cell.textContent ?? '');\n mark = h('div', 'op-grid__drop');\n this.el.append(ghost);\n this.headEl.append(mark);\n cell.classList.add('is-dragging-col');\n }\n ghost.style.left = `${m.clientX}px`;\n ghost.style.top = `${m.clientY}px`;\n // the drop boundary is the nearest cell edge: before the first cell whose middle is right of the pointer\n const cells = cellsOf();\n const hit = cells.find((c) => {\n const r = c.getBoundingClientRect();\n return m.clientX < r.left + r.width / 2;\n });\n before = hit ? hit.dataset.field! : null;\n const edge = hit ?? cells[cells.length - 1];\n const r = edge?.getBoundingClientRect();\n const hr = this.headEl.getBoundingClientRect();\n if (r && mark) mark.style.left = `${(hit ? r.left : r.right) - hr.left + this.headEl.scrollLeft}px`;\n };\n const up = () => {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n if (!ghost) return;\n ghost.remove();\n mark?.remove();\n cell.classList.remove('is-dragging-col');\n this.justDragged = true;\n setTimeout(() => (this.justDragged = false));\n this.moveColumn(field, before);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.own(() => (document.removeEventListener('pointermove', move), document.removeEventListener('pointerup', up)));\n });\n // keyboard: Alt+\u2190 / Alt+\u2192 on a focused header moves its column one step\n this.listen(head, 'keydown', (e: KeyboardEvent) => {\n if (!e.altKey || e.shiftKey || (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.is-reorderable');\n if (!cell) return;\n e.preventDefault();\n const vis = this.userCols();\n const i = vis.findIndex((x) => x.field === cell.dataset.field);\n const j = e.key === 'ArrowLeft' ? i - 1 : i + 1;\n if (j < 0 || j >= vis.length) return;\n this.moveColumn(vis[i].field, e.key === 'ArrowLeft' ? vis[j].field : (vis[j + 1]?.field ?? null));\n const again = head.querySelector<HTMLElement>(`[data-field=\"${CSS.escape(vis[i].field)}\"]`);\n (again?.querySelector<HTMLElement>('button') ?? again)?.focus();\n });\n }\n\n private paintSort() {\n const s = this.store.getSorters()[0];\n for (const cell of Array.from(this.headRow.children) as HTMLElement[]) {\n const on = !!s && cell.dataset.field === s.field;\n cell.classList.toggle('is-sorted-asc', on && s.dir === 'asc');\n cell.classList.toggle('is-sorted-desc', on && s.dir === 'desc');\n if (cell.classList.contains('is-sortable')) cell.setAttribute('aria-sort', on ? (s.dir === 'asc' ? 'ascending' : 'descending') : 'none');\n }\n }\n\n /** asc \u2192 desc \u2192 unsorted. */\n private sortBy(col: Column) {\n const s = this.store.getSorters()[0];\n const dir = s?.field === col.field ? (s.dir === 'asc' ? 'desc' : null) : 'asc';\n if (this.emit('before-sort', col.field, dir) === false) return;\n this.store.sort(dir ? col.field : null, dir ?? undefined);\n this.emit('sort', col.field, dir);\n }\n\n // ---- rows ----------------------------------------------------------------------------------\n\n private rowIndexOffset(): number {\n return this.store.pageSize ? (this.store.page - 1) * this.store.pageSize : 0;\n }\n\n private renderRow(row: HTMLElement, i: number) {\n const rec = this.store.getAt(i);\n if (!rec) return;\n const cols = this.cols();\n row.id = `${this.id}-r${i}`;\n row.dataset.i = String(i);\n row.setAttribute('role', 'row');\n row.setAttribute('aria-rowindex', String(this.rowIndexOffset() + i + 2));\n const sel = this.selected.has(rec);\n row.setAttribute('aria-selected', this.mode() === 'none' ? 'false' : String(sel));\n row.classList.toggle('is-selected', sel);\n row.classList.toggle('is-active', i === this.active);\n row.classList.toggle('is-odd', i % 2 === 1);\n if (row.dataset.cv !== String(this.cv) || row.children.length !== cols.length) {\n row.dataset.cv = String(this.cv);\n row.replaceChildren(...cols.map((c, n) => h('div', `op-grid__cell${c.align ? ` op-grid__cell--${c.align}` : ''}${c.cls ? ` ${c.cls}` : ''}`, { role: 'gridcell', 'aria-colindex': n + 1 })));\n }\n cols.forEach((c, n) => {\n const cell = row.children[n] as HTMLElement;\n if (c.field === SEL) {\n const box = (cell.firstElementChild as HTMLInputElement | null) ?? cell.appendChild(h('input', 'op-grid__check', { type: 'checkbox', tabindex: -1, 'aria-label': t('gridSelectRow') }));\n box.checked = sel;\n return;\n }\n if (c.field === ACT) {\n const acts = this.config.rowActions ?? [];\n if (!this.visibleActions()) {\n if (!cell.firstChild) cell.append(h('button', 'op-grid__actbtn', { type: 'button', tabindex: -1, 'aria-label': t('gridRowActions'), 'aria-haspopup': 'menu' }, iconEl('more')));\n return;\n }\n if (cell.children.length !== acts.length || (cell.firstElementChild as HTMLElement | null)?.dataset.a == null) {\n cell.replaceChildren(...acts.map((a, k) => h('button', `op-grid__actbtn${a.variant === 'danger' ? ' is-danger' : ''}`, { type: 'button', tabindex: -1, 'data-a': k, 'aria-label': a.text, title: a.text }, a.icon ? iconEl(a.icon) : a.text)));\n }\n acts.forEach((a, k) => ((cell.children[k] as HTMLButtonElement).disabled = !!a.disabled?.(rec)));\n return;\n }\n const content = cellContent(c, rec);\n if (typeof content === 'string') cell.textContent = content;\n else cell.replaceChildren(content);\n });\n }\n\n private indexOfEvent(e: Event): number {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__body-row');\n return row ? Number(row.dataset.i) : -1;\n }\n\n private onRowEvent(e: MouseEvent, name: string) {\n const i = this.indexOfEvent(e);\n const rec = this.store.getAt(i);\n if (!rec) return;\n if (name === 'row-click') {\n const btn = (e.target as HTMLElement).closest<HTMLButtonElement>('.op-grid__actbtn');\n if (btn) {\n if (btn.dataset.a == null) return this.openRowMenu(rec, btn);\n if (!btn.disabled) this.config.rowActions![Number(btn.dataset.a)].handler(rec, this);\n return;\n }\n this.setActive(i, false);\n this.pick(i, e);\n }\n this.emit(name, rec, i, e);\n }\n\n // ---- selection / keyboard ------------------------------------------------------------------\n\n getSelection(): Model[] {\n return [...this.selected];\n }\n\n /** Selects a record or row index. `add` keeps the current selection (multi mode). */\n select(target: Model | number, opts: { add?: boolean } = {}): void {\n const rec = typeof target === 'number' ? this.store.getAt(target) : target;\n const mode = this.mode();\n if (!rec || mode === 'none') return;\n if (mode === 'single' || !opts.add) this.selected.clear();\n this.selected.add(rec);\n this.changed();\n }\n\n deselectAll(): void {\n if (!this.selected.size) return;\n this.selected.clear();\n this.changed();\n }\n\n private changed() {\n this.v?.refresh();\n this.paintSelection();\n this.emit('select', this.getSelection());\n }\n\n /** Selects every record that matches the filters, across pages (a remote store: the loaded page). */\n selectAllFiltered(): void {\n if (this.mode() !== 'multi') return;\n for (const r of this.store.getFiltered()) this.selected.add(r);\n this.changed();\n }\n\n /** Click semantics: plain = replace, ctrl/meta = toggle, shift = range from the anchor (multi only). */\n private pick(i: number, e: { ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean }) {\n const mode = this.mode();\n const rec = this.store.getAt(i);\n if (!rec || mode === 'none') return;\n if (mode === 'multi' && e.shiftKey && this.anchor >= 0) {\n if (!this.config.checkboxSelection) this.selected.clear();\n for (const r of this.store.getRange(Math.min(this.anchor, i), Math.max(this.anchor, i) + 1)) this.selected.add(r);\n } else if (mode === 'multi' && (e.ctrlKey || e.metaKey || this.config.checkboxSelection)) {\n if (!this.selected.delete(rec)) this.selected.add(rec);\n this.anchor = i;\n } else {\n this.selected.clear();\n this.selected.add(rec);\n this.anchor = i;\n }\n this.changed();\n }\n\n private setActive(i: number, scroll = true) {\n this.active = i;\n if (scroll && i >= 0) this.v.scrollTo(i);\n this.v.refresh();\n this.updateActiveDescendant();\n }\n\n private updateActiveDescendant() {\n if (this.active >= 0 && this.active < this.store.count) this.el.setAttribute('aria-activedescendant', `${this.id}-r${this.active}`);\n else this.el.removeAttribute('aria-activedescendant');\n }\n\n focusRow(i: number) {\n this.render();\n this.setActive(Math.max(0, Math.min(i, this.store.count - 1)));\n this.el.focus();\n }\n\n scrollToRow(i: number) {\n this.v?.scrollTo(i);\n }\n\n private onKey(e: KeyboardEvent) {\n if ((e.target as HTMLElement).closest('.op-grid__header')) return; // header buttons keep their own keys\n const n = this.store.count;\n if (!n) return;\n if ((e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) && this.active >= 0 && this.config.rowActions?.length) {\n e.preventDefault();\n return this.openRowMenu(this.store.getAt(this.active)!, document.getElementById(`${this.id}-r${this.active}`) ?? this.el);\n }\n const page = Math.max(1, Math.floor((this.viewport.clientHeight || 400) / this.config.rowHeight! || 10));\n const cur = this.active < 0 ? 0 : this.active;\n const mode = this.mode();\n const targets: Record<string, number> = {\n ArrowDown: Math.min(n - 1, this.active < 0 ? 0 : cur + 1),\n ArrowUp: Math.max(0, cur - 1),\n Home: 0,\n End: n - 1,\n PageDown: Math.min(n - 1, cur + page),\n PageUp: Math.max(0, cur - page),\n };\n if (e.key in targets) {\n e.preventDefault();\n const to = targets[e.key];\n this.setActive(to);\n if (mode === 'single' || (mode === 'multi' && !e.ctrlKey && !e.metaKey && !this.config.checkboxSelection)) this.pick(to, e);\n } else if (e.key === ' ' && this.active >= 0) {\n e.preventDefault();\n if (mode === 'multi') this.pick(this.active, { ctrlKey: true });\n else this.pick(this.active, e);\n } else if (e.key === 'Enter' && this.active >= 0) {\n this.emit('row-activate', this.store.getAt(this.active), this.active);\n } else if ((e.key === 'a' || e.key === 'A') && (e.ctrlKey || e.metaKey) && mode === 'multi') {\n e.preventDefault();\n this.store.each((r) => this.selected.add(r));\n this.changed();\n }\n }\n\n refresh() {\n this.v?.refresh();\n }\n\n // ---- bar: bulk actions and the column menu ------------------------------------------------\n\n private buildBar() {\n const c = this.config;\n if (!this.barEl) return;\n this.bulkCount = h('span', 'op-grid__count', { 'aria-live': 'polite' });\n this.selectAllBtn = new Button({ text: '', variant: 'ghost', handler: () => this.selectAllFiltered() });\n this.bulkBtns = (c.bulkActions ?? []).map((a) => new Button({ text: a.text, icon: a.icon, variant: a.variant === 'danger' ? 'danger' : 'default', handler: () => a.handler(this.getSelection(), this) }));\n const clear = new Button({ text: t('gridClearSel'), variant: 'ghost', handler: () => this.deselectAll() });\n this.bulkEl!.append(this.bulkCount, this.selectAllBtn.el, ...this.bulkBtns.map((b) => b.el), clear.el);\n this.own(() => [this.selectAllBtn, ...this.bulkBtns, clear].forEach((b) => b?.destroy()));\n if (c.columnMenu) this.buildColumnMenu();\n this.paintSelection();\n }\n\n /** Header checkbox state and the bulk bar, from the current selection. */\n private paintSelection() {\n if (!this.rendered) return;\n const n = this.store.count;\n let k = 0;\n this.store.each((r) => this.selected.has(r) && k++);\n if (this.selAll) {\n this.selAll.checked = n > 0 && k === n;\n this.selAll.indeterminate = k > 0 && k < n;\n }\n if (!this.bulkEl) return;\n const size = this.selected.size;\n this.bulkEl.hidden = !size || !this.config.bulkActions?.length;\n if (this.bulkEl.hidden) return;\n this.bulkCount!.textContent = t('gridSelected', { n: size });\n const more = this.store.getFiltered().length;\n this.selectAllBtn!.el.hidden = !(this.mode() === 'multi' && k === n && more > n && size < more);\n this.selectAllBtn!.setText(t('gridSelectAll', { n: more }));\n }\n\n private openRowMenu(rec: Model, btn: HTMLElement) {\n this.rowMenu ??= new Menu({});\n this.rowMenu.setItems((this.config.rowActions ?? []).map((a) => ({ text: a.text, icon: a.icon, disabled: !!a.disabled?.(rec), handler: () => a.handler(rec, this) })));\n this.rowMenu.showBy(btn);\n }\n private buildColumnMenu() {\n const btn = new Button({ text: t('gridColumns'), icon: 'columns', variant: 'ghost' });\n this.colSearch = new TextField({ placeholder: t('gridColumnSearch'), clearable: true });\n this.colChips = h('div', 'op-grid__colchips', { role: 'group', 'aria-label': t('gridGroups') });\n this.colList = h('div', 'op-grid__collist', { role: 'group', 'aria-label': t('gridColumns') });\n const none = h('div', 'op-grid__colempty', {}, t('gridNoColumns'));\n none.hidden = true;\n const panel = h('div', 'op-grid__colmenu', {}, this.colSearch.el, this.colChips, this.colList, none);\n this.colDd = new Dropdown({ anchor: btn.el, content: panel, placement: 'bottom-end', role: 'dialog', autoFocus: false });\n this.barEl!.append(btn.el);\n this.own(() => btn.destroy());\n /** Search text and the group chip decide what is listed; a search that names a group shows the whole group. */\n const filter = () => {\n const q = (this.colSearch!.getValue() ?? '').toLowerCase();\n let shown = 0;\n let head: HTMLElement | undefined;\n let rowsInGroup = 0;\n const closeGroup = () => head && (head.hidden = rowsInGroup === 0);\n for (const el of Array.from(this.colList!.children) as HTMLElement[]) {\n if (el.classList.contains('op-grid__colgroup')) {\n closeGroup();\n head = el;\n rowsInGroup = 0;\n continue;\n }\n const g = el.dataset.group ?? '';\n const byChip = !this.colGroup || g === this.colGroup;\n const byText = !q || g.toLowerCase().includes(q) || el.textContent!.toLowerCase().includes(q);\n el.hidden = !(byChip && byText);\n if (!el.hidden) (shown++, rowsInGroup++);\n }\n closeGroup();\n none.hidden = shown > 0;\n };\n this.colSearch.on('change', filter);\n this.listen(this.colChips, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('[data-g]');\n if (!b) return;\n this.colGroup = b.dataset.g!;\n this.paintColumnList();\n filter();\n });\n btn.on('click', () => {\n if (this.colDd!.isOpen()) return this.colDd!.close();\n this.colSearch!.setValue('');\n this.colGroup = '';\n this.paintColumnList();\n this.colDd!.open();\n this.colSearch!.focus();\n });\n this.listen(this.colList, 'change', (e: Event) => {\n const input = e.target as HTMLInputElement;\n if (input.dataset.groupToggle != null) this.setColumnGroupVisible(input.dataset.groupToggle, input.checked);\n else {\n const col = this.config.columns.find((x) => x.field === input.value);\n if (!col) return;\n col.hidden = !input.checked;\n this.setColumns(this.config.columns);\n this.emit('columns-change', this.getColumnState());\n }\n this.paintColumnList();\n filter();\n });\n }\n\n private paintColumnList() {\n const cols = this.config.columns;\n const groups = this.getColumnGroups();\n const last = this.userCols().length === 1 ? this.userCols()[0] : null; // at least one column stays visible\n const row = (c: Column) => {\n const box = h('input', 'op-grid__check', { type: 'checkbox', value: c.field });\n box.checked = !c.hidden;\n box.disabled = c === last;\n return h('label', 'op-grid__colitem', { 'data-group': c.group ?? '' }, box, h('span', '', {}, c.header ?? c.field));\n };\n this.colChips!.hidden = groups.length < 2;\n this.colChips!.replaceChildren(...[['', t('gridGroupAll')], ...groups.map((g) => [g, g])].map(([g, label]) => h('button', `op-grid__colchip${this.colGroup === g ? ' is-on' : ''}`, { type: 'button', 'data-g': g, 'aria-pressed': String(this.colGroup === g) }, label)));\n if (!groups.length) return this.colList!.replaceChildren(...cols.map(row));\n const out: HTMLElement[] = [];\n for (const g of [...groups, '']) {\n const items = cols.filter((c) => (c.group ?? '') === g);\n if (!items.length) continue;\n const on = items.filter((c) => !c.hidden).length;\n const toggle = h('input', 'op-grid__check', { type: 'checkbox', 'data-group-toggle': g, 'aria-label': g || t('gridOtherCols') });\n toggle.checked = on === items.length;\n toggle.indeterminate = on > 0 && on < items.length;\n out.push(h('div', 'op-grid__colgroup', { 'data-group': g }, h('label', '', {}, toggle, h('span', '', {}, g || t('gridOtherCols'))), h('span', 'op-grid__colcount', {}, `${on}/${items.length}`)), ...items.map(row));\n }\n this.colList!.replaceChildren(...out);\n }\n\n protected override onDestroy() {\n this.pager?.destroy();\n this.rowMenu?.destroy();\n this.colDd?.destroy();\n this.colSearch?.destroy();\n }\n}\nregister('grid', Grid);\n"],
5
- "mappings": "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",
6
- "names": ["SEL", "ACT", "SEL_COL", "ACT_COL", "ROW", "Grid", "Component", "c", "el", "h", "Pagination", "Store", "virtualize", "measure", "row", "i", "e", "r", "cell", "col", "x", "ro", "hgt", "store", "offChange", "offLoading", "on", "before", "t", "cols", "n", "wide", "tpl", "sum", "label", "iconEl", "user", "band", "cells", "g", "group", "visible", "columns", "state", "by", "ordered", "field", "width", "head", "grip", "x0", "w0", "last", "move", "m", "w", "up", "vis", "from", "next", "target", "lastVis", "at", "cellsOf", "ghost", "mark", "hit", "hr", "j", "again", "s", "dir", "rec", "sel", "box", "acts", "a", "k", "content", "cellContent", "name", "btn", "opts", "mode", "scroll", "page", "cur", "targets", "to", "Button", "clear", "b", "size", "more", "Menu", "TextField", "none", "panel", "Dropdown", "filter", "q", "shown", "rowsInGroup", "closeGroup", "byChip", "byText", "input", "groups", "out", "items", "toggle", "register"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as g,b as o}from"./chunk-OWEQT2HN.js";import{a as c,b as d}from"./chunk-IYPKPLCU.js";import{b as n}from"./chunk-PZSHOSOS.js";import{e as m}from"./chunk-MA5BJL3S.js";var p="var(--op-listbox-row-height, var(--op-row-height))",a=class extends c{baseCls="op-listbox";items;active=-1;v;emptyEl;constructor(t={}){super(t),this.items=t.items??[]}build(){let t=n("div","op-listbox",{role:"listbox",tabindex:-1});return this.config.maxHeight!=null&&(t.style.maxHeight=typeof this.config.maxHeight=="number"?`${this.config.maxHeight}px`:this.config.maxHeight),this.emptyEl=n("div","op-listbox__empty"),t.append(this.emptyEl),t}onRender(){this.v=g({scroller:this.el,count:this.items.length,rowHeight:o(this.el,p)||32,render:(t,e)=>this.renderRow(t,e),rowCls:"op-listbox__item"}),this.own(()=>this.v?.destroy()),this.setEmptyText(this.config.emptyText??m("noResults")),this.listen(this.el,"mousedown",t=>t.preventDefault()),this.listen(this.el,"click",t=>{let e=this.indexOf(t.target);e>=0&&this.activate(e)}),this.listen(this.el,"mousemove",t=>{let e=this.indexOf(t.target);e>=0&&e!==this.active&&!this.items[e].disabled&&this.setActive(e,!1)}),this.updateEmpty()}indexOf(t){let e=t.closest(".op-listbox__item");return e?Number(e.dataset.i):-1}renderRow(t,e){let i=this.items[e],s=this.config;t.id=`${this.id}-opt-${e}`,t.dataset.i=String(e),t.setAttribute("role","option"),t.setAttribute("aria-selected",String(this.isSelected(i))),i.disabled?t.setAttribute("aria-disabled","true"):t.removeAttribute("aria-disabled"),t.classList.toggle("is-active",e===this.active),t.classList.toggle("is-selected",this.isSelected(i)),t.classList.toggle("is-disabled",!!i.disabled);let l=i.hint?[n("span","op-listbox__hint",{},i.hint)]:[];if(s.renderer)return t.replaceChildren(s.renderer(i),...l);let h=s.highlight?.trim(),r=h?i.label.toLowerCase().indexOf(h.toLowerCase()):-1;if(r<0)return t.replaceChildren(i.label,...l);t.replaceChildren(i.label.slice(0,r),n("mark","op-listbox__mark",{},i.label.slice(r,r+h.length)),i.label.slice(r+h.length),...l)}isSelected(t){return this.config.selected!==void 0&&t.value===this.config.selected}updateEmpty(){this.emptyEl.hidden=this.items.length>0}getItems(){return this.items}setItems(t){this.items=t,this.config.items=t,this.active=-1,this.rendered&&(this.v.setCount(t.length),this.updateEmpty())}setSelected(t){this.config.selected=t,this.v?.refresh()}setHighlight(t){this.config.highlight=t,this.v?.refresh()}setEmptyText(t){this.config.emptyText=t,this.rendered&&(this.emptyEl.textContent=t)}refresh(){if(!this.rendered)return;let t=o(this.el,p);t?this.v.setRowHeight(t):this.v.refresh()}setActive(t,e=!0){let i=this.items[t];t<-1||t>=this.items.length||i&&i.disabled||(this.active=t,e&&t>=0&&this.v?.scrollTo(t),this.v?.refresh(),this.emit("active-change",i,t))}moveActive(t){let e=this.items.length;if(!e)return;let i=this.active;for(let s=0;s<e;s++)if(i=(i+t+e)%e,i<0&&(i+=e),!this.items[i].disabled)return this.setActive(i)}getActive(){return this.items[this.active]}getActiveIndex(){return this.active}getActiveId(){return this.active>=0?`${this.id}-opt-${this.active}`:""}activate(t=this.active){let e=this.items[t];e&&!e.disabled&&this.emit("select",e,t)}scrollTo(t){this.v?.scrollTo(t)}};d("listbox",a);export{a};
2
- //# sourceMappingURL=chunk-O4DCHALR.js.map
@@ -1,2 +0,0 @@
1
- import{a as o,b as i}from"./chunk-IYPKPLCU.js";import{e as r}from"./chunk-MA5BJL3S.js";var e=class extends o{baseCls="op-spinner";tag="span";onRender(){this.el.setAttribute("role","progressbar"),this.setLabel(this.config.label??r("loading"))}setLabel(t){this.config.label=t,this.rendered&&this.el.setAttribute("aria-label",t)}};i("spinner",e);export{e as a};
2
- //# sourceMappingURL=chunk-ODWPBBVL.js.map
@@ -1,2 +0,0 @@
1
- import{a as l}from"./chunk-676AKAGF.js";import{g as f,h as u}from"./chunk-4AA4FQEM.js";import{c as p}from"./chunk-IHAYOSBR.js";import{a as d,b as m}from"./chunk-IYPKPLCU.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as h}from"./chunk-MA5BJL3S.js";var n={duration:4e3,position:"top-right",max:5},g={info:"info",success:"success",warning:"alert",error:"error"};function v(e){let t=l().querySelector(`.op-toast-region[data-pos="${e}"]`);return t||(t=i("div","op-toast-region",{"data-pos":e}),l().appendChild(t)),t}var r=class extends d{baseCls="op-toast";cancelTimer;remaining=0;started=0;build(){let t=this.config,s=t.type??"info",o=i("div",`op-toast op-toast--${s}`,{role:s==="error"?"alert":"status"}),a=i("div","op-toast__body",{},t.title?i("div","op-toast__title",{},t.title):null,i("div","op-toast__text",{},t.text??""));if(o.append(i("span","op-toast__icon",{},p(g[s])),a),t.closable!==!1){let c=i("button","op-toast__close",{type:"button","aria-label":h("close")},p("x"));this.listen(c,"click",()=>this.close()),o.append(c)}return this.listen(o,"pointerenter",()=>this.pause()),this.listen(o,"pointerleave",()=>this.resume()),this.listen(o,"focusin",()=>this.pause()),this.listen(o,"focusout",()=>this.resume()),o}show(){let t=this.config.position??n.position,s=v(t);t.startsWith("bottom")?s.append(this.el):s.prepend(this.el);for(let o of Array.from(s.children).filter(a=>a!==this.el).slice(n.max-1))o.dispatchEvent(new Event("op-dismiss"));this.listen(this.el,"op-dismiss",()=>this.close()),this.remaining=this.config.duration??n.duration,this.resume(),u(this.el,{dy:10}),this.config.type==="success"&&f(this.el.querySelector(".op-toast__icon")??this.el),this.emit("show")}pause(){this.cancelTimer&&(this.cancelTimer(),this.cancelTimer=void 0,this.remaining-=Date.now()-this.started)}resume(){this.cancelTimer||this.remaining<=0||this.destroyed||(this.started=Date.now(),this.cancelTimer=this.later(()=>this.close(),this.remaining))}close(){this.destroyed||(this.emit("close"),this.destroy())}};m("toast",r);function y(e){let t=new r(typeof e=="string"?{text:e}:e);return t.show(),{close:()=>t.close()}}y.configure=e=>Object.assign(n,e);export{r as a,y as b};
2
- //# sourceMappingURL=chunk-OW2ZSMGS.js.map
@@ -1,2 +0,0 @@
1
- import{a as b}from"./chunk-XZ5CUZZP.js";import{b as a,c as f}from"./chunk-676AKAGF.js";import{a as l,b as m}from"./chunk-VV7CFMPZ.js";import{b as v,c as u}from"./chunk-4AA4FQEM.js";import{c as n}from"./chunk-2UPUC4RK.js";import{b as c}from"./chunk-IYPKPLCU.js";import{b as p}from"./chunk-PZSHOSOS.js";var d=class extends b{baseCls="op-panel op-window";backdrop;visible=!1;cleanup=[];opener=null;moved=!1;leaving=0;constructor(e={}){super({closable:!0,...e})}onRender(){super.onRender();let e=this.config;this.el.setAttribute("role","dialog"),this.el.tabIndex=-1,e.modal!==!1&&this.el.setAttribute("aria-modal","true"),e.draggable!==!1&&this.initDrag()}initDrag(){this.headerEl.classList.add("op-window__handle"),this.listen(this.headerEl,"pointerdown",e=>{if(e.target.closest(".op-panel__tool")||e.button)return;let t=this.el.getBoundingClientRect(),o=e.clientX-t.left,s=e.clientY-t.top;this.el.classList.add("is-dragging");let i=h=>{this.el.style.left=`${Math.max(0,Math.min(h.clientX-o,innerWidth-40))}px`,this.el.style.top=`${Math.max(0,Math.min(h.clientY-s,innerHeight-40))}px`,this.moved=!0},r=()=>{this.el.classList.remove("is-dragging"),document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",i),document.addEventListener("pointerup",r),this.cleanup.push(r)})}isVisible(){return this.visible}center(){let e=this.el;e.style.left=`${Math.max(0,(innerWidth-e.offsetWidth)/2)}px`,e.style.top=`${Math.max(0,(innerHeight-e.offsetHeight)/3)}px`}show(){if(this.visible||this.destroyed||this.emit("before-show")===!1)return;let e=this.config,t=this.el;this.opener=document.activeElement,e.modal!==!1?(this.backdrop=p("div","op-window-backdrop",{},t),a(this.backdrop,this.opener),this.cleanup.push(f(this.backdrop)),this.listen(this.backdrop,"pointerdown",i=>{i.target===this.backdrop&&(e.closeOnBackdrop?this.close():t.focus())})):a(t,this.opener),this.visible=!0,this.leaving++,t.getAnimations?.().forEach(i=>i.cancel()),this.notifyMount(),this.center(),v(t,this.opener??void 0,"modal"),this.backdrop?.animate?.([{opacity:0},{opacity:1}],{duration:n.ms("modal"),easing:n.easing("enter")}),this.cleanup.push(m(t));let o=i=>{i.key==="Escape"&&e.closeOnEsc!==!1&&!i.defaultPrevented&&(i.stopPropagation(),this.close())};t.addEventListener("keydown",o);let s=()=>!this.moved&&this.center();window.addEventListener("resize",s),this.cleanup.push(()=>t.removeEventListener("keydown",o),()=>window.removeEventListener("resize",s)),e.autoFocus!==!1&&this.focusFirst(),this.emit("show")}focusFirst(){let e=l(this.bodyEl)[0],t=this.el.querySelector(".op-panel__footer .op-button--primary");(e??t??l(this.el).find(o=>!o.classList.contains("op-panel__tool"))??this.el).focus()}hide(){!this.visible||this.emit("before-hide")===!1||(this.release(),this.emit("hide"))}release(e=!0){this.visible=!1,this.cleanup.splice(0).reverse().forEach(i=>i());let t=this.backdrop;this.backdrop=void 0;let o=t??this.el,s=e?u(this.el,this.opener??void 0,"modal"):null;if(s){let i=++this.leaving;t?.animate?.([{opacity:1},{opacity:0}],{duration:n.ms("modal","exit"),easing:n.easing("exit"),fill:"forwards"}),s.then(()=>i===this.leaving&&!this.visible&&(o.remove(),t?.remove()))}else o.remove(),t?.remove();this.opener instanceof HTMLElement&&this.opener.isConnected&&this.opener.focus()}onDestroy(){this.visible?this.release(!1):this.leaving&&(this.el.closest(".op-window-backdrop")??this.el).remove(),super.onDestroy()}};c("window",d);export{d as a};
2
- //# sourceMappingURL=chunk-PSPQH35P.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/components/overlays/window/window.ts"],
4
- "sourcesContent": ["import { Panel, type PanelConfig } from '../../layout/panel/panel';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { toLayer, lockModal } from '../../../core/layer';\nimport { trapFocus, focusables } from '../../../core/focus';\nimport { popIn, popOut } from '../../../motion/core';\nimport { motion } from '../../../motion/config';\n\nexport interface WindowConfig extends PanelConfig {\n modal?: boolean;\n draggable?: boolean;\n closeOnEsc?: boolean;\n closeOnBackdrop?: boolean;\n /** Move focus inside on show. Default true. */\n autoFocus?: boolean;\n}\n\n/** Floating dialog. Modal by default: the page behind becomes inert and Tab stays inside. */\nexport class Window extends Panel<WindowConfig> {\n protected override baseCls = 'op-panel op-window';\n private backdrop?: HTMLElement;\n private visible = false;\n private cleanup: Array<() => void> = [];\n private opener: Element | null = null;\n private moved = false;\n private leaving = 0;\n\n constructor(config: WindowConfig = {}) {\n super({ closable: true, ...config });\n }\n\n protected override onRender() {\n super.onRender();\n const c = this.config;\n this.el.setAttribute('role', 'dialog');\n this.el.tabIndex = -1;\n if (c.modal !== false) this.el.setAttribute('aria-modal', 'true');\n if (c.draggable !== false) this.initDrag();\n }\n\n private initDrag() {\n this.headerEl.classList.add('op-window__handle');\n this.listen(this.headerEl, 'pointerdown', (e: PointerEvent) => {\n if ((e.target as HTMLElement).closest('.op-panel__tool') || e.button) return;\n const r = this.el.getBoundingClientRect();\n const dx = e.clientX - r.left;\n const dy = e.clientY - r.top;\n this.el.classList.add('is-dragging');\n const move = (m: PointerEvent) => {\n this.el.style.left = `${Math.max(0, Math.min(m.clientX - dx, innerWidth - 40))}px`;\n this.el.style.top = `${Math.max(0, Math.min(m.clientY - dy, innerHeight - 40))}px`;\n this.moved = true;\n };\n const up = () => {\n this.el.classList.remove('is-dragging');\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.cleanup.push(up);\n });\n }\n\n isVisible(): boolean {\n return this.visible;\n }\n\n /** Centers in the viewport (also done on show and on resize until the user drags it). */\n center(): void {\n const el = this.el;\n el.style.left = `${Math.max(0, (innerWidth - el.offsetWidth) / 2)}px`;\n el.style.top = `${Math.max(0, (innerHeight - el.offsetHeight) / 3)}px`;\n }\n\n override show(): void {\n if (this.visible || this.destroyed || this.emit('before-show') === false) return;\n const c = this.config;\n const el = this.el;\n this.opener = document.activeElement;\n if (c.modal !== false) {\n this.backdrop = h('div', 'op-window-backdrop', {}, el);\n toLayer(this.backdrop, this.opener);\n this.cleanup.push(lockModal(this.backdrop));\n this.listen(this.backdrop, 'pointerdown', (e: Event) => {\n if (e.target !== this.backdrop) return;\n if (c.closeOnBackdrop) this.close();\n else el.focus();\n });\n } else toLayer(el, this.opener);\n this.visible = true;\n this.leaving++;\n el.getAnimations?.().forEach((a) => a.cancel());\n this.notifyMount();\n this.center();\n void popIn(el, this.opener ?? undefined, 'modal'); // grows out of the button that opened it\n this.backdrop?.animate?.([{ opacity: 0 }, { opacity: 1 }], { duration: motion.ms('modal'), easing: motion.easing('enter') });\n this.cleanup.push(trapFocus(el));\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && c.closeOnEsc !== false && !e.defaultPrevented) {\n e.stopPropagation();\n this.close();\n }\n };\n el.addEventListener('keydown', onKey);\n const onResize = () => !this.moved && this.center();\n window.addEventListener('resize', onResize);\n this.cleanup.push(() => el.removeEventListener('keydown', onKey), () => window.removeEventListener('resize', onResize));\n if (c.autoFocus !== false) this.focusFirst();\n this.emit('show');\n }\n\n private focusFirst() {\n const inBody = focusables(this.bodyEl)[0];\n const primary = this.el.querySelector<HTMLElement>('.op-panel__footer .op-button--primary');\n (inBody ?? primary ?? focusables(this.el).find((e) => !e.classList.contains('op-panel__tool')) ?? this.el).focus();\n }\n\n override hide(): void {\n if (!this.visible || this.emit('before-hide') === false) return;\n this.release();\n this.emit('hide');\n }\n\n /** Cleans up at once (the page is usable again) and takes the window off the screen: shrinking toward its opener, 20 % faster than it came. */\n private release(animate = true) {\n this.visible = false;\n this.cleanup.splice(0).reverse().forEach((f) => f());\n const bd = this.backdrop;\n this.backdrop = undefined;\n const target = bd ?? this.el;\n const out = animate ? popOut(this.el, this.opener ?? undefined, 'modal') : null;\n if (out) {\n const id = ++this.leaving;\n bd?.animate?.([{ opacity: 1 }, { opacity: 0 }], { duration: motion.ms('modal', 'exit'), easing: motion.easing('exit'), fill: 'forwards' });\n void out.then(() => id === this.leaving && !this.visible && (target.remove(), bd?.remove()));\n } else {\n target.remove();\n bd?.remove();\n }\n if (this.opener instanceof HTMLElement && this.opener.isConnected) this.opener.focus();\n }\n\n protected override onDestroy() {\n if (this.visible) this.release(false);\n else if (this.leaving) (this.el.closest('.op-window-backdrop') ?? this.el).remove();\n super.onDestroy();\n }\n}\nregister('window', Window);\n"],
5
- "mappings": "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",
6
- "names": ["Window", "Panel", "config", "c", "r", "dx", "dy", "move", "m", "up", "el", "h", "toLayer", "lockModal", "e", "a", "popIn", "motion", "trapFocus", "onKey", "onResize", "inBody", "focusables", "primary", "animate", "f", "bd", "target", "out", "popOut", "id", "register"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as h}from"./chunk-5Q6Y6CM4.js";import{a}from"./chunk-SNTHW4K2.js";import{c as o}from"./chunk-IHAYOSBR.js";import{b as l}from"./chunk-IYPKPLCU.js";import{b as s}from"./chunk-PZSHOSOS.js";import{e as i}from"./chunk-MA5BJL3S.js";var d="\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022",n=class extends a{baseCls="op-field op-textfield op-secret";stored=!1;initialStored=!1;replacing=!1;revealed=!1;eyeBtn;replaceBtn;keepBtn;hint;constructor(e={}){super({autocomplete:"new-password",...e,inputType:"password"}),this.stored=this.initialStored=!!e.stored}emptyValue(){return null}isEmpty(e){return!this.stored&&(e==null||e==="")}createControl(){let e=super.createControl(),t=this.input;return t.spellcheck=!1,this.eyeBtn=s("button","op-secret__eye",{type:"button","aria-pressed":"false"}),this.replaceBtn=s("button","op-secret__replace",{type:"button"},i("secretReplace")),this.keepBtn=s("button","op-secret__keep",{type:"button"},i("secretKeep")),this.hint=s("div","op-secret__hint",{id:`${this.id}-hint`},s("span","op-secret__note",{},i("secretStored")),this.keepBtn),this.listen(this.eyeBtn,"mousedown",r=>r.preventDefault()),this.listen(this.eyeBtn,"click",()=>this.setRevealed(!this.revealed)),this.listen(this.replaceBtn,"click",()=>{this.replace()}),this.listen(this.keepBtn,"click",()=>this.keep()),this.listen(t,"click",()=>this.stored&&void this.replace()),this.listen(t,"keydown",r=>{this.stored&&(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),this.replace())}),this.on("blur",()=>this.config.autoHide!==!1&&this.setRevealed(!1)),e.append(this.eyeBtn,this.replaceBtn),s("div","op-secret__box",{},e,this.hint)}onRender(){super.onRender(),this.paint()}isStored(){return this.stored}isReplacing(){return this.replacing}isRevealed(){return this.revealed}setStored(e){this.stored=e,this.replacing=!1,this.revealed=!1,super.setValue(null,!0),this.paint(),this.emit("stored-change",e)}setValue(e,t=!1){if(e===!0)return this.setStored(!0);e===!1&&(e=null),this.stored&&e!=null&&(this.stored=!1,this.replacing=!0),super.setValue(e,t),this.paint()}markClean(){super.markClean(),this.initialStored=this.stored}reset(){this.setStored(this.initialStored),super.reset()}async replace(){return!this.stored||this.config.readonly||this.config.disabled||this.emit("before-replace")===!1||this.config.confirmReplace!==!1&&!await h.confirm(this.config.replaceText??i("secretWarn"),{danger:!0,title:this.config.replaceTitle??i("secretWarnTitle"),okText:i("secretReplace")})?!1:(this.stored=!1,this.replacing=!0,super.setValue("",!1),this.paint(),this.input.focus(),this.emit("replace"),!0)}keep(){this.replacing&&(this.stored=!0,this.replacing=!1,this.revealed=!1,super.setValue(null,!1),this.paint(),this.emit("keep"))}setRevealed(e){this.stored&&(e=!1),this.revealed=e,this.paint()}getDisplayText(){return this.stored||(this.value??"")!==""?d:""}paint(){if(!this.rendered)return;let e=this.input,t=this.revealed&&!this.stored;e.type=t?"text":"password",e.readOnly=this.stored||!!this.config.readonly,e.placeholder=this.stored?d:this.config.placeholder??"",this.stored&&(e.value=""),e.setAttribute("aria-describedby",this.stored||this.replacing?this.hint.id:""),!this.stored&&!this.replacing&&e.removeAttribute("aria-describedby"),this.eyeBtn.hidden=this.stored,this.eyeBtn.setAttribute("aria-pressed",String(t)),this.eyeBtn.setAttribute("aria-label",i(t?"secretHide":"secretShow")),this.eyeBtn.replaceChildren(o(t?"eye-off":"eye")),this.replaceBtn.hidden=!this.stored,this.hint.hidden=!this.stored&&!this.replacing,this.hint.querySelector(".op-secret__note").hidden=!this.stored,this.keepBtn.hidden=!this.replacing,this.el.classList.toggle("is-stored",this.stored),this.el.classList.toggle("is-replacing",this.replacing),this.el.classList.toggle("is-revealed",t),this.el.classList.toggle("has-value",this.stored||!!e.value)}};l("secretfield",n);export{n as a};
2
- //# sourceMappingURL=chunk-T4OYVG2X.js.map