optikos 0.3.0 → 0.4.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 (432) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/dist/bind.js +1 -1
  3. package/dist/bind.js.map +4 -4
  4. package/dist/{chunk-5JEXM5S7.js → chunk-2GKIF7A6.js} +2 -2
  5. package/dist/chunk-2HNQ2XRY.js +2 -0
  6. package/dist/chunk-2HNQ2XRY.js.map +7 -0
  7. package/dist/chunk-2QMI2RRB.js +2 -0
  8. package/dist/chunk-2QMI2RRB.js.map +7 -0
  9. package/dist/{chunk-W3H7GTJY.js → chunk-2YRQULDC.js} +2 -2
  10. package/dist/{chunk-ZPPELYNJ.js → chunk-3BG75P7T.js} +2 -2
  11. package/dist/{chunk-GNU4VOOE.js → chunk-3F4MN2BU.js} +2 -2
  12. package/dist/chunk-3FCIZKIN.js +2 -0
  13. package/dist/chunk-3FCIZKIN.js.map +7 -0
  14. package/dist/{chunk-5DJTP53N.js → chunk-3FK52VQX.js} +2 -2
  15. package/dist/chunk-3QRA3XOA.js +2 -0
  16. package/dist/chunk-3QRA3XOA.js.map +7 -0
  17. package/dist/chunk-3TCITFUU.js +2 -0
  18. package/dist/chunk-3TCITFUU.js.map +7 -0
  19. package/dist/chunk-3VDLX7ET.js +2 -0
  20. package/dist/chunk-3VDLX7ET.js.map +7 -0
  21. package/dist/{chunk-3TAW4AKH.js → chunk-4AZ44KV4.js} +2 -2
  22. package/dist/{chunk-TZOQWCVH.js → chunk-4CWYF4O7.js} +2 -2
  23. package/dist/{chunk-REW4LR46.js → chunk-4OB2IM5L.js} +2 -2
  24. package/dist/{chunk-2YZB6XQR.js → chunk-4S3HRFQB.js} +2 -2
  25. package/dist/chunk-5BMG5ZBY.js +2 -0
  26. package/dist/{chunk-KLLAY2IM.js.map → chunk-5BMG5ZBY.js.map} +2 -2
  27. package/dist/chunk-5PWPAN62.js +2 -0
  28. package/dist/chunk-5PWPAN62.js.map +7 -0
  29. package/dist/chunk-5PYJ6FJK.js +2 -0
  30. package/dist/chunk-5PYJ6FJK.js.map +7 -0
  31. package/dist/{chunk-OGRFQTXA.js → chunk-643FOYQB.js} +2 -2
  32. package/dist/{chunk-JOFQJGZK.js → chunk-6BOM5KZR.js} +2 -2
  33. package/dist/chunk-6LJK4QWF.js +2 -0
  34. package/dist/chunk-6LJK4QWF.js.map +7 -0
  35. package/dist/{chunk-JK74QK3M.js → chunk-6PZPBPAD.js} +2 -2
  36. package/dist/chunk-7Y2GHQRB.js +2 -0
  37. package/dist/{chunk-YHEMA56R.js → chunk-AQ3RTHG5.js} +2 -2
  38. package/dist/{chunk-M242VYZA.js → chunk-AT7VFZRB.js} +2 -2
  39. package/dist/{chunk-ZVK4L5GK.js → chunk-BCVOUMJJ.js} +2 -2
  40. package/dist/{chunk-HOF4JGMQ.js → chunk-BIGL3ZVD.js} +2 -2
  41. package/dist/chunk-BJWREA76.js +2 -0
  42. package/dist/chunk-BJWREA76.js.map +7 -0
  43. package/dist/{chunk-ZWNQREWS.js → chunk-BQEFLPDA.js} +2 -2
  44. package/dist/{chunk-ZWNQREWS.js.map → chunk-BQEFLPDA.js.map} +2 -2
  45. package/dist/{chunk-FEHGU6EP.js → chunk-C3MWS7P2.js} +2 -2
  46. package/dist/{chunk-G2KUK6AT.js → chunk-CFGCB37K.js} +2 -2
  47. package/dist/{chunk-JI265XFO.js → chunk-CMV3F6HR.js} +2 -2
  48. package/dist/{chunk-TOLTUOZS.js → chunk-CWIE74NX.js} +2 -2
  49. package/dist/{chunk-4EZJ5FKJ.js → chunk-DIOJGTUN.js} +2 -2
  50. package/dist/chunk-DJUSVBD5.js +2 -0
  51. package/dist/chunk-DJUSVBD5.js.map +7 -0
  52. package/dist/{chunk-HXDTGP2K.js → chunk-DWA45BWR.js} +2 -2
  53. package/dist/chunk-DWTDNKXX.js +2 -0
  54. package/dist/chunk-DWTDNKXX.js.map +7 -0
  55. package/dist/chunk-ESCLDVFS.js +2 -0
  56. package/dist/{chunk-YBAYEU25.js.map → chunk-ESCLDVFS.js.map} +1 -1
  57. package/dist/chunk-EXIADWI7.js +2 -0
  58. package/dist/chunk-EXIADWI7.js.map +7 -0
  59. package/dist/{chunk-5QUY72FX.js → chunk-F4HZUAKM.js} +2 -2
  60. package/dist/chunk-FCJI2JF7.js +3 -0
  61. package/dist/chunk-FCJI2JF7.js.map +7 -0
  62. package/dist/{chunk-Q26YZYTD.js → chunk-FPU53CCV.js} +2 -2
  63. package/dist/{chunk-3S24ZRPK.js → chunk-GEBAYD6N.js} +2 -2
  64. package/dist/{chunk-G2DAD3MQ.js → chunk-GEJKFE4X.js} +2 -2
  65. package/dist/chunk-GFFZTFQH.js +2 -0
  66. package/dist/chunk-GFFZTFQH.js.map +7 -0
  67. package/dist/chunk-GFJRGBQR.js +2 -0
  68. package/dist/chunk-GFJRGBQR.js.map +7 -0
  69. package/dist/chunk-GZIDE5K2.js +2 -0
  70. package/dist/chunk-GZIDE5K2.js.map +7 -0
  71. package/dist/{chunk-5Q76ACVI.js → chunk-H25XXQVH.js} +2 -2
  72. package/dist/chunk-HG7OOHGD.js +2 -0
  73. package/dist/chunk-HG7OOHGD.js.map +7 -0
  74. package/dist/{chunk-2ZUZ5HDL.js → chunk-HLS5FI55.js} +2 -2
  75. package/dist/chunk-HRW25TMU.js +2 -0
  76. package/dist/chunk-HX6TWXTX.js +2 -0
  77. package/dist/chunk-HX6TWXTX.js.map +7 -0
  78. package/dist/chunk-I5A74NMJ.js +2 -0
  79. package/dist/chunk-I5A74NMJ.js.map +7 -0
  80. package/dist/chunk-IUOEPAWG.js +2 -0
  81. package/dist/chunk-IUOEPAWG.js.map +7 -0
  82. package/dist/{chunk-IHE2MQ3W.js → chunk-J5QPFJ7M.js} +2 -2
  83. package/dist/chunk-JE56CJX2.js +2 -0
  84. package/dist/chunk-JE56CJX2.js.map +7 -0
  85. package/dist/chunk-JJLOUMCJ.js +2 -0
  86. package/dist/chunk-JJLOUMCJ.js.map +7 -0
  87. package/dist/chunk-JLKIHXZP.js +3 -0
  88. package/dist/chunk-JLKIHXZP.js.map +7 -0
  89. package/dist/{chunk-5BC72727.js → chunk-JSEI44A7.js} +2 -2
  90. package/dist/chunk-L5SQQFO7.js +2 -0
  91. package/dist/chunk-L5SQQFO7.js.map +7 -0
  92. package/dist/chunk-M2ZRKHE4.js +2 -0
  93. package/dist/chunk-M2ZRKHE4.js.map +7 -0
  94. package/dist/chunk-M7FNPRV4.js +2 -0
  95. package/dist/chunk-M7FNPRV4.js.map +7 -0
  96. package/dist/chunk-MNSDGJKA.js +3 -0
  97. package/dist/chunk-MNSDGJKA.js.map +7 -0
  98. package/dist/{chunk-DBMWS3O5.js → chunk-MQ5BYGFY.js} +2 -2
  99. package/dist/chunk-N2LS4JD6.js +2 -0
  100. package/dist/chunk-N2LS4JD6.js.map +7 -0
  101. package/dist/chunk-NJ5IFOPR.js +4 -0
  102. package/dist/{chunk-XX2MVWFS.js.map → chunk-NJ5IFOPR.js.map} +1 -1
  103. package/dist/{chunk-NXSTUFS7.js → chunk-NNR2FNHG.js} +2 -2
  104. package/dist/chunk-NQV4THNE.js +2 -0
  105. package/dist/{chunk-UXXJOU5J.js.map → chunk-NQV4THNE.js.map} +1 -1
  106. package/dist/{chunk-XHOBNSBO.js → chunk-P4O57S6N.js} +2 -2
  107. package/dist/{chunk-MB3MU6HR.js → chunk-PGVLRMTQ.js} +2 -2
  108. package/dist/chunk-PMOXLQ72.js +2 -0
  109. package/dist/chunk-PMOXLQ72.js.map +7 -0
  110. package/dist/chunk-Q6FY4L2F.js +2 -0
  111. package/dist/chunk-Q6FY4L2F.js.map +7 -0
  112. package/dist/chunk-R32HPK7R.js +2 -0
  113. package/dist/chunk-R32HPK7R.js.map +7 -0
  114. package/dist/{chunk-Z2JBUHKA.js → chunk-RG6SHPHF.js} +2 -2
  115. package/dist/{chunk-EDUMAMK4.js → chunk-S2CMWKVB.js} +2 -2
  116. package/dist/chunk-S4QD5NID.js +2 -0
  117. package/dist/chunk-S4QD5NID.js.map +7 -0
  118. package/dist/chunk-SB4ICXBV.js +2 -0
  119. package/dist/chunk-SB4ICXBV.js.map +7 -0
  120. package/dist/{chunk-23XLG2EM.js → chunk-SEW5OCQF.js} +2 -2
  121. package/dist/chunk-SWCB2GMN.js +2 -0
  122. package/dist/chunk-SWCB2GMN.js.map +7 -0
  123. package/dist/chunk-TQPQ4UEA.js +2 -0
  124. package/dist/chunk-TQPQ4UEA.js.map +7 -0
  125. package/dist/{chunk-Z2Z52GFT.js → chunk-U5L76VVB.js} +2 -2
  126. package/dist/chunk-UDXO3KM3.js +2 -0
  127. package/dist/chunk-UDXO3KM3.js.map +7 -0
  128. package/dist/{chunk-LQRFNQ2N.js → chunk-UQRQH2JW.js} +2 -2
  129. package/dist/chunk-V5G5JECN.js +2 -0
  130. package/dist/chunk-V5G5JECN.js.map +7 -0
  131. package/dist/{chunk-JBLRAM7Z.js → chunk-XFIREDWO.js} +2 -2
  132. package/dist/chunk-XQHATUKN.js +2 -0
  133. package/dist/{chunk-LW2WRUVL.js.map → chunk-XQHATUKN.js.map} +4 -4
  134. package/dist/chunk-XR677UYD.js +2 -0
  135. package/dist/chunk-XR677UYD.js.map +7 -0
  136. package/dist/{chunk-RNN55473.js → chunk-YDX2PCVL.js} +2 -2
  137. package/dist/{chunk-RNN55473.js.map → chunk-YDX2PCVL.js.map} +1 -1
  138. package/dist/chunk-YJTUFK4P.js +2 -0
  139. package/dist/chunk-YLFSCQL3.js +2 -0
  140. package/dist/chunk-YLFSCQL3.js.map +7 -0
  141. package/dist/chunk-YXOKWCYS.js +2 -0
  142. package/dist/chunk-YXOKWCYS.js.map +7 -0
  143. package/dist/{chunk-I4SP6JTU.js → chunk-Z6L55FTN.js} +2 -2
  144. package/dist/{chunk-6VBK2I5B.js → chunk-ZSPJZ3ZH.js} +2 -2
  145. package/dist/components/avatar.js +2 -0
  146. package/dist/components/avatar.js.map +7 -0
  147. package/dist/components/badge.js +1 -1
  148. package/dist/components/breadcrumb.js +1 -1
  149. package/dist/components/button.js +1 -1
  150. package/dist/components/calendar.js +1 -1
  151. package/dist/components/carousel.js +2 -0
  152. package/dist/components/carousel.js.map +7 -0
  153. package/dist/components/cellediting.js +1 -1
  154. package/dist/components/chart.js +2 -0
  155. package/dist/components/chart.js.map +7 -0
  156. package/dist/components/chat.js +1 -1
  157. package/dist/components/checkbox.js +1 -1
  158. package/dist/components/checkboxgroup.js +1 -1
  159. package/dist/components/chip.js +1 -1
  160. package/dist/components/codeviewer.js +1 -1
  161. package/dist/components/combobox.js +1 -1
  162. package/dist/components/commandpalette.js +1 -1
  163. package/dist/components/container.js +1 -1
  164. package/dist/components/dataview.js +1 -1
  165. package/dist/components/datefield.js +1 -1
  166. package/dist/components/daterangefield.js +1 -1
  167. package/dist/components/datetimefield.js +2 -0
  168. package/dist/components/datetimefield.js.map +7 -0
  169. package/dist/components/dial.js +1 -1
  170. package/dist/components/dropdown.js +1 -1
  171. package/dist/components/fieldgroup.js +1 -1
  172. package/dist/components/fieldlist.js +1 -1
  173. package/dist/components/fieldset.js +1 -1
  174. package/dist/components/filterbuilder.js +1 -1
  175. package/dist/components/form.js +1 -1
  176. package/dist/components/formactions.js +1 -1
  177. package/dist/components/formerrors.js +1 -1
  178. package/dist/components/formsection.js +1 -1
  179. package/dist/components/grid.js +1 -1
  180. package/dist/components/gridexport.js +2 -0
  181. package/dist/components/gridexport.js.map +7 -0
  182. package/dist/components/gridstate.js +2 -0
  183. package/dist/components/gridstate.js.map +7 -0
  184. package/dist/components/grouping.js +2 -0
  185. package/dist/components/grouping.js.map +7 -0
  186. package/dist/components/icon.js +1 -1
  187. package/dist/components/image.js +2 -0
  188. package/dist/components/image.js.map +7 -0
  189. package/dist/components/imagecanvas.js +2 -0
  190. package/dist/components/imagecanvas.js.map +7 -0
  191. package/dist/components/imagefield.js +2 -0
  192. package/dist/components/imagefield.js.map +7 -0
  193. package/dist/components/inputgroup.js +1 -1
  194. package/dist/components/label.js +1 -1
  195. package/dist/components/listbox.js +1 -1
  196. package/dist/components/lookupfield.js +1 -1
  197. package/dist/components/maskfield.js +2 -0
  198. package/dist/components/maskfield.js.map +7 -0
  199. package/dist/components/menu.js +1 -1
  200. package/dist/components/messagebox.js +1 -1
  201. package/dist/components/navmenu.js +1 -1
  202. package/dist/components/numberfield.js +1 -1
  203. package/dist/components/pagination.js +1 -1
  204. package/dist/components/panel.js +1 -1
  205. package/dist/components/pickerfield.js +1 -1
  206. package/dist/components/radiogroup.js +1 -1
  207. package/dist/components/rowediting.js +2 -0
  208. package/dist/components/rowediting.js.map +7 -0
  209. package/dist/components/searchgrid.js +1 -1
  210. package/dist/components/secretfield.js +1 -1
  211. package/dist/components/select.js +1 -1
  212. package/dist/components/shortcuts.js +2 -0
  213. package/dist/components/shortcuts.js.map +7 -0
  214. package/dist/components/slider.js +1 -1
  215. package/dist/components/spacer.js +1 -1
  216. package/dist/components/spinner.js +1 -1
  217. package/dist/components/stat.js +2 -0
  218. package/dist/components/stat.js.map +7 -0
  219. package/dist/components/stepform.js +1 -1
  220. package/dist/components/stepper.js +1 -1
  221. package/dist/components/suggestfield.js +1 -1
  222. package/dist/components/table.js +1 -1
  223. package/dist/components/tabs.js +1 -1
  224. package/dist/components/textarea.js +1 -1
  225. package/dist/components/textfield.js +1 -1
  226. package/dist/components/timefield.js +2 -0
  227. package/dist/components/timefield.js.map +7 -0
  228. package/dist/components/timeline.js +2 -0
  229. package/dist/components/timeline.js.map +7 -0
  230. package/dist/components/toast.js +1 -1
  231. package/dist/components/toggle.js +1 -1
  232. package/dist/components/toolbar.js +1 -1
  233. package/dist/components/tree.js +1 -1
  234. package/dist/components/treegrid.js +2 -0
  235. package/dist/components/treegrid.js.map +7 -0
  236. package/dist/components/viewmanager.js +1 -1
  237. package/dist/components/viewport.js +1 -1
  238. package/dist/components/widget.js +1 -1
  239. package/dist/components/window.js +1 -1
  240. package/dist/core.js +1 -1
  241. package/dist/css/avatar.css +68 -0
  242. package/dist/css/base.css +9 -0
  243. package/dist/css/carousel.css +119 -0
  244. package/dist/css/chart.css +168 -0
  245. package/dist/css/core.css +36 -0
  246. package/dist/css/datetimefield.css +15 -0
  247. package/dist/css/grid.css +40 -0
  248. package/dist/css/gridexport.css +35 -0
  249. package/dist/css/grouping.css +49 -0
  250. package/dist/css/image.css +46 -0
  251. package/dist/css/imagecanvas.css +75 -0
  252. package/dist/css/imagefield.css +103 -0
  253. package/dist/css/rowediting.css +39 -0
  254. package/dist/css/shortcuts.css +34 -0
  255. package/dist/css/stat.css +64 -0
  256. package/dist/css/stepform.css +1 -0
  257. package/dist/css/timeline.css +140 -0
  258. package/dist/css/treegrid.css +35 -0
  259. package/dist/css/window.css +2 -2
  260. package/dist/data.js +1 -1
  261. package/dist/dev.js +2 -0
  262. package/dist/dev.js.map +7 -0
  263. package/dist/index.js +16 -5
  264. package/dist/index.js.map +4 -4
  265. package/dist/optikos.css +1111 -21
  266. package/dist/testing.js +2 -0
  267. package/dist/testing.js.map +7 -0
  268. package/dist/themes/dark.css +7 -0
  269. package/dist/types/bind/index.d.ts +1 -1
  270. package/dist/types/bind/viewmodel.d.ts +33 -0
  271. package/dist/types/components/avatar.d.ts +1 -0
  272. package/dist/types/components/base/avatar/avatar.d.ts +22 -0
  273. package/dist/types/components/base/image/image.d.ts +25 -0
  274. package/dist/types/components/base/imagecanvas/imagecanvas.d.ts +39 -0
  275. package/dist/types/components/carousel.d.ts +1 -0
  276. package/dist/types/components/chart.d.ts +1 -0
  277. package/dist/types/components/charts/chart/chart.d.ts +64 -0
  278. package/dist/types/components/charts/stat/stat.d.ts +34 -0
  279. package/dist/types/components/data/cellediting/cellediting.d.ts +3 -0
  280. package/dist/types/components/data/grid/grid.d.ts +37 -0
  281. package/dist/types/components/data/gridexport/gridexport.d.ts +29 -0
  282. package/dist/types/components/data/gridstate/gridstate.d.ts +23 -0
  283. package/dist/types/components/data/grouping/grouping.d.ts +31 -0
  284. package/dist/types/components/data/rowediting/rowediting.d.ts +13 -0
  285. package/dist/types/components/data/searchgrid/searchgrid.d.ts +9 -2
  286. package/dist/types/components/data/timeline/timeline.d.ts +60 -0
  287. package/dist/types/components/data/treegrid/treegrid.d.ts +32 -0
  288. package/dist/types/components/datetimefield.d.ts +1 -0
  289. package/dist/types/components/fields/datetimefield/datetimefield.d.ts +28 -0
  290. package/dist/types/components/fields/imagefield/imagefield.d.ts +48 -0
  291. package/dist/types/components/fields/maskfield/maskfield.d.ts +28 -0
  292. package/dist/types/components/fields/numberfield/numberfield.d.ts +9 -0
  293. package/dist/types/components/fields/pickerfield/pickerfield.d.ts +3 -0
  294. package/dist/types/components/fields/timefield/timefield.d.ts +24 -0
  295. package/dist/types/components/form/fieldlist/fieldlist.d.ts +2 -0
  296. package/dist/types/components/form/form/form.d.ts +5 -0
  297. package/dist/types/components/form/stepform/stepform.d.ts +1 -1
  298. package/dist/types/components/gridexport.d.ts +1 -0
  299. package/dist/types/components/gridstate.d.ts +1 -0
  300. package/dist/types/components/grouping.d.ts +1 -0
  301. package/dist/types/components/image.d.ts +1 -0
  302. package/dist/types/components/imagecanvas.d.ts +1 -0
  303. package/dist/types/components/imagefield.d.ts +1 -0
  304. package/dist/types/components/layout/carousel/carousel.d.ts +58 -0
  305. package/dist/types/components/maskfield.d.ts +1 -0
  306. package/dist/types/components/navigation/navmenu/navmenu.d.ts +2 -0
  307. package/dist/types/components/overlays/commandpalette/commandpalette.d.ts +2 -0
  308. package/dist/types/components/overlays/menu/menu.d.ts +4 -1
  309. package/dist/types/components/overlays/shortcuts/shortcuts.d.ts +27 -0
  310. package/dist/types/components/overlays/window/window.d.ts +14 -1
  311. package/dist/types/components/rowediting.d.ts +1 -0
  312. package/dist/types/components/shortcuts.d.ts +1 -0
  313. package/dist/types/components/stat.d.ts +1 -0
  314. package/dist/types/components/timefield.d.ts +1 -0
  315. package/dist/types/components/timeline.d.ts +1 -0
  316. package/dist/types/components/treegrid.d.ts +1 -0
  317. package/dist/types/core/component.d.ts +7 -0
  318. package/dist/types/core/container.d.ts +10 -1
  319. package/dist/types/core/dev.d.ts +2 -0
  320. package/dist/types/core/field.d.ts +4 -0
  321. package/dist/types/core/i18n.d.ts +2 -0
  322. package/dist/types/core/index.d.ts +4 -1
  323. package/dist/types/core/path.d.ts +2 -0
  324. package/dist/types/core/permission.d.ts +11 -0
  325. package/dist/types/core/state.d.ts +9 -0
  326. package/dist/types/data/column.d.ts +8 -0
  327. package/dist/types/data/index.d.ts +1 -1
  328. package/dist/types/data/model.d.ts +2 -0
  329. package/dist/types/data/store.d.ts +21 -0
  330. package/dist/types/dev/index.d.ts +2 -0
  331. package/dist/types/dev/keys.d.ts +1 -0
  332. package/dist/types/index.d.ts +17 -0
  333. package/dist/types/testing/index.d.ts +25 -0
  334. package/dist/types/themes/color.d.ts +14 -0
  335. package/dist/types/themes/contrast.d.ts +15 -0
  336. package/dist/types/themes/define.d.ts +25 -3
  337. package/dist/types/themes/index.d.ts +3 -1
  338. package/dist/types/themes/seeds.d.ts +11 -0
  339. package/dist/types/ui/ui.d.ts +6 -0
  340. package/dist/ui.js +1 -1
  341. package/package.json +9 -1
  342. package/dist/chunk-2ZRNGG2N.js +0 -2
  343. package/dist/chunk-2ZRNGG2N.js.map +0 -7
  344. package/dist/chunk-4EQEHJB3.js +0 -2
  345. package/dist/chunk-4EQEHJB3.js.map +0 -7
  346. package/dist/chunk-4LZZ244E.js +0 -2
  347. package/dist/chunk-4LZZ244E.js.map +0 -7
  348. package/dist/chunk-4SYIIX5A.js +0 -2
  349. package/dist/chunk-4SYIIX5A.js.map +0 -7
  350. package/dist/chunk-7KMIFXHZ.js +0 -2
  351. package/dist/chunk-7KMIFXHZ.js.map +0 -7
  352. package/dist/chunk-A2NKDOYN.js +0 -2
  353. package/dist/chunk-A2NKDOYN.js.map +0 -7
  354. package/dist/chunk-CKXS375P.js +0 -2
  355. package/dist/chunk-CKXS375P.js.map +0 -7
  356. package/dist/chunk-EJGWCKE4.js +0 -2
  357. package/dist/chunk-EJGWCKE4.js.map +0 -7
  358. package/dist/chunk-ELYARUCN.js +0 -2
  359. package/dist/chunk-EV73ADN2.js +0 -2
  360. package/dist/chunk-EV73ADN2.js.map +0 -7
  361. package/dist/chunk-GD5JGKM7.js +0 -2
  362. package/dist/chunk-GD5JGKM7.js.map +0 -7
  363. package/dist/chunk-GZ7X34QP.js +0 -2
  364. package/dist/chunk-KCEUD232.js +0 -2
  365. package/dist/chunk-KCEUD232.js.map +0 -7
  366. package/dist/chunk-KLLAY2IM.js +0 -2
  367. package/dist/chunk-LBJSMXLV.js +0 -2
  368. package/dist/chunk-LBJSMXLV.js.map +0 -7
  369. package/dist/chunk-LW2WRUVL.js +0 -2
  370. package/dist/chunk-MW3RWBZ7.js +0 -2
  371. package/dist/chunk-MW3RWBZ7.js.map +0 -7
  372. package/dist/chunk-OEAXCCVM.js +0 -2
  373. package/dist/chunk-OEAXCCVM.js.map +0 -7
  374. package/dist/chunk-UB5RYS7T.js +0 -2
  375. package/dist/chunk-UB5RYS7T.js.map +0 -7
  376. package/dist/chunk-UXXJOU5J.js +0 -2
  377. package/dist/chunk-VU3GIDZ3.js +0 -2
  378. package/dist/chunk-VU3GIDZ3.js.map +0 -7
  379. package/dist/chunk-W2BAFOCN.js +0 -3
  380. package/dist/chunk-W2BAFOCN.js.map +0 -7
  381. package/dist/chunk-WFGTQZIQ.js +0 -2
  382. package/dist/chunk-WFGTQZIQ.js.map +0 -7
  383. package/dist/chunk-XX2MVWFS.js +0 -4
  384. package/dist/chunk-XYZ6VZ5T.js +0 -2
  385. package/dist/chunk-YBAYEU25.js +0 -2
  386. package/dist/chunk-YF75HKL6.js +0 -2
  387. package/dist/chunk-YF75HKL6.js.map +0 -7
  388. /package/dist/{chunk-5JEXM5S7.js.map → chunk-2GKIF7A6.js.map} +0 -0
  389. /package/dist/{chunk-W3H7GTJY.js.map → chunk-2YRQULDC.js.map} +0 -0
  390. /package/dist/{chunk-ZPPELYNJ.js.map → chunk-3BG75P7T.js.map} +0 -0
  391. /package/dist/{chunk-GNU4VOOE.js.map → chunk-3F4MN2BU.js.map} +0 -0
  392. /package/dist/{chunk-5DJTP53N.js.map → chunk-3FK52VQX.js.map} +0 -0
  393. /package/dist/{chunk-3TAW4AKH.js.map → chunk-4AZ44KV4.js.map} +0 -0
  394. /package/dist/{chunk-TZOQWCVH.js.map → chunk-4CWYF4O7.js.map} +0 -0
  395. /package/dist/{chunk-REW4LR46.js.map → chunk-4OB2IM5L.js.map} +0 -0
  396. /package/dist/{chunk-2YZB6XQR.js.map → chunk-4S3HRFQB.js.map} +0 -0
  397. /package/dist/{chunk-OGRFQTXA.js.map → chunk-643FOYQB.js.map} +0 -0
  398. /package/dist/{chunk-JOFQJGZK.js.map → chunk-6BOM5KZR.js.map} +0 -0
  399. /package/dist/{chunk-JK74QK3M.js.map → chunk-6PZPBPAD.js.map} +0 -0
  400. /package/dist/{chunk-GZ7X34QP.js.map → chunk-7Y2GHQRB.js.map} +0 -0
  401. /package/dist/{chunk-YHEMA56R.js.map → chunk-AQ3RTHG5.js.map} +0 -0
  402. /package/dist/{chunk-M242VYZA.js.map → chunk-AT7VFZRB.js.map} +0 -0
  403. /package/dist/{chunk-ZVK4L5GK.js.map → chunk-BCVOUMJJ.js.map} +0 -0
  404. /package/dist/{chunk-HOF4JGMQ.js.map → chunk-BIGL3ZVD.js.map} +0 -0
  405. /package/dist/{chunk-FEHGU6EP.js.map → chunk-C3MWS7P2.js.map} +0 -0
  406. /package/dist/{chunk-G2KUK6AT.js.map → chunk-CFGCB37K.js.map} +0 -0
  407. /package/dist/{chunk-JI265XFO.js.map → chunk-CMV3F6HR.js.map} +0 -0
  408. /package/dist/{chunk-TOLTUOZS.js.map → chunk-CWIE74NX.js.map} +0 -0
  409. /package/dist/{chunk-4EZJ5FKJ.js.map → chunk-DIOJGTUN.js.map} +0 -0
  410. /package/dist/{chunk-HXDTGP2K.js.map → chunk-DWA45BWR.js.map} +0 -0
  411. /package/dist/{chunk-5QUY72FX.js.map → chunk-F4HZUAKM.js.map} +0 -0
  412. /package/dist/{chunk-Q26YZYTD.js.map → chunk-FPU53CCV.js.map} +0 -0
  413. /package/dist/{chunk-3S24ZRPK.js.map → chunk-GEBAYD6N.js.map} +0 -0
  414. /package/dist/{chunk-G2DAD3MQ.js.map → chunk-GEJKFE4X.js.map} +0 -0
  415. /package/dist/{chunk-5Q76ACVI.js.map → chunk-H25XXQVH.js.map} +0 -0
  416. /package/dist/{chunk-2ZUZ5HDL.js.map → chunk-HLS5FI55.js.map} +0 -0
  417. /package/dist/{chunk-XYZ6VZ5T.js.map → chunk-HRW25TMU.js.map} +0 -0
  418. /package/dist/{chunk-IHE2MQ3W.js.map → chunk-J5QPFJ7M.js.map} +0 -0
  419. /package/dist/{chunk-5BC72727.js.map → chunk-JSEI44A7.js.map} +0 -0
  420. /package/dist/{chunk-DBMWS3O5.js.map → chunk-MQ5BYGFY.js.map} +0 -0
  421. /package/dist/{chunk-NXSTUFS7.js.map → chunk-NNR2FNHG.js.map} +0 -0
  422. /package/dist/{chunk-XHOBNSBO.js.map → chunk-P4O57S6N.js.map} +0 -0
  423. /package/dist/{chunk-MB3MU6HR.js.map → chunk-PGVLRMTQ.js.map} +0 -0
  424. /package/dist/{chunk-Z2JBUHKA.js.map → chunk-RG6SHPHF.js.map} +0 -0
  425. /package/dist/{chunk-EDUMAMK4.js.map → chunk-S2CMWKVB.js.map} +0 -0
  426. /package/dist/{chunk-23XLG2EM.js.map → chunk-SEW5OCQF.js.map} +0 -0
  427. /package/dist/{chunk-Z2Z52GFT.js.map → chunk-U5L76VVB.js.map} +0 -0
  428. /package/dist/{chunk-LQRFNQ2N.js.map → chunk-UQRQH2JW.js.map} +0 -0
  429. /package/dist/{chunk-JBLRAM7Z.js.map → chunk-XFIREDWO.js.map} +0 -0
  430. /package/dist/{chunk-ELYARUCN.js.map → chunk-YJTUFK4P.js.map} +0 -0
  431. /package/dist/{chunk-I4SP6JTU.js.map → chunk-Z6L55FTN.js.map} +0 -0
  432. /package/dist/{chunk-6VBK2I5B.js.map → chunk-ZSPJZ3ZH.js.map} +0 -0
