optikos 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. package/CHANGELOG.md +118 -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-27UZFEXD.js +2 -0
  6. package/dist/chunk-27UZFEXD.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-3DBEZGOY.js +2 -0
  12. package/dist/chunk-3DBEZGOY.js.map +7 -0
  13. package/dist/chunk-3S24ZRPK.js +2 -0
  14. package/dist/chunk-3S24ZRPK.js.map +7 -0
  15. package/dist/chunk-3TAW4AKH.js +2 -0
  16. package/dist/chunk-3TAW4AKH.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-5YS7OD5E.js +2 -0
  33. package/dist/{chunk-GZNQPENR.js.map → chunk-5YS7OD5E.js.map} +1 -1
  34. package/dist/{chunk-NV5AIBQP.js → chunk-6VBK2I5B.js} +2 -2
  35. package/dist/{chunk-ZYUXCZX7.js → chunk-7KMIFXHZ.js} +2 -2
  36. package/dist/{chunk-IYPKPLCU.js → chunk-A2NKDOYN.js} +2 -2
  37. package/dist/chunk-A2NKDOYN.js.map +7 -0
  38. package/dist/chunk-ATFJ7PNA.js +2 -0
  39. package/dist/chunk-ATFJ7PNA.js.map +7 -0
  40. package/dist/chunk-BXYWVRKJ.js +2 -0
  41. package/dist/chunk-BXYWVRKJ.js.map +7 -0
  42. package/dist/chunk-CKXS375P.js +2 -0
  43. package/dist/chunk-CKXS375P.js.map +7 -0
  44. package/dist/chunk-CUN5QO4T.js +2 -0
  45. package/dist/{chunk-4DHQKECB.js.map → chunk-CUN5QO4T.js.map} +1 -1
  46. package/dist/chunk-DBMWS3O5.js +2 -0
  47. package/dist/chunk-DBMWS3O5.js.map +7 -0
  48. package/dist/chunk-E4VNLYO2.js +2 -0
  49. package/dist/chunk-E4VNLYO2.js.map +7 -0
  50. package/dist/chunk-EDUMAMK4.js +2 -0
  51. package/dist/chunk-EDUMAMK4.js.map +7 -0
  52. package/dist/chunk-ELYARUCN.js +2 -0
  53. package/dist/{chunk-Z25NC4CS.js → chunk-EV73ADN2.js} +2 -2
  54. package/dist/{chunk-LV6HXFHU.js → chunk-FEHGU6EP.js} +3 -3
  55. package/dist/chunk-FEHGU6EP.js.map +7 -0
  56. package/dist/chunk-FHM5NUS4.js +3 -0
  57. package/dist/chunk-FHM5NUS4.js.map +7 -0
  58. package/dist/chunk-G2DAD3MQ.js +2 -0
  59. package/dist/chunk-G2DAD3MQ.js.map +7 -0
  60. package/dist/chunk-G2KUK6AT.js +2 -0
  61. package/dist/chunk-GBPLNXMP.js +2 -0
  62. package/dist/chunk-GBPLNXMP.js.map +7 -0
  63. package/dist/{chunk-LBCWEWPN.js → chunk-GNU4VOOE.js} +2 -2
  64. package/dist/{chunk-IW7PK4VS.js → chunk-GZ7X34QP.js} +2 -2
  65. package/dist/chunk-HOF4JGMQ.js +2 -0
  66. package/dist/chunk-HOF4JGMQ.js.map +7 -0
  67. package/dist/chunk-HXDTGP2K.js +2 -0
  68. package/dist/chunk-HXDTGP2K.js.map +7 -0
  69. package/dist/{chunk-QEQIJAAB.js → chunk-I4SP6JTU.js} +2 -2
  70. package/dist/chunk-IHE2MQ3W.js +2 -0
  71. package/dist/{chunk-OW2ZSMGS.js.map → chunk-IHE2MQ3W.js.map} +1 -1
  72. package/dist/chunk-II6ITOA6.js +2 -0
  73. package/dist/chunk-II6ITOA6.js.map +7 -0
  74. package/dist/chunk-JBLRAM7Z.js +2 -0
  75. package/dist/{chunk-JZNEB7A7.js.map → chunk-JBLRAM7Z.js.map} +1 -1
  76. package/dist/{chunk-4SUKNSCY.js → chunk-JI265XFO.js} +2 -2
  77. package/dist/chunk-JK74QK3M.js +2 -0
  78. package/dist/chunk-JK74QK3M.js.map +7 -0
  79. package/dist/chunk-JOFQJGZK.js +2 -0
  80. package/dist/chunk-JOFQJGZK.js.map +7 -0
  81. package/dist/chunk-KCEUD232.js +2 -0
  82. package/dist/chunk-KCEUD232.js.map +7 -0
  83. package/dist/chunk-KLLAY2IM.js +2 -0
  84. package/dist/chunk-KLLAY2IM.js.map +7 -0
  85. package/dist/chunk-LBJSMXLV.js +2 -0
  86. package/dist/chunk-LBJSMXLV.js.map +7 -0
  87. package/dist/chunk-LQRFNQ2N.js +2 -0
  88. package/dist/chunk-LQRFNQ2N.js.map +7 -0
  89. package/dist/{chunk-NDBFYIL6.js → chunk-LW2WRUVL.js} +2 -2
  90. package/dist/{chunk-NDBFYIL6.js.map → chunk-LW2WRUVL.js.map} +2 -2
  91. package/dist/chunk-M242VYZA.js +2 -0
  92. package/dist/{chunk-XVIC24AW.js.map → chunk-M242VYZA.js.map} +1 -1
  93. package/dist/chunk-MB3MU6HR.js +2 -0
  94. package/dist/chunk-MB3MU6HR.js.map +7 -0
  95. package/dist/chunk-MW3RWBZ7.js +2 -0
  96. package/dist/chunk-MW3RWBZ7.js.map +7 -0
  97. package/dist/chunk-NXSTUFS7.js +2 -0
  98. package/dist/chunk-NXSTUFS7.js.map +7 -0
  99. package/dist/chunk-OEAXCCVM.js +2 -0
  100. package/dist/chunk-OEAXCCVM.js.map +7 -0
  101. package/dist/chunk-OGRFQTXA.js +2 -0
  102. package/dist/chunk-OGRFQTXA.js.map +7 -0
  103. package/dist/chunk-REW4LR46.js +2 -0
  104. package/dist/chunk-REW4LR46.js.map +7 -0
  105. package/dist/chunk-RNN55473.js +2 -0
  106. package/dist/chunk-RNN55473.js.map +7 -0
  107. package/dist/{chunk-6NJW7QFD.js → chunk-SA53QUBF.js} +2 -2
  108. package/dist/chunk-TIPK3SCJ.js +2 -0
  109. package/dist/chunk-TIPK3SCJ.js.map +7 -0
  110. package/dist/{chunk-TBLICXWW.js → chunk-TOLTUOZS.js} +2 -2
  111. package/dist/{chunk-DXO3UJKL.js → chunk-TZOQWCVH.js} +2 -2
  112. package/dist/chunk-VF7BGP6L.js +2 -0
  113. package/dist/chunk-VF7BGP6L.js.map +7 -0
  114. package/dist/chunk-VU3GIDZ3.js +2 -0
  115. package/dist/chunk-VU3GIDZ3.js.map +7 -0
  116. package/dist/{chunk-SNTHW4K2.js → chunk-W3H7GTJY.js} +2 -2
  117. package/dist/{chunk-ZHVSHDLH.js → chunk-XHOBNSBO.js} +2 -2
  118. package/dist/chunk-XX2MVWFS.js +4 -0
  119. package/dist/chunk-XX2MVWFS.js.map +7 -0
  120. package/dist/chunk-XYZ6VZ5T.js +2 -0
  121. package/dist/chunk-XYZ6VZ5T.js.map +7 -0
  122. package/dist/chunk-YBAYEU25.js +2 -0
  123. package/dist/chunk-YBAYEU25.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 +45 -0
  230. package/dist/css/panel.css +8 -1
  231. package/dist/css/stepper.css +7 -2
  232. package/dist/css/tabs.css +12 -3
  233. package/dist/css/toggle.css +39 -0
  234. package/dist/css/tree.css +94 -0
  235. package/dist/css/widget.css +58 -0
  236. package/dist/css/window.css +4 -0
  237. package/dist/data.js +1 -1
  238. package/dist/index.js +3 -3
  239. package/dist/index.js.map +3 -3
  240. package/dist/optikos.css +1194 -99
  241. package/dist/themes/dark.css +47 -32
  242. package/dist/types/components/badge.d.ts +1 -0
  243. package/dist/types/components/base/badge/badge.d.ts +18 -0
  244. package/dist/types/components/base/chip/chip.d.ts +27 -0
  245. package/dist/types/components/base/codeviewer/codeviewer.d.ts +48 -0
  246. package/dist/types/components/cellediting.d.ts +1 -0
  247. package/dist/types/components/checkboxgroup.d.ts +1 -0
  248. package/dist/types/components/chip.d.ts +1 -0
  249. package/dist/types/components/codeviewer.d.ts +1 -0
  250. package/dist/types/components/data/cellediting/cellediting.d.ts +10 -0
  251. package/dist/types/components/data/filterbuilder/filterbuilder.d.ts +3 -1
  252. package/dist/types/components/data/grid/grid.d.ts +42 -16
  253. package/dist/types/components/data/tree/tree.d.ts +71 -0
  254. package/dist/types/components/dial.d.ts +1 -0
  255. package/dist/types/components/fieldgroup.d.ts +1 -0
  256. package/dist/types/components/fieldlist.d.ts +1 -0
  257. package/dist/types/components/fields/checkboxgroup/checkboxgroup.d.ts +27 -0
  258. package/dist/types/components/fields/dial/dial.d.ts +84 -0
  259. package/dist/types/components/fields/toggle/toggle.d.ts +9 -0
  260. package/dist/types/components/form/fieldgroup/fieldgroup.d.ts +33 -0
  261. package/dist/types/components/form/fieldlist/fieldlist.d.ts +58 -0
  262. package/dist/types/components/form/form/form.d.ts +19 -2
  263. package/dist/types/components/form/formactions/formactions.d.ts +34 -0
  264. package/dist/types/components/form/formerrors/formerrors.d.ts +23 -0
  265. package/dist/types/components/form/formsection/formsection.d.ts +26 -0
  266. package/dist/types/components/form/inputgroup/inputgroup.d.ts +28 -0
  267. package/dist/types/components/form/stepform/stepform.d.ts +2 -0
  268. package/dist/types/components/formactions.d.ts +1 -0
  269. package/dist/types/components/formerrors.d.ts +1 -0
  270. package/dist/types/components/formsection.d.ts +1 -0
  271. package/dist/types/components/inputgroup.d.ts +1 -0
  272. package/dist/types/components/layout/fieldset/fieldset.d.ts +9 -0
  273. package/dist/types/components/layout/panel/panel.d.ts +6 -0
  274. package/dist/types/components/layout/panel/reload.d.ts +1 -0
  275. package/dist/types/components/navigation/tabs/tabs.d.ts +8 -0
  276. package/dist/types/components/overlays/menu/menu.d.ts +15 -0
  277. package/dist/types/components/overlays/messagebox/messagebox.d.ts +8 -0
  278. package/dist/types/components/overlays/widget/widget.d.ts +13 -0
  279. package/dist/types/components/overlays/window/window.d.ts +8 -1
  280. package/dist/types/components/toggle.d.ts +1 -0
  281. package/dist/types/components/tree.d.ts +1 -0
  282. package/dist/types/core/component.d.ts +6 -2
  283. package/dist/types/core/i18n.d.ts +5 -0
  284. package/dist/types/core/index.d.ts +1 -1
  285. package/dist/types/core/position.d.ts +4 -1
  286. package/dist/types/data/column.d.ts +9 -4
  287. package/dist/types/index.d.ts +14 -0
  288. package/dist/types/themes/define.d.ts +4 -3
  289. package/dist/types/ui/enums.d.ts +0 -6
  290. package/dist/types/ui/ui.d.ts +12 -3
  291. package/dist/ui.js +1 -1
  292. package/package.json +6 -1
  293. package/dist/chunk-4COBH4QJ.js +0 -2
  294. package/dist/chunk-4COBH4QJ.js.map +0 -7
  295. package/dist/chunk-4DHQKECB.js +0 -2
  296. package/dist/chunk-4Q67QI7J.js +0 -2
  297. package/dist/chunk-4Q67QI7J.js.map +0 -7
  298. package/dist/chunk-5AXLYDKU.js +0 -2
  299. package/dist/chunk-5AXLYDKU.js.map +0 -7
  300. package/dist/chunk-5GNEFX6F.js +0 -2
  301. package/dist/chunk-5Q6Y6CM4.js +0 -2
  302. package/dist/chunk-5Q6Y6CM4.js.map +0 -7
  303. package/dist/chunk-666O2GKD.js +0 -2
  304. package/dist/chunk-A66MDXHL.js +0 -2
  305. package/dist/chunk-A66MDXHL.js.map +0 -7
  306. package/dist/chunk-ARCW54L2.js +0 -2
  307. package/dist/chunk-ARCW54L2.js.map +0 -7
  308. package/dist/chunk-BIYNHKSA.js +0 -2
  309. package/dist/chunk-BIYNHKSA.js.map +0 -7
  310. package/dist/chunk-BNPVRIFT.js +0 -2
  311. package/dist/chunk-BNPVRIFT.js.map +0 -7
  312. package/dist/chunk-C3N7QTQB.js +0 -2
  313. package/dist/chunk-C3N7QTQB.js.map +0 -7
  314. package/dist/chunk-CEXY5A4T.js +0 -2
  315. package/dist/chunk-CN7USUJR.js +0 -2
  316. package/dist/chunk-CN7USUJR.js.map +0 -7
  317. package/dist/chunk-CQRHNTEX.js +0 -2
  318. package/dist/chunk-CUPAPOKC.js +0 -2
  319. package/dist/chunk-CUPAPOKC.js.map +0 -7
  320. package/dist/chunk-GZNQPENR.js +0 -2
  321. package/dist/chunk-HFFK6K4K.js +0 -2
  322. package/dist/chunk-HFFK6K4K.js.map +0 -7
  323. package/dist/chunk-IHAYOSBR.js +0 -2
  324. package/dist/chunk-IO66A6G5.js +0 -2
  325. package/dist/chunk-IO66A6G5.js.map +0 -7
  326. package/dist/chunk-IYPKPLCU.js.map +0 -7
  327. package/dist/chunk-JTYWZMSZ.js +0 -2
  328. package/dist/chunk-JTYWZMSZ.js.map +0 -7
  329. package/dist/chunk-JVEPKW5X.js +0 -2
  330. package/dist/chunk-JVEPKW5X.js.map +0 -7
  331. package/dist/chunk-JZNEB7A7.js +0 -2
  332. package/dist/chunk-K2DGY6MP.js +0 -2
  333. package/dist/chunk-K2DGY6MP.js.map +0 -7
  334. package/dist/chunk-LEE2FEEL.js +0 -2
  335. package/dist/chunk-LEE2FEEL.js.map +0 -7
  336. package/dist/chunk-LMGCV35W.js +0 -2
  337. package/dist/chunk-LMGCV35W.js.map +0 -7
  338. package/dist/chunk-LV6HXFHU.js.map +0 -7
  339. package/dist/chunk-MA5BJL3S.js +0 -2
  340. package/dist/chunk-MA5BJL3S.js.map +0 -7
  341. package/dist/chunk-NHVEP72K.js +0 -2
  342. package/dist/chunk-NHVEP72K.js.map +0 -7
  343. package/dist/chunk-O4DCHALR.js +0 -2
  344. package/dist/chunk-ODWPBBVL.js +0 -2
  345. package/dist/chunk-OW2ZSMGS.js +0 -2
  346. package/dist/chunk-PSPQH35P.js +0 -2
  347. package/dist/chunk-PSPQH35P.js.map +0 -7
  348. package/dist/chunk-T4OYVG2X.js +0 -2
  349. package/dist/chunk-T4OYVG2X.js.map +0 -7
  350. package/dist/chunk-TK2RC3T5.js +0 -2
  351. package/dist/chunk-TK2RC3T5.js.map +0 -7
  352. package/dist/chunk-U3X2FW6U.js +0 -2
  353. package/dist/chunk-U3X2FW6U.js.map +0 -7
  354. package/dist/chunk-UPOBGNJ5.js +0 -2
  355. package/dist/chunk-UPOBGNJ5.js.map +0 -7
  356. package/dist/chunk-XVIC24AW.js +0 -2
  357. package/dist/chunk-XZ5CUZZP.js +0 -2
  358. package/dist/chunk-XZ5CUZZP.js.map +0 -7
  359. package/dist/chunk-XZEOSW3Q.js +0 -2
  360. package/dist/chunk-XZEOSW3Q.js.map +0 -7
  361. package/dist/chunk-YET5PM6F.js +0 -2
  362. package/dist/chunk-YET5PM6F.js.map +0 -7
  363. package/dist/chunk-ZCAAM4NH.js +0 -2
  364. package/dist/chunk-ZCAAM4NH.js.map +0 -7
  365. package/dist/themes/brand.css +0 -240
  366. package/dist/themes/brutal.css +0 -100
  367. package/dist/themes/corporate.css +0 -112
  368. package/dist/themes/editorial.css +0 -110
  369. package/dist/themes/soft.css +0 -101
  370. package/dist/themes/terminal.css +0 -91
  371. /package/dist/{chunk-NWTTHDIM.js.map → chunk-5JEXM5S7.js.map} +0 -0
  372. /package/dist/{chunk-NV5AIBQP.js.map → chunk-6VBK2I5B.js.map} +0 -0
  373. /package/dist/{chunk-ZYUXCZX7.js.map → chunk-7KMIFXHZ.js.map} +0 -0
  374. /package/dist/{chunk-CEXY5A4T.js.map → chunk-ELYARUCN.js.map} +0 -0
  375. /package/dist/{chunk-Z25NC4CS.js.map → chunk-EV73ADN2.js.map} +0 -0
  376. /package/dist/{chunk-CQRHNTEX.js.map → chunk-G2KUK6AT.js.map} +0 -0
  377. /package/dist/{chunk-LBCWEWPN.js.map → chunk-GNU4VOOE.js.map} +0 -0
  378. /package/dist/{chunk-IW7PK4VS.js.map → chunk-GZ7X34QP.js.map} +0 -0
  379. /package/dist/{chunk-QEQIJAAB.js.map → chunk-I4SP6JTU.js.map} +0 -0
  380. /package/dist/{chunk-4SUKNSCY.js.map → chunk-JI265XFO.js.map} +0 -0
  381. /package/dist/{chunk-6NJW7QFD.js.map → chunk-SA53QUBF.js.map} +0 -0
  382. /package/dist/{chunk-TBLICXWW.js.map → chunk-TOLTUOZS.js.map} +0 -0
  383. /package/dist/{chunk-DXO3UJKL.js.map → chunk-TZOQWCVH.js.map} +0 -0
  384. /package/dist/{chunk-SNTHW4K2.js.map → chunk-W3H7GTJY.js.map} +0 -0
  385. /package/dist/{chunk-ZHVSHDLH.js.map → chunk-XHOBNSBO.js.map} +0 -0
  386. /package/dist/{chunk-6O2BXCRN.js.map → chunk-Z2Z52GFT.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{a as E,b as o,c as M,d as c,e as g,h as S}from"./chunk-5JEXM5S7.js";import{c as w}from"./chunk-4EZJ5FKJ.js";import{a as k}from"./chunk-A2NKDOYN.js";import{b as n}from"./chunk-PZSHOSOS.js";import{a as C}from"./chunk-TIPK3SCJ.js";import{d as L,e as D,f as v}from"./chunk-MW3RWBZ7.js";D("en",{dateMin:"Date must be on or after {n}",dateMax:"Date must be on or before {n}",calPrev:"Previous",calNext:"Next",calOpen:"Open calendar",calMonth:"Choose month"});D("pt-BR",{dateMin:"A data deve ser {n} ou posterior",dateMax:"A data deve ser {n} ou anterior",calPrev:"Anterior",calNext:"Pr\xF3ximo",calOpen:"Abrir calend\xE1rio",calMonth:"Escolher m\xEAs"});var f=(_,t)=>new Intl.DateTimeFormat(L()._lang,_).format(t),x=class extends k{baseCls="op-calendar";cursor=M();mode="days";titleEl;bodyEl;prevEl;nextEl;build(){let t=n("div","op-calendar",{role:"dialog","aria-label":v("calMonth")});return this.prevEl=n("button","op-calendar__nav",{type:"button","aria-label":v("calPrev")},w("chevron-left")),this.nextEl=n("button","op-calendar__nav",{type:"button","aria-label":v("calNext")},w("chevron-right")),this.titleEl=n("button","op-calendar__title",{type:"button","aria-live":"polite"}),this.bodyEl=n("div","op-calendar__body"),t.append(n("div","op-calendar__header",{},this.prevEl,this.titleEl,this.nextEl),this.bodyEl),t}onRender(){let t=this.first();t&&o(t)&&(this.cursor=t),this.listen(this.prevEl,"click",()=>this.step(-1)),this.listen(this.nextEl,"click",()=>this.step(1)),this.listen(this.titleEl,"click",()=>{this.mode=this.mode==="days"?"months":"days",this.paint()}),this.listen(this.bodyEl,"click",e=>{let s=e.target.closest("[data-iso],[data-month]");if(s)if(s.dataset.month){let[i,r]=s.dataset.month.split("-").map(Number),p=o(this.cursor);this.cursor=g(this.cursor,(i-p.getFullYear())*12+(r-1-p.getMonth())),this.mode="days",this.paint(),this.emit("navigate",i,r-1),this.focusDay()}else this.choose(s.dataset.iso)}),this.listen(this.bodyEl,"keydown",e=>this.onKey(e)),this.paint()}blocked(t){let{min:e,max:s,isDisabled:i}=this.config;return!!e&&t<e||!!s&&t>s||!!i?.(t)}span(){let t=this.config.value;return t?typeof t=="string"?{start:t,end:t}:t:{start:null,end:null}}first(){return this.span().start}choose(t){if(this.blocked(t))return;if(!this.config.range)return this.setValue(t),void this.emit("select",t);let{start:e,end:s}=this.span();if(e&&!s){let i=t<e?{start:t,end:e}:{start:e,end:t};this.setValue(i),this.emit("select",i)}else this.setValue({start:t,end:null}),this.emit("start",t)}step(t){this.cursor=this.mode==="days"?g(this.cursor,t):g(this.cursor,t*12),this.paint();let e=o(this.cursor);this.emit("navigate",e.getFullYear(),e.getMonth())}move(t){let e=o(this.cursor);this.cursor=t;let s=o(t);this.paint(),(s.getMonth()!==e.getMonth()||s.getFullYear()!==e.getFullYear())&&this.emit("navigate",s.getFullYear(),s.getMonth()),this.focusDay()}onKey(t){if(this.mode!=="days")return;let e=this.cursor,s=(o(e).getDay()-this.weekStart()+7)%7,i={ArrowLeft:c(e,-1),ArrowRight:c(e,1),ArrowUp:c(e,-7),ArrowDown:c(e,7),Home:c(e,-s),End:c(e,6-s),PageUp:g(e,t.shiftKey?-12:-1),PageDown:g(e,t.shiftKey?12:1)};i[t.key]?(t.preventDefault(),this.move(i[t.key])):(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),this.choose(e))}weekStart(){return this.config.firstDay??S()}paint(){let t=o(this.cursor);this.el.classList.toggle("is-months",this.mode==="months"),this.titleEl.textContent=this.mode==="days"?f({month:"long",year:"numeric"},t):String(t.getFullYear()),this.mode==="days"?this.paintDays(t):this.paintMonths(t)}paintDays(t){let e=this.weekStart(),s=n("tr");for(let d=0;d<7;d++){let m=new Date(2023,0,1+(e+d)%7);s.append(n("th","op-calendar__dow",{scope:"col",abbr:f({weekday:"long"},m)},f({weekday:"short"},m)))}let i=[],r=new Date(t.getFullYear(),t.getMonth(),1);r.setDate(1-(r.getDay()-e+7)%7);let p=M(),{start:h,end:u}=this.config.range?this.span():{start:this.first(),end:this.first()};for(let d=0;d<6;d++){let m=n("tr");for(let b=0;b<7;b++){let y=new Date(r.getFullYear(),r.getMonth(),r.getDate()+d*7+b),a=E(y),l=n("td","op-calendar__day",{role:"gridcell","data-iso":a,tabindex:a===this.cursor?0:-1,"aria-selected":String(!!h&&a>=h&&a<=(u??h)),"aria-label":f({dateStyle:"full"},y),"aria-disabled":this.blocked(a)?"true":null,"aria-current":a===p?"date":null},String(y.getDate()));l.classList.toggle("is-outside",y.getMonth()!==t.getMonth()),l.classList.toggle("is-today",a===p),l.classList.toggle("is-selected",a===h||a===u),l.classList.toggle("is-in-range",!!h&&!!u&&a>h&&a<u),l.classList.toggle("is-range-start",!!this.config.range&&a===h),l.classList.toggle("is-range-end",!!this.config.range&&a===u),l.classList.toggle("is-disabled",this.blocked(a)),m.append(l)}i.push(m)}this.bodyEl.replaceChildren(n("table","op-calendar__grid",{role:"grid"},n("thead","",{},s),n("tbody","",{},...i)))}paintMonths(t){let e=Array.from({length:12},(s,i)=>{let r=n("button","op-calendar__month",{type:"button","data-month":`${t.getFullYear()}-${String(i+1).padStart(2,"0")}`},f({month:"short"},new Date(2e3,i,1)));return r.classList.toggle("is-selected",i===t.getMonth()),r});this.bodyEl.replaceChildren(n("div","op-calendar__months",{},...e))}setValue(t){this.config.value=t;let e=this.first();e&&o(e)&&(this.cursor=e),this.rendered&&(this.mode="days",this.paint())}setRange(t){this.config.range=t,this.config.value=null,this.rendered&&this.paint()}setMin(t){this.config.min=t,this.rendered&&this.paint()}setMax(t){this.config.max=t,this.rendered&&this.paint()}showMonth(t,e){this.cursor=E(new Date(t,e,1)),this.rendered&&this.paint()}focusDay(){this.render(),this.bodyEl.querySelector('[tabindex="0"]')?.focus()}};C("calendar",x);export{x as a};
