optikos 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/LICENSE +21 -0
  3. package/README.md +213 -2
  4. package/THIRD_PARTY_NOTICES.md +83 -0
  5. package/dist/bind.js +2 -0
  6. package/dist/bind.js.map +7 -0
  7. package/dist/chunk-23XLG2EM.js +2 -0
  8. package/dist/chunk-23XLG2EM.js.map +7 -0
  9. package/dist/chunk-27UZFEXD.js +2 -0
  10. package/dist/chunk-27UZFEXD.js.map +7 -0
  11. package/dist/chunk-2UPUC4RK.js +2 -0
  12. package/dist/chunk-2UPUC4RK.js.map +7 -0
  13. package/dist/chunk-2ZRNGG2N.js +2 -0
  14. package/dist/chunk-2ZRNGG2N.js.map +7 -0
  15. package/dist/chunk-2ZUZ5HDL.js +2 -0
  16. package/dist/chunk-2ZUZ5HDL.js.map +7 -0
  17. package/dist/chunk-3DBEZGOY.js +2 -0
  18. package/dist/chunk-3DBEZGOY.js.map +7 -0
  19. package/dist/chunk-3S24ZRPK.js +2 -0
  20. package/dist/chunk-3S24ZRPK.js.map +7 -0
  21. package/dist/chunk-3TAW4AKH.js +2 -0
  22. package/dist/chunk-3TAW4AKH.js.map +7 -0
  23. package/dist/chunk-4AA4FQEM.js +2 -0
  24. package/dist/chunk-4AA4FQEM.js.map +7 -0
  25. package/dist/chunk-4C666HHU.js +2 -0
  26. package/dist/chunk-4C666HHU.js.map +7 -0
  27. package/dist/chunk-4EZJ5FKJ.js +2 -0
  28. package/dist/chunk-4EZJ5FKJ.js.map +7 -0
  29. package/dist/chunk-4LZZ244E.js +2 -0
  30. package/dist/chunk-4LZZ244E.js.map +7 -0
  31. package/dist/chunk-4SYIIX5A.js +2 -0
  32. package/dist/chunk-4SYIIX5A.js.map +7 -0
  33. package/dist/chunk-5BC72727.js +2 -0
  34. package/dist/chunk-5BC72727.js.map +7 -0
  35. package/dist/chunk-5DJTP53N.js +2 -0
  36. package/dist/chunk-5DJTP53N.js.map +7 -0
  37. package/dist/chunk-5JEXM5S7.js +2 -0
  38. package/dist/chunk-5JEXM5S7.js.map +7 -0
  39. package/dist/chunk-5Q76ACVI.js +2 -0
  40. package/dist/chunk-5Q76ACVI.js.map +7 -0
  41. package/dist/chunk-5QUY72FX.js +2 -0
  42. package/dist/chunk-5QUY72FX.js.map +7 -0
  43. package/dist/chunk-5YS7OD5E.js +2 -0
  44. package/dist/chunk-5YS7OD5E.js.map +7 -0
  45. package/dist/chunk-676AKAGF.js +2 -0
  46. package/dist/chunk-676AKAGF.js.map +7 -0
  47. package/dist/chunk-6NCXO5ZP.js +2 -0
  48. package/dist/chunk-6NCXO5ZP.js.map +7 -0
  49. package/dist/chunk-6VBK2I5B.js +2 -0
  50. package/dist/chunk-6VBK2I5B.js.map +7 -0
  51. package/dist/chunk-7KMIFXHZ.js +2 -0
  52. package/dist/chunk-7KMIFXHZ.js.map +7 -0
  53. package/dist/chunk-A2NKDOYN.js +2 -0
  54. package/dist/chunk-A2NKDOYN.js.map +7 -0
  55. package/dist/chunk-ATFJ7PNA.js +2 -0
  56. package/dist/chunk-ATFJ7PNA.js.map +7 -0
  57. package/dist/chunk-BXYWVRKJ.js +2 -0
  58. package/dist/chunk-BXYWVRKJ.js.map +7 -0
  59. package/dist/chunk-CKXS375P.js +2 -0
  60. package/dist/chunk-CKXS375P.js.map +7 -0
  61. package/dist/chunk-CUN5QO4T.js +2 -0
  62. package/dist/chunk-CUN5QO4T.js.map +7 -0
  63. package/dist/chunk-DBMWS3O5.js +2 -0
  64. package/dist/chunk-DBMWS3O5.js.map +7 -0
  65. package/dist/chunk-E4VNLYO2.js +2 -0
  66. package/dist/chunk-E4VNLYO2.js.map +7 -0
  67. package/dist/chunk-EDUMAMK4.js +2 -0
  68. package/dist/chunk-EDUMAMK4.js.map +7 -0
  69. package/dist/chunk-ELYARUCN.js +2 -0
  70. package/dist/chunk-ELYARUCN.js.map +7 -0
  71. package/dist/chunk-EV73ADN2.js +2 -0
  72. package/dist/chunk-EV73ADN2.js.map +7 -0
  73. package/dist/chunk-FEHGU6EP.js +3 -0
  74. package/dist/chunk-FEHGU6EP.js.map +7 -0
  75. package/dist/chunk-FHM5NUS4.js +3 -0
  76. package/dist/chunk-FHM5NUS4.js.map +7 -0
  77. package/dist/chunk-G2DAD3MQ.js +2 -0
  78. package/dist/chunk-G2DAD3MQ.js.map +7 -0
  79. package/dist/chunk-G2KUK6AT.js +2 -0
  80. package/dist/chunk-G2KUK6AT.js.map +7 -0
  81. package/dist/chunk-GBPLNXMP.js +2 -0
  82. package/dist/chunk-GBPLNXMP.js.map +7 -0
  83. package/dist/chunk-GNU4VOOE.js +2 -0
  84. package/dist/chunk-GNU4VOOE.js.map +7 -0
  85. package/dist/chunk-GZ7X34QP.js +2 -0
  86. package/dist/chunk-GZ7X34QP.js.map +7 -0
  87. package/dist/chunk-HOF4JGMQ.js +2 -0
  88. package/dist/chunk-HOF4JGMQ.js.map +7 -0
  89. package/dist/chunk-HXDTGP2K.js +2 -0
  90. package/dist/chunk-HXDTGP2K.js.map +7 -0
  91. package/dist/chunk-I4SP6JTU.js +2 -0
  92. package/dist/chunk-I4SP6JTU.js.map +7 -0
  93. package/dist/chunk-IHE2MQ3W.js +2 -0
  94. package/dist/chunk-IHE2MQ3W.js.map +7 -0
  95. package/dist/chunk-II6ITOA6.js +2 -0
  96. package/dist/chunk-II6ITOA6.js.map +7 -0
  97. package/dist/chunk-JBLRAM7Z.js +2 -0
  98. package/dist/chunk-JBLRAM7Z.js.map +7 -0
  99. package/dist/chunk-JI265XFO.js +2 -0
  100. package/dist/chunk-JI265XFO.js.map +7 -0
  101. package/dist/chunk-JK74QK3M.js +2 -0
  102. package/dist/chunk-JK74QK3M.js.map +7 -0
  103. package/dist/chunk-JOFQJGZK.js +2 -0
  104. package/dist/chunk-JOFQJGZK.js.map +7 -0
  105. package/dist/chunk-KCEUD232.js +2 -0
  106. package/dist/chunk-KCEUD232.js.map +7 -0
  107. package/dist/chunk-KLLAY2IM.js +2 -0
  108. package/dist/chunk-KLLAY2IM.js.map +7 -0
  109. package/dist/chunk-LBJSMXLV.js +2 -0
  110. package/dist/chunk-LBJSMXLV.js.map +7 -0
  111. package/dist/chunk-LQRFNQ2N.js +2 -0
  112. package/dist/chunk-LQRFNQ2N.js.map +7 -0
  113. package/dist/chunk-LW2WRUVL.js +2 -0
  114. package/dist/chunk-LW2WRUVL.js.map +7 -0
  115. package/dist/chunk-M242VYZA.js +2 -0
  116. package/dist/chunk-M242VYZA.js.map +7 -0
  117. package/dist/chunk-MB3MU6HR.js +2 -0
  118. package/dist/chunk-MB3MU6HR.js.map +7 -0
  119. package/dist/chunk-MW3RWBZ7.js +2 -0
  120. package/dist/chunk-MW3RWBZ7.js.map +7 -0
  121. package/dist/chunk-NXSTUFS7.js +2 -0
  122. package/dist/chunk-NXSTUFS7.js.map +7 -0
  123. package/dist/chunk-OEAXCCVM.js +2 -0
  124. package/dist/chunk-OEAXCCVM.js.map +7 -0
  125. package/dist/chunk-OGRFQTXA.js +2 -0
  126. package/dist/chunk-OGRFQTXA.js.map +7 -0
  127. package/dist/chunk-OWEQT2HN.js +2 -0
  128. package/dist/chunk-OWEQT2HN.js.map +7 -0
  129. package/dist/chunk-PZSHOSOS.js +2 -0
  130. package/dist/chunk-PZSHOSOS.js.map +7 -0
  131. package/dist/chunk-REW4LR46.js +2 -0
  132. package/dist/chunk-REW4LR46.js.map +7 -0
  133. package/dist/chunk-RNN55473.js +2 -0
  134. package/dist/chunk-RNN55473.js.map +7 -0
  135. package/dist/chunk-SA53QUBF.js +2 -0
  136. package/dist/chunk-SA53QUBF.js.map +7 -0
  137. package/dist/chunk-TIPK3SCJ.js +2 -0
  138. package/dist/chunk-TIPK3SCJ.js.map +7 -0
  139. package/dist/chunk-TOLTUOZS.js +2 -0
  140. package/dist/chunk-TOLTUOZS.js.map +7 -0
  141. package/dist/chunk-TZOQWCVH.js +2 -0
  142. package/dist/chunk-TZOQWCVH.js.map +7 -0
  143. package/dist/chunk-VF7BGP6L.js +2 -0
  144. package/dist/chunk-VF7BGP6L.js.map +7 -0
  145. package/dist/chunk-VU3GIDZ3.js +2 -0
  146. package/dist/chunk-VU3GIDZ3.js.map +7 -0
  147. package/dist/chunk-VV7CFMPZ.js +2 -0
  148. package/dist/chunk-VV7CFMPZ.js.map +7 -0
  149. package/dist/chunk-W3H7GTJY.js +2 -0
  150. package/dist/chunk-W3H7GTJY.js.map +7 -0
  151. package/dist/chunk-X2ASKUFD.js +2 -0
  152. package/dist/chunk-X2ASKUFD.js.map +7 -0
  153. package/dist/chunk-X6AULZI4.js +1 -0
  154. package/dist/chunk-X6AULZI4.js.map +7 -0
  155. package/dist/chunk-XHOBNSBO.js +2 -0
  156. package/dist/chunk-XHOBNSBO.js.map +7 -0
  157. package/dist/chunk-XX2MVWFS.js +4 -0
  158. package/dist/chunk-XX2MVWFS.js.map +7 -0
  159. package/dist/chunk-XYZ6VZ5T.js +2 -0
  160. package/dist/chunk-XYZ6VZ5T.js.map +7 -0
  161. package/dist/chunk-YBAYEU25.js +2 -0
  162. package/dist/chunk-YBAYEU25.js.map +7 -0
  163. package/dist/chunk-YHEMA56R.js +2 -0
  164. package/dist/chunk-YHEMA56R.js.map +7 -0
  165. package/dist/chunk-Z2JBUHKA.js +2 -0
  166. package/dist/chunk-Z2JBUHKA.js.map +7 -0
  167. package/dist/chunk-Z2Z52GFT.js +2 -0
  168. package/dist/chunk-Z2Z52GFT.js.map +7 -0
  169. package/dist/chunk-ZPPELYNJ.js +2 -0
  170. package/dist/chunk-ZPPELYNJ.js.map +7 -0
  171. package/dist/chunk-ZVK4L5GK.js +2 -0
  172. package/dist/chunk-ZVK4L5GK.js.map +7 -0
  173. package/dist/chunk-ZWNQREWS.js +2 -0
  174. package/dist/chunk-ZWNQREWS.js.map +7 -0
  175. package/dist/components/badge.js +2 -0
  176. package/dist/components/badge.js.map +7 -0
  177. package/dist/components/breadcrumb.js +2 -0
  178. package/dist/components/breadcrumb.js.map +7 -0
  179. package/dist/components/button.js +2 -0
  180. package/dist/components/button.js.map +7 -0
  181. package/dist/components/calendar.js +2 -0
  182. package/dist/components/calendar.js.map +7 -0
  183. package/dist/components/cellediting.js +2 -0
  184. package/dist/components/cellediting.js.map +7 -0
  185. package/dist/components/chat.js +2 -0
  186. package/dist/components/chat.js.map +7 -0
  187. package/dist/components/checkbox.js +2 -0
  188. package/dist/components/checkbox.js.map +7 -0
  189. package/dist/components/checkboxgroup.js +2 -0
  190. package/dist/components/checkboxgroup.js.map +7 -0
  191. package/dist/components/chip.js +2 -0
  192. package/dist/components/chip.js.map +7 -0
  193. package/dist/components/codeviewer.js +2 -0
  194. package/dist/components/codeviewer.js.map +7 -0
  195. package/dist/components/combobox.js +2 -0
  196. package/dist/components/combobox.js.map +7 -0
  197. package/dist/components/commandpalette.js +2 -0
  198. package/dist/components/commandpalette.js.map +7 -0
  199. package/dist/components/container.js +2 -0
  200. package/dist/components/container.js.map +7 -0
  201. package/dist/components/dataview.js +2 -0
  202. package/dist/components/dataview.js.map +7 -0
  203. package/dist/components/datefield.js +2 -0
  204. package/dist/components/datefield.js.map +7 -0
  205. package/dist/components/daterangefield.js +2 -0
  206. package/dist/components/daterangefield.js.map +7 -0
  207. package/dist/components/dial.js +2 -0
  208. package/dist/components/dial.js.map +7 -0
  209. package/dist/components/dropdown.js +2 -0
  210. package/dist/components/dropdown.js.map +7 -0
  211. package/dist/components/fieldgroup.js +2 -0
  212. package/dist/components/fieldgroup.js.map +7 -0
  213. package/dist/components/fieldlist.js +2 -0
  214. package/dist/components/fieldlist.js.map +7 -0
  215. package/dist/components/fieldset.js +2 -0
  216. package/dist/components/fieldset.js.map +7 -0
  217. package/dist/components/filterbuilder.js +2 -0
  218. package/dist/components/filterbuilder.js.map +7 -0
  219. package/dist/components/form.js +2 -0
  220. package/dist/components/form.js.map +7 -0
  221. package/dist/components/formactions.js +2 -0
  222. package/dist/components/formactions.js.map +7 -0
  223. package/dist/components/formerrors.js +2 -0
  224. package/dist/components/formerrors.js.map +7 -0
  225. package/dist/components/formsection.js +2 -0
  226. package/dist/components/formsection.js.map +7 -0
  227. package/dist/components/grid.js +2 -0
  228. package/dist/components/grid.js.map +7 -0
  229. package/dist/components/icon.js +2 -0
  230. package/dist/components/icon.js.map +7 -0
  231. package/dist/components/inputgroup.js +2 -0
  232. package/dist/components/inputgroup.js.map +7 -0
  233. package/dist/components/label.js +2 -0
  234. package/dist/components/label.js.map +7 -0
  235. package/dist/components/listbox.js +2 -0
  236. package/dist/components/listbox.js.map +7 -0
  237. package/dist/components/lookupfield.js +2 -0
  238. package/dist/components/lookupfield.js.map +7 -0
  239. package/dist/components/menu.js +2 -0
  240. package/dist/components/menu.js.map +7 -0
  241. package/dist/components/messagebox.js +2 -0
  242. package/dist/components/messagebox.js.map +7 -0
  243. package/dist/components/navmenu.js +2 -0
  244. package/dist/components/navmenu.js.map +7 -0
  245. package/dist/components/numberfield.js +2 -0
  246. package/dist/components/numberfield.js.map +7 -0
  247. package/dist/components/pagination.js +2 -0
  248. package/dist/components/pagination.js.map +7 -0
  249. package/dist/components/panel.js +2 -0
  250. package/dist/components/panel.js.map +7 -0
  251. package/dist/components/pickerfield.js +2 -0
  252. package/dist/components/pickerfield.js.map +7 -0
  253. package/dist/components/radiogroup.js +2 -0
  254. package/dist/components/radiogroup.js.map +7 -0
  255. package/dist/components/searchgrid.js +2 -0
  256. package/dist/components/searchgrid.js.map +7 -0
  257. package/dist/components/secretfield.js +2 -0
  258. package/dist/components/secretfield.js.map +7 -0
  259. package/dist/components/select.js +2 -0
  260. package/dist/components/select.js.map +7 -0
  261. package/dist/components/slider.js +2 -0
  262. package/dist/components/slider.js.map +7 -0
  263. package/dist/components/spacer.js +2 -0
  264. package/dist/components/spacer.js.map +7 -0
  265. package/dist/components/spinner.js +2 -0
  266. package/dist/components/spinner.js.map +7 -0
  267. package/dist/components/stepform.js +2 -0
  268. package/dist/components/stepform.js.map +7 -0
  269. package/dist/components/stepper.js +2 -0
  270. package/dist/components/stepper.js.map +7 -0
  271. package/dist/components/suggestfield.js +2 -0
  272. package/dist/components/suggestfield.js.map +7 -0
  273. package/dist/components/table.js +2 -0
  274. package/dist/components/table.js.map +7 -0
  275. package/dist/components/tabs.js +2 -0
  276. package/dist/components/tabs.js.map +7 -0
  277. package/dist/components/textarea.js +2 -0
  278. package/dist/components/textarea.js.map +7 -0
  279. package/dist/components/textfield.js +2 -0
  280. package/dist/components/textfield.js.map +7 -0
  281. package/dist/components/toast.js +2 -0
  282. package/dist/components/toast.js.map +7 -0
  283. package/dist/components/toggle.js +2 -0
  284. package/dist/components/toggle.js.map +7 -0
  285. package/dist/components/toolbar.js +2 -0
  286. package/dist/components/toolbar.js.map +7 -0
  287. package/dist/components/tooltip.js +2 -0
  288. package/dist/components/tooltip.js.map +7 -0
  289. package/dist/components/tree.js +2 -0
  290. package/dist/components/tree.js.map +7 -0
  291. package/dist/components/viewmanager.js +2 -0
  292. package/dist/components/viewmanager.js.map +7 -0
  293. package/dist/components/viewport.js +2 -0
  294. package/dist/components/viewport.js.map +7 -0
  295. package/dist/components/widget.js +2 -0
  296. package/dist/components/widget.js.map +7 -0
  297. package/dist/components/window.js +2 -0
  298. package/dist/components/window.js.map +7 -0
  299. package/dist/core.js +2 -0
  300. package/dist/core.js.map +7 -0
  301. package/dist/css/badge.css +39 -0
  302. package/dist/css/base.css +180 -0
  303. package/dist/css/breadcrumb.css +53 -0
  304. package/dist/css/button.css +103 -0
  305. package/dist/css/calendar.css +108 -0
  306. package/dist/css/cellediting.css +33 -0
  307. package/dist/css/chat.css +232 -0
  308. package/dist/css/checkbox.css +64 -0
  309. package/dist/css/checkboxgroup.css +12 -0
  310. package/dist/css/chip.css +64 -0
  311. package/dist/css/codeviewer.css +109 -0
  312. package/dist/css/commandpalette.css +167 -0
  313. package/dist/css/container.css +5 -0
  314. package/dist/css/core.css +88 -0
  315. package/dist/css/dataview.css +56 -0
  316. package/dist/css/dial.css +203 -0
  317. package/dist/css/dropdown.css +13 -0
  318. package/dist/css/field.css +62 -0
  319. package/dist/css/fieldgroup.css +26 -0
  320. package/dist/css/fieldlist.css +84 -0
  321. package/dist/css/fieldset.css +68 -0
  322. package/dist/css/filterbuilder.css +125 -0
  323. package/dist/css/form.css +8 -0
  324. package/dist/css/formactions.css +40 -0
  325. package/dist/css/formerrors.css +39 -0
  326. package/dist/css/formsection.css +45 -0
  327. package/dist/css/grid.css +378 -0
  328. package/dist/css/icon.css +16 -0
  329. package/dist/css/inputgroup.css +58 -0
  330. package/dist/css/label.css +12 -0
  331. package/dist/css/layout.css +116 -0
  332. package/dist/css/listbox.css +50 -0
  333. package/dist/css/menu.css +92 -0
  334. package/dist/css/messagebox.css +6 -0
  335. package/dist/css/motion.css +29 -0
  336. package/dist/css/navmenu.css +115 -0
  337. package/dist/css/pagination.css +23 -0
  338. package/dist/css/panel.css +84 -0
  339. package/dist/css/pickerfield.css +85 -0
  340. package/dist/css/radiogroup.css +53 -0
  341. package/dist/css/searchgrid.css +37 -0
  342. package/dist/css/secretfield.css +73 -0
  343. package/dist/css/slider.css +107 -0
  344. package/dist/css/spacer.css +7 -0
  345. package/dist/css/stepform.css +46 -0
  346. package/dist/css/stepper.css +122 -0
  347. package/dist/css/table.css +36 -0
  348. package/dist/css/tabs.css +108 -0
  349. package/dist/css/textarea.css +11 -0
  350. package/dist/css/textfield.css +59 -0
  351. package/dist/css/toast.css +91 -0
  352. package/dist/css/toggle.css +39 -0
  353. package/dist/css/toolbar.css +14 -0
  354. package/dist/css/tooltip.css +17 -0
  355. package/dist/css/tree.css +94 -0
  356. package/dist/css/viewport.css +9 -0
  357. package/dist/css/widget.css +135 -0
  358. package/dist/css/window.css +35 -0
  359. package/dist/data.js +2 -0
  360. package/dist/data.js.map +7 -0
  361. package/dist/index.js +8 -0
  362. package/dist/index.js.map +7 -0
  363. package/dist/motion.js +2 -0
  364. package/dist/motion.js.map +7 -0
  365. package/dist/optikos.css +4240 -0
  366. package/dist/themes/compact.css +17 -0
  367. package/dist/themes/dark.css +53 -0
  368. package/dist/types/bind/index.d.ts +23 -0
  369. package/dist/types/components/badge.d.ts +1 -0
  370. package/dist/types/components/base/badge/badge.d.ts +18 -0
  371. package/dist/types/components/base/button/button.d.ts +34 -0
  372. package/dist/types/components/base/chip/chip.d.ts +27 -0
  373. package/dist/types/components/base/codeviewer/codeviewer.d.ts +48 -0
  374. package/dist/types/components/base/icon/icon.d.ts +17 -0
  375. package/dist/types/components/base/label/label.d.ts +14 -0
  376. package/dist/types/components/breadcrumb.d.ts +1 -0
  377. package/dist/types/components/button.d.ts +1 -0
  378. package/dist/types/components/calendar.d.ts +1 -0
  379. package/dist/types/components/cellediting.d.ts +1 -0
  380. package/dist/types/components/chat/chat/chat.d.ts +84 -0
  381. package/dist/types/components/chat.d.ts +1 -0
  382. package/dist/types/components/checkbox.d.ts +1 -0
  383. package/dist/types/components/checkboxgroup.d.ts +1 -0
  384. package/dist/types/components/chip.d.ts +1 -0
  385. package/dist/types/components/codeviewer.d.ts +1 -0
  386. package/dist/types/components/combobox.d.ts +1 -0
  387. package/dist/types/components/commandpalette.d.ts +1 -0
  388. package/dist/types/components/container.d.ts +1 -0
  389. package/dist/types/components/data/cellediting/cellediting.d.ts +10 -0
  390. package/dist/types/components/data/dataview/dataview.d.ts +61 -0
  391. package/dist/types/components/data/filterbuilder/filterbuilder.d.ts +73 -0
  392. package/dist/types/components/data/grid/grid.d.ts +177 -0
  393. package/dist/types/components/data/pagination/pagination.d.ts +31 -0
  394. package/dist/types/components/data/searchgrid/searchgrid.d.ts +63 -0
  395. package/dist/types/components/data/table/table.d.ts +26 -0
  396. package/dist/types/components/data/tree/tree.d.ts +71 -0
  397. package/dist/types/components/data/viewmanager/viewmanager.d.ts +86 -0
  398. package/dist/types/components/dataview.d.ts +1 -0
  399. package/dist/types/components/datefield.d.ts +1 -0
  400. package/dist/types/components/daterangefield.d.ts +1 -0
  401. package/dist/types/components/dates/calendar/calendar.d.ts +48 -0
  402. package/dist/types/components/dial.d.ts +1 -0
  403. package/dist/types/components/dropdown.d.ts +1 -0
  404. package/dist/types/components/feedback/spinner/spinner.d.ts +11 -0
  405. package/dist/types/components/fieldgroup.d.ts +1 -0
  406. package/dist/types/components/fieldlist.d.ts +1 -0
  407. package/dist/types/components/fields/checkbox/checkbox.d.ts +20 -0
  408. package/dist/types/components/fields/checkboxgroup/checkboxgroup.d.ts +27 -0
  409. package/dist/types/components/fields/combobox/combobox.d.ts +15 -0
  410. package/dist/types/components/fields/datefield/datefield.d.ts +30 -0
  411. package/dist/types/components/fields/daterangefield/daterangefield.d.ts +32 -0
  412. package/dist/types/components/fields/dial/dial.d.ts +84 -0
  413. package/dist/types/components/fields/listbox/listbox.d.ts +54 -0
  414. package/dist/types/components/fields/lookupfield/lookupfield.d.ts +25 -0
  415. package/dist/types/components/fields/numberfield/numberfield.d.ts +31 -0
  416. package/dist/types/components/fields/pickerfield/pickerfield.d.ts +77 -0
  417. package/dist/types/components/fields/radiogroup/radiogroup.d.ts +26 -0
  418. package/dist/types/components/fields/secretfield/secretfield.d.ts +52 -0
  419. package/dist/types/components/fields/select/select.d.ts +10 -0
  420. package/dist/types/components/fields/slider/slider.d.ts +62 -0
  421. package/dist/types/components/fields/suggestfield/suggestfield.d.ts +34 -0
  422. package/dist/types/components/fields/textarea/textarea.d.ts +16 -0
  423. package/dist/types/components/fields/textfield/textfield.d.ts +38 -0
  424. package/dist/types/components/fields/toggle/toggle.d.ts +9 -0
  425. package/dist/types/components/fieldset.d.ts +1 -0
  426. package/dist/types/components/filterbuilder.d.ts +1 -0
  427. package/dist/types/components/form/fieldgroup/fieldgroup.d.ts +33 -0
  428. package/dist/types/components/form/fieldlist/fieldlist.d.ts +58 -0
  429. package/dist/types/components/form/form/form.d.ts +68 -0
  430. package/dist/types/components/form/formactions/formactions.d.ts +34 -0
  431. package/dist/types/components/form/formerrors/formerrors.d.ts +23 -0
  432. package/dist/types/components/form/formsection/formsection.d.ts +26 -0
  433. package/dist/types/components/form/inputgroup/inputgroup.d.ts +28 -0
  434. package/dist/types/components/form/stepform/stepform.d.ts +64 -0
  435. package/dist/types/components/form.d.ts +1 -0
  436. package/dist/types/components/formactions.d.ts +1 -0
  437. package/dist/types/components/formerrors.d.ts +1 -0
  438. package/dist/types/components/formsection.d.ts +1 -0
  439. package/dist/types/components/grid.d.ts +1 -0
  440. package/dist/types/components/icon.d.ts +1 -0
  441. package/dist/types/components/inputgroup.d.ts +1 -0
  442. package/dist/types/components/label.d.ts +1 -0
  443. package/dist/types/components/layout/container/container.d.ts +1 -0
  444. package/dist/types/components/layout/fieldset/fieldset.d.ts +30 -0
  445. package/dist/types/components/layout/panel/panel.d.ts +53 -0
  446. package/dist/types/components/layout/panel/reload.d.ts +1 -0
  447. package/dist/types/components/layout/spacer/spacer.d.ts +12 -0
  448. package/dist/types/components/layout/toolbar/toolbar.d.ts +15 -0
  449. package/dist/types/components/layout/viewport/viewport.d.ts +7 -0
  450. package/dist/types/components/listbox.d.ts +1 -0
  451. package/dist/types/components/lookupfield.d.ts +1 -0
  452. package/dist/types/components/menu.d.ts +1 -0
  453. package/dist/types/components/messagebox.d.ts +1 -0
  454. package/dist/types/components/navigation/breadcrumb/breadcrumb.d.ts +32 -0
  455. package/dist/types/components/navigation/navmenu/navmenu.d.ts +63 -0
  456. package/dist/types/components/navigation/stepper/stepper.d.ts +31 -0
  457. package/dist/types/components/navigation/tabs/tabs.d.ts +57 -0
  458. package/dist/types/components/navmenu.d.ts +1 -0
  459. package/dist/types/components/numberfield.d.ts +1 -0
  460. package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +80 -0
  461. package/dist/types/components/overlays/dropdown/dropdown.d.ts +41 -0
  462. package/dist/types/components/overlays/menu/menu.d.ts +56 -0
  463. package/dist/types/components/overlays/messagebox/messagebox.d.ts +61 -0
  464. package/dist/types/components/overlays/toast/toast.d.ts +45 -0
  465. package/dist/types/components/overlays/tooltip/tooltip.d.ts +13 -0
  466. package/dist/types/components/overlays/widget/widget.d.ts +61 -0
  467. package/dist/types/components/overlays/window/window.d.ts +38 -0
  468. package/dist/types/components/pagination.d.ts +1 -0
  469. package/dist/types/components/panel.d.ts +1 -0
  470. package/dist/types/components/pickerfield.d.ts +1 -0
  471. package/dist/types/components/radiogroup.d.ts +1 -0
  472. package/dist/types/components/searchgrid.d.ts +1 -0
  473. package/dist/types/components/secretfield.d.ts +1 -0
  474. package/dist/types/components/select.d.ts +1 -0
  475. package/dist/types/components/slider.d.ts +1 -0
  476. package/dist/types/components/spacer.d.ts +1 -0
  477. package/dist/types/components/spinner.d.ts +1 -0
  478. package/dist/types/components/stepform.d.ts +1 -0
  479. package/dist/types/components/stepper.d.ts +1 -0
  480. package/dist/types/components/suggestfield.d.ts +1 -0
  481. package/dist/types/components/table.d.ts +1 -0
  482. package/dist/types/components/tabs.d.ts +1 -0
  483. package/dist/types/components/textarea.d.ts +1 -0
  484. package/dist/types/components/textfield.d.ts +1 -0
  485. package/dist/types/components/toast.d.ts +1 -0
  486. package/dist/types/components/toggle.d.ts +1 -0
  487. package/dist/types/components/toolbar.d.ts +1 -0
  488. package/dist/types/components/tooltip.d.ts +1 -0
  489. package/dist/types/components/tree.d.ts +1 -0
  490. package/dist/types/components/viewmanager.d.ts +1 -0
  491. package/dist/types/components/viewport.d.ts +1 -0
  492. package/dist/types/components/widget.d.ts +1 -0
  493. package/dist/types/components/window.d.ts +1 -0
  494. package/dist/types/core/component.d.ts +94 -0
  495. package/dist/types/core/container.d.ts +43 -0
  496. package/dist/types/core/date.d.ts +14 -0
  497. package/dist/types/core/dom.d.ts +11 -0
  498. package/dist/types/core/emitter.d.ts +12 -0
  499. package/dist/types/core/field.d.ts +78 -0
  500. package/dist/types/core/focus.d.ts +18 -0
  501. package/dist/types/core/i18n.d.ts +12 -0
  502. package/dist/types/core/index.d.ts +15 -0
  503. package/dist/types/core/layer.d.ts +6 -0
  504. package/dist/types/core/position.d.ts +19 -0
  505. package/dist/types/core/registry.d.ts +12 -0
  506. package/dist/types/core/validators.d.ts +10 -0
  507. package/dist/types/core/virtual.d.ts +24 -0
  508. package/dist/types/data/column.d.ts +32 -0
  509. package/dist/types/data/format.d.ts +4 -0
  510. package/dist/types/data/index.d.ts +5 -0
  511. package/dist/types/data/model.d.ts +28 -0
  512. package/dist/types/data/proxy.d.ts +61 -0
  513. package/dist/types/data/store.d.ts +94 -0
  514. package/dist/types/index.d.ts +67 -0
  515. package/dist/types/layout/layout.d.ts +27 -0
  516. package/dist/types/motion/config.d.ts +83 -0
  517. package/dist/types/motion/core.d.ts +40 -0
  518. package/dist/types/motion/extras.d.ts +66 -0
  519. package/dist/types/motion/index.d.ts +3 -0
  520. package/dist/types/themes/define.d.ts +31 -0
  521. package/dist/types/themes/index.d.ts +1 -0
  522. package/dist/types/ui/enums.d.ts +82 -0
  523. package/dist/types/ui/index.d.ts +2 -0
  524. package/dist/types/ui/ui.d.ts +67 -0
  525. package/dist/ui.js +2 -0
  526. package/dist/ui.js.map +7 -0
  527. package/package.json +104 -4
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/base/codeviewer/codeviewer.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { addMessages, t } from '../../../core/i18n';\nimport { Button } from '../button/button';\n\nexport type CodeLanguage = 'ts' | 'js' | 'json' | 'css' | 'html' | 'sh' | 'text';\n\nexport interface CodeViewerConfig extends ComponentConfig {\n code?: string;\n language?: CodeLanguage;\n /** The bar text. Default: the language name. */\n title?: string;\n lineNumbers?: boolean;\n startLine?: number;\n /** Lines to mark: `[3, 4]` or `'3-5,8'` (numbers as shown, so they follow `startLine`). */\n highlight?: number[] | string;\n wrap?: boolean;\n copyable?: boolean;\n bar?: boolean;\n maxHeight?: number | string;\n}\n\naddMessages('en', { codeCopy: 'Copy', codeCopied: 'Copied' });\naddMessages('pt-BR', { codeCopy: 'Copiar', codeCopied: 'Copiado' });\n\nconst NAMES: Record<CodeLanguage, string> = { ts: 'TypeScript', js: 'JavaScript', json: 'JSON', css: 'CSS', html: 'HTML', sh: 'Shell', text: 'Text' };\n\n// One regex per language: each capture group is a token kind, in the order of KINDS[lang]. Anything else is plain text.\nconst JS_WORDS = 'import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined';\nconst STR = `'(?:[^'\\\\\\\\\\\\n]|\\\\\\\\.)*'|\"(?:[^\"\\\\\\\\\\\\n]|\\\\\\\\.)*\"`;\nconst RULES: Record<Exclude<CodeLanguage, 'text'>, [RegExp, string[]]> = {\n ts: [new RegExp(`(\\\\/\\\\/[^\\\\n]*|\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)|(${STR}|\\`(?:[^\\`\\\\\\\\]|\\\\\\\\.)*\\`)|\\\\b(${JS_WORDS})\\\\b|\\\\b(\\\\d+(?:\\\\.\\\\d+)?)\\\\b`, 'g'), ['comment', 'string', 'keyword', 'number']],\n js: [/./g, []], // same as ts (filled below)\n json: [new RegExp(`(\"(?:[^\"\\\\\\\\\\\\n]|\\\\\\\\.)*\")(?=\\\\s*:)|(${STR})|\\\\b(true|false|null)\\\\b|(-?\\\\d+(?:\\\\.\\\\d+)?(?:[eE][+-]?\\\\d+)?)`, 'g'), ['property', 'string', 'keyword', 'number']],\n css: [new RegExp(`(\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\/)|(${STR})|(@[\\\\w-]+)|([\\\\w-]+)(?=\\\\s*:[^:{;]*[;}\\\\n])|(#[0-9a-fA-F]{3,8}\\\\b|-?\\\\d*\\\\.?\\\\d+(?:%|[a-z]+)?)`, 'g'), ['comment', 'string', 'keyword', 'property', 'number']],\n html: [new RegExp(`(<!--[\\\\s\\\\S]*?-->)|(<\\\\/?[\\\\w-]+|\\\\/?>)|([\\\\w:-]+)(?==)|(${STR})`, 'g'), ['comment', 'tag', 'attr', 'string']],\n sh: [new RegExp(`(#[^\\\\n]*)|(${STR})|\\\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\\\b|(\\\\$\\\\{?[\\\\w]+\\\\}?|--?[\\\\w-]+)`, 'g'), ['comment', 'string', 'keyword', 'attr']],\n};\nRULES.js = RULES.ts;\n\ntype Tok = [kind: string, text: string];\n\n/** Splits code into tokens (kind '' = plain). Pure: no DOM. */\nexport function tokenize(code: string, language: CodeLanguage = 'ts'): Tok[] {\n if (language === 'text' || !RULES[language]) return [['', code]];\n const [re, kinds] = RULES[language];\n const out: Tok[] = [];\n let last = 0;\n for (const m of code.matchAll(re)) {\n if (m.index! > last) out.push(['', code.slice(last, m.index)]);\n out.push([kinds[m.slice(1).findIndex((g) => g !== undefined)] ?? '', m[0]]);\n last = m.index! + m[0].length;\n }\n if (last < code.length) out.push(['', code.slice(last)]);\n return out;\n}\n\n/** `'3-5,8'` or `[3, 4]` \u2192 a set of line numbers. */\nconst lineSet = (v: CodeViewerConfig['highlight']): Set<number> => {\n if (Array.isArray(v)) return new Set(v);\n const out = new Set<number>();\n for (const part of (v ?? '').split(',')) {\n const [a, b] = part.split('-').map((x) => Number(x.trim()));\n if (Number.isFinite(a)) for (let n = a; n <= (Number.isFinite(b) ? b : a); n++) out.add(n);\n }\n return out;\n};\n\n/** Read-only code: syntax colors, line numbers (CSS counters, never copied), marked lines and a copy button. */\nexport class CodeViewer extends Component<CodeViewerConfig> {\n protected override baseCls = 'op-codeviewer';\n private titleEl!: HTMLElement;\n private bar!: HTMLElement;\n private pre!: HTMLElement;\n private codeEl!: HTMLElement;\n private status!: HTMLElement;\n private copyBtn!: Button;\n\n protected override build() {\n this.titleEl = h('span', 'op-codeviewer__title');\n this.copyBtn = new Button({ text: t('codeCopy'), icon: 'file', variant: 'ghost', handler: () => void this.copy() });\n this.status = h('span', 'op-sr-only op-codeviewer__status', { 'aria-live': 'polite' });\n this.bar = h('div', 'op-codeviewer__bar', {}, this.titleEl, this.copyBtn.el, this.status);\n this.codeEl = h('code', 'op-codeviewer__code');\n this.pre = h('pre', 'op-codeviewer__pre', { tabindex: 0 }, this.codeEl);\n return h('div', 'op-codeviewer', {}, this.bar, this.pre);\n }\n\n protected override onRender() {\n this.own(() => this.copyBtn.destroy());\n this.paintBar();\n this.paintCode();\n this.setWrap(!!this.config.wrap);\n this.setMaxHeight(this.config.maxHeight);\n }\n\n private get language(): CodeLanguage {\n return this.config.language ?? 'ts';\n }\n\n private paintBar() {\n const c = this.config;\n const title = c.title ?? NAMES[this.language] ?? this.language;\n this.titleEl.textContent = title;\n this.pre.setAttribute('aria-label', title);\n this.bar.hidden = c.bar === false;\n this.copyBtn.el.hidden = c.copyable === false;\n }\n\n /** One line element per line, tokens split at line breaks so a comment or string can span lines. */\n private paintCode() {\n const c = this.config;\n const start = c.startLine ?? 1;\n const marks = lineSet(c.highlight);\n const lines: HTMLElement[] = [h('span', 'op-codeviewer__line')];\n for (const [kind, text] of tokenize(c.code ?? '', this.language)) {\n text.split('\\n').forEach((piece, i) => {\n if (i) lines.push(h('span', 'op-codeviewer__line'));\n if (piece) lines[lines.length - 1].append(kind ? h('span', `op-codeviewer__tok--${kind}`, {}, piece) : piece);\n });\n }\n lines.forEach((l, i) => {\n if (marks.has(start + i)) l.classList.add('is-marked');\n if (i < lines.length - 1) l.append('\\n');\n });\n this.codeEl.replaceChildren(...lines);\n const numbers = c.lineNumbers !== false;\n this.el.classList.toggle('has-numbers', numbers);\n this.codeEl.style.counterReset = `op-codeline ${start - 1}`;\n this.codeEl.style.setProperty('--op-codeviewer-gutter', `${String(start + lines.length - 1).length}ch`);\n }\n\n getCode(): string {\n return this.config.code ?? '';\n }\n\n /** Copies the code. Without a clipboard (an insecure page) it selects the code instead and resolves false. */\n async copy(): Promise<boolean> {\n const code = this.getCode();\n try {\n await navigator.clipboard.writeText(code);\n } catch {\n const range = document.createRange();\n range.selectNodeContents(this.codeEl);\n getSelection()?.removeAllRanges();\n getSelection()?.addRange(range);\n return false;\n }\n this.copyBtn.setText(t('codeCopied'));\n this.copyBtn.setIcon('check');\n this.status.textContent = t('codeCopied');\n this.later(() => {\n this.copyBtn.setText(t('codeCopy'));\n this.copyBtn.setIcon('file');\n this.status.textContent = '';\n }, 1600);\n this.emit('copy', code);\n return true;\n }\n\n private update(patch: Partial<CodeViewerConfig>, bar = false) {\n Object.assign(this.config, patch);\n if (!this.rendered) return;\n if (bar) this.paintBar();\n this.paintCode();\n }\n setCode(code: string) {\n this.update({ code });\n }\n setLanguage(language: CodeLanguage) {\n this.update({ language }, true);\n }\n setTitle(title: string) {\n this.update({ title }, true);\n }\n setLineNumbers(lineNumbers: boolean) {\n this.update({ lineNumbers });\n }\n setStartLine(startLine: number) {\n this.update({ startLine });\n }\n setHighlight(highlight: CodeViewerConfig['highlight']) {\n this.update({ highlight });\n }\n setWrap(wrap: boolean) {\n this.config.wrap = wrap;\n if (this.rendered) this.el.classList.toggle('is-wrapped', wrap);\n }\n setMaxHeight(maxHeight: CodeViewerConfig['maxHeight']) {\n this.config.maxHeight = maxHeight;\n if (this.rendered) this.pre.style.maxBlockSize = maxHeight == null ? '' : typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n}\nregister('codeviewer', CodeViewer);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "NAMES", "JS_WORDS", "STR", "RULES", "tokenize", "code", "language", "re", "kinds", "out", "last", "m", "g", "lineSet", "v", "part", "b", "x", "CodeViewer", "Component", "h", "Button", "t", "c", "title", "start", "marks", "lines", "kind", "text", "piece", "i", "l", "numbers", "range", "patch", "bar", "lineNumbers", "startLine", "highlight", "wrap", "maxHeight", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as e}from"./chunk-4EZJ5FKJ.js";import{e as r}from"./chunk-MW3RWBZ7.js";e({refresh:'<path d="M21 12a9 9 0 1 1-2.64-6.36M21 3v6h-6"/>'});r("en",{reload:"Reload"});r("pt-BR",{reload:"Recarregar"});
2
+ //# sourceMappingURL=chunk-XYZ6VZ5T.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/layout/panel/reload.ts"],
4
+ "sourcesContent": ["// The \u21BB icon and its label, shared by Panel and Tabs: only components that can reload pay for them.\nimport { registerIcons } from '../../base/icon/icon';\nimport { addMessages } from '../../../core/i18n';\n\nregisterIcons({ refresh: '<path d=\"M21 12a9 9 0 1 1-2.64-6.36M21 3v6h-6\"/>' });\naddMessages('en', { reload: 'Reload' });\naddMessages('pt-BR', { reload: 'Recarregar' });\n"],
5
+ "mappings": "gFAIAA,EAAc,CAAE,QAAS,kDAAmD,CAAC,EAC7EC,EAAY,KAAM,CAAE,OAAQ,QAAS,CAAC,EACtCA,EAAY,QAAS,CAAE,OAAQ,YAAa,CAAC",
6
+ "names": ["registerIcons", "addMessages"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"./chunk-A2NKDOYN.js";import{b as o}from"./chunk-PZSHOSOS.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{e as n,f}from"./chunk-MW3RWBZ7.js";n("en",{feOne:"Fix 1 problem before saving",feMany:"Fix {n} problems before saving"});n("pt-BR",{feOne:"Corrija 1 problema antes de salvar",feMany:"Corrija {n} problemas antes de salvar"});var l=class extends a{baseCls="op-formerrors";titleEl;listEl;form;active=!1;build(){return this.titleEl=o("div","op-formerrors__title"),this.listEl=o("ul","op-formerrors__list"),o("div","op-formerrors",{role:"alert",tabindex:-1},this.titleEl,this.listEl)}onRender(){this.el.hidden=!0;let e=this.parent;for(;e&&!("focusField"in e&&"getFields"in e);)e=e.parent;let t=this.form=e;if(t){t.on("invalid",()=>{this.active=!0,this.refresh(),this.config.focus&&this.el.focus()});for(let r of t.getFields())for(let i of["invalid","valid"])r.on(i,()=>this.active&&this.refresh());this.listen(this.listEl,"click",r=>{let i=Number(r.target.closest("[data-i]")?.dataset.i),s=this.getErrors()[i];s&&(t.focusField(s),this.emit("go",s))})}}getErrors(){return this.form?.getFields().filter(e=>e.getError())??[]}refresh(){let e=this.getErrors(),t=e.length,r=this.config.title;this.titleEl.textContent=typeof r=="function"?r(t):r??f(t===1?"feOne":"feMany",{n:t}),this.listEl.replaceChildren(...e.map((i,s)=>o("li","",{},o("button","op-formerrors__link",{type:"button","data-i":s},`${i.config.label??i.name??""}: ${i.getError()}`)))),this.el.hidden=!t}};m("formerrors",l);export{l as a};
2
+ //# sourceMappingURL=chunk-YBAYEU25.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/form/formerrors/formerrors.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { addMessages, t } from '../../../core/i18n';\nimport { Field } from '../../../core/field';\nimport type { Form } from '../form/form';\n\naddMessages('en', { feOne: 'Fix 1 problem before saving', feMany: 'Fix {n} problems before saving' });\naddMessages('pt-BR', { feOne: 'Corrija 1 problema antes de salvar', feMany: 'Corrija {n} problemas antes de salvar' });\n\nexport interface FormErrorsConfig extends ComponentConfig {\n /** The heading: a function of the number of problems, or a fixed text. */\n title?: string | ((n: number) => string);\n /** Take the focus after a failed submit (instead of the first invalid field). */\n focus?: boolean;\n}\n\n/** An error summary: after a failed validation, every problem as a button that takes you to its field. */\nexport class FormErrors extends Component<FormErrorsConfig> {\n protected override baseCls = 'op-formerrors';\n private titleEl!: HTMLElement;\n private listEl!: HTMLElement;\n private form?: Form;\n /** Shown only once the form was validated with errors (not while the user is still filling it in). */\n private active = false;\n\n protected override build() {\n this.titleEl = h('div', 'op-formerrors__title');\n this.listEl = h('ul', 'op-formerrors__list');\n return h('div', 'op-formerrors', { role: 'alert', tabindex: -1 }, this.titleEl, this.listEl);\n }\n\n protected override onRender() {\n this.el.hidden = true;\n let p = this.parent as Component | undefined;\n while (p && !('focusField' in p && 'getFields' in p)) p = p.parent as Component | undefined; // the Form, by its methods (no import)\n const form = (this.form = p as Form | undefined);\n if (!form) return;\n form.on('invalid', () => {\n this.active = true;\n this.refresh();\n if (this.config.focus) this.el.focus();\n });\n for (const f of form.getFields()) for (const ev of ['invalid', 'valid']) f.on(ev, () => this.active && this.refresh());\n this.listen(this.listEl, 'click', (e: Event) => {\n const i = Number((e.target as HTMLElement).closest<HTMLElement>('[data-i]')?.dataset.i);\n const field = this.getErrors()[i];\n if (!field) return;\n form.focusField(field);\n this.emit('go', field);\n });\n }\n\n /** The form fields that have an error, in order. */\n getErrors(): Field<any>[] {\n return this.form?.getFields().filter((f) => f.getError()) ?? [];\n }\n\n /** Redraws the list from the current errors (hides when there are none). */\n refresh(): void {\n const errs = this.getErrors();\n const n = errs.length;\n const title = this.config.title;\n this.titleEl.textContent = typeof title === 'function' ? title(n) : (title ?? t(n === 1 ? 'feOne' : 'feMany', { n }));\n this.listEl.replaceChildren(...errs.map((f, i) => h('li', '', {}, h('button', 'op-formerrors__link', { type: 'button', 'data-i': i }, `${f.config.label ?? f.name ?? ''}: ${f.getError()}`))));\n this.el.hidden = !n;\n }\n}\nregister('formerrors', FormErrors);\n"],
5
+ "mappings": "6JAOAA,EAAY,KAAM,CAAE,MAAO,8BAA+B,OAAQ,gCAAiC,CAAC,EACpGA,EAAY,QAAS,CAAE,MAAO,qCAAsC,OAAQ,uCAAwC,CAAC,EAU9G,IAAMC,EAAN,cAAyBC,CAA4B,CACvC,QAAU,gBACrB,QACA,OACA,KAEA,OAAS,GAEE,OAAQ,CACzB,YAAK,QAAUC,EAAE,MAAO,sBAAsB,EAC9C,KAAK,OAASA,EAAE,KAAM,qBAAqB,EACpCA,EAAE,MAAO,gBAAiB,CAAE,KAAM,QAAS,SAAU,EAAG,EAAG,KAAK,QAAS,KAAK,MAAM,CAC7F,CAEmB,UAAW,CAC5B,KAAK,GAAG,OAAS,GACjB,IAAIC,EAAI,KAAK,OACb,KAAOA,GAAK,EAAE,eAAgBA,GAAK,cAAeA,IAAIA,EAAIA,EAAE,OAC5D,IAAMC,EAAQ,KAAK,KAAOD,EAC1B,GAAKC,EACL,CAAAA,EAAK,GAAG,UAAW,IAAM,CACvB,KAAK,OAAS,GACd,KAAK,QAAQ,EACT,KAAK,OAAO,OAAO,KAAK,GAAG,MAAM,CACvC,CAAC,EACD,QAAWC,KAAKD,EAAK,UAAU,EAAG,QAAWE,IAAM,CAAC,UAAW,OAAO,EAAGD,EAAE,GAAGC,EAAI,IAAM,KAAK,QAAU,KAAK,QAAQ,CAAC,EACrH,KAAK,OAAO,KAAK,OAAQ,QAAUC,GAAa,CAC9C,IAAM,EAAI,OAAQA,EAAE,OAAuB,QAAqB,UAAU,GAAG,QAAQ,CAAC,EAChFC,EAAQ,KAAK,UAAU,EAAE,CAAC,EAC3BA,IACLJ,EAAK,WAAWI,CAAK,EACrB,KAAK,KAAK,KAAMA,CAAK,EACvB,CAAC,EACH,CAGA,WAA0B,CACxB,OAAO,KAAK,MAAM,UAAU,EAAE,OAAQH,GAAMA,EAAE,SAAS,CAAC,GAAK,CAAC,CAChE,CAGA,SAAgB,CACd,IAAMI,EAAO,KAAK,UAAU,EACtBC,EAAID,EAAK,OACTE,EAAQ,KAAK,OAAO,MAC1B,KAAK,QAAQ,YAAc,OAAOA,GAAU,WAAaA,EAAMD,CAAC,EAAKC,GAASC,EAAEF,IAAM,EAAI,QAAU,SAAU,CAAE,EAAAA,CAAE,CAAC,EACnH,KAAK,OAAO,gBAAgB,GAAGD,EAAK,IAAI,CAACJ,EAAGQ,IAAMX,EAAE,KAAM,GAAI,CAAC,EAAGA,EAAE,SAAU,sBAAuB,CAAE,KAAM,SAAU,SAAUW,CAAE,EAAG,GAAGR,EAAE,OAAO,OAASA,EAAE,MAAQ,EAAE,KAAKA,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAC7L,KAAK,GAAG,OAAS,CAACK,CACpB,CACF,EACAI,EAAS,aAAcd,CAAU",
6
+ "names": ["addMessages", "FormErrors", "Component", "h", "p", "form", "f", "ev", "e", "field", "errs", "n", "title", "t", "i", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as o}from"./chunk-A2NKDOYN.js";import{a as n}from"./chunk-TIPK3SCJ.js";var t=class extends o{baseCls="op-label";build(){let e=document.createElement(this.config.for?"label":"span");return e.className="op-label",this.config.for&&(e.htmlFor=this.config.for),e}onRender(){this.setText(this.config.text??""),this.setVariant(this.config.variant??"default")}setText(e){this.config.text=e,this.rendered&&(this.el.textContent=e)}setVariant(e){if(this.config.variant=e,!!this.rendered)for(let i of["default","muted","title"])this.el.classList.toggle(`op-label--${i}`,i===e)}};n("label",t);export{t as a};
2
+ //# sourceMappingURL=chunk-YHEMA56R.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/base/label/label.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\n\nexport interface LabelConfig extends ComponentConfig {\n text?: string;\n /** Id of the field this label names (renders a `<label for>`). */\n for?: string;\n variant?: 'default' | 'muted' | 'title';\n}\n\nexport class Label extends Component<LabelConfig> {\n protected override baseCls = 'op-label';\n protected override build() {\n const el = document.createElement(this.config.for ? 'label' : 'span');\n el.className = 'op-label';\n if (this.config.for) (el as HTMLLabelElement).htmlFor = this.config.for;\n return el;\n }\n protected override onRender() {\n this.setText(this.config.text ?? '');\n this.setVariant(this.config.variant ?? 'default');\n }\n setText(text: string) {\n this.config.text = text;\n if (this.rendered) this.el.textContent = text;\n }\n setVariant(variant: NonNullable<LabelConfig['variant']>) {\n this.config.variant = variant;\n if (!this.rendered) return;\n for (const v of ['default', 'muted', 'title']) this.el.classList.toggle(`op-label--${v}`, v === variant);\n }\n}\nregister('label', Label);\n"],
5
+ "mappings": "gFAUO,IAAMA,EAAN,cAAoBC,CAAuB,CAC7B,QAAU,WACV,OAAQ,CACzB,IAAMC,EAAK,SAAS,cAAc,KAAK,OAAO,IAAM,QAAU,MAAM,EACpE,OAAAA,EAAG,UAAY,WACX,KAAK,OAAO,MAAMA,EAAwB,QAAU,KAAK,OAAO,KAC7DA,CACT,CACmB,UAAW,CAC5B,KAAK,QAAQ,KAAK,OAAO,MAAQ,EAAE,EACnC,KAAK,WAAW,KAAK,OAAO,SAAW,SAAS,CAClD,CACA,QAAQC,EAAc,CACpB,KAAK,OAAO,KAAOA,EACf,KAAK,WAAU,KAAK,GAAG,YAAcA,EAC3C,CACA,WAAWC,EAA8C,CAEvD,GADA,KAAK,OAAO,QAAUA,EAClB,EAAC,KAAK,SACV,QAAWC,IAAK,CAAC,UAAW,QAAS,OAAO,EAAG,KAAK,GAAG,UAAU,OAAO,aAAaA,CAAC,GAAIA,IAAMD,CAAO,CACzG,CACF,EACAE,EAAS,QAASN,CAAK",
6
+ "names": ["Label", "Component", "el", "text", "variant", "v", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as m,b as u}from"./chunk-E4VNLYO2.js";import{b as f}from"./chunk-676AKAGF.js";import{a as g}from"./chunk-VV7CFMPZ.js";import{b,c as v}from"./chunk-4AA4FQEM.js";import{a as n}from"./chunk-A2NKDOYN.js";import{b as h,c as l}from"./chunk-PZSHOSOS.js";import{a as d,c as p}from"./chunk-TIPK3SCJ.js";var o=[],s=class extends n{baseCls="op-dropdown";content;open_=!1;release=[];leaving=0;build(){let e=h("div","op-dropdown",{role:this.config.role??"dialog"});e.hidden=!0;let t=this.config.content;return t&&(this.content=t instanceof HTMLElement||t instanceof n?t:p(t),e.append(this.content instanceof n?this.content.el:this.content)),e}getAnchor(){let e=this.config.anchor;return e instanceof n?e.el:e instanceof HTMLElement?e:void 0}isOpen(){return this.open_}open(){if(this.open_||this.destroyed||this.emit("before-open")===!1)return;let e=this.getAnchor();f(this.el,e),e&&this.el.getAttribute("role")==="dialog"&&!this.el.hasAttribute("aria-label")&&!this.el.hasAttribute("aria-labelledby")&&(e.id||=l(),this.el.setAttribute("aria-labelledby",e.id)),this.leaving++,this.el.getAnimations?.().forEach(i=>i.cancel()),this.el.hidden=!1,this.open_=!0,o.push(this),this.el.classList.add("is-open"),this.content instanceof n&&this.content.notifyMount(),this.reposition(),b(this.el,e??this.config.anchor,"dropdown"),e?.setAttribute("aria-expanded","true");let t=this.config,r=i=>{let a=i.target;t.closeOnOutside!==!1&&!this.el.contains(a)&&!e?.contains(a)&&this.close()},c=i=>{i.key==="Escape"&&t.closeOnEsc!==!1&&o[o.length-1]===this&&(i.stopPropagation(),this.close(),(e?.querySelector("input,button")??e)?.focus?.())};document.addEventListener("pointerdown",r,!0),document.addEventListener("keydown",c,!0),this.release=[()=>document.removeEventListener("pointerdown",r,!0),()=>document.removeEventListener("keydown",c,!0),u(()=>this.reposition())],t.autoFocus&&g(this.el)[0]?.focus(),this.emit("open")}close(){if(!this.open_||this.emit("before-close")===!1)return;this.open_=!1,o.splice(o.indexOf(this),1),this.el.classList.remove("is-open");let e=v(this.el,this.getAnchor()??this.config.anchor,"dropdown");if(e){let t=++this.leaving;e.then(()=>t===this.leaving&&!this.open_&&(this.el.hidden=!0))}else this.el.hidden=!0;this.getAnchor()?.setAttribute("aria-expanded","false"),this.release.splice(0).forEach(t=>t()),this.emit("close")}toggle(){this.open_?this.close():this.open()}reposition(){let e=this.getAnchor()??this.config.anchor;if(!this.open_||!e||e instanceof n)return;let t=this.config;m(this.el,e,{placement:t.placement??"bottom-start",offset:t.offset,flip:t.flip,matchWidth:t.matchWidth})}setAnchor(e){this.config.anchor=e,this.reposition()}setPlacement(e){this.config.placement=e,this.reposition()}setContent(e){this.content instanceof n&&this.content!==e&&this.content.destroy(),this.config.content=e,this.content=e,this.el.replaceChildren(e instanceof n?e.el:e),this.reposition()}onDestroy(){this.open_&&o.splice(o.indexOf(this),1),this.open_=!1,this.release.splice(0).forEach(e=>e()),this.getAnchor()?.setAttribute("aria-expanded","false"),this.content instanceof n&&this.content.destroy()}};d("dropdown",s);export{s as a};
2
+ //# sourceMappingURL=chunk-Z2JBUHKA.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/overlays/dropdown/dropdown.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register, create, type AnyConfig } from '../../../core/registry';\nimport { h, uid } from '../../../core/dom';\nimport { toLayer } from '../../../core/layer';\nimport { place, track, type Placement } from '../../../core/position';\nimport { focusables } from '../../../core/focus';\nimport { popIn, popOut } from '../../../motion/core';\n\nexport interface DropdownConfig extends ComponentConfig {\n anchor?: HTMLElement | Component | { x: number; y: number };\n content?: HTMLElement | Component | AnyConfig;\n placement?: Placement;\n offset?: number;\n flip?: boolean;\n matchWidth?: boolean;\n closeOnOutside?: boolean;\n closeOnEsc?: boolean;\n role?: string;\n /** Move focus to the first focusable element of the content on open. */\n autoFocus?: boolean;\n}\n\nconst openStack: Dropdown[] = [];\n\n/** Floating panel anchored to an element. Lives in the global layer; closes on outside click and Esc. */\nexport class Dropdown extends Component<DropdownConfig> {\n protected override baseCls = 'op-dropdown';\n private content?: HTMLElement | Component;\n private open_ = false;\n private release: Array<() => void> = [];\n private leaving = 0;\n\n protected override build() {\n const el = h('div', 'op-dropdown', { role: this.config.role ?? 'dialog' });\n el.hidden = true;\n const c = this.config.content;\n if (c) {\n this.content = c instanceof HTMLElement || c instanceof Component ? c : create(c);\n el.append(this.content instanceof Component ? this.content.el : this.content);\n }\n return el;\n }\n\n getAnchor(): HTMLElement | undefined {\n const a = this.config.anchor;\n return a instanceof Component ? a.el : a instanceof HTMLElement ? a : undefined;\n }\n\n isOpen(): boolean {\n return this.open_;\n }\n\n open(): void {\n if (this.open_ || this.destroyed || this.emit('before-open') === false) return;\n const anchor = this.getAnchor();\n toLayer(this.el, anchor);\n if (anchor && this.el.getAttribute('role') === 'dialog' && !this.el.hasAttribute('aria-label') && !this.el.hasAttribute('aria-labelledby')) {\n anchor.id ||= uid();\n this.el.setAttribute('aria-labelledby', anchor.id);\n }\n this.leaving++; // a pending hide from a close animation must not hide us again\n this.el.getAnimations?.().forEach((a) => a.cancel());\n this.el.hidden = false;\n this.open_ = true;\n openStack.push(this);\n this.el.classList.add('is-open');\n if (this.content instanceof Component) this.content.notifyMount();\n this.reposition();\n void popIn(this.el, anchor ?? (this.config.anchor as { x: number; y: number } | undefined), 'dropdown');\n anchor?.setAttribute('aria-expanded', 'true');\n const c = this.config;\n const outside = (e: Event) => {\n const t = e.target as Node;\n if (c.closeOnOutside !== false && !this.el.contains(t) && !anchor?.contains(t)) this.close();\n };\n const key = (e: KeyboardEvent) => {\n // only the most recently opened dropdown reacts, so Esc closes one level at a time\n if (e.key === 'Escape' && c.closeOnEsc !== false && openStack[openStack.length - 1] === this) {\n e.stopPropagation();\n this.close();\n (anchor?.querySelector<HTMLElement>('input,button') ?? anchor)?.focus?.();\n }\n };\n document.addEventListener('pointerdown', outside, true);\n document.addEventListener('keydown', key, true);\n this.release = [() => document.removeEventListener('pointerdown', outside, true), () => document.removeEventListener('keydown', key, true), track(() => this.reposition())];\n if (c.autoFocus) focusables(this.el)[0]?.focus();\n this.emit('open');\n }\n\n close(): void {\n if (!this.open_ || this.emit('before-close') === false) return;\n this.open_ = false;\n openStack.splice(openStack.indexOf(this), 1);\n this.el.classList.remove('is-open');\n // shrinks back toward the trigger, then hides (at once when there is no animation)\n const out = popOut(this.el, this.getAnchor() ?? (this.config.anchor as { x: number; y: number } | undefined), 'dropdown');\n if (out) {\n const id = ++this.leaving;\n void out.then(() => id === this.leaving && !this.open_ && (this.el.hidden = true));\n } else this.el.hidden = true;\n this.getAnchor()?.setAttribute('aria-expanded', 'false');\n this.release.splice(0).forEach((r) => r());\n this.emit('close');\n }\n\n toggle(): void {\n if (this.open_) this.close();\n else this.open();\n }\n\n reposition(): void {\n const anchor = this.getAnchor() ?? (this.config.anchor as { x: number; y: number } | undefined);\n if (!this.open_ || !anchor || anchor instanceof Component) return;\n const c = this.config;\n place(this.el, anchor, { placement: c.placement ?? 'bottom-start', offset: c.offset, flip: c.flip, matchWidth: c.matchWidth });\n }\n\n setAnchor(anchor: HTMLElement | Component | { x: number; y: number }): void {\n this.config.anchor = anchor;\n this.reposition();\n }\n setPlacement(placement: Placement): void {\n this.config.placement = placement;\n this.reposition();\n }\n setContent(content: HTMLElement | Component): void {\n if (this.content instanceof Component && this.content !== content) this.content.destroy();\n this.config.content = content;\n this.content = content;\n this.el.replaceChildren(content instanceof Component ? content.el : content);\n this.reposition();\n }\n\n protected override onDestroy() {\n if (this.open_) openStack.splice(openStack.indexOf(this), 1);\n this.open_ = false;\n this.release.splice(0).forEach((r) => r());\n this.getAnchor()?.setAttribute('aria-expanded', 'false');\n if (this.content instanceof Component) this.content.destroy();\n }\n}\nregister('dropdown', Dropdown);\n"],
5
+ "mappings": "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",
6
+ "names": ["openStack", "Dropdown", "Component", "el", "c", "create", "a", "anchor", "toLayer", "uid", "popIn", "outside", "e", "t", "key", "track", "focusables", "out", "popOut", "id", "r", "place", "placement", "content", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as m}from"./chunk-2ZRNGG2N.js";import{e as p}from"./chunk-6NCXO5ZP.js";import{b as o}from"./chunk-PZSHOSOS.js";import{a as u}from"./chunk-TIPK3SCJ.js";var l=class extends m{baseCls="op-field op-slider";track;fill;knobs=[];bubbles=[];marksEl;get min(){return this.config.min??0}get max(){return this.config.max??100}get step(){return this.config.step??1}get isRange(){return!!this.config.range}emptyValue(){return this.isRange?[this.min,this.max]:this.min}isEmpty(){return!1}fmt(t){return this.config.format?this.config.format(t):String(t)}vals(){return Array.isArray(this.value)?[...this.value]:[this.value]}snap(t){let e=Math.round((t-this.min)/this.step)*this.step+this.min,i=(String(this.step).split(".")[1]??"").length;return Math.max(this.min,Math.min(this.max,Number(e.toFixed(i))))}createControl(){let t=this.config;this.track=o("div","op-slider__track"),this.fill=o("div","op-slider__fill"),this.marksEl=o("div","op-slider__marks",{"aria-hidden":"true"}),this.track.append(this.fill,this.marksEl),this.buildKnobs(),this.listen(this.track,"pointerdown",i=>this.onTrackDown(i));let e=o("div","op-slider__box",{},this.track);return t.showScale&&e.append(o("div","op-slider__scale",{},o("span","",{},this.fmt(this.min)),o("span","",{},this.fmt(this.max)))),this.inputEl=this.knobs[0],e}buildKnobs(){this.knobs.forEach(e=>e.remove()),this.knobs=[],this.bubbles=[];let t=this.isRange?2:1;for(let e=0;e<t;e++){let i=o("span","op-slider__bubble",{"aria-hidden":"true"}),s=o("div","op-slider__knob",{role:"slider",tabindex:0,"aria-orientation":"horizontal","data-i":e},i);this.listen(s,"pointerdown",n=>this.onKnobDown(n,e)),this.listen(s,"keydown",n=>this.onKey(n,e)),this.listen(s,"focus",()=>this.el.classList.add("is-focus-knob")),this.listen(s,"blur",()=>this.el.classList.remove("is-focus-knob")),this.knobs.push(s),this.bubbles.push(i),this.track.append(s)}}onRender(){super.onRender(),this.knobs.forEach(t=>t.setAttribute("aria-labelledby",`${this.id}-label`)),this.el.querySelector(".op-field__label").id=`${this.id}-label`,this.paintMarks(),this.el.classList.toggle("has-bubble-always",this.config.showValue==="always"),this.el.classList.toggle("has-bubble-never",this.config.showValue==="never")}pct(t){return this.max===this.min?0:(t-this.min)/(this.max-this.min)*100}applyValue(t){let e=Array.isArray(t)?t:[t];this.knobs.forEach((n,a)=>{let r=e[a]??e[0];n.style.left=`${this.pct(r)}%`,n.setAttribute("aria-valuemin",String(a===1?e[0]:this.min)),n.setAttribute("aria-valuemax",String(a===0&&this.isRange?e[1]:this.max)),n.setAttribute("aria-valuenow",String(r)),n.setAttribute("aria-valuetext",this.fmt(r)),this.bubbles[a].textContent=this.fmt(r)});let i=this.isRange?this.pct(e[0]):0,s=this.pct(this.isRange?e[1]:e[0]);this.fill.style.left=`${i}%`,this.fill.style.width=`${Math.max(0,s-i)}%`}paintMarks(){let t=this.config.marks;if(this.marksEl.replaceChildren(),!t)return;let e=Array.isArray(t)?t:(()=>{let i=Math.floor((this.max-this.min)/this.step),s=Math.ceil(i/20)||1;return Array.from({length:Math.floor(i/s)+1},(n,a)=>({value:this.min+a*s*this.step}))})();for(let i of e){let s=o("span","op-slider__mark",{},i.label?o("span","op-slider__mark-label",{},i.label):"");s.style.left=`${this.pct(i.value)}%`,this.marksEl.append(s)}}valueAt(t){let e=this.track.getBoundingClientRect();return this.snap(this.min+Math.max(0,Math.min(1,(t.clientX-e.left)/(e.width||1)))*(this.max-this.min))}nearest(t){if(!this.isRange)return 0;let[e,i]=this.vals();return Math.abs(t-e)<=Math.abs(t-i)?t>i?1:0:1}onTrackDown(t){if(t.target.closest(".op-slider__knob")||this.config.disabled||this.config.readonly||t.button)return;let e=this.nearest(this.valueAt(t));this.onKnobDown(t,e)}onKnobDown(t,e){if(this.config.disabled||this.config.readonly||t.button)return;t.preventDefault();let i=this.knobs[e];i.focus(),i.setPointerCapture?.(t.pointerId),this.el.classList.add("is-dragging"),this.emit("slide-start");let s=p(i,"x"),n=t.clientX;this.setAt(e,this.valueAt(t));let a=h=>{s.move(h.clientX-n),n=h.clientX,this.setAt(e,this.valueAt(h))},r=()=>{i.removeEventListener("pointermove",a),i.removeEventListener("pointerup",r),i.removeEventListener("pointercancel",r),this.el.classList.remove("is-dragging"),s.release(),this.flushSettled(),this.emit("slide-end",this.value)};i.addEventListener("pointermove",a),i.addEventListener("pointerup",r),i.addEventListener("pointercancel",r),this.own(r)}setAt(t,e){let i=this.vals();this.isRange?i[t]=t===0?Math.min(e,i[1]):Math.max(e,i[0]):i[0]=e;let s=this.isRange?[i[0],i[1]]:i[0];this.isEqual(s,this.value)||(this.commit(s),this.applyValue(s))}onKey(t,e){if(this.config.disabled||this.config.readonly)return;let i=this.vals(),s=i[e],n=this.step*10,a=this.isRange&&e===1?i[0]:this.min,r=this.isRange&&e===0?i[1]:this.max,h={ArrowRight:s+this.step,ArrowUp:s+this.step,ArrowLeft:s-this.step,ArrowDown:s-this.step,PageUp:s+n,PageDown:s-n,Home:a,End:r};t.key in h&&(t.preventDefault(),this.setAt(e,Math.max(a,Math.min(r,this.snap(h[t.key])))),this.flushSettled(),this.emit("slide-end",this.value))}getPercent(){return this.pct(this.vals()[0])}refresh(){this.rendered&&(this.applyValue(this.value),this.paintMarks())}setMin(t){this.config.min=t,this.value=this.clampAll(this.value),this.refresh()}setMax(t){this.config.max=t,this.value=this.clampAll(this.value),this.refresh()}setStep(t){this.config.step=t,this.value=this.clampAll(this.value),this.refresh()}clampAll(t){return Array.isArray(t)?[this.snap(t[0]),this.snap(t[1])]:this.snap(t)}setRange(t){if(t===this.isRange)return;let e=this.vals();this.config.range=t,this.value=t?[e[0],this.max]:e[0],this.rendered&&(this.buildKnobs(),this.inputEl=this.knobs[0],this.applyValue(this.value))}onDisabled(t){this.knobs.forEach(e=>(e.tabIndex=t?-1:0,e.setAttribute("aria-disabled",String(t))))}onReadonly(t){this.knobs.forEach(e=>e.setAttribute("aria-readonly",String(t)))}};u("slider",l);export{l as a};
2
+ //# sourceMappingURL=chunk-Z2Z52GFT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/fields/slider/slider.ts"],
4
+ "sourcesContent": ["import { Field, type FieldConfig } from '../../../core/field';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { knobStretch } from '../../../motion/extras';\n\nexport interface SliderMark {\n value: number;\n label?: string;\n}\n\nexport interface SliderConfig extends FieldConfig<number | [number, number]> {\n min?: number;\n max?: number;\n step?: number;\n /** Two knobs: the value is `[low, high]`. */\n range?: boolean;\n marks?: boolean | SliderMark[];\n /** When the bubble with the value shows. Default `drag` (while dragging or focused). */\n showValue?: 'drag' | 'always' | 'never';\n format?: (v: number) => string;\n showScale?: boolean;\n}\n\ntype V = number | [number, number];\n\n/** A bar with a ball to drag: a number, or a range with two balls. */\nexport class Slider extends Field<V, SliderConfig> {\n protected override baseCls = 'op-field op-slider';\n private track!: HTMLElement;\n private fill!: HTMLElement;\n private knobs: HTMLElement[] = [];\n private bubbles: HTMLElement[] = [];\n private marksEl!: HTMLElement;\n\n private get min() {\n return this.config.min ?? 0;\n }\n private get max() {\n return this.config.max ?? 100;\n }\n private get step() {\n return this.config.step ?? 1;\n }\n private get isRange() {\n return !!this.config.range;\n }\n\n protected override emptyValue(): V {\n return this.isRange ? [this.min, this.max] : this.min;\n }\n protected override isEmpty(): boolean {\n return false;\n }\n\n private fmt(v: number): string {\n return this.config.format ? this.config.format(v) : String(v);\n }\n private vals(): number[] {\n return Array.isArray(this.value) ? [...this.value] : [this.value as number];\n }\n\n /** Snaps to a multiple of `step` inside [min, max] (without float noise). */\n private snap(v: number): number {\n const n = Math.round((v - this.min) / this.step) * this.step + this.min;\n const dec = (String(this.step).split('.')[1] ?? '').length;\n return Math.max(this.min, Math.min(this.max, Number(n.toFixed(dec))));\n }\n\n protected createControl() {\n const c = this.config;\n this.track = h('div', 'op-slider__track');\n this.fill = h('div', 'op-slider__fill');\n this.marksEl = h('div', 'op-slider__marks', { 'aria-hidden': 'true' });\n this.track.append(this.fill, this.marksEl);\n this.buildKnobs();\n this.listen(this.track, 'pointerdown', (e: PointerEvent) => this.onTrackDown(e));\n const box = h('div', 'op-slider__box', {}, this.track);\n if (c.showScale) box.append(h('div', 'op-slider__scale', {}, h('span', '', {}, this.fmt(this.min)), h('span', '', {}, this.fmt(this.max))));\n this.inputEl = this.knobs[0];\n return box;\n }\n\n private buildKnobs() {\n this.knobs.forEach((k) => k.remove());\n this.knobs = [];\n this.bubbles = [];\n const n = this.isRange ? 2 : 1;\n for (let i = 0; i < n; i++) {\n const bubble = h('span', 'op-slider__bubble', { 'aria-hidden': 'true' });\n const knob = h('div', 'op-slider__knob', { role: 'slider', tabindex: 0, 'aria-orientation': 'horizontal', 'data-i': i }, bubble);\n this.listen(knob, 'pointerdown', (e: PointerEvent) => this.onKnobDown(e, i));\n this.listen(knob, 'keydown', (e: KeyboardEvent) => this.onKey(e, i));\n this.listen(knob, 'focus', () => this.el.classList.add('is-focus-knob'));\n this.listen(knob, 'blur', () => this.el.classList.remove('is-focus-knob'));\n this.knobs.push(knob);\n this.bubbles.push(bubble);\n this.track.append(knob);\n }\n }\n\n protected override onRender() {\n super.onRender();\n this.knobs.forEach((k) => k.setAttribute('aria-labelledby', `${this.id}-label`));\n (this.el.querySelector('.op-field__label') as HTMLElement).id = `${this.id}-label`;\n this.paintMarks();\n this.el.classList.toggle('has-bubble-always', this.config.showValue === 'always');\n this.el.classList.toggle('has-bubble-never', this.config.showValue === 'never');\n }\n\n // ---- painting -----------------------------------------------------------------------------\n\n private pct(v: number): number {\n return this.max === this.min ? 0 : ((v - this.min) / (this.max - this.min)) * 100;\n }\n\n protected applyValue(v: V): void {\n const vals = Array.isArray(v) ? v : [v];\n this.knobs.forEach((k, i) => {\n const x = vals[i] ?? vals[0];\n k.style.left = `${this.pct(x)}%`;\n k.setAttribute('aria-valuemin', String(i === 1 ? vals[0] : this.min));\n k.setAttribute('aria-valuemax', String(i === 0 && this.isRange ? vals[1] : this.max));\n k.setAttribute('aria-valuenow', String(x));\n k.setAttribute('aria-valuetext', this.fmt(x));\n this.bubbles[i].textContent = this.fmt(x);\n });\n const lo = this.isRange ? this.pct(vals[0]) : 0;\n const hi = this.pct(this.isRange ? vals[1] : vals[0]);\n this.fill.style.left = `${lo}%`;\n this.fill.style.width = `${Math.max(0, hi - lo)}%`;\n }\n\n private paintMarks() {\n const m = this.config.marks;\n this.marksEl.replaceChildren();\n if (!m) return;\n const list: SliderMark[] = Array.isArray(m) ? m : (() => {\n const n = Math.floor((this.max - this.min) / this.step);\n const every = Math.ceil(n / 20) || 1;\n return Array.from({ length: Math.floor(n / every) + 1 }, (_, i) => ({ value: this.min + i * every * this.step }));\n })();\n for (const mk of list) {\n const tick = h('span', 'op-slider__mark', {}, mk.label ? h('span', 'op-slider__mark-label', {}, mk.label) : '');\n tick.style.left = `${this.pct(mk.value)}%`;\n this.marksEl.append(tick);\n }\n }\n\n // ---- pointer ------------------------------------------------------------------------------\n\n private valueAt(e: PointerEvent): number {\n const r = this.track.getBoundingClientRect();\n return this.snap(this.min + Math.max(0, Math.min(1, (e.clientX - r.left) / (r.width || 1))) * (this.max - this.min));\n }\n\n private nearest(v: number): number {\n if (!this.isRange) return 0;\n const [a, b] = this.vals();\n return Math.abs(v - a) <= Math.abs(v - b) ? (v > b ? 1 : 0) : 1;\n }\n\n private onTrackDown(e: PointerEvent) {\n if ((e.target as HTMLElement).closest('.op-slider__knob') || this.config.disabled || this.config.readonly || e.button) return;\n const i = this.nearest(this.valueAt(e));\n this.onKnobDown(e, i);\n }\n\n private onKnobDown(e: PointerEvent, i: number) {\n if (this.config.disabled || this.config.readonly || e.button) return;\n e.preventDefault();\n const knob = this.knobs[i];\n knob.focus();\n knob.setPointerCapture?.(e.pointerId);\n this.el.classList.add('is-dragging');\n this.emit('slide-start');\n const stretch = knobStretch(knob, 'x');\n let prev = e.clientX;\n this.setAt(i, this.valueAt(e));\n const move = (m: PointerEvent) => {\n stretch.move(m.clientX - prev);\n prev = m.clientX;\n this.setAt(i, this.valueAt(m));\n };\n const up = () => {\n knob.removeEventListener('pointermove', move);\n knob.removeEventListener('pointerup', up);\n knob.removeEventListener('pointercancel', up);\n this.el.classList.remove('is-dragging');\n stretch.release();\n (this.flushSettled(), this.emit('slide-end', this.value));\n };\n knob.addEventListener('pointermove', move);\n knob.addEventListener('pointerup', up);\n knob.addEventListener('pointercancel', up);\n this.own(up);\n }\n\n /** The user moved knob `i` to `v`: update the value (knobs of a range never cross) and tell everyone. */\n private setAt(i: number, v: number) {\n const vals = this.vals();\n if (this.isRange) vals[i] = i === 0 ? Math.min(v, vals[1]) : Math.max(v, vals[0]);\n else vals[0] = v;\n const next: V = this.isRange ? ([vals[0], vals[1]] as [number, number]) : vals[0];\n if (this.isEqual(next, this.value)) return;\n this.commit(next);\n this.applyValue(next);\n }\n\n private onKey(e: KeyboardEvent, i: number) {\n if (this.config.disabled || this.config.readonly) return;\n const vals = this.vals();\n const cur = vals[i];\n const big = this.step * 10;\n const lo = this.isRange && i === 1 ? vals[0] : this.min;\n const hi = this.isRange && i === 0 ? vals[1] : this.max;\n const to: Record<string, number> = { ArrowRight: cur + this.step, ArrowUp: cur + this.step, ArrowLeft: cur - this.step, ArrowDown: cur - this.step, PageUp: cur + big, PageDown: cur - big, Home: lo, End: hi };\n if (!(e.key in to)) return;\n e.preventDefault();\n this.setAt(i, Math.max(lo, Math.min(hi, this.snap(to[e.key]))));\n (this.flushSettled(), this.emit('slide-end', this.value));\n }\n\n // ---- API ----------------------------------------------------------------------------------\n\n /** Where the (first) knob is, 0\u2013100. */\n getPercent(): number {\n return this.pct(this.vals()[0]);\n }\n\n private refresh() {\n if (!this.rendered) return;\n this.applyValue(this.value);\n this.paintMarks();\n }\n\n setMin(min: number) {\n this.config.min = min;\n this.value = this.clampAll(this.value);\n this.refresh();\n }\n setMax(max: number) {\n this.config.max = max;\n this.value = this.clampAll(this.value);\n this.refresh();\n }\n setStep(step: number) {\n this.config.step = step;\n this.value = this.clampAll(this.value);\n this.refresh();\n }\n private clampAll(v: V): V {\n return Array.isArray(v) ? ([this.snap(v[0]), this.snap(v[1])] as [number, number]) : this.snap(v);\n }\n\n /** Switches between one knob and two; the value is converted. */\n setRange(range: boolean) {\n if (range === this.isRange) return;\n const v = this.vals();\n this.config.range = range;\n this.value = range ? [v[0], this.max] : v[0];\n if (!this.rendered) return;\n this.buildKnobs();\n this.inputEl = this.knobs[0];\n this.applyValue(this.value);\n }\n\n protected override onDisabled(disabled: boolean) {\n this.knobs.forEach((k) => ((k.tabIndex = disabled ? -1 : 0), k.setAttribute('aria-disabled', String(disabled))));\n }\n protected override onReadonly(readonly: boolean) {\n this.knobs.forEach((k) => k.setAttribute('aria-readonly', String(readonly)));\n }\n}\nregister('slider', Slider);\n"],
5
+ "mappings": "gKA0BO,IAAMA,EAAN,cAAqBC,CAAuB,CAC9B,QAAU,qBACrB,MACA,KACA,MAAuB,CAAC,EACxB,QAAyB,CAAC,EAC1B,QAER,IAAY,KAAM,CAChB,OAAO,KAAK,OAAO,KAAO,CAC5B,CACA,IAAY,KAAM,CAChB,OAAO,KAAK,OAAO,KAAO,GAC5B,CACA,IAAY,MAAO,CACjB,OAAO,KAAK,OAAO,MAAQ,CAC7B,CACA,IAAY,SAAU,CACpB,MAAO,CAAC,CAAC,KAAK,OAAO,KACvB,CAEmB,YAAgB,CACjC,OAAO,KAAK,QAAU,CAAC,KAAK,IAAK,KAAK,GAAG,EAAI,KAAK,GACpD,CACmB,SAAmB,CACpC,MAAO,EACT,CAEQ,IAAIC,EAAmB,CAC7B,OAAO,KAAK,OAAO,OAAS,KAAK,OAAO,OAAOA,CAAC,EAAI,OAAOA,CAAC,CAC9D,CACQ,MAAiB,CACvB,OAAO,MAAM,QAAQ,KAAK,KAAK,EAAI,CAAC,GAAG,KAAK,KAAK,EAAI,CAAC,KAAK,KAAe,CAC5E,CAGQ,KAAKA,EAAmB,CAC9B,IAAMC,EAAI,KAAK,OAAOD,EAAI,KAAK,KAAO,KAAK,IAAI,EAAI,KAAK,KAAO,KAAK,IAC9DE,GAAO,OAAO,KAAK,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,GAAK,IAAI,OACpD,OAAO,KAAK,IAAI,KAAK,IAAK,KAAK,IAAI,KAAK,IAAK,OAAOD,EAAE,QAAQC,CAAG,CAAC,CAAC,CAAC,CACtE,CAEU,eAAgB,CACxB,IAAMC,EAAI,KAAK,OACf,KAAK,MAAQC,EAAE,MAAO,kBAAkB,EACxC,KAAK,KAAOA,EAAE,MAAO,iBAAiB,EACtC,KAAK,QAAUA,EAAE,MAAO,mBAAoB,CAAE,cAAe,MAAO,CAAC,EACrE,KAAK,MAAM,OAAO,KAAK,KAAM,KAAK,OAAO,EACzC,KAAK,WAAW,EAChB,KAAK,OAAO,KAAK,MAAO,cAAgBC,GAAoB,KAAK,YAAYA,CAAC,CAAC,EAC/E,IAAMC,EAAMF,EAAE,MAAO,iBAAkB,CAAC,EAAG,KAAK,KAAK,EACrD,OAAID,EAAE,WAAWG,EAAI,OAAOF,EAAE,MAAO,mBAAoB,CAAC,EAAGA,EAAE,OAAQ,GAAI,CAAC,EAAG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAGA,EAAE,OAAQ,GAAI,CAAC,EAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAC1I,KAAK,QAAU,KAAK,MAAM,CAAC,EACpBE,CACT,CAEQ,YAAa,CACnB,KAAK,MAAM,QAASC,GAAMA,EAAE,OAAO,CAAC,EACpC,KAAK,MAAQ,CAAC,EACd,KAAK,QAAU,CAAC,EAChB,IAAMN,EAAI,KAAK,QAAU,EAAI,EAC7B,QAASO,EAAI,EAAGA,EAAIP,EAAGO,IAAK,CAC1B,IAAMC,EAASL,EAAE,OAAQ,oBAAqB,CAAE,cAAe,MAAO,CAAC,EACjEM,EAAON,EAAE,MAAO,kBAAmB,CAAE,KAAM,SAAU,SAAU,EAAG,mBAAoB,aAAc,SAAUI,CAAE,EAAGC,CAAM,EAC/H,KAAK,OAAOC,EAAM,cAAgBL,GAAoB,KAAK,WAAWA,EAAGG,CAAC,CAAC,EAC3E,KAAK,OAAOE,EAAM,UAAYL,GAAqB,KAAK,MAAMA,EAAGG,CAAC,CAAC,EACnE,KAAK,OAAOE,EAAM,QAAS,IAAM,KAAK,GAAG,UAAU,IAAI,eAAe,CAAC,EACvE,KAAK,OAAOA,EAAM,OAAQ,IAAM,KAAK,GAAG,UAAU,OAAO,eAAe,CAAC,EACzE,KAAK,MAAM,KAAKA,CAAI,EACpB,KAAK,QAAQ,KAAKD,CAAM,EACxB,KAAK,MAAM,OAAOC,CAAI,CACxB,CACF,CAEmB,UAAW,CAC5B,MAAM,SAAS,EACf,KAAK,MAAM,QAASH,GAAMA,EAAE,aAAa,kBAAmB,GAAG,KAAK,EAAE,QAAQ,CAAC,EAC9E,KAAK,GAAG,cAAc,kBAAkB,EAAkB,GAAK,GAAG,KAAK,EAAE,SAC1E,KAAK,WAAW,EAChB,KAAK,GAAG,UAAU,OAAO,oBAAqB,KAAK,OAAO,YAAc,QAAQ,EAChF,KAAK,GAAG,UAAU,OAAO,mBAAoB,KAAK,OAAO,YAAc,OAAO,CAChF,CAIQ,IAAIP,EAAmB,CAC7B,OAAO,KAAK,MAAQ,KAAK,IAAM,GAAMA,EAAI,KAAK,MAAQ,KAAK,IAAM,KAAK,KAAQ,GAChF,CAEU,WAAWA,EAAY,CAC/B,IAAMW,EAAO,MAAM,QAAQX,CAAC,EAAIA,EAAI,CAACA,CAAC,EACtC,KAAK,MAAM,QAAQ,CAACO,EAAGC,IAAM,CAC3B,IAAMI,EAAID,EAAKH,CAAC,GAAKG,EAAK,CAAC,EAC3BJ,EAAE,MAAM,KAAO,GAAG,KAAK,IAAIK,CAAC,CAAC,IAC7BL,EAAE,aAAa,gBAAiB,OAAOC,IAAM,EAAIG,EAAK,CAAC,EAAI,KAAK,GAAG,CAAC,EACpEJ,EAAE,aAAa,gBAAiB,OAAOC,IAAM,GAAK,KAAK,QAAUG,EAAK,CAAC,EAAI,KAAK,GAAG,CAAC,EACpFJ,EAAE,aAAa,gBAAiB,OAAOK,CAAC,CAAC,EACzCL,EAAE,aAAa,iBAAkB,KAAK,IAAIK,CAAC,CAAC,EAC5C,KAAK,QAAQJ,CAAC,EAAE,YAAc,KAAK,IAAII,CAAC,CAC1C,CAAC,EACD,IAAMC,EAAK,KAAK,QAAU,KAAK,IAAIF,EAAK,CAAC,CAAC,EAAI,EACxCG,EAAK,KAAK,IAAI,KAAK,QAAUH,EAAK,CAAC,EAAIA,EAAK,CAAC,CAAC,EACpD,KAAK,KAAK,MAAM,KAAO,GAAGE,CAAE,IAC5B,KAAK,KAAK,MAAM,MAAQ,GAAG,KAAK,IAAI,EAAGC,EAAKD,CAAE,CAAC,GACjD,CAEQ,YAAa,CACnB,IAAME,EAAI,KAAK,OAAO,MAEtB,GADA,KAAK,QAAQ,gBAAgB,EACzB,CAACA,EAAG,OACR,IAAMC,EAAqB,MAAM,QAAQD,CAAC,EAAIA,GAAK,IAAM,CACvD,IAAMd,EAAI,KAAK,OAAO,KAAK,IAAM,KAAK,KAAO,KAAK,IAAI,EAChDgB,EAAQ,KAAK,KAAKhB,EAAI,EAAE,GAAK,EACnC,OAAO,MAAM,KAAK,CAAE,OAAQ,KAAK,MAAMA,EAAIgB,CAAK,EAAI,CAAE,EAAG,CAACC,EAAGV,KAAO,CAAE,MAAO,KAAK,IAAMA,EAAIS,EAAQ,KAAK,IAAK,EAAE,CAClH,GAAG,EACH,QAAWE,KAAMH,EAAM,CACrB,IAAMI,EAAOhB,EAAE,OAAQ,kBAAmB,CAAC,EAAGe,EAAG,MAAQf,EAAE,OAAQ,wBAAyB,CAAC,EAAGe,EAAG,KAAK,EAAI,EAAE,EAC9GC,EAAK,MAAM,KAAO,GAAG,KAAK,IAAID,EAAG,KAAK,CAAC,IACvC,KAAK,QAAQ,OAAOC,CAAI,CAC1B,CACF,CAIQ,QAAQf,EAAyB,CACvC,IAAMgB,EAAI,KAAK,MAAM,sBAAsB,EAC3C,OAAO,KAAK,KAAK,KAAK,IAAM,KAAK,IAAI,EAAG,KAAK,IAAI,GAAIhB,EAAE,QAAUgB,EAAE,OAASA,EAAE,OAAS,EAAE,CAAC,GAAK,KAAK,IAAM,KAAK,IAAI,CACrH,CAEQ,QAAQrB,EAAmB,CACjC,GAAI,CAAC,KAAK,QAAS,MAAO,GAC1B,GAAM,CAACsB,EAAGC,CAAC,EAAI,KAAK,KAAK,EACzB,OAAO,KAAK,IAAIvB,EAAIsB,CAAC,GAAK,KAAK,IAAItB,EAAIuB,CAAC,EAAKvB,EAAIuB,EAAI,EAAI,EAAK,CAChE,CAEQ,YAAYlB,EAAiB,CACnC,GAAKA,EAAE,OAAuB,QAAQ,kBAAkB,GAAK,KAAK,OAAO,UAAY,KAAK,OAAO,UAAYA,EAAE,OAAQ,OACvH,IAAMG,EAAI,KAAK,QAAQ,KAAK,QAAQH,CAAC,CAAC,EACtC,KAAK,WAAWA,EAAGG,CAAC,CACtB,CAEQ,WAAWH,EAAiBG,EAAW,CAC7C,GAAI,KAAK,OAAO,UAAY,KAAK,OAAO,UAAYH,EAAE,OAAQ,OAC9DA,EAAE,eAAe,EACjB,IAAMK,EAAO,KAAK,MAAMF,CAAC,EACzBE,EAAK,MAAM,EACXA,EAAK,oBAAoBL,EAAE,SAAS,EACpC,KAAK,GAAG,UAAU,IAAI,aAAa,EACnC,KAAK,KAAK,aAAa,EACvB,IAAMmB,EAAUC,EAAYf,EAAM,GAAG,EACjCgB,EAAOrB,EAAE,QACb,KAAK,MAAMG,EAAG,KAAK,QAAQH,CAAC,CAAC,EAC7B,IAAMsB,EAAQZ,GAAoB,CAChCS,EAAQ,KAAKT,EAAE,QAAUW,CAAI,EAC7BA,EAAOX,EAAE,QACT,KAAK,MAAMP,EAAG,KAAK,QAAQO,CAAC,CAAC,CAC/B,EACMa,EAAK,IAAM,CACflB,EAAK,oBAAoB,cAAeiB,CAAI,EAC5CjB,EAAK,oBAAoB,YAAakB,CAAE,EACxClB,EAAK,oBAAoB,gBAAiBkB,CAAE,EAC5C,KAAK,GAAG,UAAU,OAAO,aAAa,EACtCJ,EAAQ,QAAQ,EACf,KAAK,aAAa,EAAG,KAAK,KAAK,YAAa,KAAK,KAAK,CACzD,EACAd,EAAK,iBAAiB,cAAeiB,CAAI,EACzCjB,EAAK,iBAAiB,YAAakB,CAAE,EACrClB,EAAK,iBAAiB,gBAAiBkB,CAAE,EACzC,KAAK,IAAIA,CAAE,CACb,CAGQ,MAAMpB,EAAWR,EAAW,CAClC,IAAMW,EAAO,KAAK,KAAK,EACnB,KAAK,QAASA,EAAKH,CAAC,EAAIA,IAAM,EAAI,KAAK,IAAIR,EAAGW,EAAK,CAAC,CAAC,EAAI,KAAK,IAAIX,EAAGW,EAAK,CAAC,CAAC,EAC3EA,EAAK,CAAC,EAAIX,EACf,IAAM6B,EAAU,KAAK,QAAW,CAAClB,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EAAyBA,EAAK,CAAC,EAC5E,KAAK,QAAQkB,EAAM,KAAK,KAAK,IACjC,KAAK,OAAOA,CAAI,EAChB,KAAK,WAAWA,CAAI,EACtB,CAEQ,MAAMxB,EAAkBG,EAAW,CACzC,GAAI,KAAK,OAAO,UAAY,KAAK,OAAO,SAAU,OAClD,IAAMG,EAAO,KAAK,KAAK,EACjBmB,EAAMnB,EAAKH,CAAC,EACZuB,EAAM,KAAK,KAAO,GAClBlB,EAAK,KAAK,SAAWL,IAAM,EAAIG,EAAK,CAAC,EAAI,KAAK,IAC9CG,EAAK,KAAK,SAAWN,IAAM,EAAIG,EAAK,CAAC,EAAI,KAAK,IAC9CqB,EAA6B,CAAE,WAAYF,EAAM,KAAK,KAAM,QAASA,EAAM,KAAK,KAAM,UAAWA,EAAM,KAAK,KAAM,UAAWA,EAAM,KAAK,KAAM,OAAQA,EAAMC,EAAK,SAAUD,EAAMC,EAAK,KAAMlB,EAAI,IAAKC,CAAG,EACxMT,EAAE,OAAO2B,IACf3B,EAAE,eAAe,EACjB,KAAK,MAAMG,EAAG,KAAK,IAAIK,EAAI,KAAK,IAAIC,EAAI,KAAK,KAAKkB,EAAG3B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAC7D,KAAK,aAAa,EAAG,KAAK,KAAK,YAAa,KAAK,KAAK,EACzD,CAKA,YAAqB,CACnB,OAAO,KAAK,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC,CAChC,CAEQ,SAAU,CACX,KAAK,WACV,KAAK,WAAW,KAAK,KAAK,EAC1B,KAAK,WAAW,EAClB,CAEA,OAAO4B,EAAa,CAClB,KAAK,OAAO,IAAMA,EAClB,KAAK,MAAQ,KAAK,SAAS,KAAK,KAAK,EACrC,KAAK,QAAQ,CACf,CACA,OAAOC,EAAa,CAClB,KAAK,OAAO,IAAMA,EAClB,KAAK,MAAQ,KAAK,SAAS,KAAK,KAAK,EACrC,KAAK,QAAQ,CACf,CACA,QAAQC,EAAc,CACpB,KAAK,OAAO,KAAOA,EACnB,KAAK,MAAQ,KAAK,SAAS,KAAK,KAAK,EACrC,KAAK,QAAQ,CACf,CACQ,SAASnC,EAAS,CACxB,OAAO,MAAM,QAAQA,CAAC,EAAK,CAAC,KAAK,KAAKA,EAAE,CAAC,CAAC,EAAG,KAAK,KAAKA,EAAE,CAAC,CAAC,CAAC,EAAyB,KAAK,KAAKA,CAAC,CAClG,CAGA,SAASoC,EAAgB,CACvB,GAAIA,IAAU,KAAK,QAAS,OAC5B,IAAMpC,EAAI,KAAK,KAAK,EACpB,KAAK,OAAO,MAAQoC,EACpB,KAAK,MAAQA,EAAQ,CAACpC,EAAE,CAAC,EAAG,KAAK,GAAG,EAAIA,EAAE,CAAC,EACtC,KAAK,WACV,KAAK,WAAW,EAChB,KAAK,QAAU,KAAK,MAAM,CAAC,EAC3B,KAAK,WAAW,KAAK,KAAK,EAC5B,CAEmB,WAAWqC,EAAmB,CAC/C,KAAK,MAAM,QAAS9B,IAAQA,EAAE,SAAW8B,EAAW,GAAK,EAAI9B,EAAE,aAAa,gBAAiB,OAAO8B,CAAQ,CAAC,EAAE,CACjH,CACmB,WAAWC,EAAmB,CAC/C,KAAK,MAAM,QAAS/B,GAAMA,EAAE,aAAa,gBAAiB,OAAO+B,CAAQ,CAAC,CAAC,CAC7E,CACF,EACAC,EAAS,SAAUzC,CAAM",
6
+ "names": ["Slider", "Field", "v", "n", "dec", "c", "h", "e", "box", "k", "i", "bubble", "knob", "vals", "x", "lo", "hi", "m", "list", "every", "_", "mk", "tick", "r", "a", "b", "stretch", "knobStretch", "prev", "move", "up", "next", "cur", "big", "to", "min", "max", "step", "range", "disabled", "readonly", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as o}from"./chunk-4EZJ5FKJ.js";import{a as h}from"./chunk-A2NKDOYN.js";import{b as i}from"./chunk-PZSHOSOS.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{e as s,f as r}from"./chunk-MW3RWBZ7.js";s("en",{chipRemove:"Remove {text}"});s("pt-BR",{chipRemove:"Remover {text}"});var n=class extends h{baseCls="op-chip";tag="span";main;textEl;removeBtn;onRender(){let e=this.config;this.textEl=i("span","op-chip__text"),this.main=i("button","op-chip__main",{type:"button"},e.icon?o(e.icon):"",this.textEl),this.el.append(this.main),this.listen(this.main,"click",()=>{this.config.disabled||(this.config.selectable&&this.setSelected(!this.config.selected,!0),this.config.handler?.(this),this.emit("click",this))}),e.removable&&(this.removeBtn=i("button","op-chip__remove",{type:"button"},o("x")),this.el.append(this.removeBtn),this.listen(this.removeBtn,"click",()=>!this.config.disabled&&this.emit("remove",this)),this.listen(this.main,"keydown",t=>{(t.key==="Delete"||t.key==="Backspace")&&!this.config.disabled&&this.emit("remove",this)})),this.setText(e.text??""),this.setSelected(!!e.selected),this.setDisabled(!!e.disabled)}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=e,this.removeBtn?.setAttribute("aria-label",r("chipRemove",{text:e})))}setSelected(e,t=!1){this.config.selected=e,this.rendered&&(this.el.classList.toggle("is-selected",e),this.config.selectable&&this.main.setAttribute("aria-pressed",String(e)),t&&this.emit("change",e))}isSelected(){return!!this.config.selected}setDisabled(e){super.setDisabled(e),this.rendered&&(this.main.disabled=e,this.removeBtn&&(this.removeBtn.disabled=e))}focusEl(){return this.main}};l("chip",n);export{n as a};
2
+ //# sourceMappingURL=chunk-ZPPELYNJ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/base/chip/chip.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 '../icon/icon';\n\naddMessages('en', { chipRemove: 'Remove {text}' });\naddMessages('pt-BR', { chipRemove: 'Remover {text}' });\n\nexport interface ChipConfig extends ComponentConfig {\n text?: string;\n icon?: string;\n /** Click toggles it on and off (a filter, a tag being picked): a toggle button with `aria-pressed`. */\n selectable?: boolean;\n selected?: boolean;\n /** Shows a \u00D7 button that fires `remove` (the app removes the chip). */\n removable?: boolean;\n disabled?: boolean;\n handler?: (chip: Chip) => void;\n}\n\n/** A compact token: a filter to toggle, a tag to remove, a choice to click. */\nexport class Chip extends Component<ChipConfig> {\n protected override baseCls = 'op-chip';\n protected override tag = 'span' as const;\n private main!: HTMLButtonElement;\n private textEl!: HTMLElement;\n private removeBtn?: HTMLButtonElement;\n\n protected override onRender() {\n const c = this.config;\n this.textEl = h('span', 'op-chip__text');\n this.main = h('button', 'op-chip__main', { type: 'button' }, c.icon ? iconEl(c.icon) : '', this.textEl);\n this.el.append(this.main);\n this.listen(this.main, 'click', () => {\n if (this.config.disabled) return;\n if (this.config.selectable) this.setSelected(!this.config.selected, true);\n this.config.handler?.(this);\n this.emit('click', this);\n });\n if (c.removable) {\n this.removeBtn = h('button', 'op-chip__remove', { type: 'button' }, iconEl('x'));\n this.el.append(this.removeBtn);\n this.listen(this.removeBtn, 'click', () => !this.config.disabled && this.emit('remove', this));\n this.listen(this.main, 'keydown', (e: KeyboardEvent) => {\n if ((e.key === 'Delete' || e.key === 'Backspace') && !this.config.disabled) this.emit('remove', this);\n });\n }\n this.setText(c.text ?? '');\n this.setSelected(!!c.selected);\n this.setDisabled(!!c.disabled);\n }\n\n setText(text: string) {\n this.config.text = text;\n if (!this.rendered) return;\n this.textEl.textContent = text;\n this.removeBtn?.setAttribute('aria-label', t('chipRemove', { text }));\n }\n /** Selected state (only meaningful with `selectable`); `notify` fires `change`. */\n setSelected(on: boolean, notify = false) {\n this.config.selected = on;\n if (!this.rendered) return;\n this.el.classList.toggle('is-selected', on);\n if (this.config.selectable) this.main.setAttribute('aria-pressed', String(on));\n if (notify) this.emit('change', on);\n }\n isSelected(): boolean {\n return !!this.config.selected;\n }\n override setDisabled(disabled: boolean) {\n super.setDisabled(disabled);\n if (!this.rendered) return;\n this.main.disabled = disabled;\n if (this.removeBtn) this.removeBtn.disabled = disabled;\n }\n protected override focusEl(): HTMLElement {\n return this.main;\n }\n}\nregister('chip', Chip);\n"],
5
+ "mappings": "+MAMAA,EAAY,KAAM,CAAE,WAAY,eAAgB,CAAC,EACjDA,EAAY,QAAS,CAAE,WAAY,gBAAiB,CAAC,EAe9C,IAAMC,EAAN,cAAmBC,CAAsB,CAC3B,QAAU,UACV,IAAM,OACjB,KACA,OACA,UAEW,UAAW,CAC5B,IAAMC,EAAI,KAAK,OACf,KAAK,OAASC,EAAE,OAAQ,eAAe,EACvC,KAAK,KAAOA,EAAE,SAAU,gBAAiB,CAAE,KAAM,QAAS,EAAGD,EAAE,KAAOE,EAAOF,EAAE,IAAI,EAAI,GAAI,KAAK,MAAM,EACtG,KAAK,GAAG,OAAO,KAAK,IAAI,EACxB,KAAK,OAAO,KAAK,KAAM,QAAS,IAAM,CAChC,KAAK,OAAO,WACZ,KAAK,OAAO,YAAY,KAAK,YAAY,CAAC,KAAK,OAAO,SAAU,EAAI,EACxE,KAAK,OAAO,UAAU,IAAI,EAC1B,KAAK,KAAK,QAAS,IAAI,EACzB,CAAC,EACGA,EAAE,YACJ,KAAK,UAAYC,EAAE,SAAU,kBAAmB,CAAE,KAAM,QAAS,EAAGC,EAAO,GAAG,CAAC,EAC/E,KAAK,GAAG,OAAO,KAAK,SAAS,EAC7B,KAAK,OAAO,KAAK,UAAW,QAAS,IAAM,CAAC,KAAK,OAAO,UAAY,KAAK,KAAK,SAAU,IAAI,CAAC,EAC7F,KAAK,OAAO,KAAK,KAAM,UAAYC,GAAqB,EACjDA,EAAE,MAAQ,UAAYA,EAAE,MAAQ,cAAgB,CAAC,KAAK,OAAO,UAAU,KAAK,KAAK,SAAU,IAAI,CACtG,CAAC,GAEH,KAAK,QAAQH,EAAE,MAAQ,EAAE,EACzB,KAAK,YAAY,CAAC,CAACA,EAAE,QAAQ,EAC7B,KAAK,YAAY,CAAC,CAACA,EAAE,QAAQ,CAC/B,CAEA,QAAQI,EAAc,CACpB,KAAK,OAAO,KAAOA,EACd,KAAK,WACV,KAAK,OAAO,YAAcA,EAC1B,KAAK,WAAW,aAAa,aAAcC,EAAE,aAAc,CAAE,KAAAD,CAAK,CAAC,CAAC,EACtE,CAEA,YAAYE,EAAaC,EAAS,GAAO,CACvC,KAAK,OAAO,SAAWD,EAClB,KAAK,WACV,KAAK,GAAG,UAAU,OAAO,cAAeA,CAAE,EACtC,KAAK,OAAO,YAAY,KAAK,KAAK,aAAa,eAAgB,OAAOA,CAAE,CAAC,EACzEC,GAAQ,KAAK,KAAK,SAAUD,CAAE,EACpC,CACA,YAAsB,CACpB,MAAO,CAAC,CAAC,KAAK,OAAO,QACvB,CACS,YAAYE,EAAmB,CACtC,MAAM,YAAYA,CAAQ,EACrB,KAAK,WACV,KAAK,KAAK,SAAWA,EACjB,KAAK,YAAW,KAAK,UAAU,SAAWA,GAChD,CACmB,SAAuB,CACxC,OAAO,KAAK,IACd,CACF,EACAC,EAAS,OAAQX,CAAI",
6
+ "names": ["addMessages", "Chip", "Component", "c", "h", "iconEl", "e", "text", "t", "on", "notify", "disabled", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{c as g}from"./chunk-4EZJ5FKJ.js";import{a as b}from"./chunk-A2NKDOYN.js";import{b as h,f as m}from"./chunk-PZSHOSOS.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{e as c,f as o}from"./chunk-MW3RWBZ7.js";c("en",{pageFirst:"First page",pagePrev:"Previous page",pageNext:"Next page",pageLast:"Last page",pageLabel:"Pagination",pageGoto:"Page {n}",pageInfo:"{from}\u2013{to} of {total}"});c("pt-BR",{pageFirst:"Primeira p\xE1gina",pagePrev:"P\xE1gina anterior",pageNext:"Pr\xF3xima p\xE1gina",pageLast:"\xDAltima p\xE1gina",pageLabel:"Pagina\xE7\xE3o",pageGoto:"P\xE1gina {n}",pageInfo:"{from}\u2013{to} de {total}"});var f=class extends b{baseCls="op-pagination";tag="nav";unsub;onRender(){this.el.setAttribute("aria-label",o("pageLabel")),this.listen(this.el,"click",t=>{let a=t.target.closest("button[data-page]");a&&!a.disabled&&this.setPage(Number(a.dataset.page))}),this.bindStore(this.config.store),this.own(()=>this.unsub?.()),this.paint()}bindStore(t){this.unsub?.(),this.unsub=t?.subscribe(()=>this.paint())}getPage(){return this.config.store?.page??this.config.page??1}size(){return this.config.store?.pageSize||this.config.pageSize||20}total(){return this.config.store?.totalCount??this.config.total??0}pages(){return Math.max(1,Math.ceil(this.total()/this.size()))}setPage(t){t=m(t,1,this.pages()),!(t===this.getPage()||this.emit("before-page-change",t)===!1)&&(this.config.store?this.config.store.setPage(t):(this.config.page=t,this.paint()),this.emit("page-change",t))}setTotal(t){this.config.total=t,this.paint()}setPageSize(t){this.config.pageSize=t,this.paint()}setStore(t){this.config.store=t,this.bindStore(t),this.paint()}window(){let t=this.pages(),a=this.getPage(),n=this.config.siblings??1;if(t<=n*2+5)return Array.from({length:t},(i,s)=>s+1);let p=new Set([1,t,...Array.from({length:n*2+1},(i,s)=>a-n+s)].filter(i=>i>=1&&i<=t)),r=[],e=0;for(let i of[...p].sort((s,l)=>s-l))i-e>1&&r.push(i-e===2?i-1:null),r.push(i),e=i;return r}paint(){if(!this.rendered)return;let t=this.getPage(),a=this.pages(),n=(e,i,s,l=!1,u=!1)=>h("button",`op-button op-button--ghost op-pagination__btn${u?" is-current":""}`,{type:"button","data-page":e,"aria-label":s,"aria-current":u?"page":null,disabled:l},i),p=[n(1,g("chevrons-left"),o("pageFirst"),t===1),n(t-1,g("chevron-left"),o("pagePrev"),t===1),...this.window().map(e=>e==null?h("span","op-pagination__gap",{"aria-hidden":"true"},"\u2026"):n(e,String(e),o("pageGoto",{n:e}),!1,e===t)),n(t+1,g("chevron-right"),o("pageNext"),t===a),n(a,g("chevrons-right"),o("pageLast"),t===a)];if(this.config.showInfo!==!1){let e=this.total(),i=this.size();p.push(h("span","op-pagination__info",{},e?o("pageInfo",{from:(t-1)*i+1,to:Math.min(t*i,e),total:e}):""))}let r=this.el.contains(document.activeElement)?document.activeElement.dataset.page:void 0;this.el.replaceChildren(...p),r&&this.el.querySelector(`[data-page="${r}"]:not(:disabled)`)?.focus()}};d("pagination",f);export{f as a};
2
+ //# sourceMappingURL=chunk-ZVK4L5GK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/pagination/pagination.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h, clamp } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport type { Store } from '../../../data/store';\n\naddMessages('en', {\n pageFirst: 'First page',\n pagePrev: 'Previous page',\n pageNext: 'Next page',\n pageLast: 'Last page',\n pageLabel: 'Pagination',\n pageGoto: 'Page {n}',\n pageInfo: '{from}\u2013{to} of {total}',\n});\naddMessages('pt-BR', {\n pageFirst: 'Primeira p\u00E1gina',\n pagePrev: 'P\u00E1gina anterior',\n pageNext: 'Pr\u00F3xima p\u00E1gina',\n pageLast: '\u00DAltima p\u00E1gina',\n pageLabel: 'Pagina\u00E7\u00E3o',\n pageGoto: 'P\u00E1gina {n}',\n pageInfo: '{from}\u2013{to} de {total}',\n});\n\nexport interface PaginationConfig extends ComponentConfig {\n /** Reads and drives the store's page. Without it, use `total`/`pageSize`/`page`. */\n store?: Store<any>;\n total?: number;\n pageSize?: number;\n page?: number;\n /** Page buttons shown on each side of the current one. Default 1. */\n siblings?: number;\n showInfo?: boolean;\n}\n\nexport class Pagination extends Component<PaginationConfig> {\n protected override baseCls = 'op-pagination';\n protected override tag = 'nav' as const;\n private unsub?: () => void;\n\n protected override onRender() {\n this.el.setAttribute('aria-label', t('pageLabel'));\n this.listen(this.el, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLButtonElement>('button[data-page]');\n if (b && !b.disabled) this.setPage(Number(b.dataset.page));\n });\n this.bindStore(this.config.store);\n this.own(() => this.unsub?.());\n this.paint();\n }\n\n private bindStore(store?: Store<any>) {\n this.unsub?.();\n this.unsub = store?.subscribe(() => this.paint());\n }\n\n getPage(): number {\n return this.config.store?.page ?? this.config.page ?? 1;\n }\n private size(): number {\n return this.config.store?.pageSize || this.config.pageSize || 20;\n }\n private total(): number {\n return this.config.store?.totalCount ?? this.config.total ?? 0;\n }\n private pages(): number {\n return Math.max(1, Math.ceil(this.total() / this.size()));\n }\n\n /** Goes to a page (`before-page-change` can cancel), updating the store when there is one. */\n setPage(page: number): void {\n page = clamp(page, 1, this.pages());\n if (page === this.getPage() || this.emit('before-page-change', page) === false) return;\n if (this.config.store) this.config.store.setPage(page);\n else {\n this.config.page = page;\n this.paint();\n }\n this.emit('page-change', page);\n }\n setTotal(total: number) {\n this.config.total = total;\n this.paint();\n }\n setPageSize(size: number) {\n this.config.pageSize = size;\n this.paint();\n }\n setStore(store: Store<any>) {\n this.config.store = store;\n this.bindStore(store);\n this.paint();\n }\n\n /** Page numbers with `null` where a gap is collapsed: 1 \u2026 4 5 6 \u2026 20. */\n private window(): Array<number | null> {\n const last = this.pages();\n const cur = this.getPage();\n const s = this.config.siblings ?? 1;\n if (last <= s * 2 + 5) return Array.from({ length: last }, (_, i) => i + 1); // small sets: no gaps\n const set = new Set([1, last, ...Array.from({ length: s * 2 + 1 }, (_, i) => cur - s + i)].filter((n) => n >= 1 && n <= last));\n const out: Array<number | null> = [];\n let prev = 0;\n for (const n of [...set].sort((a, b) => a - b)) {\n if (n - prev > 1) out.push(n - prev === 2 ? n - 1 : null);\n out.push(n);\n prev = n;\n }\n return out;\n }\n\n private paint() {\n if (!this.rendered) return;\n const cur = this.getPage();\n const last = this.pages();\n const btn = (page: number, content: Node | string, label: string, disabled = false, current = false) =>\n h('button', `op-button op-button--ghost op-pagination__btn${current ? ' is-current' : ''}`, { type: 'button', 'data-page': page, 'aria-label': label, 'aria-current': current ? 'page' : null, disabled }, content);\n const nodes: Node[] = [\n btn(1, iconEl('chevrons-left'), t('pageFirst'), cur === 1),\n btn(cur - 1, iconEl('chevron-left'), t('pagePrev'), cur === 1),\n ...this.window().map((n) => (n == null ? h('span', 'op-pagination__gap', { 'aria-hidden': 'true' }, '\u2026') : btn(n, String(n), t('pageGoto', { n }), false, n === cur))),\n btn(cur + 1, iconEl('chevron-right'), t('pageNext'), cur === last),\n btn(last, iconEl('chevrons-right'), t('pageLast'), cur === last),\n ];\n if (this.config.showInfo !== false) {\n const total = this.total();\n const size = this.size();\n nodes.push(h('span', 'op-pagination__info', {}, total ? t('pageInfo', { from: (cur - 1) * size + 1, to: Math.min(cur * size, total), total }) : ''));\n }\n const focusPage = this.el.contains(document.activeElement) ? (document.activeElement as HTMLElement).dataset.page : undefined;\n this.el.replaceChildren(...nodes);\n if (focusPage) this.el.querySelector<HTMLElement>(`[data-page=\"${focusPage}\"]:not(:disabled)`)?.focus();\n }\n}\nregister('pagination', Pagination);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "Pagination", "Component", "t", "e", "b", "store", "page", "clamp", "total", "size", "last", "cur", "s", "_", "i", "set", "n", "out", "prev", "a", "btn", "content", "label", "disabled", "current", "nodes", "iconEl", "focusPage", "register"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as y}from"./chunk-A2NKDOYN.js";import{e as l}from"./chunk-PZSHOSOS.js";import{c as m}from"./chunk-TIPK3SCJ.js";var g=new Map;function u(i,t){g.set(i,t)}function h(i){if(typeof i=="object"&&"init"in i)return i;let t=typeof i=="string"?{type:i}:i,o=g.get(t.type);if(!o)throw new Error(`Optikos: unknown layout "${t.type}"`);return o(t)}function c(i,t,o){let e=i.getBody(),n=!1,r=d=>{d!==n&&(n=d,e.classList.toggle("is-narrow",d),o?.(d),i.emit("narrow-change",d))};if(typeof ResizeObserver<"u"){let d=new ResizeObserver(()=>e.clientWidth>0&&r(e.clientWidth<t));d.observe(e),i.own(()=>d.disconnect())}return{isNarrow:()=>n,setNarrow:r}}var f=(i,t=[])=>o=>({init(e){let n=e.getBody();n.classList.add("op-layout",`op-layout-${i}`);for(let r of t)o[r]!=null&&n.style.setProperty(`--op-layout-${r}`,l(o[r]))}});u("fit",f("fit"));var w=f("hbox",["gap","align","justify","wrap"]);u("hbox",i=>{let t=w(i),o;return{...t,init(e){t.init(e),i.stackBelow&&(e.getBody().classList.add("op-layout-stack"),o=c(e,Number(i.stackBelow)))},isNarrow:()=>!!o?.isNarrow(),setNarrow:e=>o?.setNarrow(e)}});u("vbox",f("vbox",["gap","align","justify","wrap"]));u("grid",i=>{let t;return{init(o){let e=o.getBody();e.classList.add("op-layout","op-layout-grid"),i.gap!=null&&e.style.setProperty("--op-layout-gap",l(i.gap));let n=i.columns??1;if(typeof n=="number"){e.style.setProperty("--op-layout-columns",String(n));let r=i.narrowBelow==null?480:Number(i.narrowBelow);r>0&&n>1&&(t=c(o,r))}else e.style.gridTemplateColumns=n},add(o,e){let n=e.config.colspan;n&&(e.el.style.gridColumn=n==="full"?"1 / -1":`span ${n}`)},isNarrow:()=>!!t?.isNarrow(),setNarrow:o=>t?.setNarrow(o)}});u("border",i=>{let t,o,e=()=>Array.from(o.getBody().children).filter(s=>s instanceof HTMLElement&&(s.dataset.region==="west"||s.dataset.region==="east")),n=s=>e().find(a=>a.dataset.region===s),r=()=>o.getBody().classList.toggle("has-open-region",e().some(s=>s.classList.contains("is-open"))),d=s=>{for(let a of e())(!s||a.dataset.region===s)&&a.classList.remove("is-open");r()};return{init(s){o=s;let a=s.getBody();a.classList.add("op-layout","op-layout-border"),i.gap!=null&&a.style.setProperty("--op-layout-gap",l(i.gap)),t=c(s,i.narrowBelow==null?768:Number(i.narrowBelow),p=>{p?i.open&&(n(String(i.open))?.classList.add("is-open"),r()):d()}),s.listen(a,"click",p=>p.target===a&&d()),s.listen(a,"keydown",p=>{p.key==="Escape"&&a.classList.contains("has-open-region")&&a.classList.contains("is-narrow")&&(p.stopPropagation(),d())})},add(s,a){let p=a.config.region??"center";a.el.style.gridArea=p,a.el.dataset.region=p},openRegion(s){let a=n(s);!a||!t?.isNarrow()||(d(),a.classList.add("is-open"),r(),(a.querySelector("input,button,[tabindex]")??a).focus?.())},closeRegion:d,toggleRegion(s){n(s)?.classList.contains("is-open")?d(s):this.openRegion(s)},isRegionOpen:s=>!!n(s)?.classList.contains("is-open"),isNarrow:()=>!!t?.isNarrow(),setNarrow:s=>t?.setNarrow(s)}});u("card",i=>{let t,o=(e,n)=>{t=n;for(let r of e.items)r.rendered?r.el.hidden=r!==n:r.config.hidden=r!==n;e.emit("activate",n)};return{init(e){e.getBody().classList.add("op-layout","op-layout-fit");let n=i.activeItem??e.config.activeItem??0;o(e,typeof n=="number"?e.items[n]:e.items.find(r=>r.id===n))},add(e,n){n.el.hidden=n!==t&&!!t,t||o(e,n)},remove(e,n,r){n===t&&o(e,e.items[Math.min(r,e.items.length-1)])},activate:o,getActive:()=>t}});var C=class i extends y{baseCls="op-container";defaultLayout;items=[];layout;constructor(t={}){super(t),this.items=(t.items??[]).map(o=>this.make(o))}getBody(){return this.el}shorthand(t){throw new Error(`Optikos: no shorthand for item "${t}" in ${this.baseCls}`)}make(t){typeof t=="string"&&(t=this.shorthand(t));let o=t instanceof y?t:m({type:this.config.defaultType,...this.config.defaults,...t});return o.parent=this,o}onRender(){let t=this.config.layout??this.defaultLayout;t&&(this.layout=h(t)).init(this),this.items.forEach((o,e)=>this.attach(o,e))}attach(t,o){let e=this.getBody(),n=this.items.slice(o+1).find(r=>r.rendered&&r.el.parentNode===e);e.insertBefore(t.el,n?.el??null),this.layout?.add?.(this,t,o),this.mounted&&t.notifyMount()}add(t){return this.insert(this.items.length,t)}insert(t,o){let e=this.make(o);return this.items.splice(t,0,e),this.rendered&&this.attach(e,t),this.emit("add",e),e}remove(t,o=!0){let e=typeof t=="number"?t:this.items.findIndex(r=>r===t||r.id===t),n=this.items[e];if(n)return this.items.splice(e,1),n.parent=void 0,this.layout?.remove?.(this,n,e),o?n.destroy():n.rendered&&n.el.remove(),this.emit("remove",n),n}removeAll(t=!0){for(let o of[...this.items])this.remove(o,t)}getItems(){return this.items}get(t){return this.items.find(o=>o.id===t)}query(t){let o=[];for(let e of this.items)t(e)&&o.push(e),e instanceof i&&o.push(...e.query(t));return o}getActiveItem(){return this.layout?.getActive?.(this)}setActiveItem(t){let o=typeof t=="number"?this.items[t]:this.items.find(e=>e===t||e.id===t);o&&this.layout?.activate?.(this,o)}notifyMount(){super.notifyMount();for(let t of this.items)t.notifyMount()}onDestroy(){for(let t of[...this.items])t.destroy()}setDisabled(t){super.setDisabled(t);for(let o of this.items)o.setDisabled(t)}};export{u as a,h as b,C as c};
2
+ //# sourceMappingURL=chunk-ZWNQREWS.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/layout/layout.ts", "../src/core/container.ts"],
4
+ "sourcesContent": ["import type { Component } from '../core/component';\nimport type { Container } from '../core/container';\nimport { px } from '../core/dom';\n\nexport interface Layout {\n init(c: Container): void;\n add?(c: Container, cmp: Component, index: number): void;\n remove?(c: Container, cmp: Component, index: number): void;\n /** Card only. */\n activate?(c: Container, cmp: Component): void;\n getActive?(c: Container): Component | undefined;\n /** Border only: below `narrowBelow` the west/east regions become drawers; these open and close them. */\n openRegion?(name: string): void;\n closeRegion?(name?: string): void;\n toggleRegion?(name: string): void;\n isRegionOpen?(name: string): boolean;\n /** Layouts that adapt to the width: whether the container is currently narrow, and a way to force it (tests, previews). */\n isNarrow?(): boolean;\n setNarrow?(narrow: boolean): void;\n}\n\nexport type LayoutConfig = { type: string; [option: string]: unknown };\nexport type LayoutSpec = string | LayoutConfig | Layout;\nexport type LayoutFactory = (config: Record<string, any>) => Layout;\n\nconst factories = new Map<string, LayoutFactory>();\n\n/** Registers a layout strategy under a name; users add their own the same way. */\nexport function registerLayout(name: string, factory: LayoutFactory): void {\n factories.set(name, factory);\n}\n\nexport function createLayout(spec: LayoutSpec): Layout {\n if (typeof spec === 'object' && 'init' in spec) return spec as Layout;\n const cfg = (typeof spec === 'string' ? { type: spec } : spec) as LayoutConfig;\n const f = factories.get(cfg.type);\n if (!f) throw new Error(`Optikos: unknown layout \"${cfg.type}\"`);\n return f(cfg);\n}\n\n/**\n * Keeps the class `is-narrow` on the container body while it is narrower than `below` px (a ResizeObserver on the\n * container itself, not the window, so a layout inside a small panel adapts too). Emits `narrow-change` on the container.\n */\nfunction watchNarrow(c: Container, below: number, on?: (narrow: boolean) => void) {\n const body = c.getBody();\n let narrow = false;\n const set = (n: boolean) => {\n if (n === narrow) return;\n narrow = n;\n body.classList.toggle('is-narrow', n);\n on?.(n);\n c.emit('narrow-change', n);\n };\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => body.clientWidth > 0 && set(body.clientWidth < below));\n ro.observe(body);\n c.own(() => ro.disconnect());\n }\n return { isNarrow: () => narrow, setNarrow: set };\n}\n\n/** Layouts that are only a class plus custom properties; the CSS does the work. */\nconst cssLayout =\n (name: string, vars: string[] = []): LayoutFactory =>\n (cfg) => ({\n init(c) {\n const body = c.getBody();\n body.classList.add('op-layout', `op-layout-${name}`);\n for (const v of vars) if (cfg[v] != null) body.style.setProperty(`--op-layout-${v}`, px(cfg[v]));\n },\n });\n\nregisterLayout('fit', cssLayout('fit'));\nconst hbox = cssLayout('hbox', ['gap', 'align', 'justify', 'wrap']);\n/** `stackBelow: 600`: under that width the row becomes a column. */\nregisterLayout('hbox', (cfg) => {\n const base = hbox(cfg);\n let w: ReturnType<typeof watchNarrow> | undefined;\n return {\n ...base,\n init(c) {\n base.init(c);\n if (cfg.stackBelow) {\n c.getBody().classList.add('op-layout-stack');\n w = watchNarrow(c, Number(cfg.stackBelow));\n }\n },\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\nregisterLayout('vbox', cssLayout('vbox', ['gap', 'align', 'justify', 'wrap']));\n\n/** Numeric `columns` collapse to one column under `narrowBelow` px (default 480; `0` turns it off). */\nregisterLayout('grid', (cfg) => {\n let w: ReturnType<typeof watchNarrow> | undefined;\n return {\n init(c) {\n const body = c.getBody();\n body.classList.add('op-layout', 'op-layout-grid');\n if (cfg.gap != null) body.style.setProperty('--op-layout-gap', px(cfg.gap));\n const cols = cfg.columns ?? 1;\n if (typeof cols === 'number') {\n body.style.setProperty('--op-layout-columns', String(cols));\n const below = cfg.narrowBelow == null ? 480 : Number(cfg.narrowBelow);\n if (below > 0 && cols > 1) w = watchNarrow(c, below);\n } else body.style.gridTemplateColumns = cols;\n },\n add(_c, cmp) {\n const span = cmp.config.colspan;\n if (span) cmp.el.style.gridColumn = span === 'full' ? '1 / -1' : `span ${span}`;\n },\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\n\n/**\n * Regions around a center. Under `narrowBelow` px (default 768) the west and east regions leave the grid and become\n * drawers over the center, closed until `openRegion('west')` (or `open: 'west'` in the layout config, to start open).\n * A scrim behind an open drawer closes it on click; Esc closes it too.\n */\nregisterLayout('border', (cfg) => {\n let w: ReturnType<typeof watchNarrow> | undefined;\n let cont!: Container;\n const regions = () => Array.from(cont.getBody().children).filter((e): e is HTMLElement => e instanceof HTMLElement && (e.dataset.region === 'west' || e.dataset.region === 'east'));\n const find = (name: string) => regions().find((e) => e.dataset.region === name);\n const sync = () => cont.getBody().classList.toggle('has-open-region', regions().some((e) => e.classList.contains('is-open')));\n const close = (name?: string) => {\n for (const e of regions()) if (!name || e.dataset.region === name) e.classList.remove('is-open');\n sync();\n };\n return {\n init(c) {\n cont = c;\n const body = c.getBody();\n body.classList.add('op-layout', 'op-layout-border');\n if (cfg.gap != null) body.style.setProperty('--op-layout-gap', px(cfg.gap));\n w = watchNarrow(c, cfg.narrowBelow == null ? 768 : Number(cfg.narrowBelow), (narrow) => {\n if (!narrow) close();\n else if (cfg.open) find(String(cfg.open))?.classList.add('is-open'), sync();\n });\n // the scrim is the body's own ::after: a click that lands on the body itself (not a child) closes the drawer\n c.listen(body, 'click', (e: Event) => e.target === body && close());\n c.listen(body, 'keydown', (e: KeyboardEvent) => {\n if (e.key === 'Escape' && body.classList.contains('has-open-region') && body.classList.contains('is-narrow')) {\n e.stopPropagation();\n close();\n }\n });\n },\n add(_c, cmp) {\n const region = cmp.config.region ?? 'center';\n cmp.el.style.gridArea = region;\n cmp.el.dataset.region = region;\n },\n openRegion(name) {\n const e = find(name);\n if (!e || !w?.isNarrow()) return;\n close();\n e.classList.add('is-open');\n sync();\n (e.querySelector<HTMLElement>('input,button,[tabindex]') ?? e).focus?.();\n },\n closeRegion: close,\n toggleRegion(name) {\n if (find(name)?.classList.contains('is-open')) close(name);\n else this.openRegion!(name);\n },\n isRegionOpen: (name) => !!find(name)?.classList.contains('is-open'),\n isNarrow: () => !!w?.isNarrow(),\n setNarrow: (n) => w?.setNarrow(n),\n };\n});\n\nregisterLayout('card', (cfg) => {\n let active: Component | undefined;\n // children that were never rendered (lazy tabs) only get the flag; their DOM is not built just to hide it\n const show = (c: Container, cmp: Component | undefined) => {\n active = cmp;\n for (const i of c.items) {\n if (i.rendered) i.el.hidden = i !== cmp;\n else i.config.hidden = i !== cmp;\n }\n c.emit('activate', cmp);\n };\n return {\n init(c) {\n c.getBody().classList.add('op-layout', 'op-layout-fit');\n const a = cfg.activeItem ?? c.config.activeItem ?? 0;\n show(c, typeof a === 'number' ? c.items[a] : c.items.find((i) => i.id === a));\n },\n add(c, cmp) {\n cmp.el.hidden = cmp !== active && !!active;\n if (!active) show(c, cmp);\n },\n remove(c, cmp, index) {\n if (cmp === active) show(c, c.items[Math.min(index, c.items.length - 1)]);\n },\n activate: show,\n getActive: () => active,\n };\n});\n", "import { Component, type ComponentConfig, type Parent } from './component';\nimport { create, type AnyConfig } from './registry';\nimport { createLayout, type Layout, type LayoutSpec } from '../layout/layout';\n\nexport interface ContainerConfig extends ComponentConfig {\n items?: Array<AnyConfig | Component | string>;\n layout?: LayoutSpec;\n /** Config merged into every item that does not set the key itself. */\n defaults?: Record<string, unknown>;\n /** `type` used by items that do not declare one. */\n defaultType?: string;\n /** Layout `card`: initial visible child (index or id). */\n activeItem?: number | string;\n}\n\nexport class Container<C extends ContainerConfig = ContainerConfig> extends Component<C> implements Parent {\n protected override baseCls = 'op-container';\n protected defaultLayout: LayoutSpec | undefined;\n items: Component[] = [];\n layout?: Layout;\n\n constructor(config: C = {} as C) {\n super(config);\n this.items = (config.items ?? []).map((i) => this.make(i));\n }\n\n /** Element that holds the children. Panels override it. */\n getBody(): HTMLElement {\n return this.el;\n }\n\n /** Turns shorthand strings (`'->'`) into configs. Subclasses override; the base has none. */\n protected shorthand(s: string): AnyConfig {\n throw new Error(`Optikos: no shorthand for item \"${s}\" in ${this.baseCls}`);\n }\n\n private make(item: AnyConfig | Component | string): Component {\n if (typeof item === 'string') item = this.shorthand(item);\n const c = item instanceof Component ? item : create({ type: this.config.defaultType, ...this.config.defaults, ...item });\n c.parent = this;\n return c;\n }\n\n protected override onRender(): void {\n const spec = this.config.layout ?? this.defaultLayout;\n if (spec) (this.layout = createLayout(spec)).init(this);\n this.items.forEach((c, i) => this.attach(c, i));\n }\n\n protected attach(c: Component, index: number): void {\n const body = this.getBody();\n const next = this.items.slice(index + 1).find((x) => x.rendered && x.el.parentNode === body);\n body.insertBefore(c.el, next?.el ?? null);\n this.layout?.add?.(this, c, index);\n if (this.mounted) c.notifyMount();\n }\n\n add(item: AnyConfig | Component | string): Component {\n return this.insert(this.items.length, item);\n }\n\n insert(index: number, item: AnyConfig | Component | string): Component {\n const c = this.make(item);\n this.items.splice(index, 0, c);\n if (this.rendered) this.attach(c, index);\n this.emit('add', c);\n return c;\n }\n\n /** Removes a child (by instance, id or index). Destroys it unless `destroy` is `false`. */\n remove(child: Component | string | number, destroy = true): Component | undefined {\n const i = typeof child === 'number' ? child : this.items.findIndex((c) => c === child || c.id === child);\n const c = this.items[i];\n if (!c) return;\n this.items.splice(i, 1);\n c.parent = undefined;\n this.layout?.remove?.(this, c, i);\n if (destroy) c.destroy();\n else if (c.rendered) c.el.remove();\n this.emit('remove', c);\n return c;\n }\n\n removeAll(destroy = true): void {\n for (const c of [...this.items]) this.remove(c, destroy);\n }\n\n getItems(): Component[] {\n return this.items;\n }\n\n /** Direct child by id. */\n get(id: string): Component | undefined {\n return this.items.find((c) => c.id === id);\n }\n\n /** All descendants (depth-first) matching `fn`. */\n query(fn: (c: Component) => boolean): Component[] {\n const out: Component[] = [];\n for (const c of this.items) {\n if (fn(c)) out.push(c);\n if (c instanceof Container) out.push(...c.query(fn));\n }\n return out;\n }\n\n /** Layout `card`: which child is visible. */\n getActiveItem(): Component | undefined {\n return this.layout?.getActive?.(this);\n }\n setActiveItem(item: Component | string | number): void {\n const c = typeof item === 'number' ? this.items[item] : this.items.find((x) => x === item || x.id === item);\n if (c) this.layout?.activate?.(this, c);\n }\n\n override notifyMount(): void {\n super.notifyMount();\n for (const c of this.items) c.notifyMount();\n }\n\n protected override onDestroy(): void {\n for (const c of [...this.items]) c.destroy();\n }\n\n override setDisabled(disabled: boolean): void {\n super.setDisabled(disabled);\n for (const c of this.items) c.setDisabled(disabled);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["factories", "registerLayout", "name", "factory", "createLayout", "spec", "cfg", "f", "watchNarrow", "c", "below", "on", "body", "narrow", "set", "n", "ro", "cssLayout", "vars", "v", "px", "hbox", "base", "w", "cols", "_c", "cmp", "span", "cont", "regions", "e", "find", "sync", "close", "region", "active", "show", "i", "a", "index", "Container", "_Container", "Component", "config", "i", "s", "item", "c", "create", "spec", "createLayout", "index", "body", "next", "x", "child", "destroy", "id", "fn", "out", "disabled"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-MB3MU6HR.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Badge};
2
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-II6ITOA6.js";import"../chunk-FHM5NUS4.js";import"../chunk-Z2JBUHKA.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Breadcrumb};
2
+ //# sourceMappingURL=breadcrumb.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-2ZUZ5HDL.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Button};
2
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-G2DAD3MQ.js";import"../chunk-5JEXM5S7.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Calendar};
2
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-KCEUD232.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4C666HHU.js";export{a as cellEditing};
2
+ //# sourceMappingURL=cellediting.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-FEHGU6EP.js";import"../chunk-2ZUZ5HDL.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Chat};
2
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-I4SP6JTU.js";import"../chunk-2ZRNGG2N.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Checkbox};
2
+ //# sourceMappingURL=checkbox.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-OGRFQTXA.js";import"../chunk-2ZRNGG2N.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as CheckboxGroup};
2
+ //# sourceMappingURL=checkboxgroup.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-ZPPELYNJ.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Chip};
2
+ //# sourceMappingURL=chip.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a,b}from"../chunk-XX2MVWFS.js";import"../chunk-2ZUZ5HDL.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{b as CodeViewer,a as tokenize};
2
+ //# sourceMappingURL=codeviewer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-JI265XFO.js";import"../chunk-EV73ADN2.js";import"../chunk-5Q76ACVI.js";import"../chunk-Z2JBUHKA.js";import"../chunk-W3H7GTJY.js";import"../chunk-OWEQT2HN.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-2ZRNGG2N.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as ComboBox};
2
+ //# sourceMappingURL=combobox.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-4SYIIX5A.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as CommandPalette};
2
+ //# sourceMappingURL=commandpalette.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import"../chunk-ELYARUCN.js";import{c as a}from"../chunk-ZWNQREWS.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Container};
2
+ //# sourceMappingURL=container.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-M242VYZA.js";import"../chunk-ZVK4L5GK.js";import"../chunk-OEAXCCVM.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as DataView};
2
+ //# sourceMappingURL=dataview.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-3TAW4AKH.js";import"../chunk-Z2JBUHKA.js";import"../chunk-W3H7GTJY.js";import"../chunk-G2DAD3MQ.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-2ZRNGG2N.js";import"../chunk-5JEXM5S7.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as DateField};
2
+ //# sourceMappingURL=datefield.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-EDUMAMK4.js";import"../chunk-Z2JBUHKA.js";import"../chunk-W3H7GTJY.js";import"../chunk-G2DAD3MQ.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-2ZRNGG2N.js";import"../chunk-5JEXM5S7.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4EZJ5FKJ.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as DateRangeField};
2
+ //# sourceMappingURL=daterangefield.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-JK74QK3M.js";import"../chunk-2ZRNGG2N.js";import"../chunk-6NCXO5ZP.js";import"../chunk-2UPUC4RK.js";import"../chunk-A2NKDOYN.js";import"../chunk-PZSHOSOS.js";import"../chunk-TIPK3SCJ.js";import"../chunk-MW3RWBZ7.js";import"../chunk-4C666HHU.js";export{a as Dial};
2
+ //# sourceMappingURL=dial.js.map