@@ -0,0 +1,28 @@
1
+ import { Field, type FieldConfig } from '../../../core/field.js';
2
+ export interface DateTimeFieldConfig extends FieldConfig<string | null> {
3
+ /** Earliest and latest date, `YYYY-MM-DD`. */
4
+ min?: string;
5
+ max?: string;
6
+ /** Minutes moved by ↑/↓ in the time part. */
7
+ step?: number;
8
+ /** The value is the ISO instant (`2026-11-10T17:30:00.000Z`) of what the user typed, in their time zone. Default: the local `YYYY-MM-DDTHH:mm`. */
9
+ utc?: boolean;
10
+ }
11
+ /** A date and a time of day side by side. The value is one ISO string (local, or UTC with `utc`) or null. */
12
+ export declare class DateTimeField extends Field<string | null, DateTimeFieldConfig> {
13
+ protected baseCls: string;
14
+ private date;
15
+ private time;
16
+ protected emptyValue(): null;
17
+ protected isEmpty(v: string | null): boolean;
18
+ protected createControl(): HTMLDivElement;
19
+ /** Both parts → the value. One part alone is not a value yet (`check` says so). */
20
+ private compose;
21
+ protected applyValue(v: string | null): void;
22
+ getDisplayText(): string;
23
+ protected check(): string;
24
+ protected onDisabled(disabled: boolean): void;
25
+ protected onReadonly(readonly: boolean): void;
26
+ setMin(min: string | undefined): void;
27
+ setMax(max: string | undefined): void;
28
+ }
@@ -0,0 +1,48 @@
1
+ import { Field, type FieldConfig } from '../../../core/field.js';
2
+ /** A new `File`, or the URL (string) of an image already saved. */
3
+ export type ImageItem = File | string;
4
+ export type ImageValue = ImageItem | ImageItem[] | null;
5
+ export interface ImageFieldConfig extends FieldConfig<ImageValue> {
6
+ /** The input's `accept` (also checked on dropped files). Default `image/*`. */
7
+ accept?: string;
8
+ /** Bytes. */
9
+ maxSize?: number;
10
+ multiple?: boolean;
11
+ /** With `multiple`. */
12
+ maxFiles?: number;
13
+ placeholder?: string;
14
+ }
15
+ /** Picks images by click or drop, with a preview. Holds the files; sending them is up to the app. */
16
+ export declare class ImageField extends Field<ImageValue, ImageFieldConfig> {
17
+ protected baseCls: string;
18
+ private zone;
19
+ private picker;
20
+ private list;
21
+ private urls;
22
+ protected emptyValue(): ImageValue;
23
+ protected isEmpty(v: ImageValue): boolean;
24
+ protected isEqual(a: ImageValue, b: ImageValue): boolean;
25
+ private itemsOf;
26
+ private items;
27
+ protected createControl(): HTMLDivElement;
28
+ protected onRender(): void;
29
+ protected applyValue(v: ImageValue): void;
30
+ private url;
31
+ private revoke;
32
+ /** The zone is there only while there is room for another image and the user may edit. */
33
+ private sync;
34
+ protected onDisabled(): void;
35
+ protected onReadonly(): void;
36
+ /** Opens the browser's file picker. */
37
+ open(): void;
38
+ private accepts;
39
+ /** Adds files with the same checks as a drop. Without `multiple` the first valid file replaces the image. */
40
+ add(files: File[]): void;
41
+ /** Removes the image at `index`. */
42
+ remove(index: number): void;
43
+ protected commit(v: ImageValue): void;
44
+ private holdsFocus;
45
+ /** The button the keyboard user was on may be gone: move to the one that is left. */
46
+ private refocus;
47
+ getDisplayText(): string;
48
+ }
@@ -0,0 +1,28 @@
1
+ import { TextField, type TextFieldConfig } from '../textfield/textfield.js';
2
+ export interface MaskFieldConfig extends TextFieldConfig {
3
+ /**
4
+ * The pattern: `0` a digit, `A` a letter, `*` any character, `\` makes the next character a literal. A list picks the
5
+ * pattern by length: `['000.000.000-00', '00.000.000/0000-00']` is a CPF until the 12th digit, then a CNPJ.
6
+ * The core knows no country: formats like these belong to the app.
7
+ */
8
+ mask: string | string[];
9
+ /** The value is only what was typed into the slots (`12345678900`), not the formatted text (`123.456.789-00`). Default false. */
10
+ raw?: boolean;
11
+ }
12
+ /** A text field that formats what is typed into a pattern (phone, tax id, postal code, plate...). */
13
+ export declare class MaskField extends TextField<string, MaskFieldConfig> {
14
+ protected baseCls: string;
15
+ private masks;
16
+ private compiled;
17
+ /** What was typed into the slots: the literals of the patterns are dropped (with a `*` slot, only where the text repeats one). */
18
+ private extract;
19
+ private pick;
20
+ private format;
21
+ private norm;
22
+ protected display(v: string): string;
23
+ setValue(v: string, silent?: boolean): void;
24
+ protected createControl(): HTMLDivElement;
25
+ protected onInput(): void;
26
+ protected check(): string;
27
+ setMask(mask: string | string[]): void;
28
+ }
@@ -5,6 +5,14 @@ export interface NumberFieldConfig extends TextFieldConfig<number | null> {
5
5
  step?: number;
6
6
  /** Fixed decimals shown (and applied when the user leaves the field). */
7
7
  decimals?: number;
8
+ /** `currency` and `percent` show through `Intl` (`R$ 1.234,56`, `$1,234.56`, `15%`). Default: plain number. */
9
+ format?: 'decimal' | 'currency' | 'percent';
10
+ /** ISO 4217 code for `format: 'currency'`. Default: the locale's (`setCurrency`). */
11
+ currency?: string;
12
+ /** BCP 47 tag for this field's separators. Default: the active locale. */
13
+ locale?: string;
14
+ /** The value is the shown number times `scale`: `scale: 100` with currency keeps cents as an integer (`123456` shows `1.234,56`). */
15
+ scale?: number;
8
16
  }