2
+ //# sourceMappingURL=chunk-G2DAD3MQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/dates/calendar/calendar.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, getLocale, addMessages } from '../../../core/i18n';\nimport { toISO, fromISO, today, addDays, addMonths, firstDay } from '../../../core/date';\nimport { iconEl } from '../../base/icon/icon';\n\naddMessages('en', {\n dateMin: 'Date must be on or after {n}',\n dateMax: 'Date must be on or before {n}',\n calPrev: 'Previous',\n calNext: 'Next',\n calOpen: 'Open calendar',\n calMonth: 'Choose month',\n});\naddMessages('pt-BR', {\n dateMin: 'A data deve ser {n} ou posterior',\n dateMax: 'A data deve ser {n} ou anterior',\n calPrev: 'Anterior',\n calNext: 'Pr\u00F3ximo',\n calOpen: 'Abrir calend\u00E1rio',\n calMonth: 'Escolher m\u00EAs',\n});\n\n/** Both ends are `YYYY-MM-DD`; `end` is null while the user has only picked the first day. */\nexport interface DateRange {\n start: string | null;\n end: string | null;\n}\n\nexport interface CalendarConfig extends ComponentConfig {\n /** Selected day, `YYYY-MM-DD`; with `range: true`, a `DateRange`. */\n value?: string | DateRange | null;\n /** Pick a start and an end day (two clicks). */\n range?: boolean;\n min?: string;\n max?: string;\n /** 0 = Sunday. Default: the locale's. */\n firstDay?: number;\n isDisabled?: (iso: string) => boolean;\n}\n\nconst fmt = (opts: Intl.DateTimeFormatOptions, d: Date) => new Intl.DateTimeFormat(getLocale()._lang, opts).format(d);\n\n/** Month calendar. Click the title to pick a month; arrow keys, Page keys and Home/End move the focused day. */\nexport class Calendar extends Component<CalendarConfig> {\n protected override baseCls = 'op-calendar';\n private cursor = today(); // the focused day; its month is the visible month\n private mode: 'days' | 'months' = 'days';\n private titleEl!: HTMLElement;\n private bodyEl!: HTMLElement;\n private prevEl!: HTMLButtonElement;\n private nextEl!: HTMLButtonElement;\n\n protected override build() {\n const el = h('div', 'op-calendar', { role: 'dialog', 'aria-label': t('calMonth') });\n this.prevEl = h('button', 'op-calendar__nav', { type: 'button', 'aria-label': t('calPrev') }, iconEl('chevron-left'));\n this.nextEl = h('button', 'op-calendar__nav', { type: 'button', 'aria-label': t('calNext') }, iconEl('chevron-right'));\n this.titleEl = h('button', 'op-calendar__title', { type: 'button', 'aria-live': 'polite' });\n this.bodyEl = h('div', 'op-calendar__body');\n el.append(h('div', 'op-calendar__header', {}, this.prevEl, this.titleEl, this.nextEl), this.bodyEl);\n return el;\n }\n\n protected override onRender() {\n const v = this.first();\n if (v && fromISO(v)) this.cursor = v;\n this.listen(this.prevEl, 'click', () => this.step(-1));\n this.listen(this.nextEl, 'click', () => this.step(1));\n this.listen(this.titleEl, 'click', () => {\n this.mode = this.mode === 'days' ? 'months' : 'days';\n this.paint();\n });\n this.listen(this.bodyEl, 'click', (e: Event) => {\n const cell = (e.target as HTMLElement).closest<HTMLElement>('[data-iso],[data-month]');\n if (!cell) return;\n if (cell.dataset.month) {\n const [y, m] = cell.dataset.month.split('-').map(Number);\n const cur = fromISO(this.cursor)!;\n this.cursor = addMonths(this.cursor, (y - cur.getFullYear()) * 12 + (m - 1 - cur.getMonth()));\n this.mode = 'days';\n this.paint();\n this.emit('navigate', y, m - 1);\n this.focusDay();\n } else this.choose(cell.dataset.iso!);\n });\n this.listen(this.bodyEl, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.paint();\n }\n\n private blocked(iso: string) {\n const { min, max, isDisabled } = this.config;\n return (!!min && iso < min) || (!!max && iso > max) || !!isDisabled?.(iso);\n }\n\n /** The value as a range (a single day is a one-day range). */\n private span(): DateRange {\n const v = this.config.value;\n return !v ? { start: null, end: null } : typeof v === 'string' ? { start: v, end: v } : v;\n }\n private first(): string | null {\n return this.span().start;\n }\n\n private choose(iso: string) {\n if (this.blocked(iso)) return;\n if (!this.config.range) {\n this.setValue(iso);\n return void this.emit('select', iso);\n }\n const { start, end } = this.span();\n if (start && !end) {\n const r = iso < start ? { start: iso, end: start } : { start, end: iso };\n this.setValue(r);\n this.emit('select', r);\n } else {\n this.setValue({ start: iso, end: null });\n this.emit('start', iso);\n }\n }\n\n private step(dir: number) {\n this.cursor = this.mode === 'days' ? addMonths(this.cursor, dir) : addMonths(this.cursor, dir * 12);\n this.paint();\n const d = fromISO(this.cursor)!;\n this.emit('navigate', d.getFullYear(), d.getMonth());\n }\n\n private move(next: string) {\n const before = fromISO(this.cursor)!;\n this.cursor = next;\n const d = fromISO(next)!;\n this.paint();\n if (d.getMonth() !== before.getMonth() || d.getFullYear() !== before.getFullYear()) this.emit('navigate', d.getFullYear(), d.getMonth());\n this.focusDay();\n }\n\n private onKey(e: KeyboardEvent) {\n if (this.mode !== 'days') return;\n const c = this.cursor;\n const dow = (fromISO(c)!.getDay() - this.weekStart() + 7) % 7;\n const moves: Record<string, string> = {\n ArrowLeft: addDays(c, -1),\n ArrowRight: addDays(c, 1),\n ArrowUp: addDays(c, -7),\n ArrowDown: addDays(c, 7),\n Home: addDays(c, -dow),\n End: addDays(c, 6 - dow),\n PageUp: addMonths(c, e.shiftKey ? -12 : -1),\n PageDown: addMonths(c, e.shiftKey ? 12 : 1),\n };\n if (moves[e.key]) {\n e.preventDefault();\n this.move(moves[e.key]);\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.choose(c);\n }\n }\n\n private weekStart() {\n return this.config.firstDay ?? firstDay();\n }\n\n private paint() {\n const cur = fromISO(this.cursor)!;\n this.el.classList.toggle('is-months', this.mode === 'months');\n this.titleEl.textContent = this.mode === 'days' ? fmt({ month: 'long', year: 'numeric' }, cur) : String(cur.getFullYear());\n this.mode === 'days' ? this.paintDays(cur) : this.paintMonths(cur);\n }\n\n private paintDays(cur: Date) {\n const first = this.weekStart();\n const head = h('tr');\n for (let i = 0; i < 7; i++) {\n const d = new Date(2023, 0, 1 + ((first + i) % 7)); // 2023-01-01 is a Sunday\n head.append(h('th', 'op-calendar__dow', { scope: 'col', abbr: fmt({ weekday: 'long' }, d) }, fmt({ weekday: 'short' }, d)));\n }\n const rows: HTMLElement[] = [];\n const start = new Date(cur.getFullYear(), cur.getMonth(), 1);\n start.setDate(1 - ((start.getDay() - first + 7) % 7));\n const todayIso = today();\n const { start: from, end: to } = this.config.range ? this.span() : { start: this.first(), end: this.first() };\n for (let w = 0; w < 6; w++) {\n const tr = h('tr');\n for (let d = 0; d < 7; d++) {\n const day = new Date(start.getFullYear(), start.getMonth(), start.getDate() + w * 7 + d);\n const iso = toISO(day);\n const td = h('td', 'op-calendar__day', {\n role: 'gridcell',\n 'data-iso': iso,\n tabindex: iso === this.cursor ? 0 : -1,\n 'aria-selected': String(!!from && iso >= from && iso <= (to ?? from)),\n 'aria-label': fmt({ dateStyle: 'full' }, day),\n 'aria-disabled': this.blocked(iso) ? 'true' : null,\n 'aria-current': iso === todayIso ? 'date' : null,\n }, String(day.getDate()));\n td.classList.toggle('is-outside', day.getMonth() !== cur.getMonth());\n td.classList.toggle('is-today', iso === todayIso);\n td.classList.toggle('is-selected', iso === from || iso === to);\n td.classList.toggle('is-in-range', !!from && !!to && iso > from && iso < to);\n td.classList.toggle('is-range-start', !!this.config.range && iso === from);\n td.classList.toggle('is-range-end', !!this.config.range && iso === to);\n td.classList.toggle('is-disabled', this.blocked(iso));\n tr.append(td);\n }\n rows.push(tr);\n }\n this.bodyEl.replaceChildren(h('table', 'op-calendar__grid', { role: 'grid' }, h('thead', '', {}, head), h('tbody', '', {}, ...rows)));\n }\n\n private paintMonths(cur: Date) {\n const cells = Array.from({ length: 12 }, (_, m) => {\n const b = h('button', 'op-calendar__month', { type: 'button', 'data-month': `${cur.getFullYear()}-${String(m + 1).padStart(2, '0')}` }, fmt({ month: 'short' }, new Date(2000, m, 1)));\n b.classList.toggle('is-selected', m === cur.getMonth());\n return b;\n });\n this.bodyEl.replaceChildren(h('div', 'op-calendar__months', {}, ...cells));\n }\n\n // ---- API -----------------------------------------------------------------------------------\n\n setValue(value: string | DateRange | null) {\n this.config.value = value;\n const iso = this.first();\n if (iso && fromISO(iso)) this.cursor = iso;\n if (this.rendered) {\n this.mode = 'days';\n this.paint();\n }\n }\n /** Switches between single-day and range picking. */\n setRange(range: boolean) {\n this.config.range = range;\n this.config.value = null;\n if (this.rendered) this.paint();\n }\n setMin(min: string | undefined) {\n this.config.min = min;\n if (this.rendered) this.paint();\n }\n setMax(max: string | undefined) {\n this.config.max = max;\n if (this.rendered) this.paint();\n }\n showMonth(year: number, month: number) {\n this.cursor = toISO(new Date(year, month, 1));\n if (this.rendered) this.paint();\n }\n focusDay() {\n this.render();\n this.bodyEl.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus();\n }\n}\nregister('calendar', Calendar);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "fmt", "opts", "d", "getLocale", "Calendar", "Component", "today", "el", "h", "t", "iconEl", "v", "fromISO", "cell", "y", "m", "cur", "addMonths", "iso", "min", "max", "isDisabled", "start", "end", "r", "dir", "next", "before", "e", "c", "dow", "moves", "addDays", "firstDay", "first", "head", "i", "rows", "todayIso", "from", "to", "w", "tr", "day", "toISO", "td", "cells", "_", "b", "value", "range", "year", "month", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-EV73ADN2.js";import{a as t}from"./chunk-TIPK3SCJ.js";var e=class extends o{baseCls="op-field op-textfield op-picker op-select";editable(){return!1}emptyValue(){return null}isEmpty(r){return r==null||r===""}};t("select",e);export{e as a};
2
+ //# sourceMappingURL=chunk-G2KUK6AT.js.map
@@ -0,0 +1,2 @@
1
+ import{a as c}from"./chunk-TZOQWCVH.js";import{b as h,c as g,d as k}from"./chunk-CUN5QO4T.js";import{a as f}from"./chunk-4LZZ244E.js";import{c as u}from"./chunk-4EZJ5FKJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{a}from"./chunk-TIPK3SCJ.js";import{e as l,f as s}from"./chunk-MW3RWBZ7.js";l("en",{lookupOpen:"Open search",lookupSelect:"Select"});l("pt-BR",{lookupOpen:"Abrir pesquisa",lookupSelect:"Selecionar"});var p=class extends c{baseCls="op-field op-textfield op-picker op-suggest op-lookup";def;suggestStore;win;constructor(e){let t=h(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??=g(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"},u("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 k({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)}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)}};a("lookupfield",p);export{p as a};
2
+ //# sourceMappingURL=chunk-GBPLNXMP.js.map
@@ -0,0 +1,7 @@
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, addMessages } 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\naddMessages('en', {\n lookupOpen: 'Open search',\n lookupSelect: 'Select',\n});\naddMessages('pt-BR', {\n lookupOpen: 'Abrir pesquisa',\n lookupSelect: 'Selecionar',\n});\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 }\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": "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",
6
+ "names": ["addMessages", "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 +1,2 @@
1
- import{c as o}from"./chunk-UPOBGNJ5.js";import{c as i}from"./chunk-VV7CFMPZ.js";import{b as r}from"./chunk-IYPKPLCU.js";var n="button:not(:disabled)",e=class extends o{baseCls="op-toolbar";rover;shorthand(t){if(t==="->")return{type:"spacer"};if(t==="-")return{type:"spacer",line:!0};if(t===" ")return{type:"spacer",width:8};throw new Error(`Optikos: unknown toolbar shorthand "${t}"`)}build(){let t=super.build();return t.setAttribute("role","toolbar"),this.config.vertical&&t.setAttribute("aria-orientation","vertical"),t}onRender(){this.config.layout??=this.config.vertical?{type:"vbox",align:"stretch"}:{type:"hbox",align:"center"},super.onRender(),this.el.classList.toggle("op-toolbar--vertical",!!this.config.vertical),this.rover=i(this.el,{selector:n,orientation:this.config.vertical?"vertical":"horizontal"}),this.own(()=>this.rover?.destroy())}notifyMount(){super.notifyMount(),this.rover?.sync()}};r("toolbar",e);export{e as a};
2
- //# sourceMappingURL=chunk-LBCWEWPN.js.map
1
+ import{c as o}from"./chunk-ZWNQREWS.js";import{c as i}from"./chunk-VV7CFMPZ.js";import{a as r}from"./chunk-TIPK3SCJ.js";var n="button:not(:disabled)",e=class extends o{baseCls="op-toolbar";rover;shorthand(t){if(t==="->")return{type:"spacer"};if(t==="-")return{type:"spacer",line:!0};if(t===" ")return{type:"spacer",width:8};throw new Error(`Optikos: unknown toolbar shorthand "${t}"`)}build(){let t=super.build();return t.setAttribute("role","toolbar"),this.config.vertical&&t.setAttribute("aria-orientation","vertical"),t}onRender(){this.config.layout??=this.config.vertical?{type:"vbox",align:"stretch"}:{type:"hbox",align:"center"},super.onRender(),this.el.classList.toggle("op-toolbar--vertical",!!this.config.vertical),this.rover=i(this.el,{selector:n,orientation:this.config.vertical?"vertical":"horizontal"}),this.own(()=>this.rover?.destroy())}notifyMount(){super.notifyMount(),this.rover?.sync()}};r("toolbar",e);export{e as a};
2
+ //# sourceMappingURL=chunk-GNU4VOOE.js.map
@@ -1,2 +1,2 @@
1
- import{e as o}from"./chunk-MA5BJL3S.js";import{a as i}from"./chunk-4C666HHU.js";var p={};i(p,{email:()=>y,max:()=>x,maxLength:()=>l,min:()=>u,minLength:()=>m,pattern:()=>s,range:()=>g});var n=t=>typeof t=="string"||Array.isArray(t)?t.length:0,m=(t,e)=>r=>n(r)<t?e??o("minLength",{n:t}):!0,l=(t,e)=>r=>n(r)>t?e??o("maxLength",{n:t}):!0,s=(t,e)=>r=>t.test(String(r))?!0:e??o("pattern"),y=t=>e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e))?!0:t??o("email"),u=(t,e)=>r=>Number(r)<t?e??o("min",{n:t}):!0,x=(t,e)=>r=>Number(r)>t?e??o("max",{n:t}):!0,g=(t,e,r)=>a=>Number(a)<t||Number(a)>e?r??o("range",{min:t,max:e}):!0;export{p as a};
2
- //# sourceMappingURL=chunk-IW7PK4VS.js.map
1
+ import{f as o}from"./chunk-MW3RWBZ7.js";import{a as i}from"./chunk-4C666HHU.js";var p={};i(p,{email:()=>y,max:()=>x,maxLength:()=>s,min:()=>u,minLength:()=>m,pattern:()=>l,range:()=>g});var n=t=>typeof t=="string"||Array.isArray(t)?t.length:0,m=(t,e)=>r=>n(r)<t?e??o("minLength",{n:t}):!0,s=(t,e)=>r=>n(r)>t?e??o("maxLength",{n:t}):!0,l=(t,e)=>r=>t.test(String(r))?!0:e??o("pattern"),y=t=>e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(e))?!0:t??o("email"),u=(t,e)=>r=>Number(r)<t?e??o("min",{n:t}):!0,x=(t,e)=>r=>Number(r)>t?e??o("max",{n:t}):!0,g=(t,e,r)=>a=>Number(a)<t||Number(a)>e?r??o("range",{min:t,max:e}):!0;export{p as a};
2
+ //# sourceMappingURL=chunk-GZ7X34QP.js.map
@@ -0,0 +1,2 @@
1
+ import{c as r}from"./chunk-ZWNQREWS.js";import{b as t,c as i}from"./chunk-PZSHOSOS.js";import{a as o}from"./chunk-TIPK3SCJ.js";var s=class extends r{baseCls="op-formsection";tag="section";titleEl;descEl;bodyEl;getBody(){return this.bodyEl}build(){let e=super.build();return this.titleEl=t("h3","op-formsection__title",{id:i("op-fsec")}),this.descEl=t("p","op-formsection__desc",{id:i("op-fsec-desc")}),this.bodyEl=t("div","op-formsection__body"),e.append(t("div","op-formsection__aside",{},this.titleEl,this.descEl),this.bodyEl),e.setAttribute("aria-labelledby",this.titleEl.id),e}onRender(){let e=this.config;e.layout??=e.columns?{type:"grid",columns:e.columns}:{type:"vbox"},super.onRender(),this.el.classList.toggle("op-formsection--divided",e.divider!==!1),this.setTitle(e.title??""),this.setDescription(e.description??""),this.setAside(e.aside!==!1)}setTitle(e){this.config.title=e,this.rendered&&(this.titleEl.textContent=e,this.titleEl.hidden=!e)}setDescription(e){this.config.description=e,this.rendered&&(this.descEl.textContent=e,this.descEl.hidden=!e,e?this.el.setAttribute("aria-describedby",this.descEl.id):this.el.removeAttribute("aria-describedby"))}setAside(e){this.config.aside=e,this.rendered&&this.el.classList.toggle("op-formsection--stacked",!e)}};o("formsection",s);export{s as a};
2
+ //# sourceMappingURL=chunk-HOF4JGMQ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/form/formsection/formsection.ts"],
4
+ "sourcesContent": ["import { Container, type ContainerConfig } from '../../../core/container';\nimport { register } from '../../../core/registry';\nimport { h, uid } from '../../../core/dom';\n\nexport interface FormSectionConfig extends ContainerConfig {\n title?: string;\n description?: string;\n /** Title and description in a column beside the fields (default); `false` stacks them above. */\n aside?: boolean;\n /** Shortcut for a responsive grid layout of the fields; items take `colspan` (a number or `'full'`). */\n columns?: number;\n /** A rule between consecutive sections. Default true. */\n divider?: boolean;\n}\n\n/** A titled part of a long form, \"settings page\" style: title and description on the left, fields on the right. */\nexport class FormSection extends Container<FormSectionConfig> {\n protected override baseCls = 'op-formsection';\n protected override tag = 'section' as const;\n private titleEl!: HTMLElement;\n private descEl!: HTMLElement;\n private bodyEl!: HTMLElement;\n\n override getBody() {\n return this.bodyEl;\n }\n\n protected override build() {\n const el = super.build();\n this.titleEl = h('h3', 'op-formsection__title', { id: uid('op-fsec') });\n this.descEl = h('p', 'op-formsection__desc', { id: uid('op-fsec-desc') });\n this.bodyEl = h('div', 'op-formsection__body');\n el.append(h('div', 'op-formsection__aside', {}, this.titleEl, this.descEl), this.bodyEl);\n el.setAttribute('aria-labelledby', this.titleEl.id);\n return el;\n }\n\n protected override onRender() {\n const c = this.config;\n c.layout ??= c.columns ? { type: 'grid', columns: c.columns } : { type: 'vbox' };\n super.onRender();\n this.el.classList.toggle('op-formsection--divided', c.divider !== false);\n this.setTitle(c.title ?? '');\n this.setDescription(c.description ?? '');\n this.setAside(c.aside !== false);\n }\n\n setTitle(title: string) {\n this.config.title = title;\n if (!this.rendered) return;\n this.titleEl.textContent = title;\n this.titleEl.hidden = !title;\n }\n\n setDescription(text: string) {\n this.config.description = text;\n if (!this.rendered) return;\n this.descEl.textContent = text;\n this.descEl.hidden = !text;\n if (text) this.el.setAttribute('aria-describedby', this.descEl.id);\n else this.el.removeAttribute('aria-describedby');\n }\n\n /** Title beside the fields (true) or always above them (false). */\n setAside(aside: boolean) {\n this.config.aside = aside;\n if (this.rendered) this.el.classList.toggle('op-formsection--stacked', !aside);\n }\n}\nregister('formsection', FormSection);\n"],
5
+ "mappings": "+HAgBO,IAAMA,EAAN,cAA0BC,CAA6B,CACzC,QAAU,iBACV,IAAM,UACjB,QACA,OACA,OAEC,SAAU,CACjB,OAAO,KAAK,MACd,CAEmB,OAAQ,CACzB,IAAMC,EAAK,MAAM,MAAM,EACvB,YAAK,QAAUC,EAAE,KAAM,wBAAyB,CAAE,GAAIC,EAAI,SAAS,CAAE,CAAC,EACtE,KAAK,OAASD,EAAE,IAAK,uBAAwB,CAAE,GAAIC,EAAI,cAAc,CAAE,CAAC,EACxE,KAAK,OAASD,EAAE,MAAO,sBAAsB,EAC7CD,EAAG,OAAOC,EAAE,MAAO,wBAAyB,CAAC,EAAG,KAAK,QAAS,KAAK,MAAM,EAAG,KAAK,MAAM,EACvFD,EAAG,aAAa,kBAAmB,KAAK,QAAQ,EAAE,EAC3CA,CACT,CAEmB,UAAW,CAC5B,IAAMG,EAAI,KAAK,OACfA,EAAE,SAAWA,EAAE,QAAU,CAAE,KAAM,OAAQ,QAASA,EAAE,OAAQ,EAAI,CAAE,KAAM,MAAO,EAC/E,MAAM,SAAS,EACf,KAAK,GAAG,UAAU,OAAO,0BAA2BA,EAAE,UAAY,EAAK,EACvE,KAAK,SAASA,EAAE,OAAS,EAAE,EAC3B,KAAK,eAAeA,EAAE,aAAe,EAAE,EACvC,KAAK,SAASA,EAAE,QAAU,EAAK,CACjC,CAEA,SAASC,EAAe,CACtB,KAAK,OAAO,MAAQA,EACf,KAAK,WACV,KAAK,QAAQ,YAAcA,EAC3B,KAAK,QAAQ,OAAS,CAACA,EACzB,CAEA,eAAeC,EAAc,CAC3B,KAAK,OAAO,YAAcA,EACrB,KAAK,WACV,KAAK,OAAO,YAAcA,EAC1B,KAAK,OAAO,OAAS,CAACA,EAClBA,EAAM,KAAK,GAAG,aAAa,mBAAoB,KAAK,OAAO,EAAE,EAC5D,KAAK,GAAG,gBAAgB,kBAAkB,EACjD,CAGA,SAASC,EAAgB,CACvB,KAAK,OAAO,MAAQA,EAChB,KAAK,UAAU,KAAK,GAAG,UAAU,OAAO,0BAA2B,CAACA,CAAK,CAC/E,CACF,EACAC,EAAS,cAAeT,CAAW",
6
+ "names": ["FormSection", "Container", "el", "h", "uid", "c", "title", "text", "aside", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-I4SP6JTU.js";import{a as t}from"./chunk-TIPK3SCJ.js";var e=class extends o{baseCls="op-field op-checkbox op-toggle";onRender(){super.onRender(),this.inputEl.setAttribute("role","switch")}setIndeterminate(){super.setIndeterminate(!1)}};t("toggle",e);export{e as a};
2
+ //# sourceMappingURL=chunk-HXDTGP2K.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/fields/toggle/toggle.ts"],
4
+ "sourcesContent": ["import { register } from '../../../core/registry';\nimport { Checkbox, type CheckboxConfig } from '../checkbox/checkbox';\n\nexport type ToggleConfig = Omit<CheckboxConfig, 'indeterminate'>;\n\n/** An on/off switch: a Checkbox with `role=\"switch\"` and a track-and-knob look. Same value (`boolean`), events and API. */\nexport class Toggle extends Checkbox {\n protected override baseCls = 'op-field op-checkbox op-toggle';\n\n protected override onRender() {\n super.onRender();\n this.inputEl.setAttribute('role', 'switch');\n }\n\n /** A switch has no third state. */\n override setIndeterminate(): void {\n super.setIndeterminate(false);\n }\n}\nregister('toggle', Toggle);\n"],
5
+ "mappings": "gFAMO,IAAMA,EAAN,cAAqBC,CAAS,CAChB,QAAU,iCAEV,UAAW,CAC5B,MAAM,SAAS,EACf,KAAK,QAAQ,aAAa,OAAQ,QAAQ,CAC5C,CAGS,kBAAyB,CAChC,MAAM,iBAAiB,EAAK,CAC9B,CACF,EACAC,EAAS,SAAUF,CAAM",
6
+ "names": ["Toggle", "Checkbox", "register"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as s}from"./chunk-K2DGY6MP.js";import{c as r}from"./chunk-IHAYOSBR.js";import{b as o}from"./chunk-IYPKPLCU.js";import{b as i}from"./chunk-PZSHOSOS.js";var n=class extends s{baseCls="op-field op-checkbox";textEl;emptyValue(){return!1}isEmpty(e){return!e}createControl(){let e=this.inputEl=i("input","op-checkbox__input",{type:"checkbox"});this.textEl=i("span","op-checkbox__text");let t=i("span","op-checkbox__box",{},r("check"),i("span","op-checkbox__dash")),c=i("label","op-checkbox__label",{},e,t,this.textEl);return this.listen(e,"change",()=>{if(this.config.readonly)return void(e.checked=this.value);this.config.indeterminate=!1,this.paint(),this.commit(e.checked)}),c}onRender(){super.onRender(),this.setBoxLabel(this.config.boxLabel??""),this.setIndeterminate(!!this.config.indeterminate)}applyValue(e){this.inputEl.checked=!!e,this.paint()}paint(){let e=this.inputEl,t=!!this.config.indeterminate;e.indeterminate=t,e.setAttribute("aria-checked",t?"mixed":String(e.checked)),this.el.classList.toggle("is-checked",e.checked&&!t),this.el.classList.toggle("is-indeterminate",t)}onDisabled(e){this.inputEl.disabled=e}setBoxLabel(e){this.config.boxLabel=e,this.rendered&&(this.textEl.textContent=e,this.textEl.hidden=!e)}setIndeterminate(e){this.config.indeterminate=e,this.rendered&&this.paint()}toggle(){this.setIndeterminate(!1),this.setValue(!this.value)}};o("checkbox",n);export{n as a};
2
- //# sourceMappingURL=chunk-QEQIJAAB.js.map
1
+ import{a as s}from"./chunk-2ZRNGG2N.js";import{c as r}from"./chunk-4EZJ5FKJ.js";import{b as i}from"./chunk-PZSHOSOS.js";import{a as o}from"./chunk-TIPK3SCJ.js";var n=class extends s{baseCls="op-field op-checkbox";textEl;emptyValue(){return!1}isEmpty(e){return!e}createControl(){let e=this.inputEl=i("input","op-checkbox__input",{type:"checkbox"});this.textEl=i("span","op-checkbox__text");let t=i("span","op-checkbox__box",{},r("check"),i("span","op-checkbox__dash")),c=i("label","op-checkbox__label",{},e,t,this.textEl);return this.listen(e,"change",()=>{if(this.config.readonly)return void(e.checked=this.value);this.config.indeterminate=!1,this.paint(),this.commit(e.checked)}),c}onRender(){super.onRender(),this.setBoxLabel(this.config.boxLabel??""),this.setIndeterminate(!!this.config.indeterminate)}applyValue(e){this.inputEl.checked=!!e,this.paint()}paint(){let e=this.inputEl,t=!!this.config.indeterminate;e.indeterminate=t,e.setAttribute("aria-checked",t?"mixed":String(e.checked)),this.el.classList.toggle("is-checked",e.checked&&!t),this.el.classList.toggle("is-indeterminate",t)}onDisabled(e){this.inputEl.disabled=e}setBoxLabel(e){this.config.boxLabel=e,this.rendered&&(this.textEl.textContent=e,this.textEl.hidden=!e)}setIndeterminate(e){this.config.indeterminate=e,this.rendered&&this.paint()}toggle(){this.setIndeterminate(!1),this.setValue(!this.value)}};o("checkbox",n);export{n as a};
2
+ //# sourceMappingURL=chunk-I4SP6JTU.js.map
@@ -0,0 +1,2 @@
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-4EZJ5FKJ.js";import{a as d}from"./chunk-A2NKDOYN.js";import{b as i}from"./chunk-PZSHOSOS.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f as h}from"./chunk-MW3RWBZ7.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-IHE2MQ3W.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/overlays/toast/toast.ts"],
4
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 { layer } from '../../../core/layer';\nimport { iconEl } from '../../base/icon/icon';\nimport { pulse, enter } from '../../../motion/core';\n\nexport type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top' | 'bottom';\n\nexport interface ToastConfig extends ComponentConfig {\n text?: string;\n title?: string;\n type?: 'info' | 'success' | 'warning' | 'error';\n /** ms before it closes by itself; 0 keeps it until closed. Default 4000. */\n duration?: number;\n closable?: boolean;\n position?: ToastPosition;\n}\n\nconst defaults: { duration: number; position: ToastPosition; max: number } = { duration: 4000, position: 'top-right', max: 5 };\nconst icons = { info: 'info', success: 'success', warning: 'alert', error: 'error' };\n\nfunction region(pos: ToastPosition): HTMLElement {\n let r = layer().querySelector<HTMLElement>(`.op-toast-region[data-pos=\"${pos}\"]`);\n if (!r) {\n r = h('div', 'op-toast-region', { 'data-pos': pos });\n layer().appendChild(r);\n }\n return r;\n}\n\nexport class Toast extends Component<ToastConfig> {\n protected override baseCls = 'op-toast';\n private cancelTimer?: () => void;\n private remaining = 0;\n private started = 0;\n\n protected override build() {\n const c = this.config;\n const type = c.type ?? 'info';\n const el = h('div', `op-toast op-toast--${type}`, { role: type === 'error' ? 'alert' : 'status' });\n const body = h('div', 'op-toast__body', {}, c.title ? h('div', 'op-toast__title', {}, c.title) : null, h('div', 'op-toast__text', {}, c.text ?? ''));\n el.append(h('span', 'op-toast__icon', {}, iconEl(icons[type])), body);\n if (c.closable !== false) {\n const x = h('button', 'op-toast__close', { type: 'button', 'aria-label': t('close') }, iconEl('x'));\n this.listen(x, 'click', () => this.close());\n el.append(x);\n }\n this.listen(el, 'pointerenter', () => this.pause());\n this.listen(el, 'pointerleave', () => this.resume());\n this.listen(el, 'focusin', () => this.pause());\n this.listen(el, 'focusout', () => this.resume());\n return el;\n }\n\n /** Puts the toast on screen and starts the timer. */\n override show() {\n const pos = this.config.position ?? defaults.position;\n const r = region(pos);\n if (pos.startsWith('bottom')) r.append(this.el);\n else r.prepend(this.el);\n for (const old of Array.from(r.children).filter((e) => e !== this.el).slice(defaults.max - 1)) (old as HTMLElement).dispatchEvent(new Event('op-dismiss'));\n this.listen(this.el, 'op-dismiss', () => this.close());\n this.remaining = this.config.duration ?? defaults.duration;\n this.resume();\n void enter(this.el, { dy: 10 });\n if (this.config.type === 'success') void pulse(this.el.querySelector<HTMLElement>('.op-toast__icon') ?? this.el); // a small ring confirms it worked\n this.emit('show');\n }\n\n private pause() {\n if (!this.cancelTimer) return;\n this.cancelTimer();\n this.cancelTimer = undefined;\n this.remaining -= Date.now() - this.started;\n }\n private resume() {\n if (this.cancelTimer || this.remaining <= 0 || this.destroyed) return;\n this.started = Date.now();\n this.cancelTimer = this.later(() => this.close(), this.remaining);\n }\n\n close() {\n if (this.destroyed) return;\n this.emit('close');\n this.destroy();\n }\n}\nregister('toast', Toast);\n\nexport interface ToastHandle {\n close(): void;\n}\n\n/** `toast('Saved')` or `toast({ text, title, type, duration, closable, position })`. */\nexport function toast(opts: string | ToastConfig): ToastHandle {\n const t = new Toast(typeof opts === 'string' ? { text: opts } : opts);\n t.show();\n return { close: () => t.close() };\n}\ntoast.configure = (o: Partial<typeof defaults>) => Object.assign(defaults, o);\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["defaults", "icons", "region", "pos", "r", "layer", "h", "Toast", "Component", "c", "type", "el", "body", "iconEl", "x", "t", "old", "e", "enter", "pulse", "register", "toast", "opts", "o"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{a as u}from"./chunk-FHM5NUS4.js";import{c as p}from"./chunk-4EZJ5FKJ.js";import{a as d}from"./chunk-A2NKDOYN.js";import{b as i}from"./chunk-PZSHOSOS.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{e as m,f as h}from"./chunk-MW3RWBZ7.js";m("en",{breadcrumb:"Breadcrumb",breadcrumbMore:"Show more"});m("pt-BR",{breadcrumb:"Trilha de navega\xE7\xE3o",breadcrumbMore:"Mostrar mais"});var c=class extends d{baseCls="op-breadcrumb";tag="nav";list;menu;onRender(){this.list=i("ol","op-breadcrumb__list"),this.el.append(this.list),this.config.ariaLabel||this.el.setAttribute("aria-label",h("breadcrumb")),this.config.separator!=null&&this.setSeparator(this.config.separator),this.listen(this.list,"click",e=>{let r=e.target;if(r.closest(".op-breadcrumb__more"))return this.showHidden(r.closest("button"));let t=r.closest("[data-i]");t&&this.go(Number(t.dataset.i),e)}),this.own(()=>this.menu?.destroy()),this.paint()}items(){return this.config.items??[]}collapsed(){let e=this.items().length,r=Math.max(3,this.config.maxItems??4);return e<=r?[]:Array.from({length:e-(r-1)},(t,s)=>s+1)}paint(){let e=this.items(),r=this.collapsed(),t=e.length-1,s=[];e.forEach((a,n)=>{if(r.includes(n)){n===r[0]&&s.push(i("li","",{},i("button","op-breadcrumb__more",{type:"button","aria-label":h("breadcrumbMore"),"aria-haspopup":"menu","aria-expanded":"false"},"\u2026")));return}let o=[a.icon?p(a.icon):null,a.text],b=n===t?i("span","op-breadcrumb__current",{"aria-current":"page"},...o):a.href?i("a","op-breadcrumb__item",{href:a.href,"data-i":n},...o):i("button","op-breadcrumb__item",{type:"button","data-i":n},...o);s.push(i("li","",{},b))}),this.list.replaceChildren(...s)}go(e,r){let t=this.items()[e];return!t||e===this.items().length-1?!1:this.emit("before-navigate",t,e)===!1?(r?.preventDefault(),!1):(t.handler?.(t),this.emit("navigate",t,e),!0)}showHidden(e){let r=this.items();this.menu??=new u({}),this.menu.setItems(this.collapsed().map(t=>({text:r[t].text,icon:r[t].icon,handler:()=>{this.go(t)&&r[t].href&&(location.href=r[t].href)}}))),this.menu.on("show",()=>e.setAttribute("aria-expanded","true")),this.menu.on("hide",()=>e.setAttribute("aria-expanded","false")),this.menu.showBy(e)}setItems(e){this.config.items=e,this.rendered&&this.paint()}setMaxItems(e){this.config.maxItems=e,this.rendered&&this.paint()}setSeparator(e){this.config.separator=e,this.rendered&&this.el.style.setProperty("--op-breadcrumb-separator",JSON.stringify(e))}};l("breadcrumb",c);export{c as a};
2
+ //# sourceMappingURL=chunk-II6ITOA6.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/navigation/breadcrumb/breadcrumb.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport { Menu } from '../../overlays/menu/menu';\n\naddMessages('en', {\n breadcrumb: 'Breadcrumb',\n breadcrumbMore: 'Show more',\n});\naddMessages('pt-BR', {\n breadcrumb: 'Trilha de navega\u00E7\u00E3o',\n breadcrumbMore: 'Mostrar mais',\n});\n\nexport interface BreadcrumbItem {\n text: string;\n icon?: string;\n /** Renders a real link (native navigation, middle-click, copy link). */\n href?: string;\n handler?: (item: BreadcrumbItem) => void;\n}\n\nexport interface BreadcrumbConfig extends ComponentConfig {\n items?: BreadcrumbItem[];\n /** More items than this collapse the middle into a \"\u2026\" menu. Minimum 3, default 4. */\n maxItems?: number;\n separator?: string;\n}\n\nexport class Breadcrumb extends Component<BreadcrumbConfig> {\n protected override baseCls = 'op-breadcrumb';\n protected override tag = 'nav' as const;\n private list!: HTMLElement;\n private menu?: Menu;\n\n protected override onRender() {\n this.list = h('ol', 'op-breadcrumb__list');\n this.el.append(this.list);\n if (!this.config.ariaLabel) this.el.setAttribute('aria-label', t('breadcrumb'));\n if (this.config.separator != null) this.setSeparator(this.config.separator);\n this.listen(this.list, 'click', (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (target.closest('.op-breadcrumb__more')) return this.showHidden(target.closest('button')!);\n const el = target.closest<HTMLElement>('[data-i]');\n if (el) this.go(Number(el.dataset.i), e);\n });\n this.own(() => this.menu?.destroy());\n this.paint();\n }\n\n private items(): BreadcrumbItem[] {\n return this.config.items ?? [];\n }\n\n /** Indexes hidden behind the \"\u2026\" button (empty when everything fits). */\n private collapsed(): number[] {\n const n = this.items().length;\n const max = Math.max(3, this.config.maxItems ?? 4);\n if (n <= max) return [];\n return Array.from({ length: n - (max - 1) }, (_, i) => i + 1);\n }\n\n private paint() {\n const items = this.items();\n const hidden = this.collapsed();\n const last = items.length - 1;\n const lis: HTMLElement[] = [];\n items.forEach((item, i) => {\n if (hidden.includes(i)) {\n if (i === hidden[0]) lis.push(h('li', '', {}, h('button', 'op-breadcrumb__more', { type: 'button', 'aria-label': t('breadcrumbMore'), 'aria-haspopup': 'menu', 'aria-expanded': 'false' }, '\u2026')));\n return;\n }\n const content = [item.icon ? iconEl(item.icon) : null, item.text];\n const node =\n i === last\n ? h('span', 'op-breadcrumb__current', { 'aria-current': 'page' }, ...content)\n : item.href\n ? h('a', 'op-breadcrumb__item', { href: item.href, 'data-i': i }, ...content)\n : h('button', 'op-breadcrumb__item', { type: 'button', 'data-i': i }, ...content);\n lis.push(h('li', '', {}, node));\n });\n this.list.replaceChildren(...lis);\n }\n\n /** Runs `before-navigate` / handler / `navigate`. Returns false when cancelled. */\n private go(i: number, e?: Event): boolean {\n const item = this.items()[i];\n if (!item || i === this.items().length - 1) return false;\n if (this.emit('before-navigate', item, i) === false) {\n e?.preventDefault();\n return false;\n }\n item.handler?.(item);\n this.emit('navigate', item, i);\n return true;\n }\n\n private showHidden(button: HTMLElement) {\n const items = this.items();\n this.menu ??= new Menu({});\n this.menu.setItems(\n this.collapsed().map((i) => ({\n text: items[i].text,\n icon: items[i].icon,\n handler: () => {\n if (this.go(i) && items[i].href) location.href = items[i].href!;\n },\n })),\n );\n this.menu.on('show', () => button.setAttribute('aria-expanded', 'true'));\n this.menu.on('hide', () => button.setAttribute('aria-expanded', 'false'));\n this.menu.showBy(button);\n }\n\n setItems(items: BreadcrumbItem[]) {\n this.config.items = items;\n if (this.rendered) this.paint();\n }\n\n setMaxItems(max: number) {\n this.config.maxItems = max;\n if (this.rendered) this.paint();\n }\n\n /** Any text, e.g. `'/'` or `'\u203A'`. */\n setSeparator(separator: string) {\n this.config.separator = separator;\n if (this.rendered) this.el.style.setProperty('--op-breadcrumb-separator', JSON.stringify(separator));\n }\n}\nregister('breadcrumb', Breadcrumb);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "Breadcrumb", "Component", "h", "t", "target", "el", "n", "max", "_", "i", "items", "hidden", "last", "lis", "item", "content", "iconEl", "node", "e", "button", "Menu", "separator", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as h}from"./chunk-LW2WRUVL.js";import{c as d}from"./chunk-OEAXCCVM.js";import{a as l}from"./chunk-A2NKDOYN.js";import{b as e}from"./chunk-PZSHOSOS.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{f as p}from"./chunk-MW3RWBZ7.js";var r=class extends l{baseCls="op-table";tag="table";store;unsub;onRender(){let t=this.config;this.el.classList.toggle("op-table--striped",!!t.striped),this.bind(t.store??new d({data:t.data??[]})),this.own(()=>this.unsub?.())}bind(t){this.unsub?.(),this.store=t,this.unsub=t.subscribe(()=>this.paint()),this.paint()}cols(){return(this.config.columns??Object.keys(this.store.getAt(0)?.data??{}).map(o=>({field:o}))).filter(o=>!o.hidden)}paint(){let t=this.config,n=this.cols(),o=e("tr","",{},...n.map(i=>e("th",i.align?`op-table__cell--${i.align}`:"",{scope:"col"},i.header??i.field))),a=this.store.getRange().map(i=>e("tr","",{},...n.map(s=>e("td",`${s.align?`op-table__cell--${s.align}`:""} ${s.cls??""}`.trim(),{},h(s,i))))),m=a.length?a:[e("tr","op-table__empty",{},e("td","",{colspan:n.length||1},t.emptyText??p("empty")))];this.el.replaceChildren(...t.caption?[e("caption","",{},t.caption)]:[],e("thead","",{},o),e("tbody","",{},...m))}setData(t){this.config.data=t,this.rendered&&this.store.loadData(t)}setStore(t){this.config.store=t,this.rendered&&this.bind(t)}setColumns(t){this.config.columns=t,this.rendered&&this.paint()}setCaption(t){this.config.caption=t,this.rendered&&this.paint()}};c("table",r);export{r as a};
2
+ //# sourceMappingURL=chunk-JBLRAM7Z.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/components/data/table/table.ts"],
4
4
  "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { Store } from '../../../data/store';\nimport { t } from '../../../core/i18n';\nimport { cellContent, type Column } from '../../../data/column';\n\nexport interface TableConfig extends ComponentConfig {\n data?: Record<string, any>[];\n store?: Store<any>;\n columns?: Column[];\n caption?: string;\n striped?: boolean;\n emptyText?: string;\n}\n\n/** Plain semantic `<table>` for small datasets. No selection, sorting or virtualization: use Grid for those. */\nexport class Table extends Component<TableConfig> {\n protected override baseCls = 'op-table';\n protected override tag = 'table' as const;\n private store!: Store<any>;\n private unsub?: () => void;\n\n protected override onRender() {\n const c = this.config;\n this.el.classList.toggle('op-table--striped', !!c.striped);\n this.bind(c.store ?? new Store({ data: c.data ?? [] }));\n this.own(() => this.unsub?.());\n }\n\n private bind(store: Store<any>) {\n this.unsub?.();\n this.store = store;\n this.unsub = store.subscribe(() => this.paint());\n this.paint();\n }\n\n private cols(): Column[] {\n const c = this.config;\n const all: Column[] = c.columns ?? Object.keys(this.store.getAt(0)?.data ?? {}).map((field) => ({ field }));\n return all.filter((x) => !x.hidden);\n }\n\n private paint() {\n const c = this.config;\n const cols = this.cols();\n const head = h('tr', '', {}, ...cols.map((col) => h('th', col.align ? `op-table__cell--${col.align}` : '', { scope: 'col' }, col.header ?? col.field)));\n const rows = this.store.getRange().map((rec) =>\n h('tr', '', {}, ...cols.map((col) => h('td', `${col.align ? `op-table__cell--${col.align}` : ''} ${col.cls ?? ''}`.trim(), {}, cellContent(col, rec)))),\n );\n const body = rows.length ? rows : [h('tr', 'op-table__empty', {}, h('td', '', { colspan: cols.length || 1 }, c.emptyText ?? t('empty')))];\n this.el.replaceChildren(...(c.caption ? [h('caption', '', {}, c.caption)] : []), h('thead', '', {}, head), h('tbody', '', {}, ...body));\n }\n\n setData(data: Record<string, any>[]) {\n this.config.data = data;\n if (this.rendered) this.store.loadData(data);\n }\n setStore(store: Store<any>) {\n this.config.store = store;\n if (this.rendered) this.bind(store);\n }\n setColumns(columns: Column[]) {\n this.config.columns = columns;\n if (this.rendered) this.paint();\n }\n setCaption(caption: string) {\n this.config.caption = caption;\n if (this.rendered) this.paint();\n }\n}\nregister('table', Table);\n"],
5
- "mappings": "+MAiBO,IAAMA,EAAN,cAAoBC,CAAuB,CAC7B,QAAU,WACV,IAAM,QACjB,MACA,MAEW,UAAW,CAC5B,IAAMC,EAAI,KAAK,OACf,KAAK,GAAG,UAAU,OAAO,oBAAqB,CAAC,CAACA,EAAE,OAAO,EACzD,KAAK,KAAKA,EAAE,OAAS,IAAIC,EAAM,CAAE,KAAMD,EAAE,MAAQ,CAAC,CAAE,CAAC,CAAC,EACtD,KAAK,IAAI,IAAM,KAAK,QAAQ,CAAC,CAC/B,CAEQ,KAAKE,EAAmB,CAC9B,KAAK,QAAQ,EACb,KAAK,MAAQA,EACb,KAAK,MAAQA,EAAM,UAAU,IAAM,KAAK,MAAM,CAAC,EAC/C,KAAK,MAAM,CACb,CAEQ,MAAiB,CAGvB,OAFU,KAAK,OACS,SAAW,OAAO,KAAK,KAAK,MAAM,MAAM,CAAC,GAAG,MAAQ,CAAC,CAAC,EAAE,IAAKC,IAAW,CAAE,MAAAA,CAAM,EAAE,GAC/F,OAAQC,GAAM,CAACA,EAAE,MAAM,CACpC,CAEQ,OAAQ,CACd,IAAMJ,EAAI,KAAK,OACTK,EAAO,KAAK,KAAK,EACjBC,EAAOC,EAAE,KAAM,GAAI,CAAC,EAAG,GAAGF,EAAK,IAAKG,GAAQD,EAAE,KAAMC,EAAI,MAAQ,mBAAmBA,EAAI,KAAK,GAAK,GAAI,CAAE,MAAO,KAAM,EAAGA,EAAI,QAAUA,EAAI,KAAK,CAAC,CAAC,EAChJC,EAAO,KAAK,MAAM,SAAS,EAAE,IAAKC,GACtCH,EAAE,KAAM,GAAI,CAAC,EAAG,GAAGF,EAAK,IAAKG,GAAQD,EAAE,KAAM,GAAGC,EAAI,MAAQ,mBAAmBA,EAAI,KAAK,GAAK,EAAE,IAAIA,EAAI,KAAO,EAAE,GAAG,KAAK,EAAG,CAAC,EAAGG,EAAYH,EAAKE,CAAG,CAAC,CAAC,CAAC,CACxJ,EACME,EAAOH,EAAK,OAASA,EAAO,CAACF,EAAE,KAAM,kBAAmB,CAAC,EAAGA,EAAE,KAAM,GAAI,CAAE,QAASF,EAAK,QAAU,CAAE,EAAGL,EAAE,WAAaa,EAAE,OAAO,CAAC,CAAC,CAAC,EACxI,KAAK,GAAG,gBAAgB,GAAIb,EAAE,QAAU,CAACO,EAAE,UAAW,GAAI,CAAC,EAAGP,EAAE,OAAO,CAAC,EAAI,CAAC,EAAIO,EAAE,QAAS,GAAI,CAAC,EAAGD,CAAI,EAAGC,EAAE,QAAS,GAAI,CAAC,EAAG,GAAGK,CAAI,CAAC,CACxI,CAEA,QAAQE,EAA6B,CACnC,KAAK,OAAO,KAAOA,EACf,KAAK,UAAU,KAAK,MAAM,SAASA,CAAI,CAC7C,CACA,SAASZ,EAAmB,CAC1B,KAAK,OAAO,MAAQA,EAChB,KAAK,UAAU,KAAK,KAAKA,CAAK,CACpC,CACA,WAAWa,EAAmB,CAC5B,KAAK,OAAO,QAAUA,EAClB,KAAK,UAAU,KAAK,MAAM,CAChC,CACA,WAAWC,EAAiB,CAC1B,KAAK,OAAO,QAAUA,EAClB,KAAK,UAAU,KAAK,MAAM,CAChC,CACF,EACAC,EAAS,QAASnB,CAAK",
5
+ "mappings": "gPAiBO,IAAMA,EAAN,cAAoBC,CAAuB,CAC7B,QAAU,WACV,IAAM,QACjB,MACA,MAEW,UAAW,CAC5B,IAAMC,EAAI,KAAK,OACf,KAAK,GAAG,UAAU,OAAO,oBAAqB,CAAC,CAACA,EAAE,OAAO,EACzD,KAAK,KAAKA,EAAE,OAAS,IAAIC,EAAM,CAAE,KAAMD,EAAE,MAAQ,CAAC,CAAE,CAAC,CAAC,EACtD,KAAK,IAAI,IAAM,KAAK,QAAQ,CAAC,CAC/B,CAEQ,KAAKE,EAAmB,CAC9B,KAAK,QAAQ,EACb,KAAK,MAAQA,EACb,KAAK,MAAQA,EAAM,UAAU,IAAM,KAAK,MAAM,CAAC,EAC/C,KAAK,MAAM,CACb,CAEQ,MAAiB,CAGvB,OAFU,KAAK,OACS,SAAW,OAAO,KAAK,KAAK,MAAM,MAAM,CAAC,GAAG,MAAQ,CAAC,CAAC,EAAE,IAAKC,IAAW,CAAE,MAAAA,CAAM,EAAE,GAC/F,OAAQC,GAAM,CAACA,EAAE,MAAM,CACpC,CAEQ,OAAQ,CACd,IAAMJ,EAAI,KAAK,OACTK,EAAO,KAAK,KAAK,EACjBC,EAAOC,EAAE,KAAM,GAAI,CAAC,EAAG,GAAGF,EAAK,IAAKG,GAAQD,EAAE,KAAMC,EAAI,MAAQ,mBAAmBA,EAAI,KAAK,GAAK,GAAI,CAAE,MAAO,KAAM,EAAGA,EAAI,QAAUA,EAAI,KAAK,CAAC,CAAC,EAChJC,EAAO,KAAK,MAAM,SAAS,EAAE,IAAKC,GACtCH,EAAE,KAAM,GAAI,CAAC,EAAG,GAAGF,EAAK,IAAKG,GAAQD,EAAE,KAAM,GAAGC,EAAI,MAAQ,mBAAmBA,EAAI,KAAK,GAAK,EAAE,IAAIA,EAAI,KAAO,EAAE,GAAG,KAAK,EAAG,CAAC,EAAGG,EAAYH,EAAKE,CAAG,CAAC,CAAC,CAAC,CACxJ,EACME,EAAOH,EAAK,OAASA,EAAO,CAACF,EAAE,KAAM,kBAAmB,CAAC,EAAGA,EAAE,KAAM,GAAI,CAAE,QAASF,EAAK,QAAU,CAAE,EAAGL,EAAE,WAAaa,EAAE,OAAO,CAAC,CAAC,CAAC,EACxI,KAAK,GAAG,gBAAgB,GAAIb,EAAE,QAAU,CAACO,EAAE,UAAW,GAAI,CAAC,EAAGP,EAAE,OAAO,CAAC,EAAI,CAAC,EAAIO,EAAE,QAAS,GAAI,CAAC,EAAGD,CAAI,EAAGC,EAAE,QAAS,GAAI,CAAC,EAAG,GAAGK,CAAI,CAAC,CACxI,CAEA,QAAQE,EAA6B,CACnC,KAAK,OAAO,KAAOA,EACf,KAAK,UAAU,KAAK,MAAM,SAASA,CAAI,CAC7C,CACA,SAASZ,EAAmB,CAC1B,KAAK,OAAO,MAAQA,EAChB,KAAK,UAAU,KAAK,KAAKA,CAAK,CACpC,CACA,WAAWa,EAAmB,CAC5B,KAAK,OAAO,QAAUA,EAClB,KAAK,UAAU,KAAK,MAAM,CAChC,CACA,WAAWC,EAAiB,CAC1B,KAAK,OAAO,QAAUA,EAClB,KAAK,UAAU,KAAK,MAAM,CAChC,CACF,EACAC,EAAS,QAASnB,CAAK",
6
6
  "names": ["Table", "Component", "c", "Store", "store", "field", "x", "cols", "head", "h", "col", "rows", "rec", "cellContent", "body", "t", "data", "columns", "caption", "register"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{a as n}from"./chunk-Z25NC4CS.js";import{b as o}from"./chunk-IYPKPLCU.js";var s=class extends n{baseCls="op-field op-textfield op-picker op-combobox";term="";emptyValue(){return null}isEmpty(t){return t==null||t===""}visibleItems(){let t=this.typed?this.term.trim().toLowerCase():"";if(!t)return this.items;let i=this.config.filter??"contains",p=typeof i=="function"?i:i==="startsWith"?(e,r)=>e.label.toLowerCase().startsWith(r):(e,r)=>e.label.toLowerCase().includes(r);return this.items.filter(e=>p(e,t))}onType(t){this.term=t,this.refreshList(),this.list.setHighlight(t),this.open()}pick(t){this.term="",super.pick(t),this.list.setHighlight("")}settle(){super.settle(),this.term="",this.list.setHighlight("")}};o("combobox",s);export{s as a};
2
- //# sourceMappingURL=chunk-4SUKNSCY.js.map
1
+ import{a as n}from"./chunk-EV73ADN2.js";import{a as o}from"./chunk-TIPK3SCJ.js";var s=class extends n{baseCls="op-field op-textfield op-picker op-combobox";term="";emptyValue(){return null}isEmpty(t){return t==null||t===""}visibleItems(){let t=this.typed?this.term.trim().toLowerCase():"";if(!t)return this.items;let i=this.config.filter??"contains",p=typeof i=="function"?i:i==="startsWith"?(e,r)=>e.label.toLowerCase().startsWith(r):(e,r)=>e.label.toLowerCase().includes(r);return this.items.filter(e=>p(e,t))}onType(t){this.term=t,this.refreshList(),this.list.setHighlight(t),this.open()}pick(t){this.term="",super.pick(t),this.list.setHighlight("")}settle(){super.settle(),this.term="",this.list.setHighlight("")}};o("combobox",s);export{s as a};
2
+ //# sourceMappingURL=chunk-JI265XFO.js.map
@@ -0,0 +1,2 @@
1
+ import{a as C}from"./chunk-2ZRNGG2N.js";import{c as S}from"./chunk-6NCXO5ZP.js";import{c as m}from"./chunk-2UPUC4RK.js";import{b as l}from"./chunk-PZSHOSOS.js";import{a as E}from"./chunk-TIPK3SCJ.js";var _=.35,w=y=>(String(y).split(".")[1]??"").length,x=class extends C{baseCls="op-field op-dial";face;tape;needle;readout;cache;pos=0;angle=0;shown="";stopGlide;constructor(t={}){super(t),this.value=this.original=this.normalize(this.value)}get isCircle(){return this.config.shape==="circle"}get items(){return this.cache??=this.buildItems()}fmt(t){return this.config.format?this.config.format(t):String(t)}buildItems(){let t=this.config,e;if(t.options)e=t.options.map(a=>typeof a=="object"?a:{value:a});else{let a=t.min??0,h=t.step||1,p=Math.max(1,Math.floor(((t.max??100)-a)/h+1e-9)+1),c=Math.max(w(h),w(a));e=Array.from({length:p},(D,f)=>({value:Number((a+f*h).toFixed(c))}))}let s=t.snap??(t.options?1:10),i=(a,h)=>s===!1?!1:Array.isArray(s)?s.includes(a):t.options?h%s===0:Math.abs(a/s-Math.round(a/s))<1e-9;return e.map((a,h)=>({value:a.value,label:a.label??this.fmt(a.value),major:i(a.value,h)}))}emptyValue(){let t=this.config.options?.[0];return t===void 0?this.config.min??0:typeof t=="object"?t.value:t}isEmpty(){return!1}indexOf(t){let e=this.items;if(this.config.options)return Math.max(0,e.findIndex(i=>i.value===t));let s=Math.round((t-(this.config.min??0))/(this.config.step||1));return Math.max(0,Math.min(e.length-1,Number.isFinite(s)?s:0))}normalize(t){return this.items[this.indexOf(t)].value}get index(){return this.indexOf(this.value)}createControl(){return this.readout=l("div","op-dial__readout",{"aria-hidden":"true"}),this.tape=l("div","op-dial__tape"),this.needle=l("div","op-dial__needle"),this.face=l("div","op-dial__face",{role:"slider",tabindex:0,"aria-orientation":"horizontal"},l("div","op-dial__window",{},this.tape),this.needle),this.listen(this.face,"pointerdown",t=>this.onDown(t)),this.listen(this.face,"keydown",t=>this.onKey(t)),this.paintTicks(),this.inputEl=this.face,l("div","op-dial__box",{},this.readout,this.face)}onRender(){super.onRender();let t=this.el.querySelector(".op-field__label");t.id=`${this.id}-label`,this.config.ariaLabel||this.face.setAttribute("aria-labelledby",t.id)}paintTicks(){let t=this.items,e=this.config.labels??"snap";this.rendered&&(this.el.classList.toggle("op-dial--circle",this.isCircle),this.el.classList.toggle("op-dial--list",!!this.config.options)),this.tape.replaceChildren(...t.map((s,i)=>{let a=l("span",`op-dial__tick${s.major?" is-major":""}`,{"data-i":i});return a.style.setProperty("--i",String(i)),a.style.setProperty("--a",`${i*360/t.length}deg`),(e==="all"||e==="snap"&&s.major)&&a.append(l("span","op-dial__tick-label",{},s.label)),a}))}build(){let t=super.build();return t.classList.toggle("op-dial--circle",this.isCircle),t.classList.toggle("op-dial--list",!!this.config.options),t}spacing(){let[t,e]=this.tape.children;return e&&t&&e.offsetLeft-t.offsetLeft||12}place(){this.needle.style.transform=this.isCircle?`translateX(-50%) rotate(${this.angle}deg)`:"",this.tape.style.setProperty("--pos",String(this.isCircle?0:this.pos))}aim(t){let e=t*360/this.items.length;this.angle+=((e-this.angle)%360+540)%360-180}applyValue(t){let e=this.indexOf(t);this.pos=e,this.aim(e),this.place(),this.paintState(e)}paintState(t){let e=this.items,s=e[t],i=this.face,a=!!this.config.options;i.setAttribute("aria-valuemin",String(a?0:e[0].value)),i.setAttribute("aria-valuemax",String(a?e.length-1:e[e.length-1].value)),i.setAttribute("aria-valuenow",String(a?t:s.value)),i.setAttribute("aria-valuetext",s.label),this.tape.querySelector(".is-current")?.classList.remove("is-current"),this.tape.children[t]?.classList.add("is-current"),this.paintReadout(s.label)}paintReadout(t){let e=this.shown;if(t===e)return;this.shown=t;let s=i=>i.replace(/\d/g,"0");if(e&&s(e)===s(t)){[...t].forEach((i,a)=>/\d/.test(i)&&this.readout.children[a].firstElementChild.setAttribute("style",`--d:${i}`));return}if(this.readout.replaceChildren(...[...t].map(i=>/\d/.test(i)?l("span","op-dial__digit",{},l("span","op-dial__reel",{style:`--d:${i}`},..."0123456789".split("").map(a=>l("span","",{},a)))):l("span","",{},i))),e&&m.isOn()&&typeof this.readout.animate=="function"){let i=this.items.findIndex(a=>a.label===t)>=this.items.findIndex(a=>a.label===e);this.readout.animate([{translate:`0 ${i?35:-35}%`,opacity:0},{translate:"0 0",opacity:1}],{duration:m.ms("swap"),easing:m.easing("enter")})}}choose(t){let e=this.items;t=Math.max(0,Math.min(e.length-1,t)),this.pos=t,this.aim(t),this.place(),this.paintState(t),this.commit(e[t].value)}get locked(){return!!(this.config.disabled||this.config.readonly)}onKey(t){if(this.locked)return;let e=this.index,s=this.items.length,i={ArrowRight:e+1,ArrowUp:e+1,ArrowLeft:e-1,ArrowDown:e-1,PageUp:this.snapFrom(e,1),PageDown:this.snapFrom(e,-1),Home:0,End:s-1};t.key in i&&(t.preventDefault(),this.choose(i[t.key]),this.flushSettled(),this.emit("slide-end",this.value))}snapFrom(t,e){let s=this.items;for(let i=t+e;i>=0&&i<s.length;i+=e)if(s[i].major)return i;return e>0?s.length-1:0}angleAt(t){let e=this.face.getBoundingClientRect();return(Math.atan2(t.clientX-(e.left+e.width/2),e.top+e.height/2-t.clientY)*180/Math.PI+360)%360}onDown(t){if(this.locked||t.button)return;t.preventDefault(),this.stopGlide?.();let e=this.face;e.focus(),e.setPointerCapture?.(t.pointerId);let s=this.items.length,i=this.spacing(),a=t.clientX,h=this.pos,p=!1,c=[{x:t.clientX,t:t.timeStamp}];this.el.classList.add("is-dragging"),this.emit("slide-start");let D=n=>{if(this.isCircle){let d=this.angleAt(n);return this.angle+=((d-this.angle)%360+540)%360-180,this.place(),Math.round(d/360*s)%s}let r=h-(n.clientX-a)/i,o=r<0?r:r>s-1?r-(s-1):0;return this.pos=o?r-o+Math.sign(o)*S(Math.abs(o)*i,i*2)/i:r,this.place(),Math.round(Math.max(0,Math.min(s-1,r)))},f=n=>{(Math.abs(n.clientX-a)>3||this.isCircle)&&(p=!0),c=[...c.filter(o=>n.timeStamp-o.t<100),{x:n.clientX,t:n.timeStamp}];let r=D(n);r!==this.index&&(this.paintState(r),this.commit(this.items[r].value))},L=()=>{e.removeEventListener("pointermove",f),e.removeEventListener("pointerup",g),e.removeEventListener("pointercancel",g)},g=n=>{if(L(),this.el.classList.remove("is-dragging"),n.type==="pointercancel")return this.rest(this.index);if(this.isCircle)return this.rest(p?this.index:Math.round(this.angleAt(n)/360*s)%s);if(!p){let v=e.getBoundingClientRect();return this.rest(Math.round(this.pos+(n.clientX-(v.left+v.width/2))/i))}let r=c[0],o=(n.clientX-r.x)/Math.max(1,n.timeStamp-r.t);if(Math.abs(o)<_)return this.rest(Math.round(Math.max(0,Math.min(s-1,this.pos))));let d=o<0?1:-1,M=this.pos+d*Math.abs(o)*260/i,u=-1;this.items.forEach((v,b)=>v.major&&(d>0?b>this.pos:b<this.pos)&&(u<0||Math.abs(b-M)<Math.abs(u-M))&&(u=b)),this.rest(u>=0?u:Math.round(Math.max(0,Math.min(s-1,M))),!0)};e.addEventListener("pointermove",f),e.addEventListener("pointerup",g),e.addEventListener("pointercancel",g),this.own(L)}rest(t,e=!1){let s=this.pos;this.choose(t);let i=()=>{this.stopGlide=void 0,this.el.classList.remove("is-gliding"),this.tape.style.transitionDuration="",this.flushSettled(),this.emit("slide-end",this.value)};if(!e||!m.isOn())return i();let a=Math.min(900,280+Math.abs(this.pos-s)*this.spacing()*.9);this.el.classList.add("is-gliding"),this.tape.style.transitionDuration=`${a}ms`,this.stopGlide=this.later(i,a)}next(t=1){this.setValue(this.items[Math.max(0,Math.min(this.items.length-1,this.index+t))].value)}prev(t=1){this.next(-t)}nextSnap(){this.setValue(this.items[this.snapFrom(this.index,1)].value)}prevSnap(){this.setValue(this.items[this.snapFrom(this.index,-1)].value)}getDisplayText(){return this.items[this.index].label}rebuild(t){Object.assign(this.config,t),this.cache=void 0,this.value=this.normalize(this.value),this.rendered&&(this.paintTicks(),this.shown="",this.readout.replaceChildren(),this.applyValue(this.value))}setMin(t){this.rebuild({min:t})}setMax(t){this.rebuild({max:t})}setStep(t){this.rebuild({step:t})}setOptions(t){this.rebuild({options:t})}setSnap(t){this.rebuild({snap:t})}setShape(t){this.rebuild({shape:t})}setFormat(t){this.rebuild({format:t})}onDisabled(t){this.face.tabIndex=t?-1:0,this.face.setAttribute("aria-disabled",String(t))}onReadonly(t){this.face.setAttribute("aria-readonly",String(t))}};E("dial",x);export{x as a};
2
+ //# sourceMappingURL=chunk-JK74QK3M.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/fields/dial/dial.ts"],
4
+ "sourcesContent": ["import { Field, type FieldConfig } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { motion } from '../../../motion/config';\nimport { rubberBand } from '../../../motion/extras';\n\nexport type DialValue = number | string;\nexport interface DialOption {\n value: DialValue;\n label?: string;\n}\n\nexport interface DialConfig extends FieldConfig<DialValue> {\n min?: number;\n max?: number;\n step?: number;\n /** A list instead of a range: the value is the item's value. */\n options?: (DialValue | DialOption)[];\n /** Snap points: every multiple of N (a range, default 10), every N items (a list, default 1), explicit values, or none. */\n snap?: number | DialValue[] | false;\n shape?: 'linear' | 'circle';\n format?: (v: DialValue) => string;\n /** Which ticks get a label. Default `snap`. */\n labels?: 'snap' | 'all' | 'none';\n}\n\ninterface Item {\n value: DialValue;\n label: string;\n major: boolean;\n}\n\nconst FLICK = 0.35; // px/ms: faster than this on release is a flick, which glides to a snap point\nconst decimals = (n: number) => (String(n).split('.')[1] ?? '').length;\n\n/** A flat ruler (or a clock face) to pick one value from a range or a list, with a rolling readout. */\nexport class Dial extends Field<DialValue, DialConfig> {\n protected override baseCls = 'op-field op-dial';\n private face!: HTMLElement;\n private tape!: HTMLElement;\n private needle!: HTMLElement;\n private readout!: HTMLElement;\n private cache?: Item[];\n /** Where the ruler sits, as an item index (fractional while dragging). */\n private pos = 0;\n /** The hand's angle in circle mode, kept continuous so it always turns the short way. */\n private angle = 0;\n private shown = '';\n private stopGlide?: () => void;\n\n constructor(config: DialConfig = {}) {\n super(config);\n this.value = this.original = this.normalize(this.value);\n }\n\n private get isCircle() {\n return this.config.shape === 'circle';\n }\n private get items(): Item[] {\n return (this.cache ??= this.buildItems());\n }\n\n private fmt(v: DialValue): string {\n return this.config.format ? this.config.format(v) : String(v);\n }\n\n private buildItems(): Item[] {\n const c = this.config;\n let base: { value: DialValue; label?: string }[];\n if (c.options) base = c.options.map((o) => (typeof o === 'object' ? o : { value: o }));\n else {\n const min = c.min ?? 0;\n const step = c.step || 1;\n const n = Math.max(1, Math.floor(((c.max ?? 100) - min) / step + 1e-9) + 1);\n const dec = Math.max(decimals(step), decimals(min));\n base = Array.from({ length: n }, (_, i) => ({ value: Number((min + i * step).toFixed(dec)) }));\n }\n const snap = c.snap ?? (c.options ? 1 : 10);\n const major = (v: DialValue, i: number) =>\n snap === false ? false : Array.isArray(snap) ? snap.includes(v) : c.options ? i % snap === 0 : Math.abs((v as number) / snap - Math.round((v as number) / snap)) < 1e-9;\n return base.map((o, i) => ({ value: o.value, label: o.label ?? this.fmt(o.value), major: major(o.value, i) }));\n }\n\n protected override emptyValue(): DialValue {\n const first = this.config.options?.[0];\n return first === undefined ? (this.config.min ?? 0) : typeof first === 'object' ? first.value : first;\n }\n protected override isEmpty(): boolean {\n return false;\n }\n\n private indexOf(v: DialValue): number {\n const list = this.items;\n if (this.config.options) return Math.max(0, list.findIndex((it) => it.value === v));\n const i = Math.round(((v as number) - (this.config.min ?? 0)) / (this.config.step || 1));\n return Math.max(0, Math.min(list.length - 1, Number.isFinite(i) ? i : 0));\n }\n private normalize(v: DialValue): DialValue {\n return this.items[this.indexOf(v)].value;\n }\n private get index(): number {\n return this.indexOf(this.value);\n }\n\n // ---- DOM ----------------------------------------------------------------------------------\n\n protected createControl() {\n this.readout = h('div', 'op-dial__readout', { 'aria-hidden': 'true' });\n this.tape = h('div', 'op-dial__tape');\n this.needle = h('div', 'op-dial__needle');\n this.face = h('div', 'op-dial__face', { role: 'slider', tabindex: 0, 'aria-orientation': 'horizontal' }, h('div', 'op-dial__window', {}, this.tape), this.needle);\n this.listen(this.face, 'pointerdown', (e: PointerEvent) => this.onDown(e));\n this.listen(this.face, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.paintTicks();\n this.inputEl = this.face;\n return h('div', 'op-dial__box', {}, this.readout, this.face);\n }\n\n protected override onRender() {\n super.onRender();\n const label = this.el.querySelector('.op-field__label') as HTMLElement;\n label.id = `${this.id}-label`;\n if (!this.config.ariaLabel) this.face.setAttribute('aria-labelledby', label.id);\n }\n\n private paintTicks() {\n const list = this.items;\n const show = this.config.labels ?? 'snap';\n if (this.rendered) {\n this.el.classList.toggle('op-dial--circle', this.isCircle);\n this.el.classList.toggle('op-dial--list', !!this.config.options);\n }\n this.tape.replaceChildren(\n ...list.map((it, i) => {\n const tick = h('span', `op-dial__tick${it.major ? ' is-major' : ''}`, { 'data-i': i });\n tick.style.setProperty('--i', String(i));\n tick.style.setProperty('--a', `${(i * 360) / list.length}deg`);\n if (show === 'all' || (show === 'snap' && it.major)) tick.append(h('span', 'op-dial__tick-label', {}, it.label));\n return tick;\n }),\n );\n }\n\n protected override build(): HTMLElement {\n const el = super.build();\n el.classList.toggle('op-dial--circle', this.isCircle);\n el.classList.toggle('op-dial--list', !!this.config.options);\n return el;\n }\n\n /** Distance in px between two ticks on the ruler, for drags (12 when there is no layout, as in tests). */\n private spacing(): number {\n const [a, b] = this.tape.children as unknown as HTMLElement[];\n return (b && a && b.offsetLeft - a.offsetLeft) || 12;\n }\n\n private place() {\n this.needle.style.transform = this.isCircle ? `translateX(-50%) rotate(${this.angle}deg)` : '';\n this.tape.style.setProperty('--pos', String(this.isCircle ? 0 : this.pos));\n }\n\n /** Turns the hand to item `i` the short way round. */\n private aim(i: number) {\n const target = (i * 360) / this.items.length;\n this.angle += ((((target - this.angle) % 360) + 540) % 360) - 180;\n }\n\n protected applyValue(v: DialValue): void {\n const i = this.indexOf(v);\n this.pos = i;\n this.aim(i);\n this.place();\n this.paintState(i);\n }\n\n /** ARIA, the current tick and the readout for item `i`. */\n private paintState(i: number) {\n const list = this.items;\n const it = list[i];\n const f = this.face;\n const isList = !!this.config.options;\n f.setAttribute('aria-valuemin', String(isList ? 0 : list[0].value));\n f.setAttribute('aria-valuemax', String(isList ? list.length - 1 : list[list.length - 1].value));\n f.setAttribute('aria-valuenow', String(isList ? i : it.value));\n f.setAttribute('aria-valuetext', it.label);\n this.tape.querySelector('.is-current')?.classList.remove('is-current');\n this.tape.children[i]?.classList.add('is-current');\n this.paintReadout(it.label);\n }\n\n /** Digits roll like an odometer when the text keeps its shape; any other change slides the new text in. */\n private paintReadout(text: string) {\n const old = this.shown;\n if (text === old) return;\n this.shown = text;\n const shape = (s: string) => s.replace(/\\d/g, '0');\n if (old && shape(old) === shape(text)) {\n [...text].forEach((ch, k) => /\\d/.test(ch) && (this.readout.children[k] as HTMLElement).firstElementChild!.setAttribute('style', `--d:${ch}`));\n return;\n }\n this.readout.replaceChildren(\n ...[...text].map((ch) =>\n /\\d/.test(ch)\n ? h('span', 'op-dial__digit', {}, h('span', 'op-dial__reel', { style: `--d:${ch}` }, ...'0123456789'.split('').map((d) => h('span', '', {}, d))))\n : h('span', '', {}, ch),\n ),\n );\n if (old && motion.isOn() && typeof this.readout.animate === 'function') {\n const up = this.items.findIndex((it) => it.label === text) >= this.items.findIndex((it) => it.label === old);\n // `translate`, not `transform`: the circle centers the readout with a transform\n this.readout.animate([{ translate: `0 ${up ? 35 : -35}%`, opacity: 0 }, { translate: '0 0', opacity: 1 }], { duration: motion.ms('swap'), easing: motion.easing('enter') });\n }\n }\n\n // ---- user input ---------------------------------------------------------------------------\n\n /** The user picked item `i`: animate there and tell everyone. */\n private choose(i: number) {\n const list = this.items;\n i = Math.max(0, Math.min(list.length - 1, i));\n this.pos = i;\n this.aim(i);\n this.place();\n this.paintState(i);\n this.commit(list[i].value);\n }\n\n private get locked() {\n return !!(this.config.disabled || this.config.readonly);\n }\n\n private onKey(e: KeyboardEvent) {\n if (this.locked) return;\n const i = this.index;\n const n = this.items.length;\n const to: Record<string, number> = { ArrowRight: i + 1, ArrowUp: i + 1, ArrowLeft: i - 1, ArrowDown: i - 1, PageUp: this.snapFrom(i, 1), PageDown: this.snapFrom(i, -1), Home: 0, End: n - 1 };\n if (!(e.key in to)) return;\n e.preventDefault();\n this.choose(to[e.key]);\n (this.flushSettled(), this.emit('slide-end', this.value));\n }\n\n /** The next snap point after item `i` in direction `dir` (or the limit when there is none). */\n private snapFrom(i: number, dir: 1 | -1): number {\n const list = this.items;\n for (let k = i + dir; k >= 0 && k < list.length; k += dir) if (list[k].major) return k;\n return dir > 0 ? list.length - 1 : 0;\n }\n\n private angleAt(e: PointerEvent): number {\n const r = this.face.getBoundingClientRect();\n const a = (Math.atan2(e.clientX - (r.left + r.width / 2), (r.top + r.height / 2) - e.clientY) * 180) / Math.PI;\n return (a + 360) % 360;\n }\n\n private onDown(e: PointerEvent) {\n if (this.locked || e.button) return;\n e.preventDefault();\n this.stopGlide?.();\n const f = this.face;\n f.focus();\n f.setPointerCapture?.(e.pointerId);\n const n = this.items.length;\n const sp = this.spacing();\n const x0 = e.clientX;\n const p0 = this.pos;\n let moved = false;\n let samples = [{ x: e.clientX, t: e.timeStamp }];\n this.el.classList.add('is-dragging');\n this.emit('slide-start');\n const follow = (m: PointerEvent) => {\n if (this.isCircle) {\n const a = this.angleAt(m);\n this.angle += ((((a - this.angle) % 360) + 540) % 360) - 180;\n this.place();\n return Math.round((a / 360) * n) % n;\n }\n const raw = p0 - (m.clientX - x0) / sp;\n const over = raw < 0 ? raw : raw > n - 1 ? raw - (n - 1) : 0;\n this.pos = over ? raw - over + (Math.sign(over) * rubberBand(Math.abs(over) * sp, sp * 2)) / sp : raw;\n this.place();\n return Math.round(Math.max(0, Math.min(n - 1, raw)));\n };\n const track = (m: PointerEvent) => {\n if (Math.abs(m.clientX - x0) > 3 || this.isCircle) moved = true;\n samples = [...samples.filter((s) => m.timeStamp - s.t < 100), { x: m.clientX, t: m.timeStamp }];\n const i = follow(m);\n if (i !== this.index) (this.paintState(i), this.commit(this.items[i].value));\n };\n const detach = () => {\n f.removeEventListener('pointermove', track);\n f.removeEventListener('pointerup', up);\n f.removeEventListener('pointercancel', up);\n };\n const up = (u: PointerEvent) => {\n detach();\n this.el.classList.remove('is-dragging');\n if (u.type === 'pointercancel') return this.rest(this.index);\n if (this.isCircle) return this.rest(moved ? this.index : Math.round((this.angleAt(u) / 360) * n) % n);\n if (!moved) {\n // a click: go to the tick under the pointer\n const r = f.getBoundingClientRect();\n return this.rest(Math.round(this.pos + (u.clientX - (r.left + r.width / 2)) / sp));\n }\n const first = samples[0];\n const v = (u.clientX - first.x) / Math.max(1, u.timeStamp - first.t); // px/ms, > 0 = towards the start\n if (Math.abs(v) < FLICK) return this.rest(Math.round(Math.max(0, Math.min(n - 1, this.pos))));\n const dir = v < 0 ? 1 : -1;\n const ahead = this.pos + (dir * Math.abs(v) * 260) / sp; // where the inertia would carry it\n // rest on the snap point nearest to that, among those ahead of the ruler (or on the nearest step when there are none)\n let to = -1;\n this.items.forEach((it, k) => it.major && (dir > 0 ? k > this.pos : k < this.pos) && (to < 0 || Math.abs(k - ahead) < Math.abs(to - ahead)) && (to = k));\n this.rest(to >= 0 ? to : Math.round(Math.max(0, Math.min(n - 1, ahead))), true);\n };\n f.addEventListener('pointermove', track);\n f.addEventListener('pointerup', up);\n f.addEventListener('pointercancel', up);\n this.own(detach);\n }\n\n /** Comes to rest on item `i`; a glide (after a flick) takes longer the further it goes. */\n private rest(i: number, glide = false) {\n const from = this.pos;\n this.choose(i);\n const end = () => {\n this.stopGlide = undefined;\n this.el.classList.remove('is-gliding');\n this.tape.style.transitionDuration = '';\n (this.flushSettled(), this.emit('slide-end', this.value));\n };\n if (!glide || !motion.isOn()) return end();\n const ms = Math.min(900, 280 + Math.abs(this.pos - from) * this.spacing() * 0.9);\n this.el.classList.add('is-gliding');\n this.tape.style.transitionDuration = `${ms}ms`;\n this.stopGlide = this.later(end, ms);\n }\n\n // ---- API ----------------------------------------------------------------------------------\n\n /** Moves `n` steps (negative goes back). */\n next(n = 1) {\n this.setValue(this.items[Math.max(0, Math.min(this.items.length - 1, this.index + n))].value);\n }\n prev(n = 1) {\n this.next(-n);\n }\n nextSnap() {\n this.setValue(this.items[this.snapFrom(this.index, 1)].value);\n }\n prevSnap() {\n this.setValue(this.items[this.snapFrom(this.index, -1)].value);\n }\n\n override getDisplayText(): string {\n return this.items[this.index].label;\n }\n\n private rebuild(patch: Partial<DialConfig>) {\n Object.assign(this.config, patch);\n this.cache = undefined;\n this.value = this.normalize(this.value);\n if (!this.rendered) return;\n this.paintTicks();\n this.shown = '';\n this.readout.replaceChildren();\n this.applyValue(this.value);\n }\n setMin(min: number) {\n this.rebuild({ min });\n }\n setMax(max: number) {\n this.rebuild({ max });\n }\n setStep(step: number) {\n this.rebuild({ step });\n }\n setOptions(options: DialConfig['options']) {\n this.rebuild({ options });\n }\n setSnap(snap: DialConfig['snap']) {\n this.rebuild({ snap });\n }\n setShape(shape: 'linear' | 'circle') {\n this.rebuild({ shape });\n }\n setFormat(format: DialConfig['format']) {\n this.rebuild({ format });\n }\n\n protected override onDisabled(disabled: boolean) {\n this.face.tabIndex = disabled ? -1 : 0;\n this.face.setAttribute('aria-disabled', String(disabled));\n }\n protected override onReadonly(readonly: boolean) {\n this.face.setAttribute('aria-readonly', String(readonly));\n }\n}\nregister('dial', Dial);\n"],
5
+ "mappings": "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",
6
+ "names": ["FLICK", "decimals", "n", "Dial", "Field", "config", "v", "c", "base", "o", "min", "step", "dec", "_", "i", "snap", "major", "first", "list", "it", "h", "e", "label", "show", "tick", "el", "a", "b", "target", "f", "isList", "text", "old", "shape", "s", "ch", "k", "d", "motion", "up", "to", "dir", "r", "sp", "x0", "p0", "moved", "samples", "follow", "m", "raw", "over", "rubberBand", "track", "detach", "u", "ahead", "glide", "from", "end", "ms", "patch", "max", "options", "format", "disabled", "readonly", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as o}from"./chunk-4EZJ5FKJ.js";import{a as d}from"./chunk-A2NKDOYN.js";import{b as e}from"./chunk-PZSHOSOS.js";import{a as h}from"./chunk-TIPK3SCJ.js";import{e as n,f as r}from"./chunk-MW3RWBZ7.js";n("en",{stepOptional:"optional",stepDone:"completed",stepError:"has errors",stepSteps:"Steps"});n("pt-BR",{stepOptional:"opcional",stepDone:"conclu\xEDda",stepError:"com erros",stepSteps:"Etapas"});var a=class extends d{baseCls="op-stepper";tag="nav";list;active=0;states=[];onRender(){let t=this.config;this.active=t.active??0,this.el.setAttribute("aria-label",t.ariaLabel??r("stepSteps")),this.list=e("ol","op-stepper__list"),this.el.append(this.list),this.listen(this.list,"click",i=>{let s=i.target.closest(".op-stepper__btn");if(!s||s.disabled)return;let p=Number(s.dataset.i);this.emit("before-select",p)!==!1&&(this.setActive(p),this.emit("select",p))}),this.paint()}steps(){return this.config.steps??[]}paint(){this.list.replaceChildren(...this.steps().map((t,i)=>{let s=this.states[i]??"pending",p=i===this.active,m=e("span","op-stepper__marker",{"aria-hidden":"true"},s==="done"&&!p?o("check"):s==="error"?"!":t.icon?o(t.icon):String(i+1)),c=s==="done"&&!p?r("stepDone"):s==="error"?r("stepError"):"",l=e("button","op-stepper__btn",{type:"button","data-i":i,"aria-current":p?"step":null},m,e("span","op-stepper__text",{},e("span","op-stepper__title",{},t.title),t.description?e("span","op-stepper__desc",{},t.description):"",t.optional?e("span","op-stepper__opt",{},r("stepOptional")):"",c?e("span","op-sr-only",{},c):""));l.disabled=this.config.clickable===!1;let g=i===this.steps().length-1;return e("li",`op-stepper__step${p?" is-current":""}${s==="done"?" is-done":""}${s==="error"?" is-error":""}${t.optional?" is-optional":""}`,{},l,g?"":e("span","op-stepper__line",{"aria-hidden":"true"}))}))}setActive(t){this.active=Math.max(0,Math.min(t,this.steps().length-1)),this.config.active=this.active,this.rendered&&this.paint()}getActive(){return this.active}setStepState(t,i){this.states[t]=i,this.rendered&&this.paint()}getStepState(t){return this.states[t]??"pending"}setSteps(t){this.config.steps=t,this.states=[],this.rendered&&this.paint()}};h("stepper",a);export{a};
2
+ //# sourceMappingURL=chunk-JOFQJGZK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/navigation/stepper/stepper.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\n\naddMessages('en', {\n stepOptional: 'optional',\n stepDone: 'completed',\n stepError: 'has errors',\n stepSteps: 'Steps',\n});\naddMessages('pt-BR', {\n stepOptional: 'opcional',\n stepDone: 'conclu\u00EDda',\n stepError: 'com erros',\n stepSteps: 'Etapas',\n});\n\nexport interface Step {\n id?: string;\n title: string;\n description?: string;\n icon?: string;\n optional?: boolean;\n}\nexport type StepState = 'pending' | 'done' | 'error';\n\nexport interface StepperConfig extends ComponentConfig {\n steps?: Step[];\n active?: number;\n /** Steps can be clicked. Default true. */\n clickable?: boolean;\n}\n\n/** Where you are in a multi-step process: numbered steps with done / current / error states. */\nexport class Stepper extends Component<StepperConfig> {\n protected override baseCls = 'op-stepper';\n protected override tag = 'nav' as const;\n private list!: HTMLElement;\n private active = 0;\n private states: StepState[] = [];\n\n protected override onRender() {\n const c = this.config;\n this.active = c.active ?? 0;\n this.el.setAttribute('aria-label', c.ariaLabel ?? t('stepSteps'));\n this.list = h('ol', 'op-stepper__list');\n this.el.append(this.list);\n this.listen(this.list, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLButtonElement>('.op-stepper__btn');\n if (!b || b.disabled) return;\n const i = Number(b.dataset.i);\n if (this.emit('before-select', i) === false) return;\n this.setActive(i);\n this.emit('select', i);\n });\n this.paint();\n }\n\n private steps(): Step[] {\n return this.config.steps ?? [];\n }\n\n private paint() {\n this.list.replaceChildren(\n ...this.steps().map((s, i) => {\n const state = this.states[i] ?? 'pending';\n const current = i === this.active;\n const marker = h('span', 'op-stepper__marker', { 'aria-hidden': 'true' }, state === 'done' && !current ? iconEl('check') : state === 'error' ? '!' : s.icon ? iconEl(s.icon) : String(i + 1));\n const status = state === 'done' && !current ? t('stepDone') : state === 'error' ? t('stepError') : '';\n const btn = h('button', 'op-stepper__btn', { type: 'button', 'data-i': i, 'aria-current': current ? 'step' : null }, marker,\n h('span', 'op-stepper__text', {},\n h('span', 'op-stepper__title', {}, s.title),\n s.description ? h('span', 'op-stepper__desc', {}, s.description) : '',\n s.optional ? h('span', 'op-stepper__opt', {}, t('stepOptional')) : '',\n status ? h('span', 'op-sr-only', {}, status) : ''));\n btn.disabled = this.config.clickable === false;\n const last = i === this.steps().length - 1;\n return h('li', `op-stepper__step${current ? ' is-current' : ''}${state === 'done' ? ' is-done' : ''}${state === 'error' ? ' is-error' : ''}${s.optional ? ' is-optional' : ''}`, {}, btn, last ? '' : h('span', 'op-stepper__line', { 'aria-hidden': 'true' }));\n }),\n );\n }\n\n setActive(i: number) {\n this.active = Math.max(0, Math.min(i, this.steps().length - 1));\n this.config.active = this.active;\n if (this.rendered) this.paint();\n }\n getActive(): number {\n return this.active;\n }\n\n setStepState(i: number, state: StepState) {\n this.states[i] = state;\n if (this.rendered) this.paint();\n }\n getStepState(i: number): StepState {\n return this.states[i] ?? 'pending';\n }\n\n setSteps(steps: Step[]) {\n this.config.steps = steps;\n this.states = [];\n if (this.rendered) this.paint();\n }\n}\nregister('stepper', Stepper);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "Stepper", "Component", "c", "t", "h", "e", "b", "i", "s", "state", "current", "marker", "iconEl", "status", "btn", "last", "steps", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as k}from"./chunk-TIPK3SCJ.js";function v(g,o){let n=g.editor;return n&&typeof n=="object"?{...n}:typeof n=="string"?{type:n}:{type:typeof o=="number"?"numberfield":typeof o=="boolean"?"checkbox":"textfield"}}function x(g={}){let o,n,E=(e,t)=>!!e.editor&&(e.editable?.(t)??!0),m=e=>o.getColumns().filter(t=>E(t,e));function p(e){if(!E(e.column,e.record)||o.emit("before-edit",e.record,e.column.field)===!1)return!1;s(!0);let t=e.record.get(e.column.field),r=k({...v(e.column,t),value:t,stableSize:!1,ariaLabel:e.column.header??e.column.field,cls:"op-grid__editor"});return e.el.classList.add("is-editing"),e.el.replaceChildren(r.el),r.notifyMount(),n={cell:e,field:r,old:t},r.focus(),r.el.querySelector("input")?.select(),!0}function s(e){let t=n;if(!t)return!0;if(e&&!t.field.validate())return!1;n=void 0;let r=t.field.getValue();t.field.destroy(),t.cell.el.classList.remove("is-editing");let{record:d,column:c}=t.cell;return e&&!Object.is(r,t.old)?(d.set(c.field,r),o.emit("edit",d,c.field,r,t.old)):(o.refresh(),e||o.emit("edit-cancel",d,c.field)),!0}function C(e){if(!n)return;let t=o.getStore(),r=n.cell.index,d=m(n.cell.record),c=d.indexOf(n.cell.column)+e;for(let f=0;f<500;f++){if(c>=0&&c<d.length){o.scrollToRow(r);let a=o.getCell(r,d[c].field),l=t.getAt(r);return a?{index:r,record:l,column:d[c],el:a}:void 0}r+=e;let u=t.getAt(r);if(!u)return;d=m(u),c=e>0?0:d.length-1}}return{init(e){o=e;let t=e.el,r=t.querySelector("[role=grid]"),d=l=>{let i=e.cellAt(l.target);i&&!(n&&i.el===n.cell.el)&&p(i)},c=l=>{if(n&&n.cell.el.contains(l.target)){if(l.key==="Escape")s(!1);else if(l.key==="Enter"&&!l.shiftKey)s(!0)&&r.focus();else if(l.key==="Tab"){let i=C(l.shiftKey?-1:1);if(!s(!0))return void l.preventDefault();i?p({...i,el:o.getCell(i.index,i.column.field)??i.el}):r.focus()}else return;l.preventDefault(),l.stopPropagation()}else if(l.target===r&&(l.key==="F2"||l.key==="Enter")&&e.getActive()>=0){let i=e.getStore().getAt(e.getActive()),y=m(i)[0],b=y&&e.getCell(e.getActive(),y.field);b&&p({index:e.getActive(),record:i,column:y,el:b})&&(l.preventDefault(),l.stopPropagation())}},f=l=>{if(!n||!n.cell.el.contains(l.target))return;let i=l.relatedTarget;i&&(n.cell.el.contains(i)||i.closest(".op-layer"))||s(!0)},u=t.querySelector(".op-grid__viewport"),a=()=>n&&s(!0);return t.addEventListener(g.trigger==="click"?"click":"dblclick",d),t.addEventListener("keydown",c,!0),t.addEventListener("focusout",f),u.addEventListener("scroll",a,{passive:!0}),()=>{n?.field.destroy(),n=void 0,t.removeEventListener(g.trigger==="click"?"click":"dblclick",d),t.removeEventListener("keydown",c,!0),t.removeEventListener("focusout",f),u.removeEventListener("scroll",a)}}}}export{x as a};
2
+ //# sourceMappingURL=chunk-KCEUD232.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/cellediting/cellediting.ts"],
4
+ "sourcesContent": ["// Inline cell editing for the Grid, as a plugin: `plugins: [cellEditing()]` and `editor` on the columns to edit.\n// Editors are regular fields created by type (`create({ type })`), so this module imports none of them: with\n// per-component imports, import the field types your columns use (`optikos/components/select`...).\nimport { create } from '../../../core/registry';\nimport type { Field } from '../../../core/field';\nimport type { Model } from '../../../data/model';\nimport type { Column } from '../../../data/column';\nimport type { Grid, GridPlugin, GridCell } from '../grid/grid';\n\nexport interface CellEditingOptions {\n /** What starts editing with the pointer: a double click (default) or a single click. F2 and Enter always do. */\n trigger?: 'dblclick' | 'click';\n}\n\ninterface Editing { cell: GridCell; field: Field<any>; old: unknown }\n\n/** The field config for a column's editor: from `editor`, else from the type of the current value. */\nfunction editorConfig(col: Column, value: unknown): Record<string, any> {\n const e = col.editor;\n if (e && typeof e === 'object') return { ...e };\n if (typeof e === 'string') return { type: e };\n return { type: typeof value === 'number' ? 'numberfield' : typeof value === 'boolean' ? 'checkbox' : 'textfield' };\n}\n\n/**\n * Inline editing plugin. Events on the grid: `before-edit(record, field)` (cancelable), `edit(record, field, value, old)`\n * after a valid value was written to the record (`record.set`, so it is marked modified), `edit-cancel(record, field)`.\n */\nexport function cellEditing(options: CellEditingOptions = {}): GridPlugin {\n let grid!: Grid;\n let editing: Editing | undefined;\n\n const editable = (c: Column, rec: Model) => !!c.editor && (c.editable?.(rec) ?? true);\n const editableCols = (rec: Model) => grid.getColumns().filter((c) => editable(c, rec));\n\n function start(cell: GridCell): boolean {\n if (!editable(cell.column, cell.record) || grid.emit('before-edit', cell.record, cell.column.field) === false) return false;\n finish(true);\n const old = cell.record.get(cell.column.field);\n const field = create<Field<any>>({ ...editorConfig(cell.column, old), value: old, stableSize: false, ariaLabel: cell.column.header ?? cell.column.field, cls: 'op-grid__editor' });\n cell.el.classList.add('is-editing');\n cell.el.replaceChildren(field.el);\n field.notifyMount();\n editing = { cell, field, old };\n field.focus();\n field.el.querySelector('input')?.select();\n return true;\n }\n\n /** Commits (or cancels) the current edit. A commit that fails validation keeps the editor open. */\n function finish(commit: boolean): boolean {\n const e = editing;\n if (!e) return true;\n if (commit && !e.field.validate()) return false;\n editing = undefined;\n const value = e.field.getValue();\n e.field.destroy();\n e.cell.el.classList.remove('is-editing');\n const { record, column } = e.cell;\n if (commit && !Object.is(value, e.old)) {\n record.set(column.field, value); // the store re-renders the row\n grid.emit('edit', record, column.field, value, e.old);\n } else {\n grid.refresh(); // puts the cell content back\n if (!commit) grid.emit('edit-cancel', record, column.field);\n }\n return true;\n }\n\n /** The next (or previous) editable cell after the current one, row by row. */\n function step(dir: 1 | -1): GridCell | undefined {\n if (!editing) return;\n const store = grid.getStore();\n let i = editing.cell.index;\n let cols = editableCols(editing.cell.record);\n let c = cols.indexOf(editing.cell.column) + dir;\n for (let guard = 0; guard < 500; guard++) {\n if (c >= 0 && c < cols.length) {\n grid.scrollToRow(i);\n const el = grid.getCell(i, cols[c].field);\n const rec = store.getAt(i)!;\n return el ? { index: i, record: rec, column: cols[c], el } : undefined;\n }\n i += dir;\n const rec = store.getAt(i);\n if (!rec) return;\n cols = editableCols(rec);\n c = dir > 0 ? 0 : cols.length - 1;\n }\n }\n\n return {\n init(g: Grid) {\n grid = g;\n const el = g.el;\n const table = el.querySelector<HTMLElement>('[role=grid]')!;\n const onPointer = (ev: Event) => {\n const cell = g.cellAt(ev.target);\n if (cell && !(editing && cell.el === editing.cell.el)) start(cell);\n };\n // capture: these run before the grid's own key handling (Enter would otherwise activate the row)\n const onKey = (ev: KeyboardEvent) => {\n if (editing && editing.cell.el.contains(ev.target as Node)) {\n if (ev.key === 'Escape') finish(false);\n else if (ev.key === 'Enter' && !ev.shiftKey) finish(true) && table.focus();\n else if (ev.key === 'Tab') {\n const next = step(ev.shiftKey ? -1 : 1);\n if (!finish(true)) return void ev.preventDefault();\n if (next) start({ ...next, el: grid.getCell(next.index, next.column.field) ?? next.el });\n else table.focus();\n } else return;\n ev.preventDefault();\n ev.stopPropagation();\n } else if (ev.target === table && (ev.key === 'F2' || ev.key === 'Enter') && g.getActive() >= 0) {\n const rec = g.getStore().getAt(g.getActive())!;\n const col = editableCols(rec)[0];\n const cellEl = col && g.getCell(g.getActive(), col.field);\n if (cellEl && start({ index: g.getActive(), record: rec, column: col, el: cellEl })) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n }\n };\n // leaving the cell commits, unless the focus went into the editor's own popup (a select list, a calendar)\n const onFocusOut = (ev: FocusEvent) => {\n if (!editing || !editing.cell.el.contains(ev.target as Node)) return;\n const to = ev.relatedTarget as HTMLElement | null;\n if (to && (editing.cell.el.contains(to) || to.closest('.op-layer'))) return;\n finish(true);\n };\n const viewport = el.querySelector<HTMLElement>('.op-grid__viewport')!;\n const onScroll = () => editing && finish(true);\n el.addEventListener(options.trigger === 'click' ? 'click' : 'dblclick', onPointer);\n el.addEventListener('keydown', onKey, true);\n el.addEventListener('focusout', onFocusOut);\n viewport.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n editing?.field.destroy();\n editing = undefined;\n el.removeEventListener(options.trigger === 'click' ? 'click' : 'dblclick', onPointer);\n el.removeEventListener('keydown', onKey, true);\n el.removeEventListener('focusout', onFocusOut);\n viewport.removeEventListener('scroll', onScroll);\n };\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["editorConfig", "col", "value", "e", "cellEditing", "options", "grid", "editing", "editable", "c", "rec", "editableCols", "start", "cell", "finish", "old", "field", "create", "commit", "record", "column", "step", "dir", "store", "i", "cols", "guard", "el", "g", "table", "onPointer", "ev", "onKey", "next", "cellEl", "onFocusOut", "to", "viewport", "onScroll"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as m}from"./chunk-4LZZ244E.js";import{a as x}from"./chunk-YHEMA56R.js";import{a as p}from"./chunk-W3H7GTJY.js";import{c}from"./chunk-ZWNQREWS.js";import{d}from"./chunk-4EZJ5FKJ.js";import{f as r}from"./chunk-MW3RWBZ7.js";function s(t){return new Promise(e=>{let a=!1,l=o=>{a||(a=!0,e(o))},i=t.input?new p({value:t.input.value??"",placeholder:t.input.placeholder,validators:t.input.validators,ariaLabel:t.text}):void 0,u=new x({text:t.text,flex:1}),n=new m({title:t.title,cls:"op-messagebox",closeAction:"destroy",mask:t.mask??!1,autoFocus:!!t.input?.autoFocus,items:[new c({layout:{type:"hbox",gap:12,align:"flex-start"},items:[...t.icon?[new d({name:t.icon,cls:"op-messagebox__icon"})]:[],new c({layout:{type:"vbox"},flex:1,items:[u,...i?[i]:[]]})]})],buttons:t.buttons.map(o=>({text:o.text,variant:o.variant??"default",handler:()=>{t.beforeClose?.(o.id,n,i)!==!1&&(l(o.id),n.close())}}))});n.el.setAttribute("role",t.input?"dialog":"alertdialog"),n.el.setAttribute("aria-describedby",u.id),n.on("close",()=>l(t.cancelId??t.buttons[t.buttons.length-1].id));let g=t.buttons.find(o=>o.variant==="primary"||o.variant==="danger");i?.on("enter",()=>n.el.querySelectorAll(".op-panel__footer button")[t.buttons.indexOf(g??t.buttons[0])].click()),n.show(),i||n.el.querySelector(".op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger")?.focus()})}var T={show:s,async alert(t,e={}){await s({text:t,title:e.title,mask:e.mask,icon:e.icon??"info",buttons:[{id:"ok",text:e.okText??r("ok"),variant:"primary"}],cancelId:"ok"})},async confirm(t,e={}){return await s({text:t,title:e.title,mask:e.mask,icon:e.icon??(e.danger?"alert":"info"),buttons:[{id:"cancel",text:e.cancelText??r("cancel")},{id:"ok",text:e.okText??r("ok"),variant:e.danger?"danger":"primary"}],cancelId:"cancel"})==="ok"},async prompt(t,e={}){let a=null;return await s({text:t,title:e.title,mask:e.mask,input:{value:e.value,placeholder:e.placeholder,validators:e.validators,autoFocus:e.autoFocus},buttons:[{id:"cancel",text:e.cancelText??r("cancel")},{id:"ok",text:e.okText??r("ok"),variant:"primary"}],cancelId:"cancel",beforeClose:(i,u,n)=>{if(i==="ok"){if(!n.validate())return!1;a=n.getValue()}}})==="ok"?a:null}};export{T as a};
2
+ //# sourceMappingURL=chunk-KLLAY2IM.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/overlays/messagebox/messagebox.ts"],
4
+ "sourcesContent": ["import { Window } from '../window/window';\nimport { Label } from '../../base/label/label';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Container } from '../../../core/container';\nimport { Icon } from '../../base/icon/icon';\nimport { t } from '../../../core/i18n';\nimport type { Validator } from '../../../core/validators';\n\nexport interface MessageBoxButton {\n id: string;\n text: string;\n variant?: 'default' | 'primary' | 'danger';\n}\n\nexport interface MessageBoxConfig {\n text: string;\n title?: string;\n icon?: string;\n buttons: MessageBoxButton[];\n /** Resolved when closed with Esc or the close button. */\n cancelId?: string;\n /** Adds a text input; `show` then resolves with the button id and the input is read by `prompt`. */\n input?: { value?: string; placeholder?: string; validators?: Validator<string>[]; autoFocus?: boolean };\n /** Called with the pressed button id before closing; return `false` to keep the dialog open. */\n beforeClose?: (id: string, win: Window, input?: TextField) => boolean | void;\n /** Dim the page behind. Default false: a message is still modal, but it does not darken the screen. */\n mask?: boolean;\n}\n\nfunction open(cfg: MessageBoxConfig): Promise<string> {\n return new Promise((resolve) => {\n let done = false;\n const finish = (id: string) => {\n if (done) return;\n done = true;\n resolve(id);\n };\n const field = cfg.input ? new TextField({ value: cfg.input.value ?? '', placeholder: cfg.input.placeholder, validators: cfg.input.validators, ariaLabel: cfg.text }) : undefined;\n const message = new Label({ text: cfg.text, flex: 1 });\n const win: Window = new Window({\n title: cfg.title,\n cls: 'op-messagebox',\n closeAction: 'destroy',\n mask: cfg.mask ?? false,\n autoFocus: !!cfg.input?.autoFocus,\n items: [\n new Container({\n layout: { type: 'hbox', gap: 12, align: 'flex-start' },\n items: [...(cfg.icon ? [new Icon({ name: cfg.icon, cls: 'op-messagebox__icon' })] : []), new Container({ layout: { type: 'vbox' }, flex: 1, items: [message, ...(field ? [field] : [])] })],\n }),\n ],\n buttons: cfg.buttons.map((b) => ({\n text: b.text,\n variant: b.variant ?? 'default',\n handler: () => {\n if (cfg.beforeClose?.(b.id, win, field) === false) return;\n finish(b.id);\n win.close();\n },\n })),\n });\n win.el.setAttribute('role', cfg.input ? 'dialog' : 'alertdialog');\n win.el.setAttribute('aria-describedby', message.id);\n win.on('close', () => finish(cfg.cancelId ?? cfg.buttons[cfg.buttons.length - 1].id));\n const primary = cfg.buttons.find((b) => b.variant === 'primary' || b.variant === 'danger');\n field?.on('enter', () => (win.el.querySelectorAll('.op-panel__footer button')[cfg.buttons.indexOf(primary ?? cfg.buttons[0])] as HTMLElement).click());\n win.show();\n // the primary action takes the initial focus unless there is an input\n if (!field) win.el.querySelector<HTMLElement>('.op-panel__footer .op-button--primary, .op-panel__footer .op-button--danger')?.focus();\n });\n}\n\nexport interface AlertOptions {\n title?: string;\n mask?: boolean;\n okText?: string;\n icon?: string;\n}\nexport interface ConfirmOptions {\n title?: string;\n mask?: boolean;\n okText?: string;\n cancelText?: string;\n danger?: boolean;\n icon?: string;\n}\nexport interface PromptOptions {\n title?: string;\n mask?: boolean;\n value?: string;\n placeholder?: string;\n okText?: string;\n cancelText?: string;\n validators?: Validator<string>[];\n /** Focus the text field on open (a phone keyboard pops up). Default false: the dialog gets the focus. */\n autoFocus?: boolean;\n}\n\nexport const MessageBox = {\n show: open,\n\n async alert(text: string, o: AlertOptions = {}): Promise<void> {\n await open({ text, title: o.title, mask: o.mask, icon: o.icon ?? 'info', buttons: [{ id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' }], cancelId: 'ok' });\n },\n\n async confirm(text: string, o: ConfirmOptions = {}): Promise<boolean> {\n const id = await open({\n text,\n title: o.title,\n mask: o.mask,\n icon: o.icon ?? (o.danger ? 'alert' : 'info'),\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: o.danger ? 'danger' : 'primary' },\n ],\n cancelId: 'cancel',\n });\n return id === 'ok';\n },\n\n /** Resolves with the text, or `null` when cancelled. The dialog stays open while the validators fail. */\n async prompt(text: string, o: PromptOptions = {}): Promise<string | null> {\n let value: string | null = null;\n const id = await open({\n text,\n title: o.title,\n mask: o.mask,\n input: { value: o.value, placeholder: o.placeholder, validators: o.validators, autoFocus: o.autoFocus },\n buttons: [\n { id: 'cancel', text: o.cancelText ?? t('cancel') },\n { id: 'ok', text: o.okText ?? t('ok'), variant: 'primary' },\n ],\n cancelId: 'cancel',\n beforeClose: (btn, _win, field) => {\n if (btn !== 'ok') return;\n if (!field!.validate()) return false;\n value = field!.getValue();\n },\n });\n return id === 'ok' ? value : null;\n },\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["open", "cfg", "resolve", "done", "finish", "id", "field", "TextField", "message", "Label", "win", "Window", "Container", "Icon", "b", "primary", "MessageBox", "text", "o", "t", "value", "btn", "_win"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as v}from"./chunk-ZWNQREWS.js";import{a as m}from"./chunk-2ZRNGG2N.js";import{c as u}from"./chunk-4EZJ5FKJ.js";import{a as w}from"./chunk-A2NKDOYN.js";import{b as r}from"./chunk-PZSHOSOS.js";import{a as y}from"./chunk-TIPK3SCJ.js";import{e as p,f as l}from"./chunk-MW3RWBZ7.js";p("en",{flAdd:"Add",flRemove:"Remove {row}",flUp:"Move {row} up",flDown:"Move {row} down",flEmpty:"Nothing added yet",flMin:"Add at least {n}",flMax:"At most {n}"});p("pt-BR",{flAdd:"Adicionar",flRemove:"Remover {row}",flUp:"Subir {row}",flDown:"Descer {row}",flEmpty:"Nada adicionado ainda",flMin:"Adicione pelo menos {n}",flMax:"No m\xE1ximo {n}"});var C=(a,t)=>t.split(".").reduce((e,o)=>e?.[o],a);function A(a,t,e){let o=t.split("."),s=o.pop();o.reduce((i,n)=>i[n]??={},a)[s]=e}var g=class extends m{baseCls="op-field op-fieldlist";rowsEl;addBtn;emptyEl;rows=[];syncing=!1;emptyValue(){return[]}isEmpty(t){return!t?.length}createControl(){return this.rowsEl=r("div","op-fieldlist__rows",{role:"group"}),this.emptyEl=r("div","op-fieldlist__empty",{},l("flEmpty")),this.addBtn=r("button","op-fieldlist__add",{type:"button"},u("plus"),r("span","",{},this.config.addText??l("flAdd"))),this.listen(this.addBtn,"click",()=>this.addRow()),this.inputEl=this.addBtn,r("div","op-fieldlist__box",{},this.rowsEl,this.emptyEl,this.addBtn)}onRender(){super.onRender(),this.rowsEl.setAttribute("aria-labelledby",this.el.querySelector(".op-field__label").id||=`${this.id}-label`)}label(t){return`${this.config.label??""} ${t+1}`.trim()}makeRow(t){let e=s=>{let i=s instanceof w?s.config:s,n={...i,...Array.isArray(i.items)?{items:i.items.map(e)}:{}};return s instanceof w?new s.constructor(n):n},o=new v({cls:"op-fieldlist__row",layout:this.config.rowLayout??{type:"hbox",align:"flex-start"},items:(this.config.items??[]).map(e)});for(let s of o.items)s.config.width!=null&&s.config.flex==null&&(s.config.flex="none");for(let s of this.rowFields(o)){let i=s.name?C(t,s.name):void 0;i!==void 0&&s.setValue(i,!0),s.on("change",()=>this.syncing||this.commitRows())}return o}rowFields(t){return t.query(e=>e instanceof m)}collect(){return this.rows.map(t=>{let e={};for(let o of this.rowFields(t))o.name&&A(e,o.name,o.getValue());return e})}commitRows(){this.commit(this.collect()),this.paintRows(),this.getError()&&this.validate()}paintRows(){if(!this.rendered)return;let{min:t=0,max:e=1/0,reorderable:o=!0}=this.config;this.rowsEl.replaceChildren(...this.rows.map((s,i)=>{let n=s.el;n.setAttribute("role","group"),n.setAttribute("aria-label",this.label(i)),n.classList.toggle("is-first",i===0),n.querySelector(":scope > .op-fieldlist__tools")?.remove();let d=(b,f,R,E)=>{let c=r("button","op-fieldlist__tool",{type:"button","data-act":f,"aria-label":l(f,{row:this.label(i)}),"data-op-tip":l(f,{row:this.label(i)})},u(b));return c.disabled=R||!!this.config.disabled||!!this.config.readonly,c.addEventListener("click",E),c},h=r("div","op-fieldlist__tools");return o&&h.append(d("chevron-up","flUp",i===0,()=>this.moveRow(i,i-1)),d("chevron-down","flDown",i===this.rows.length-1,()=>this.moveRow(i,i+1))),h.append(d("trash","flRemove",this.rows.length<=t,()=>this.removeRow(i))),n.append(h),n})),this.emptyEl.hidden=this.rows.length>0,this.el.classList.toggle("is-empty",!this.rows.length),this.addBtn.disabled=this.rows.length>=e||!!this.config.disabled||!!this.config.readonly}applyValue(t){this.syncing=!0,this.rows.forEach(o=>o.destroy()),this.rows=(t??[]).map(o=>this.makeRow(o)),this.syncing=!1;let e=this.isEqual(this.original,t);this.value=this.collect(),e&&(this.original=this.value),this.paintRows()}addRow(t){let e=this.config.max??1/0;if(this.rows.length>=e)return;let o=this.config.newRow;this.rows.push(this.makeRow(t??(typeof o=="function"?o():{...o}))),this.commitRows(),this.emit("add",this.rows.length-1),this.rowFields(this.rows[this.rows.length-1])[0]?.focus()}removeRow(t){if(!this.rows[t]||this.rows.length<=(this.config.min??0)||this.emit("before-remove",t)===!1)return;let[e]=this.rows.splice(t,1);e.destroy(),this.commitRows(),this.emit("remove",t);let o=this.rows[Math.min(t,this.rows.length-1)];o?this.rowFields(o)[0]?.focus():this.rendered&&this.addBtn.focus()}moveRow(t,e){if(!this.rows[t]||e<0||e>=this.rows.length||t===e)return;let[o]=this.rows.splice(t,1);this.rows.splice(e,0,o),this.commitRows(),this.emit("move",t,e);let s=["flUp","flDown"].map(i=>o.el.querySelector(`[data-act="${i}"]`));(e<t?s:s.reverse()).find(i=>i&&!i.disabled)?.focus()}getRows(){return this.rows}getRowFields(t){return this.rows[t]?this.rowFields(this.rows[t]):[]}setAddText(t){this.config.addText=t,this.rendered&&(this.addBtn.lastElementChild.textContent=t)}setMin(t){this.config.min=t,this.paintRows()}setMax(t){this.config.max=t,this.paintRows()}check(){let t=this.value?.length??0,{min:e=0,max:o=1/0}=this.config;return t&&t<e?l("flMin",{n:e}):t>o?l("flMax",{n:o}):super.check()}validate(){let t=this.rows.flatMap(e=>this.rowFields(e)).map(e=>e.validate()).every(Boolean);return super.validate()&&t}isValid(){return super.isValid()&&this.rows.every(t=>this.rowFields(t).every(e=>e.isValid()))}focus(){let t=this.rows.flatMap(e=>this.rowFields(e)).find(e=>e.getError());t?t.focus():this.addBtn?.focus()}onDisabled(t){this.rows.forEach(e=>e.setDisabled(t)),this.paintRows()}onReadonly(t){this.rows.forEach(e=>this.rowFields(e).forEach(o=>o.setReadonly(t))),this.paintRows()}onDestroy(){this.rows.forEach(t=>t.destroy()),super.onDestroy()}};y("fieldlist",g);export{g as a};
2
+ //# sourceMappingURL=chunk-LBJSMXLV.js.map