9
17
  export declare class NumberField extends TextField<number | null, NumberFieldConfig> {
10
18
  protected baseCls: string;
@@ -12,6 +20,7 @@ export declare class NumberField extends TextField<number | null, NumberFieldCon
12
20
  private garbage;
13
21
  protected emptyValue(): null;
14
22
  protected isEmpty(v: number | null): v is null;
23
+ private get lang();
15
24
  private get decimalSep();
16
25
  protected parse(text: string): number | null;
17
26
  protected display(v: number | null): string;
@@ -47,6 +47,9 @@ export declare abstract class PickerField<V = unknown, C extends PickerConfig<V>
47
47
  private bindStore;
48
48
  protected findItem(value: unknown): ListItem | undefined;
49
49
  getSelection(): ListItem | undefined;
50
+ /** Also takes `{ value, label }`: the value with the text to show, for a record that is not in the list. */
51
+ setValue(v: V, silent?: boolean): void;
52
+ fillFrom(record: Record<string, any>): void;
50
53
  /** Selects an item object directly (needed when the list does not contain it, e.g. a remote value). */
51
54
  setSelection(item: ListItem | undefined, silent?: boolean): void;
52
55
  /** The items to display for the current search state. Default: all. */
@@ -0,0 +1,24 @@
1
+ import { TextField, type TextFieldConfig } from '../textfield/textfield.js';
2
+ export interface TimeFieldConfig extends TextFieldConfig<string | null> {
3
+ /** Earliest and latest time, `'HH:mm'`. */
4
+ min?: string;
5
+ max?: string;
6
+ /** Minutes moved by ↑/↓ (PageUp/PageDown move an hour). Default 1. */
7
+ step?: number;
8
+ }
9
+ /** A time of day. The value is `'HH:mm'` (24 h) or `null`. Type `930`, `9:30` or `09:30`; ↑/↓ step it. */
10
+ export declare class TimeField extends TextField<string | null, TimeFieldConfig> {
11
+ protected baseCls: string;
12
+ private garbage;
13
+ protected emptyValue(): null;
14
+ protected isEmpty(v: string | null): v is null;
15
+ protected parse(text: string): string | null;
16
+ protected createControl(): HTMLDivElement;
17
+ protected onInput(): void;
18
+ protected applyValue(v: string | null): void;
19
+ protected check(): string;
20
+ protected onKey(e: KeyboardEvent): void;
21
+ private bump;
22
+ setMin(min: string | undefined): void;
23
+ setMax(max: string | undefined): void;
24
+ }
@@ -42,6 +42,8 @@ export declare class FieldList extends Field<Row[], FieldListConfig> {
42
42
  moveRow(from: number, to: number): void;
43
43
  getRows(): Container[];
44
44
  getRowFields(index: number): Field<any>[];
45
+ /** The field of a row by path (`'0.name'` → field `name` of the first row): where a server error lands. */
46
+ fieldAt(path: string): Field<any> | undefined;
45
47
  setAddText(text: string): void;
46
48
  setMin(min: number): void;
47
49
  setMax(max: number): void;
@@ -61,6 +61,11 @@ export declare class Form extends Container<FormConfig> {
61
61
  clearErrors(): void;
62
62
  /** Validates every field that counts (marks errors) and focuses the first invalid one. */
63
63
  validate(): boolean;
64
+ /**
65
+ * Marks server-side errors by dotted path (`slug`, `items.0.name` for a row of a FieldList), brings the first into
66
+ * view (its tab or step) and focuses it. Returns the paths that matched no field, for the caller to show some other way.
67
+ */
68
+ setErrors(errors: Record<string, string>): string[];
64
69
  submit(): boolean;
65
70
  /** Width of the labels on the left (number = px); they line up in a column. */
66
71
  setLabelWidth(width: number | string): void;
@@ -79,7 +79,7 @@ export declare class StepForm extends Form {
79
79
  /** The card layout changed the visible step (by `goTo`, or because `validate` brought an invalid field into view). */
80
80
  private onActivate;
81
81
  private refreshReview;
82
- /** What the user sees for a field (its display text; ticks for booleans, dots for passwords). */
82
+ /** What the user sees for a field (its display text; ticks for booleans, dots for passwords; one line per FieldList row). */
83
83
  private show_;
84
84
  /** Enter and the Finish button: Next on every step but the last; on the last, validate everything and `finish`. */
85
85
  submit(): boolean;
@@ -0,0 +1 @@
1
+ export * from '../components/data/gridexport/gridexport.js';
@@ -0,0 +1 @@
1
+ export * from '../components/data/gridstate/gridstate.js';
@@ -0,0 +1 @@
1
+ export * from '../components/data/grouping/grouping.js';
@@ -0,0 +1 @@
1
+ export * from '../components/base/image/image.js';
@@ -0,0 +1 @@
1
+ export * from '../components/base/imagecanvas/imagecanvas.js';
@@ -0,0 +1 @@
1
+ export * from '../components/fields/imagefield/imagefield.js';
@@ -0,0 +1,58 @@
1
+ import { Container, type ContainerConfig } from '../../../core/container.js';
2
+ export interface CarouselConfig extends ContainerConfig {
3
+ /** Items shown together. Default 1. */
4
+ perView?: number;
5
+ /** Space between items (px or CSS length). */
6
+ gap?: number | string;
7
+ /** Past the last item goes to the first (and the other way). */
8
+ loop?: boolean;
9
+ /** ms between items; 0 (default) is off. */
10
+ autoplay?: number;
11
+ /** Default `true`. */
12
+ dots?: boolean;
13
+ /** Default `true`. */
14
+ arrows?: boolean;
15
+ active?: number;
16
+ }
17
+ /** Pages through its items on a scroll-snap row: images, cards or any component. */
18
+ export declare class Carousel extends Container<CarouselConfig> {
19
+ protected baseCls: string;
20
+ private track;
21
+ private prevBtn;
22
+ private nextBtn;
23
+ private dotsEl;
24
+ private toggleBtn;
25
+ private index;
26
+ private stopped;
27
+ private scrollTimer?;
28
+ private playTimer?;
29
+ private get perView();
30
+ /** Positions the row can rest on: it moves one item at a time. */
31
+ private get last();
32
+ protected build(): HTMLElement;
33
+ getBody(): HTMLElement;
34
+ protected onRender(): void;
35
+ protected onMount(): void;
36
+ /** Reads the item at the left edge from the scroll position (after a swipe or a trackpad scroll). */
37
+ private settle;
38
+ private stride;
39
+ private align;
40
+ private set;
41
+ /** Slides, dots, arrows: everything that follows the item count or the active one. */
42
+ private refresh;
43
+ getActive(): number;
44
+ /** Goes to item `i` (kept between 0 and the last position). `before-change` can cancel. */
45
+ goTo(i: number): void;
46
+ setActive(i: number): void;
47
+ private step;
48
+ next(): void;
49
+ prev(): void;
50
+ isPlaying(): boolean;
51
+ private reduced;
52
+ play(): void;
53
+ pause(): void;
54
+ /** Any use of the controls ends autoplay for good (WCAG 2.2.2). */
55
+ private interact;
56
+ /** Runs the timer only while playing and nothing holds the pointer or the focus. */
57
+ private tick;
58
+ }
@@ -0,0 +1 @@
1
+ export * from '../components/fields/maskfield/maskfield.js';
@@ -7,6 +7,8 @@ export interface NavItem {
7
7
  items?: NavItem[];
8
8
  disabled?: boolean;
9
9
  hidden?: boolean;
10
+ /** Hidden (or disabled) while `setPermissionResolver` denies it. */
11
+ permission?: string;
10
12
  /** Groups: start open. */
11
13
  expanded?: boolean;
12
14
  data?: unknown;
@@ -1,6 +1,8 @@
1
1
  import { Component, type ComponentConfig } from '../../../core/component.js';
2
2
  export interface Command {
3
3
  id: string;
4
+ /** The command is left out while `setPermissionResolver` denies it. */
5
+ permission?: string;
4
6
  title: string;
5
7
  /** Groups the command and gives it a filter chip. */
6
8
  category?: string;
@@ -12,8 +12,11 @@ export interface MenuItem {
12
12
  group?: string;
13
13
  /** A count or short label at the end of the row. */
14
14
  badge?: string | number;
15
+ /** Hidden (or disabled) while `setPermissionResolver` denies it. */
16
+ permission?: string;
15
17
  }
16
- export type MenuEntry = MenuItem | '-';
18
+ /** An item, or `'-'` for a separator (typed `string` so an array built in a variable still fits). */
19
+ export type MenuEntry = MenuItem | string;
17
20
  export interface MenuConfig extends ComponentConfig {
18
21
  items?: MenuEntry[];
19
22
  /** A search field over the items: filters as you type; a search that names a group shows the whole group. */
@@ -0,0 +1,27 @@
1
+ export interface Shortcut {
2
+ /** `mod+s` (Ctrl, or ⌘ on a Mac), `shift+?`, `alt+n`, `g`. Several keys in a row are not supported. */
3
+ keys: string;
4
+ title: string;
5
+ handler: (e: KeyboardEvent) => void | false;
6
+ /** The screen it belongs to (`setScope`). Default `global`: active on every screen. */
7
+ scope?: string;
8
+ /** Heading in the help panel. Default: the scope. */
9
+ group?: string;
10
+ /** Checked on every press: the shortcut only runs while this returns true. */
11
+ when?: () => boolean;
12
+ /** A shortcut without Ctrl/⌘/Alt is ignored while typing in a field, unless this is true. */
13
+ inInputs?: boolean;
14
+ }
15
+ /** How a combination reads on this keyboard: `⌘S`, `Ctrl+S`. */
16
+ export declare function formatKeys(keys: string): string;
17
+ export declare const shortcuts: {
18
+ /** Adds shortcuts; returns the function that removes them. The same keys twice in one scope warn in dev, and the newest wins. */
19
+ register(list: Shortcut | Shortcut[]): () => void;
20
+ /** The screen whose shortcuts are active besides the global ones (`undefined`: only global). */
21
+ setScope(name: string | undefined): void;
22
+ getScope: () => string | undefined;
23
+ /** What is active now: the global shortcuts and the current scope's. */
24
+ list: () => Shortcut[];
25
+ /** Opens (or closes) the help panel, grouped. `?` does it from anywhere but a text field. */
26
+ help(): void;
27
+ };
@@ -11,6 +11,8 @@ export interface WindowConfig extends PanelConfig {
11
11
  * pop up. `true` focuses its first field instead. Default false.
12
12
  */
13
13
  autoFocus?: boolean;
14
+ /** Closing while a field inside is changed asks first. `true` uses a standard text; a string is the question. */
15
+ confirmDiscard?: boolean | string;
14
16
  }
15
17
  /** Floating dialog. Modal by default: the page behind becomes inert and Tab stays inside. */
16
18
  export declare class Window extends Panel<WindowConfig> {
@@ -27,10 +29,21 @@ export declare class Window extends Panel<WindowConfig> {
27
29
  /** Dims (true) or not (false) the page behind the modal window. */
28
30
  setMask(mask: boolean): void;
29
31
  isVisible(): boolean;
30
- /** Centers in the viewport (also done on show and on resize until the user drags it). */
32
+ /** Centers in the viewport (also done on show, on resize and when the content grows, until the user drags it). */
31
33
  center(): void;
34
+ /** Keeps the window on screen: centered, or (once dragged) pulled up just enough to fit. */
35
+ private keepInView;
32
36
  show(): void;
33
37
  private focusFirst;
38
+ /**
39
+ * How `confirmDiscard` asks. MessageBox sets it when it is loaded (it needs Window itself, so Window cannot import it);
40
+ * without MessageBox the browser's own `confirm` is used.
41
+ */
42
+ static ask?: (text: string, o: {
43
+ okText: string;
44
+ cancelText: string;
45
+ }) => Promise<boolean>;
46
+ close(): void;
34
47
  hide(): void;
35
48
  /** Cleans up at once (the page is usable again) and takes the window off the screen: shrinking toward its opener, 20 % faster than it came. */
36
49
  private release;
@@ -0,0 +1 @@
1
+ export * from '../components/data/rowediting/rowediting.js';
@@ -0,0 +1 @@
1
+ export * from '../components/overlays/shortcuts/shortcuts.js';
@@ -0,0 +1 @@
1
+ export * from '../components/charts/stat/stat.js';
@@ -0,0 +1 @@
1
+ export * from '../components/fields/timefield/timefield.js';
@@ -0,0 +1 @@
1
+ export * from '../components/data/timeline/timeline.js';
@@ -0,0 +1 @@
1
+ export * from '../components/data/treegrid/treegrid.js';
@@ -14,6 +14,9 @@ export interface ComponentConfig {
14
14
  showIf?: (values: Record<string, any>) => boolean;
15
15
  /** Inside a Form: enabled only while this returns true (given the form values). */
16
16
  enableIf?: (values: Record<string, any>) => boolean;
17
+ /** A permission name: without it (per `setPermissionResolver`) the component is hidden, or disabled with `permissionMode: 'disable'`. */
18
+ permission?: string;
19
+ permissionMode?: 'hide' | 'disable';
17
20
  /** Component-scoped tokens: `{ radius: '0' }` on a button sets `--op-button-radius`. Keys starting with `--` are used as is. */
18
21
  theme?: Record<string, string | number>;
19
22
  /**
@@ -40,6 +43,8 @@ export interface Parent {
40
43
  }
41
44
  export declare class Component<C extends ComponentConfig = ComponentConfig> extends Emitter {
42
45
  static type?: string;
46
+ /** Called with every new component, config in hand: `optikos/dev` uses it to warn about options nobody reads. */
47
+ static onCreate?: (c: Component<any>) => void;
43
48
  config: C;
44
49
  readonly id: string;
45
50
  parent?: Component & Parent;
@@ -74,6 +79,8 @@ export declare class Component<C extends ComponentConfig = ComponentConfig> exte
74
79
  later(fn: () => void, ms: number): () => void;
75
80
  protected onDisabled(_disabled: boolean): void;
76
81
  setDisabled(disabled: boolean): void;
82
+ /** The user lacks `config.permission` and the way to deal with it is `mode`. */
83
+ private denied;
77
84
  show(): void;
78
85
  hide(): void;
79
86
  isHidden(): boolean;
@@ -1,7 +1,16 @@
1
1
  import { Component, type ComponentConfig, type Parent } from './component.js';
2
2
  import { type AnyConfig } from './registry.js';
3
3
  import { type Layout, type LayoutSpec } from '../layout/layout.js';
4
- export interface ContainerConfig extends ComponentConfig {
4
+ /** What a Tabs header reads from its panel (any Container, not just Panel). */
5
+ export interface TabPanelConfig {
6
+ title?: string;
7
+ icon?: string;
8
+ closable?: boolean;
9
+ reloadable?: boolean;
10
+ /** Called by the tab's ↻; a returned Promise keeps the tab busy until it settles. */
11
+ onReload?: (panel: any) => void | Promise<unknown>;
12
+ }
13
+ export interface ContainerConfig extends ComponentConfig, TabPanelConfig {
5
14
  items?: Array<AnyConfig | Component | string>;
6
15
  layout?: LayoutSpec;
7
16
  /** Config merged into every item that does not set the key itself. */
@@ -0,0 +1,2 @@
1
+ /** True while developing: on localhost, or when `globalThis.__OPTIKOS_DEV__` says so. Dev-only warnings follow it. */
2
+ export declare const isDev: () => boolean;
@@ -11,6 +11,8 @@ export interface FieldConfig<V = unknown> extends ComponentConfig {
11
11
  validators?: Validator<V>[];
12
12
  /** When to validate on its own. After the first error it revalidates on every change. Default `blur`. */
13
13
  validateOn?: 'blur' | 'change' | 'submit';
14
+ /** Lookups and pickers: the key of the loaded record that holds the text to show for the value (`evento` + `displayFrom: 'eventoNome'`). */
15
+ displayFrom?: string;
14
16
  /** ms of quiet after the last change before `settled` fires (0 = right away). `change` itself is never delayed. */
15
17
  debounce?: number;
16
18
  }
@@ -44,6 +46,8 @@ export declare abstract class Field<V = unknown, C extends FieldConfig<V> = Fiel
44
46
  getValue(): V;
45
47
  /** Sets the value programmatically. `silent` skips the `change` event and validation. */
46
48
  setValue(v: V, silent?: boolean): void;
49
+ /** Silently takes this field's value from a record (by `name`); does nothing when the record lacks the key. */
50
+ fillFrom(record: Record<string, any>): void;
47
51
  /** For subclasses: the user edited the control and the DOM already shows `v`. */
48
52
  protected commit(v: V): void;
49
53
  private changed;
@@ -2,6 +2,8 @@ export type Locale = Record<string, string>;
2
2
  export declare const locales: Record<string, Locale>;
3
3
  /** Picks a registered locale by name (`'pt-BR'`, or `'pt'` as a prefix) or merges a custom object over English. */
4
4
  export declare function setLocale(l: string | Locale): void;
5
+ /** The ISO 4217 code that `money` columns and currency fields use (each locale brings its own default). */
6
+ export declare function setCurrency(code: string): void;
5
7
  export declare const getLocale: () => Locale;
6
8
  /**
7
9
  * Adds messages to a locale (created if missing). Keys already there are kept, so an app's own overrides win.
@@ -1,11 +1,14 @@
1
1
  export { Emitter, type Handler } from './emitter.js';
2
2
  export { h, attr, uid, kebab, px, clamp, type Attrs, type Child } from './dom.js';
3
- export { t, setLocale, getLocale, addMessages, locales, type Locale } from './i18n.js';
3
+ export { t, setLocale, setCurrency, getLocale, addMessages, locales, type Locale } from './i18n.js';
4
4
  export { Component, type ComponentConfig, type Parent } from './component.js';
5
5
  export { Container, type ContainerConfig } from './container.js';
6
6
  export { register, create, getType, type AnyConfig, type ComponentClass } from './registry.js';
7
7
  export { registerLayout, createLayout, type Layout, type LayoutSpec, type LayoutFactory } from '../layout/layout.js';
8
8
  export { Field, type FieldConfig } from './field.js';
9
+ export { setStateStorage, loadState, saveState, type StateStorage } from './state.js';
10
+ export { getPath, setPath } from './path.js';
11
+ export { setPermissionResolver, setPermissionMode, allowed, gate, type PermissionMode } from './permission.js';
9
12
  export * as validators from './validators.js';
10
13
  export type { Validator } from './validators.js';
11
14
  export { layer, toLayer, lockModal } from './layer.js';
@@ -0,0 +1,2 @@
1
+ export declare const getPath: (o: any, path: string) => any;
2
+ export declare function setPath(o: any, path: string, value: unknown): void;
@@ -0,0 +1,11 @@
1
+ export type PermissionMode = 'hide' | 'disable';
2
+ /** The app's answer to "may the user do this?". Without one, every `permission` is granted. */
3
+ export declare function setPermissionResolver(fn: ((permission: string) => boolean) | undefined): void;
4
+ /** What a component without access does by default: `hide` (default) or `disable`. A component's `permissionMode` wins. */
5
+ export declare function setPermissionMode(m: PermissionMode): void;
6
+ export declare const allowed: (permission?: string) => boolean;
7
+ export declare const permissionMode: () => PermissionMode;
8
+ /** Applies each item's `permission` to a list: denied items are dropped (`hide`) or come back `disabled` (`disable`). Nested `items` too. */
9
+ export declare function gate<T extends {
10
+ permission?: string;
11
+ }>(list: T[] | undefined): T[] | undefined;
@@ -0,0 +1,9 @@
1
+ /** Where per-user UI state (column widths, filters, density...) is kept. Both calls may be async (a REST endpoint). */
2
+ export interface StateStorage {
3
+ get(key: string): unknown | Promise<unknown>;
4
+ set(key: string, value: unknown): void | Promise<void>;
5
+ }
6
+ /** Replaces the default (`localStorage`) for every `persist`: send it to your API to follow the user across devices. */
7
+ export declare function setStateStorage(storage: StateStorage | undefined): void;
8
+ export declare const loadState: <T = unknown>(key: string) => Promise<T | null>;
9
+ export declare const saveState: (key: string, value: unknown) => Promise<void>;
@@ -18,6 +18,14 @@ export interface Column<T extends Record<string, any> = any> {
18
18
  align?: 'left' | 'center' | 'right';
19
19
  sortable?: boolean;
20
20
  hidden?: boolean;
21
+ /** Pinned to the start or the end while the body scrolls sideways (give it a `width`; default 140). The columns of one edge stay together. */
22
+ locked?: 'start' | 'end';
23
+ /** With the `grouping()` plugin: what the total row shows for this column. */
24
+ summary?: 'sum' | 'avg' | 'min' | 'max' | 'count' | ((values: any[], recs: Model<T>[]) => unknown);
25
+ /** Text for the total of this column (default: the column's `format`, else the plain value). */
26
+ summaryRenderer?: (value: any, col: Column<T>) => string | Node;
27
+ /** Left out while `setPermissionResolver` denies it. */
28
+ permission?: string;
21
29
  /** Name registered with `registerFormat` (`money`, `date`, `number`, `percent`, `bool`) or a function. */
22
30
  format?: string | Formatter;
23
31
  /** Full control over the cell content. Text is escaped; return a Node for markup. */
@@ -1,5 +1,5 @@
1
1
  export { Model, type ModelDef, type FieldDef } from './model.js';
2
- export { Store, matchFilter, type StoreConfig, type StoreProxy, type FilterFn } from './store.js';
2
+ export { Store, matchFilter, type StoreConfig, type StoreProxy, type Patch, type LiveSource, type FilterFn } from './store.js';
3
3
  export { MemoryProxy, RestProxy, type Proxy, type RestProxyConfig, type ReadParams, type ReadResult, type Sorter, type FilterSpec, type FilterOp, type FilterGroup, type FilterNode } from './proxy.js';
4
4
  export { format, registerFormat, type Formatter } from './format.js';
5
5
  export { cellContent, type Column } from './column.js';
@@ -21,6 +21,8 @@ export declare class Model<T extends Record<string, any> = Record<string, any>>
21
21
  get id(): string | number;
22
22
  get<K extends keyof T>(field: K): T[K];
23
23
  set<K extends keyof T>(field: K, value: T[K]): void;
24
+ /** Applies values that came from the server. It is not an edit (nothing becomes dirty), and a field the user already changed keeps their value. */
25
+ patch(raw: Partial<T>): boolean;
24
26
  isDirty(): boolean;
25
27
  getChanges(): Partial<T>;
26
28
  commit(): void;
@@ -3,6 +3,21 @@ import { Model, type ModelDef, type RecordOwner } from './model.js';
3
3
  import type { FilterNode, Proxy, ReadParams, ReadResult, Sorter } from './proxy.js';
4
4
  export type StoreProxy<T> = Proxy<T> | ((params: ReadParams, signal?: AbortSignal) => Promise<ReadResult<T> | T[]> | ReadResult<T> | T[]);
5
5
  export type FilterFn<T extends Record<string, any>> = (rec: Model<T>) => boolean;
6
+ /** One live change: `upsert` merges `data` into the record with the same id (or adds it), `remove` drops the record with `id`. */
7
+ export interface Patch<T> {
8
+ op?: 'upsert' | 'remove';
9
+ data?: Partial<T>;
10
+ id?: string | number;
11
+ }
12
+ /** What `connect` needs from a source: an `EventSource` or a `WebSocket` both fit. */
13
+ export interface LiveSource {
14
+ addEventListener(type: 'message', fn: (e: {
15
+ data: any;
16
+ }) => void): void;
17
+ removeEventListener(type: 'message', fn: (e: {
18
+ data: any;
19
+ }) => void): void;
20
+ }
6
21
  export interface StoreConfig<T extends Record<string, any>> {
7
22
  data?: Partial<T>[];
8
23
  model?: ModelDef;
@@ -57,6 +72,8 @@ export declare class Store<T extends Record<string, any> = Record<string, any>>
57
72
  loadData(data: Partial<T>[]): void;
58
73
  /** Reads through the proxy. Extra `params` are sent to it and remembered for later reloads. A newer load cancels the older one. */
59
74
  load(params?: Record<string, unknown>): Promise<void>;
75
+ /** Every record that matches the current sort and filters: a local store has them; a remote one is read page by page through its proxy. */
76
+ fetchAll(pageSize?: number): Promise<Model<T>[]>;
60
77
  private setRecords;
61
78
  /** Recomputes filtered/sorted/paged rows from `all`. */
62
79
  private refreshView;
@@ -80,6 +97,10 @@ export declare class Store<T extends Record<string, any> = Record<string, any>>
80
97
  add(raw: Partial<T> | Partial<T>[]): Model<T>[];
81
98
  insert(index: number, raw: Partial<T>): Model<T>;
82
99
  remove(target: Model<T> | number | Array<Model<T>>): void;
100
+ /** Applies live changes in place, with one repaint: known ids are patched (not marked as edits), unknown ones are added, `remove` drops. */
101
+ applyPatches(patches: Array<Patch<T>>): void;
102
+ /** Applies what a source sends as it arrives (`{ op, data, id }`, or an array of them; text is parsed as JSON). Returns the function that stops it. */
103
+ connect(source: LiveSource, parse?: (data: any) => Patch<T> | Array<Patch<T>>): () => void;
83
104
  clear(): void;
84
105
  recordChanged(rec: Model, field: string): void;
85
106
  getModified(): Model<T>[];
@@ -0,0 +1,2 @@
1
+ /** Starts warning; returns the function that stops it. Each type/option pair warns once. */
2
+ export declare function enableConfigWarnings(): () => void;
@@ -0,0 +1 @@
1
+ export declare const keys: Record<string, string>;