optikos 0.4.0 → 0.5.1

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 (340) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/build.js +2 -0
  3. package/dist/build.js.map +7 -0
  4. package/dist/{chunk-FCJI2JF7.js → chunk-34KVSA2V.js} +2 -2
  5. package/dist/{chunk-M7FNPRV4.js → chunk-4DW5WBZB.js} +2 -2
  6. package/dist/chunk-4QAHVGGE.js +2 -0
  7. package/dist/chunk-4QAHVGGE.js.map +7 -0
  8. package/dist/{chunk-I5A74NMJ.js → chunk-4Z4E3BZ2.js} +2 -2
  9. package/dist/chunk-5H533QXN.js +2 -0
  10. package/dist/chunk-5H533QXN.js.map +7 -0
  11. package/dist/chunk-5KJ5Y4GY.js +2 -0
  12. package/dist/chunk-5KJ5Y4GY.js.map +7 -0
  13. package/dist/chunk-5WE2JOBY.js +2 -0
  14. package/dist/chunk-5WE2JOBY.js.map +7 -0
  15. package/dist/{chunk-SEW5OCQF.js → chunk-6IXVTWFH.js} +2 -2
  16. package/dist/{chunk-NJ5IFOPR.js → chunk-6S4BKUGD.js} +2 -2
  17. package/dist/{chunk-CWIE74NX.js → chunk-6VWSTY32.js} +2 -2
  18. package/dist/{chunk-F4HZUAKM.js → chunk-72ESP5DB.js} +2 -2
  19. package/dist/chunk-74IVU356.js +3 -0
  20. package/dist/chunk-74IVU356.js.map +7 -0
  21. package/dist/chunk-76A4MY7P.js +2 -0
  22. package/dist/chunk-76A4MY7P.js.map +7 -0
  23. package/dist/{chunk-3BG75P7T.js → chunk-7SE4B4TC.js} +2 -2
  24. package/dist/{chunk-PGVLRMTQ.js → chunk-A5N2AJCE.js} +2 -2
  25. package/dist/{chunk-3QRA3XOA.js → chunk-ALNUVKDT.js} +2 -2
  26. package/dist/{chunk-NQV4THNE.js → chunk-ANR27GED.js} +2 -2
  27. package/dist/{chunk-EXIADWI7.js → chunk-AZUWS2C5.js} +2 -2
  28. package/dist/{chunk-Z6L55FTN.js → chunk-BHKI2SU3.js} +2 -2
  29. package/dist/{chunk-GZIDE5K2.js → chunk-BIQX75P2.js} +2 -2
  30. package/dist/{chunk-MNSDGJKA.js → chunk-BPCD37A2.js} +2 -2
  31. package/dist/chunk-CGSCBLG2.js +2 -0
  32. package/dist/chunk-CGSCBLG2.js.map +7 -0
  33. package/dist/{chunk-R32HPK7R.js → chunk-DHUBCB4H.js} +2 -2
  34. package/dist/chunk-DY3ZYMXD.js +2 -0
  35. package/dist/chunk-DY3ZYMXD.js.map +7 -0
  36. package/dist/{chunk-JSEI44A7.js → chunk-EKRWJJ65.js} +2 -2
  37. package/dist/chunk-EO2IXU2W.js +2 -0
  38. package/dist/chunk-EO2IXU2W.js.map +7 -0
  39. package/dist/{chunk-JE56CJX2.js → chunk-EQ4IWYLW.js} +2 -2
  40. package/dist/{chunk-5PYJ6FJK.js → chunk-EXBGOHG7.js} +2 -2
  41. package/dist/{chunk-UQRQH2JW.js → chunk-FTZMF2QX.js} +2 -2
  42. package/dist/{chunk-XFIREDWO.js → chunk-G7NNOLOG.js} +2 -2
  43. package/dist/chunk-GPEA3UWY.js +2 -0
  44. package/dist/chunk-GPEA3UWY.js.map +7 -0
  45. package/dist/{chunk-4OB2IM5L.js → chunk-GX32KEG2.js} +2 -2
  46. package/dist/{chunk-ZSPJZ3ZH.js → chunk-GYGX4VYF.js} +2 -2
  47. package/dist/{chunk-BIGL3ZVD.js → chunk-H2EC3QP4.js} +2 -2
  48. package/dist/{chunk-HRW25TMU.js → chunk-H2KFAM7L.js} +2 -2
  49. package/dist/{chunk-6LJK4QWF.js → chunk-HHOSKOO6.js} +2 -2
  50. package/dist/{chunk-JJLOUMCJ.js → chunk-I5KHVFJ4.js} +2 -2
  51. package/dist/{chunk-N2LS4JD6.js → chunk-IB5T27PW.js} +2 -2
  52. package/dist/{chunk-5BMG5ZBY.js → chunk-IE7KRNFJ.js} +2 -2
  53. package/dist/chunk-IODSL7KU.js +2 -0
  54. package/dist/chunk-IODSL7KU.js.map +7 -0
  55. package/dist/{chunk-3FK52VQX.js → chunk-J2YP2YD3.js} +2 -2
  56. package/dist/{chunk-3FCIZKIN.js → chunk-J6D4T4WY.js} +2 -2
  57. package/dist/{chunk-H25XXQVH.js → chunk-JF4WPGJQ.js} +2 -2
  58. package/dist/chunk-K44IJHPF.js +2 -0
  59. package/dist/{chunk-UDXO3KM3.js → chunk-KMBTJ5AG.js} +2 -2
  60. package/dist/chunk-KMBTJ5AG.js.map +7 -0
  61. package/dist/chunk-KNWO4NXX.js +2 -0
  62. package/dist/chunk-KNWO4NXX.js.map +7 -0
  63. package/dist/{chunk-JLKIHXZP.js → chunk-KP7O5MVL.js} +2 -2
  64. package/dist/{chunk-HLS5FI55.js → chunk-KVUELLYF.js} +2 -2
  65. package/dist/chunk-LLHDEUIA.js +2 -0
  66. package/dist/chunk-LLHDEUIA.js.map +7 -0
  67. package/dist/{chunk-CMV3F6HR.js → chunk-LRUKKIYA.js} +2 -2
  68. package/dist/{chunk-DWTDNKXX.js → chunk-M2XOIEPY.js} +2 -2
  69. package/dist/{chunk-P4O57S6N.js → chunk-MBRCE5A7.js} +2 -2
  70. package/dist/{chunk-CFGCB37K.js → chunk-MMPPDQ2E.js} +2 -2
  71. package/dist/{chunk-643FOYQB.js → chunk-MRDX3RVJ.js} +2 -2
  72. package/dist/{chunk-6PZPBPAD.js → chunk-NAWQBQ57.js} +2 -2
  73. package/dist/{chunk-RG6SHPHF.js → chunk-NBR5IRZT.js} +2 -2
  74. package/dist/chunk-NSUAVAWO.js +2 -0
  75. package/dist/chunk-NSUAVAWO.js.map +7 -0
  76. package/dist/chunk-NYXRPWIB.js +2 -0
  77. package/dist/chunk-NYXRPWIB.js.map +7 -0
  78. package/dist/{chunk-J5QPFJ7M.js → chunk-OK3SN5PN.js} +2 -2
  79. package/dist/{chunk-NNR2FNHG.js → chunk-OQFQDTLL.js} +2 -2
  80. package/dist/chunk-OVEQUN4V.js +2 -0
  81. package/dist/chunk-OVEQUN4V.js.map +7 -0
  82. package/dist/{chunk-GEBAYD6N.js → chunk-PMIIQMVH.js} +2 -2
  83. package/dist/{chunk-DIOJGTUN.js → chunk-QT5JRZZJ.js} +2 -2
  84. package/dist/{chunk-IUOEPAWG.js → chunk-R52OSARY.js} +2 -2
  85. package/dist/{chunk-XR677UYD.js → chunk-RI62AESU.js} +2 -2
  86. package/dist/{chunk-6BOM5KZR.js → chunk-RRGAJ7T4.js} +2 -2
  87. package/dist/{chunk-2YRQULDC.js → chunk-SQTM4QFP.js} +2 -2
  88. package/dist/{chunk-FPU53CCV.js → chunk-TAFHKT6O.js} +2 -2
  89. package/dist/{chunk-3TCITFUU.js → chunk-TBM35UV6.js} +2 -2
  90. package/dist/{chunk-YDX2PCVL.js → chunk-TBOQ6HZZ.js} +2 -2
  91. package/dist/{chunk-GEJKFE4X.js → chunk-TJJL2GSJ.js} +2 -2
  92. package/dist/{chunk-3F4MN2BU.js → chunk-TJXH3F7Z.js} +2 -2
  93. package/dist/chunk-TMBGEZSD.js +2 -0
  94. package/dist/chunk-TMBGEZSD.js.map +7 -0
  95. package/dist/{chunk-BQEFLPDA.js → chunk-U5RENLU4.js} +2 -2
  96. package/dist/chunk-U5RENLU4.js.map +7 -0
  97. package/dist/chunk-UXL7KG46.js +2 -0
  98. package/dist/chunk-UXL7KG46.js.map +7 -0
  99. package/dist/{chunk-DWA45BWR.js → chunk-VADYSXHY.js} +2 -2
  100. package/dist/{chunk-Q6FY4L2F.js → chunk-VBLCO5Q7.js} +2 -2
  101. package/dist/{chunk-ESCLDVFS.js → chunk-VCK5WWMQ.js} +2 -2
  102. package/dist/{chunk-BCVOUMJJ.js → chunk-VCYCNSJY.js} +2 -2
  103. package/dist/{chunk-4AZ44KV4.js → chunk-VOCGAAG7.js} +2 -2
  104. package/dist/{chunk-AT7VFZRB.js → chunk-WHWPLMIG.js} +2 -2
  105. package/dist/{chunk-S2CMWKVB.js → chunk-WVJSNE6Q.js} +2 -2
  106. package/dist/chunk-WWETTEUZ.js +2 -0
  107. package/dist/{chunk-YXOKWCYS.js.map → chunk-WWETTEUZ.js.map} +4 -4
  108. package/dist/chunk-XFDNXSU5.js +2 -0
  109. package/dist/{chunk-XQHATUKN.js.map → chunk-XFDNXSU5.js.map} +3 -3
  110. package/dist/{chunk-U5L76VVB.js → chunk-XI4IBUE3.js} +2 -2
  111. package/dist/{chunk-4S3HRFQB.js → chunk-YAKKOVRI.js} +2 -2
  112. package/dist/{chunk-HG7OOHGD.js → chunk-YF5GWNM7.js} +2 -2
  113. package/dist/{chunk-4CWYF4O7.js → chunk-YRCR5ELY.js} +2 -2
  114. package/dist/{chunk-C3MWS7P2.js → chunk-YVEGWCYD.js} +2 -2
  115. package/dist/{chunk-MQ5BYGFY.js → chunk-ZYHMTPW4.js} +2 -2
  116. package/dist/components/alert.js +2 -0
  117. package/dist/components/alert.js.map +7 -0
  118. package/dist/components/avatar.js +1 -1
  119. package/dist/components/badge.js +1 -1
  120. package/dist/components/breadcrumb.js +1 -1
  121. package/dist/components/button.js +1 -1
  122. package/dist/components/calendar.js +1 -1
  123. package/dist/components/carousel.js +1 -1
  124. package/dist/components/chart.js +1 -1
  125. package/dist/components/chat.js +1 -1
  126. package/dist/components/checkbox.js +1 -1
  127. package/dist/components/checkboxgroup.js +1 -1
  128. package/dist/components/chip.js +1 -1
  129. package/dist/components/codeviewer.js +1 -1
  130. package/dist/components/columntotals.js +2 -0
  131. package/dist/components/columntotals.js.map +7 -0
  132. package/dist/components/combobox.js +1 -1
  133. package/dist/components/commandpalette.js +1 -1
  134. package/dist/components/container.js +1 -1
  135. package/dist/components/dataview.js +1 -1
  136. package/dist/components/datefield.js +1 -1
  137. package/dist/components/daterangefield.js +1 -1
  138. package/dist/components/datetimefield.js +1 -1
  139. package/dist/components/dial.js +1 -1
  140. package/dist/components/dropdown.js +1 -1
  141. package/dist/components/exportbar.js +2 -0
  142. package/dist/components/exportbar.js.map +7 -0
  143. package/dist/components/fieldgroup.js +1 -1
  144. package/dist/components/fieldlist.js +1 -1
  145. package/dist/components/fieldset.js +1 -1
  146. package/dist/components/filterbuilder.js +1 -1
  147. package/dist/components/form.js +1 -1
  148. package/dist/components/formactions.js +1 -1
  149. package/dist/components/formerrors.js +1 -1
  150. package/dist/components/formsection.js +1 -1
  151. package/dist/components/grid.js +1 -1
  152. package/dist/components/gridexport.js +1 -1
  153. package/dist/components/grouping.js +1 -1
  154. package/dist/components/icon.js +1 -1
  155. package/dist/components/image.js +1 -1
  156. package/dist/components/imagecanvas.js +1 -1
  157. package/dist/components/imagefield.js +1 -1
  158. package/dist/components/inputgroup.js +1 -1
  159. package/dist/components/label.js +1 -1
  160. package/dist/components/listbox.js +1 -1
  161. package/dist/components/lookupfield.js +1 -1
  162. package/dist/components/maskfield.js +1 -1
  163. package/dist/components/menu.js +1 -1
  164. package/dist/components/messagebox.js +1 -1
  165. package/dist/components/navmenu.js +1 -1
  166. package/dist/components/numberfield.js +1 -1
  167. package/dist/components/pagination.js +1 -1
  168. package/dist/components/panel.js +1 -1
  169. package/dist/components/pickerfield.js +1 -1
  170. package/dist/components/quicksearch.js +2 -0
  171. package/dist/components/quicksearch.js.map +7 -0
  172. package/dist/components/radiogroup.js +1 -1
  173. package/dist/components/searchgrid.js +1 -1
  174. package/dist/components/secretfield.js +1 -1
  175. package/dist/components/select.js +1 -1
  176. package/dist/components/shortcuts.js +1 -1
  177. package/dist/components/slider.js +1 -1
  178. package/dist/components/spacer.js +1 -1
  179. package/dist/components/spinner.js +1 -1
  180. package/dist/components/stat.js +1 -1
  181. package/dist/components/stepform.js +1 -1
  182. package/dist/components/stepper.js +1 -1
  183. package/dist/components/suggestfield.js +1 -1
  184. package/dist/components/table.js +1 -1
  185. package/dist/components/tabs.js +1 -1
  186. package/dist/components/textarea.js +1 -1
  187. package/dist/components/textfield.js +1 -1
  188. package/dist/components/timeentry.js +2 -0
  189. package/dist/components/timeentry.js.map +7 -0
  190. package/dist/components/timefield.js +1 -1
  191. package/dist/components/timeline.js +1 -1
  192. package/dist/components/toast.js +1 -1
  193. package/dist/components/toggle.js +1 -1
  194. package/dist/components/toolbar.js +1 -1
  195. package/dist/components/tree.js +1 -1
  196. package/dist/components/treegrid.js +1 -1
  197. package/dist/components/viewmanager.js +1 -1
  198. package/dist/components/viewport.js +1 -1
  199. package/dist/components/widget.js +1 -1
  200. package/dist/components/window.js +1 -1
  201. package/dist/core.js +1 -1
  202. package/dist/css/alert.css +60 -0
  203. package/dist/css/carousel.css +60 -0
  204. package/dist/css/columntotals.css +56 -0
  205. package/dist/css/exportbar.css +9 -0
  206. package/dist/css/grid.css +12 -0
  207. package/dist/css/grouping.css +7 -0
  208. package/dist/css/label.css +14 -0
  209. package/dist/css/quicksearch.css +13 -0
  210. package/dist/css/stat.css +14 -0
  211. package/dist/css/timeentry.css +116 -0
  212. package/dist/css/timeline.css +45 -0
  213. package/dist/data.js +1 -1
  214. package/dist/dev.js +1 -1
  215. package/dist/dev.js.map +2 -2
  216. package/dist/index.js +6 -6
  217. package/dist/index.js.map +1 -1
  218. package/dist/optikos.css +411 -0
  219. package/dist/types/build/build.d.ts +49 -0
  220. package/dist/types/build/index.d.ts +1 -0
  221. package/dist/types/components/alert.d.ts +1 -0
  222. package/dist/types/components/base/label/label.d.ts +11 -1
  223. package/dist/types/components/charts/stat/stat.d.ts +7 -1
  224. package/dist/types/components/columntotals.d.ts +1 -0
  225. package/dist/types/components/data/columntotals/columntotals.d.ts +24 -0
  226. package/dist/types/components/data/exportbar/exportbar.d.ts +24 -0
  227. package/dist/types/components/data/grid/footer.d.ts +6 -0
  228. package/dist/types/components/data/grouping/controls.d.ts +27 -0
  229. package/dist/types/components/data/grouping/grouping.d.ts +15 -3
  230. package/dist/types/components/data/quicksearch/quicksearch.d.ts +13 -0
  231. package/dist/types/components/data/timeentry/timeentry.d.ts +37 -0
  232. package/dist/types/components/data/timeline/timeline.d.ts +3 -0
  233. package/dist/types/components/exportbar.d.ts +1 -0
  234. package/dist/types/components/feedback/alert/alert.d.ts +28 -0
  235. package/dist/types/components/fields/datetimefield/datetimefield.d.ts +2 -0
  236. package/dist/types/components/fields/maskfield/maskfield.d.ts +23 -4
  237. package/dist/types/components/layout/carousel/carousel.d.ts +8 -0
  238. package/dist/types/components/navigation/navmenu/navmenu.d.ts +4 -0
  239. package/dist/types/components/quicksearch.d.ts +1 -0
  240. package/dist/types/components/timeentry.d.ts +1 -0
  241. package/dist/types/core/component.d.ts +6 -3
  242. package/dist/types/core/container.d.ts +2 -0
  243. package/dist/types/data/column.d.ts +4 -2
  244. package/dist/types/index.d.ts +6 -0
  245. package/dist/types/layout/layout.d.ts +5 -0
  246. package/dist/ui.js +1 -1
  247. package/package.json +5 -1
  248. package/dist/chunk-2HNQ2XRY.js +0 -2
  249. package/dist/chunk-2HNQ2XRY.js.map +0 -7
  250. package/dist/chunk-5PWPAN62.js +0 -2
  251. package/dist/chunk-5PWPAN62.js.map +0 -7
  252. package/dist/chunk-AQ3RTHG5.js +0 -2
  253. package/dist/chunk-AQ3RTHG5.js.map +0 -7
  254. package/dist/chunk-BJWREA76.js +0 -2
  255. package/dist/chunk-BJWREA76.js.map +0 -7
  256. package/dist/chunk-BQEFLPDA.js.map +0 -7
  257. package/dist/chunk-DJUSVBD5.js +0 -2
  258. package/dist/chunk-DJUSVBD5.js.map +0 -7
  259. package/dist/chunk-GFFZTFQH.js +0 -2
  260. package/dist/chunk-GFFZTFQH.js.map +0 -7
  261. package/dist/chunk-PMOXLQ72.js +0 -2
  262. package/dist/chunk-PMOXLQ72.js.map +0 -7
  263. package/dist/chunk-SB4ICXBV.js +0 -2
  264. package/dist/chunk-SB4ICXBV.js.map +0 -7
  265. package/dist/chunk-SWCB2GMN.js +0 -2
  266. package/dist/chunk-SWCB2GMN.js.map +0 -7
  267. package/dist/chunk-TQPQ4UEA.js +0 -2
  268. package/dist/chunk-TQPQ4UEA.js.map +0 -7
  269. package/dist/chunk-UDXO3KM3.js.map +0 -7
  270. package/dist/chunk-XQHATUKN.js +0 -2
  271. package/dist/chunk-YJTUFK4P.js +0 -2
  272. package/dist/chunk-YXOKWCYS.js +0 -2
  273. /package/dist/{chunk-FCJI2JF7.js.map → chunk-34KVSA2V.js.map} +0 -0
  274. /package/dist/{chunk-M7FNPRV4.js.map → chunk-4DW5WBZB.js.map} +0 -0
  275. /package/dist/{chunk-I5A74NMJ.js.map → chunk-4Z4E3BZ2.js.map} +0 -0
  276. /package/dist/{chunk-SEW5OCQF.js.map → chunk-6IXVTWFH.js.map} +0 -0
  277. /package/dist/{chunk-NJ5IFOPR.js.map → chunk-6S4BKUGD.js.map} +0 -0
  278. /package/dist/{chunk-CWIE74NX.js.map → chunk-6VWSTY32.js.map} +0 -0
  279. /package/dist/{chunk-F4HZUAKM.js.map → chunk-72ESP5DB.js.map} +0 -0
  280. /package/dist/{chunk-3BG75P7T.js.map → chunk-7SE4B4TC.js.map} +0 -0
  281. /package/dist/{chunk-PGVLRMTQ.js.map → chunk-A5N2AJCE.js.map} +0 -0
  282. /package/dist/{chunk-3QRA3XOA.js.map → chunk-ALNUVKDT.js.map} +0 -0
  283. /package/dist/{chunk-NQV4THNE.js.map → chunk-ANR27GED.js.map} +0 -0
  284. /package/dist/{chunk-EXIADWI7.js.map → chunk-AZUWS2C5.js.map} +0 -0
  285. /package/dist/{chunk-Z6L55FTN.js.map → chunk-BHKI2SU3.js.map} +0 -0
  286. /package/dist/{chunk-GZIDE5K2.js.map → chunk-BIQX75P2.js.map} +0 -0
  287. /package/dist/{chunk-MNSDGJKA.js.map → chunk-BPCD37A2.js.map} +0 -0
  288. /package/dist/{chunk-R32HPK7R.js.map → chunk-DHUBCB4H.js.map} +0 -0
  289. /package/dist/{chunk-JSEI44A7.js.map → chunk-EKRWJJ65.js.map} +0 -0
  290. /package/dist/{chunk-JE56CJX2.js.map → chunk-EQ4IWYLW.js.map} +0 -0
  291. /package/dist/{chunk-5PYJ6FJK.js.map → chunk-EXBGOHG7.js.map} +0 -0
  292. /package/dist/{chunk-UQRQH2JW.js.map → chunk-FTZMF2QX.js.map} +0 -0
  293. /package/dist/{chunk-XFIREDWO.js.map → chunk-G7NNOLOG.js.map} +0 -0
  294. /package/dist/{chunk-4OB2IM5L.js.map → chunk-GX32KEG2.js.map} +0 -0
  295. /package/dist/{chunk-ZSPJZ3ZH.js.map → chunk-GYGX4VYF.js.map} +0 -0
  296. /package/dist/{chunk-BIGL3ZVD.js.map → chunk-H2EC3QP4.js.map} +0 -0
  297. /package/dist/{chunk-HRW25TMU.js.map → chunk-H2KFAM7L.js.map} +0 -0
  298. /package/dist/{chunk-6LJK4QWF.js.map → chunk-HHOSKOO6.js.map} +0 -0
  299. /package/dist/{chunk-JJLOUMCJ.js.map → chunk-I5KHVFJ4.js.map} +0 -0
  300. /package/dist/{chunk-N2LS4JD6.js.map → chunk-IB5T27PW.js.map} +0 -0
  301. /package/dist/{chunk-5BMG5ZBY.js.map → chunk-IE7KRNFJ.js.map} +0 -0
  302. /package/dist/{chunk-3FK52VQX.js.map → chunk-J2YP2YD3.js.map} +0 -0
  303. /package/dist/{chunk-3FCIZKIN.js.map → chunk-J6D4T4WY.js.map} +0 -0
  304. /package/dist/{chunk-H25XXQVH.js.map → chunk-JF4WPGJQ.js.map} +0 -0
  305. /package/dist/{chunk-YJTUFK4P.js.map → chunk-K44IJHPF.js.map} +0 -0
  306. /package/dist/{chunk-JLKIHXZP.js.map → chunk-KP7O5MVL.js.map} +0 -0
  307. /package/dist/{chunk-HLS5FI55.js.map → chunk-KVUELLYF.js.map} +0 -0
  308. /package/dist/{chunk-CMV3F6HR.js.map → chunk-LRUKKIYA.js.map} +0 -0
  309. /package/dist/{chunk-DWTDNKXX.js.map → chunk-M2XOIEPY.js.map} +0 -0
  310. /package/dist/{chunk-P4O57S6N.js.map → chunk-MBRCE5A7.js.map} +0 -0
  311. /package/dist/{chunk-CFGCB37K.js.map → chunk-MMPPDQ2E.js.map} +0 -0
  312. /package/dist/{chunk-643FOYQB.js.map → chunk-MRDX3RVJ.js.map} +0 -0
  313. /package/dist/{chunk-6PZPBPAD.js.map → chunk-NAWQBQ57.js.map} +0 -0
  314. /package/dist/{chunk-RG6SHPHF.js.map → chunk-NBR5IRZT.js.map} +0 -0
  315. /package/dist/{chunk-J5QPFJ7M.js.map → chunk-OK3SN5PN.js.map} +0 -0
  316. /package/dist/{chunk-NNR2FNHG.js.map → chunk-OQFQDTLL.js.map} +0 -0
  317. /package/dist/{chunk-GEBAYD6N.js.map → chunk-PMIIQMVH.js.map} +0 -0
  318. /package/dist/{chunk-DIOJGTUN.js.map → chunk-QT5JRZZJ.js.map} +0 -0
  319. /package/dist/{chunk-IUOEPAWG.js.map → chunk-R52OSARY.js.map} +0 -0
  320. /package/dist/{chunk-XR677UYD.js.map → chunk-RI62AESU.js.map} +0 -0
  321. /package/dist/{chunk-6BOM5KZR.js.map → chunk-RRGAJ7T4.js.map} +0 -0
  322. /package/dist/{chunk-2YRQULDC.js.map → chunk-SQTM4QFP.js.map} +0 -0
  323. /package/dist/{chunk-FPU53CCV.js.map → chunk-TAFHKT6O.js.map} +0 -0
  324. /package/dist/{chunk-3TCITFUU.js.map → chunk-TBM35UV6.js.map} +0 -0
  325. /package/dist/{chunk-YDX2PCVL.js.map → chunk-TBOQ6HZZ.js.map} +0 -0
  326. /package/dist/{chunk-GEJKFE4X.js.map → chunk-TJJL2GSJ.js.map} +0 -0
  327. /package/dist/{chunk-3F4MN2BU.js.map → chunk-TJXH3F7Z.js.map} +0 -0
  328. /package/dist/{chunk-DWA45BWR.js.map → chunk-VADYSXHY.js.map} +0 -0
  329. /package/dist/{chunk-Q6FY4L2F.js.map → chunk-VBLCO5Q7.js.map} +0 -0
  330. /package/dist/{chunk-ESCLDVFS.js.map → chunk-VCK5WWMQ.js.map} +0 -0
  331. /package/dist/{chunk-BCVOUMJJ.js.map → chunk-VCYCNSJY.js.map} +0 -0
  332. /package/dist/{chunk-4AZ44KV4.js.map → chunk-VOCGAAG7.js.map} +0 -0
  333. /package/dist/{chunk-AT7VFZRB.js.map → chunk-WHWPLMIG.js.map} +0 -0
  334. /package/dist/{chunk-S2CMWKVB.js.map → chunk-WVJSNE6Q.js.map} +0 -0
  335. /package/dist/{chunk-U5L76VVB.js.map → chunk-XI4IBUE3.js.map} +0 -0
  336. /package/dist/{chunk-4S3HRFQB.js.map → chunk-YAKKOVRI.js.map} +0 -0
  337. /package/dist/{chunk-HG7OOHGD.js.map → chunk-YF5GWNM7.js.map} +0 -0
  338. /package/dist/{chunk-4CWYF4O7.js.map → chunk-YRCR5ELY.js.map} +0 -0
  339. /package/dist/{chunk-C3MWS7P2.js.map → chunk-YVEGWCYD.js.map} +0 -0
  340. /package/dist/{chunk-MQ5BYGFY.js.map → chunk-ZYHMTPW4.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -5,6 +5,44 @@ and the project uses [Semantic Versioning](https://semver.org/). Until 1.0, mino
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.5.1] - 2026-11-11
9
+
10
+ ### Added
11
+
12
+ - Alert (`alert`): a message in the page with `tone`, `title`, `text`, an icon by tone, `closable` and `role=alert` for warning and danger.
13
+ - Carousel `transition: 'fade'`, `overlay` (dots, play button and caption over the content) and `captions`.
14
+ - Label `tag` (`h1`…`h6`, `p`, `div`), `icon` and `src` / `alt` (a logo before the text).
15
+ - Stat `href` and `handler`: the tile becomes a link or a button (focusable, hover, named "label: value").
16
+ - NavMenu `railWidth`: the parent container takes it while collapsed and gives its width back on expand.
17
+ - `quickSearch()` (a Grid plugin): a search box in the grid's footer row, over several fields, combined with other filters.
18
+ - MaskField `stored`: a value held by the app but shown masked (`***.***.***-12`) is read-only, `null` until replaced.
19
+ - DateTimeField `defaultTime` (`'23:59'` for an end date).
20
+ - `theme` also takes a string (`'dark tenant-dark'`) on any component: it sets `data-op-theme` on it.
21
+ - Container `narrowBelow` shortcut, and typed common layout options (`narrowBelow`, `gap`, `columns`, `open`).
22
+
23
+ ### Changed
24
+
25
+ - `MaskField` is typed `string | null` (its `getValue()` is `null` while a `stored` value is untouched), like `SecretField`.
26
+
27
+ ## [0.5.0] - 2026-11-11
28
+
29
+ ### Added
30
+
31
+ - `optikos/build`: one `FieldSpec[]` list gives the grid columns (`buildColumns`, `buildGrid`), the form (`buildFields`,
32
+ `buildForm`, groups become fieldsets) and the filter fields (`buildFilterFields`).
33
+ - `timeEntry()` (a Timeline plugin): create, move, resize and remove entries by pointer or keyboard, with snapping,
34
+ overlap control, locked entries, a total per lane against a `target`, and `before-*` / `create` / `change` / `remove` / `edit` events.
35
+ - `grouping({ controls, choices })`: expand all, collapse all and a "Group by" menu as icon buttons inside the grid, beside the
36
+ pager (and the `exportBar()` buttons, which share the row); each one switchable. Icons `expand`, `collapse`.
37
+ - `exportBar()` (a Grid plugin): CSV, Excel, this-page and Print buttons inside the grid, in one row with the pager, each
38
+ one switchable; `exportGrid` / `printGrid` still work from your own buttons. New icons `download`, `printer`, `table`.
39
+ - Column `format: 'duration'` (minutes as `7h 30m`) and `FieldSpec` type `duration`, so totals of time spent read "Sum 72h".
40
+ - Timeline `direction: 'vertical'` (range mode: time runs top to bottom, one column per lane); `timeEntry()` works on it too.
41
+ - `timeEntry({ form })`: your own dialog fills a new entry and edits one.
42
+ - `columnTotals()` (a Grid plugin): a button on each column header opens a menu of totals (sum, average, minimum, maximum,
43
+ count, your own); the choice shows in a bar under the grid, over every filtered row, or (`show: 'modal' | 'toast'`) as a one-off answer; `position: 'top'` puts the bar under the header. The grid fires `header-paint`.
44
+ - Column `summary` on dates: `min` (earliest), `max` (latest) and `count`.
45
+
8
46
  ## [0.4.0] - 2026-11-10
9
47
 
10
48
  ### Added
package/dist/build.js ADDED
@@ -0,0 +1,2 @@
1
+ import{a,b,c,d,e}from"./chunk-5KJ5Y4GY.js";import"./chunk-GX32KEG2.js";import"./chunk-WWETTEUZ.js";import"./chunk-VADYSXHY.js";import"./chunk-J6D4T4WY.js";import"./chunk-GYGX4VYF.js";import"./chunk-OQFQDTLL.js";import"./chunk-MMPPDQ2E.js";import"./chunk-XI4IBUE3.js";import"./chunk-MBRCE5A7.js";import"./chunk-EO2IXU2W.js";import"./chunk-4DW5WBZB.js";import"./chunk-NAWQBQ57.js";import"./chunk-I5KHVFJ4.js";import"./chunk-YRCR5ELY.js";import"./chunk-NYXRPWIB.js";import"./chunk-BHKI2SU3.js";import"./chunk-MRDX3RVJ.js";import"./chunk-LRUKKIYA.js";import"./chunk-IB5T27PW.js";import"./chunk-JF4WPGJQ.js";import"./chunk-WVJSNE6Q.js";import"./chunk-R52OSARY.js";import"./chunk-DHUBCB4H.js";import"./chunk-VOCGAAG7.js";import"./chunk-TJJL2GSJ.js";import"./chunk-5WE2JOBY.js";import"./chunk-IE7KRNFJ.js";import"./chunk-EQ4IWYLW.js";import"./chunk-FTZMF2QX.js";import"./chunk-H2KFAM7L.js";import"./chunk-TJXH3F7Z.js";import"./chunk-6IXVTWFH.js";import"./chunk-BPCD37A2.js";import"./chunk-NBR5IRZT.js";import"./chunk-SQTM4QFP.js";import"./chunk-OVEQUN4V.js";import"./chunk-VCYCNSJY.js";import"./chunk-KVUELLYF.js";import"./chunk-QT5JRZZJ.js";import"./chunk-2GKIF7A6.js";import"./chunk-OWEQT2HN.js";import"./chunk-U5RENLU4.js";import"./chunk-E4VNLYO2.js";import"./chunk-676AKAGF.js";import"./chunk-VV7CFMPZ.js";import"./chunk-RI62AESU.js";import"./chunk-TIPK3SCJ.js";import"./chunk-KMBTJ5AG.js";import"./chunk-PZSHOSOS.js";import"./chunk-IODSL7KU.js";import"./chunk-XFDNXSU5.js";import"./chunk-L5SQQFO7.js";import"./chunk-3VDLX7ET.js";import"./chunk-S4QD5NID.js";import"./chunk-6NCXO5ZP.js";import"./chunk-4AA4FQEM.js";import"./chunk-2UPUC4RK.js";import"./chunk-V5G5JECN.js";import"./chunk-4C666HHU.js";export{a as buildColumns,b as buildFields,c as buildFilterFields,e as buildForm,d as buildGrid};
2
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,3 +1,3 @@
1
- import{a as b}from"./chunk-2HNQ2XRY.js";var U={csv:"text/csv;charset=utf-8",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},y=new TextEncoder,T=t=>typeof t=="string"?t:t.textContent??"",E=t=>/[",\n\r;]/.test(t)?`"${t.replace(/"/g,'""')}"`:t,A=t=>/^[=+@]/.test(t)||/^-[^\d.,]/.test(t)?`'${t}`:t;function k(t,r){let e=t.getColumns();return{head:e.map(n=>n.header??n.field),rows:r.map(n=>e.map(o=>{let c=n.data[o.field];return typeof c=="number"&&!o.format&&!o.renderer?c:A(T(b(o,n)))}))}}var w=(()=>{let t=Array.from({length:256},(r,e)=>{for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;return e>>>0});return r=>{let e=-1;for(let n of r)e=t[(e^n)&255]^e>>>8;return~e>>>0}})();function C(t){let r=[],e=[],n=0,o=(p,l,a)=>p.setUint32(l,a,!0);for(let[p,l]of Object.entries(t)){let a=y.encode(p),i=y.encode(l),u=new Uint8Array(30+a.length),f=new DataView(u.buffer);o(f,0,67324752),f.setUint16(4,20,!0),f.setUint16(6,2048,!0),o(f,14,w(i)),o(f,18,i.length),o(f,22,i.length),f.setUint16(26,a.length,!0),u.set(a,30);let g=new Uint8Array(46+a.length),h=new DataView(g.buffer);o(h,0,33639248),h.setUint16(4,20,!0),h.setUint16(6,20,!0),h.setUint16(8,2048,!0),o(h,16,w(i)),o(h,20,i.length),o(h,24,i.length),h.setUint16(28,a.length,!0),o(h,42,n),g.set(a,46),e.push(g),r.push(u,i),n+=u.length+i.length}let c=e.reduce((p,l)=>p+l.length,0),s=new Uint8Array(22),m=new DataView(s.buffer);o(m,0,101010256),m.setUint16(8,e.length,!0),m.setUint16(10,e.length,!0),o(m,12,c),o(m,16,n);let d=new Uint8Array(n+c+22),x=0;for(let p of[...r,...e,s])d.set(p,x),x+=p.length;return d}var S=t=>t.replace(/[&<>"]/g,r=>`&#${r.charCodeAt(0)};`).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/g,""),v=(t,r)=>{let e="";for(let n=t+1;n>0;n=Math.floor((n-1)/26))e=String.fromCharCode(65+(n-1)%26)+e;return e+(r+1)};function R(t,r){let e=(c,s,m,d=!1)=>typeof c=="number"?`<c r="${v(s,m)}"><v>${c}</v></c>`:`<c r="${v(s,m)}" t="inlineStr"${d?' s="1"':""}><is><t xml:space="preserve">${S(c)}</t></is></c>`,o={"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/></Types>',"_rels/.rels":'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets></workbook>',"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border/></borders><cellStyleXfs count="1"><xf/></cellStyleXfs><cellXfs count="2"><xf/><xf fontId="1" applyFont="1"/></cellXfs></styleSheet>',"xl/worksheets/sheet1.xml":`<?xml version="1.0" encoding="UTF-8"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>${[t,...r].map((c,s)=>`<row r="${s+1}">${c.map((m,d)=>e(m,d,s,s===0)).join("")}</row>`).join("")}</sheetData></worksheet>`};return new Blob([C(o)],{type:U.xlsx})}async function O(t,r={}){let{format:e="csv",filename:n="export",scope:o="all",download:c=!0}=r,s=t.getStore(),m=o==="page"?s.getRange():await s.fetchAll(r.pageSize),{head:d,rows:x}=k(t,m),p=e==="xlsx"?R(d,x):new Blob(["\uFEFF"+[d,...x].map(l=>l.map(a=>E(String(a))).join(",")).join(`\r
1
+ import{a as b}from"./chunk-IODSL7KU.js";var U={csv:"text/csv;charset=utf-8",xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},y=new TextEncoder,T=t=>typeof t=="string"?t:t.textContent??"",E=t=>/[",\n\r;]/.test(t)?`"${t.replace(/"/g,'""')}"`:t,A=t=>/^[=+@]/.test(t)||/^-[^\d.,]/.test(t)?`'${t}`:t;function k(t,r){let e=t.getColumns();return{head:e.map(n=>n.header??n.field),rows:r.map(n=>e.map(o=>{let c=n.data[o.field];return typeof c=="number"&&!o.format&&!o.renderer?c:A(T(b(o,n)))}))}}var w=(()=>{let t=Array.from({length:256},(r,e)=>{for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;return e>>>0});return r=>{let e=-1;for(let n of r)e=t[(e^n)&255]^e>>>8;return~e>>>0}})();function C(t){let r=[],e=[],n=0,o=(p,l,a)=>p.setUint32(l,a,!0);for(let[p,l]of Object.entries(t)){let a=y.encode(p),i=y.encode(l),u=new Uint8Array(30+a.length),f=new DataView(u.buffer);o(f,0,67324752),f.setUint16(4,20,!0),f.setUint16(6,2048,!0),o(f,14,w(i)),o(f,18,i.length),o(f,22,i.length),f.setUint16(26,a.length,!0),u.set(a,30);let g=new Uint8Array(46+a.length),h=new DataView(g.buffer);o(h,0,33639248),h.setUint16(4,20,!0),h.setUint16(6,20,!0),h.setUint16(8,2048,!0),o(h,16,w(i)),o(h,20,i.length),o(h,24,i.length),h.setUint16(28,a.length,!0),o(h,42,n),g.set(a,46),e.push(g),r.push(u,i),n+=u.length+i.length}let c=e.reduce((p,l)=>p+l.length,0),s=new Uint8Array(22),m=new DataView(s.buffer);o(m,0,101010256),m.setUint16(8,e.length,!0),m.setUint16(10,e.length,!0),o(m,12,c),o(m,16,n);let d=new Uint8Array(n+c+22),x=0;for(let p of[...r,...e,s])d.set(p,x),x+=p.length;return d}var S=t=>t.replace(/[&<>"]/g,r=>`&#${r.charCodeAt(0)};`).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/g,""),v=(t,r)=>{let e="";for(let n=t+1;n>0;n=Math.floor((n-1)/26))e=String.fromCharCode(65+(n-1)%26)+e;return e+(r+1)};function R(t,r){let e=(c,s,m,d=!1)=>typeof c=="number"?`<c r="${v(s,m)}"><v>${c}</v></c>`:`<c r="${v(s,m)}" t="inlineStr"${d?' s="1"':""}><is><t xml:space="preserve">${S(c)}</t></is></c>`,o={"[Content_Types].xml":'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/></Types>',"_rels/.rels":'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>',"xl/workbook.xml":'<?xml version="1.0" encoding="UTF-8"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="Sheet1" sheetId="1" r:id="rId1"/></sheets></workbook>',"xl/_rels/workbook.xml.rels":'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>',"xl/styles.xml":'<?xml version="1.0" encoding="UTF-8"?><styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border/></borders><cellStyleXfs count="1"><xf/></cellStyleXfs><cellXfs count="2"><xf/><xf fontId="1" applyFont="1"/></cellXfs></styleSheet>',"xl/worksheets/sheet1.xml":`<?xml version="1.0" encoding="UTF-8"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>${[t,...r].map((c,s)=>`<row r="${s+1}">${c.map((m,d)=>e(m,d,s,s===0)).join("")}</row>`).join("")}</sheetData></worksheet>`};return new Blob([C(o)],{type:U.xlsx})}async function O(t,r={}){let{format:e="csv",filename:n="export",scope:o="all",download:c=!0}=r,s=t.getStore(),m=o==="page"?s.getRange():await s.fetchAll(r.pageSize),{head:d,rows:x}=k(t,m),p=e==="xlsx"?R(d,x):new Blob(["\uFEFF"+[d,...x].map(l=>l.map(a=>E(String(a))).join(",")).join(`\r
2
2
  `)],{type:U.csv});if(c){let l=document.createElement("a");l.href=URL.createObjectURL(p),l.download=`${n}.${e}`,document.body.append(l),l.click(),l.remove(),setTimeout(()=>URL.revokeObjectURL(l.href),1e3)}return p}async function $(t,r={}){let e=t.getStore(),n=r.scope==="page"?e.getRange():await e.fetchAll(r.pageSize),{head:o,rows:c}=k(t,n),s=document.createElement("div");s.className="op-print-sheet";let m=(a,i)=>Object.assign(document.createElement(a),{textContent:String(i)}),d=(a,i)=>{let u=document.createElement("tr");return u.append(...i.map(f=>m(a,f))),u},x=document.createElement("table"),p=document.createElement("thead");p.append(d("th",o));let l=document.createElement("tbody");l.append(...c.map(a=>d("td",a))),x.append(p,l),r.title&&s.append(Object.assign(document.createElement("h1"),{textContent:r.title})),s.append(x),document.body.append(s),document.documentElement.classList.add("op-printing"),await new Promise(a=>{let i=()=>{window.removeEventListener("afterprint",i),s.remove(),document.documentElement.classList.remove("op-printing"),a()};window.addEventListener("afterprint",i),window.print(),typeof matchMedia!="function"&&setTimeout(i,0)})}export{O as a,$ as b};
3
- //# sourceMappingURL=chunk-FCJI2JF7.js.map
3
+ //# sourceMappingURL=chunk-34KVSA2V.js.map
@@ -1,2 +1,2 @@
1
- import{a as d}from"./chunk-2YRQULDC.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{e as l,f as s}from"./chunk-S4QD5NID.js";l("en",{time:"Enter a time like 09:30"});l("pt-BR",{time:"Informe uma hora, como 09:30"});var p=1440,u=n=>String(n).padStart(2,"0"),a=n=>Number(n.slice(0,2))*60+Number(n.slice(3)),f=n=>`${u(Math.floor(n/60))}:${u(n%60)}`,m=class extends d{baseCls="op-field op-textfield op-timefield";garbage=!1;emptyValue(){return null}isEmpty(e){return e==null}parse(e){this.garbage=!1;let t=e.trim();if(!t)return null;let r=/^(\d{1,2})(?::?(\d{2}))?$/.exec(t)??/^(\d)(\d{2})$/.exec(t),i=r&&Number(r[1]),o=r&&Number(r[2]??0);return!r||i>23||o>59?(this.garbage=!0,null):`${u(i)}:${u(o)}`}createControl(){let e=super.createControl();return this.input.setAttribute("inputmode","numeric"),this.listen(this.input,"blur",()=>{this.garbage||(this.input.value=this.display(this.value))}),e}onInput(){super.onInput(),this.garbage?this.setError(s("time")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}check(){if(this.garbage)return s("time");let e=super.check(),t=this.value,{min:r,max:i}=this.config;return e||t==null?e:r&&i&&(t<r||t>i)?s("range",{min:r,max:i}):r&&t<r?s("min",{n:r}):i&&t>i?s("max",{n:i}):""}onKey(e){let t=e.key==="PageUp"||e.key==="PageDown";e.key==="ArrowUp"||e.key==="ArrowDown"||t?(e.preventDefault(),this.bump((e.key.endsWith("Up")?1:-1)*(t?60:this.config.step??1))):super.onKey(e)}bump(e){let{min:t,max:r}=this.config,i=(this.value?a(this.value):t?a(t):0)+e,o=t?a(t):0,g=r?a(r):p-1;this.setValue(f(t||r?Math.min(g,Math.max(o,i)):(i+p)%p))}setMin(e){this.config.min=e}setMax(e){this.config.max=e}};c("timefield",m);export{m as a};
2
- //# sourceMappingURL=chunk-M7FNPRV4.js.map
1
+ import{a as d}from"./chunk-SQTM4QFP.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{e as l,f as s}from"./chunk-S4QD5NID.js";l("en",{time:"Enter a time like 09:30"});l("pt-BR",{time:"Informe uma hora, como 09:30"});var p=1440,u=n=>String(n).padStart(2,"0"),a=n=>Number(n.slice(0,2))*60+Number(n.slice(3)),f=n=>`${u(Math.floor(n/60))}:${u(n%60)}`,m=class extends d{baseCls="op-field op-textfield op-timefield";garbage=!1;emptyValue(){return null}isEmpty(e){return e==null}parse(e){this.garbage=!1;let t=e.trim();if(!t)return null;let r=/^(\d{1,2})(?::?(\d{2}))?$/.exec(t)??/^(\d)(\d{2})$/.exec(t),i=r&&Number(r[1]),o=r&&Number(r[2]??0);return!r||i>23||o>59?(this.garbage=!0,null):`${u(i)}:${u(o)}`}createControl(){let e=super.createControl();return this.input.setAttribute("inputmode","numeric"),this.listen(this.input,"blur",()=>{this.garbage||(this.input.value=this.display(this.value))}),e}onInput(){super.onInput(),this.garbage?this.setError(s("time")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}check(){if(this.garbage)return s("time");let e=super.check(),t=this.value,{min:r,max:i}=this.config;return e||t==null?e:r&&i&&(t<r||t>i)?s("range",{min:r,max:i}):r&&t<r?s("min",{n:r}):i&&t>i?s("max",{n:i}):""}onKey(e){let t=e.key==="PageUp"||e.key==="PageDown";e.key==="ArrowUp"||e.key==="ArrowDown"||t?(e.preventDefault(),this.bump((e.key.endsWith("Up")?1:-1)*(t?60:this.config.step??1))):super.onKey(e)}bump(e){let{min:t,max:r}=this.config,i=(this.value?a(this.value):t?a(t):0)+e,o=t?a(t):0,g=r?a(r):p-1;this.setValue(f(t||r?Math.min(g,Math.max(o,i)):(i+p)%p))}setMin(e){this.config.min=e}setMax(e){this.config.max=e}};c("timefield",m);export{m as a};
2
+ //# sourceMappingURL=chunk-4DW5WBZB.js.map
@@ -0,0 +1,2 @@
1
+ import{a as g}from"./chunk-BPCD37A2.js";import{c}from"./chunk-QT5JRZZJ.js";import{a as v}from"./chunk-TIPK3SCJ.js";import{e as p,f as u}from"./chunk-KMBTJ5AG.js";import{b as a,e as f}from"./chunk-PZSHOSOS.js";var m=class extends u{baseCls="op-navmenu";tag="nav";items=[];open=new Set;active;query="";focusId;root;flyout;flyoutOf;hoverTimer;parentWidth;onRender(){let t=this.config;this.items=p(t.items)??[],this.active=t.active;let e=i=>i.forEach(s=>(s.expanded&&this.open.add(s.id),s.items&&e(s.items)));e(this.items),this.active&&this.openParents(this.active),this.root=a("ul","op-navmenu__tree",{role:"tree","aria-label":t.ariaLabel??null}),this.el.append(this.root),this.fit(),this.listen(this.root,"click",i=>{let s=i.target.closest(".op-navmenu__item");s&&this.activate(s.dataset.id)}),this.listen(this.root,"keydown",i=>this.onKey(i)),this.listen(this.root,"pointerover",i=>{let s=i.target.closest(".op-navmenu__item.is-group");this.hoverTimer?.(),!(!this.config.collapsed||!s||s.dataset.id===this.flyoutOf)&&(this.hoverTimer=this.later(()=>this.openFlyout(s.dataset.id,!1),200))}),this.listen(this.root,"pointerleave",()=>this.hoverTimer?.()),this.own(()=>this.flyout?.destroy()),this.listen(this.root,"focusin",i=>{let s=i.target.closest(".op-navmenu__item");s&&(this.focusId=s.dataset.id)}),this.paint()}getItem(t,e=this.items){for(let i of e){if(i.id===t)return i;let s=i.items&&this.getItem(t,i.items);if(s)return s}}parentsOf(t,e=this.items,i=[]){for(let s of e){if(s.id===t)return i;let n=s.items&&this.parentsOf(t,s.items,[...i,s]);if(n)return n}}openParents(t){for(let e of this.parentsOf(t)??[])this.open.add(e.id)}matches(t,e){return t.text.toLowerCase().includes(e)||!!t.items?.some(i=>this.matches(i,e))}visible(t){return t.hidden||this.query&&!this.matches(t,this.query)?!1:!t.items||t.items.some(e=>this.visible(e))}isOpen(t){return this.config.collapsed?!1:this.query?!0:this.open.has(t.id)}paint(){this.el.classList.toggle("is-rail",!!this.config.collapsed),this.root.replaceChildren(...this.items.filter(i=>this.visible(i)).map(i=>this.node(i,1)));let e=this.focusId&&this.root.querySelector(`[data-id="${CSS.escape(this.focusId)}"]`)||this.root.querySelector(".op-navmenu__item.is-active")||this.root.querySelector(".op-navmenu__item");this.root.querySelectorAll(".op-navmenu__item").forEach(i=>i.tabIndex=i===e?0:-1)}node(t,e){let i=!!t.items,s=i&&this.isOpen(t),n=!!this.config.collapsed,r=a("li","op-navmenu__node",{role:"none"}),l=i&&!!this.active&&!!this.parentsOf(this.active)?.some(d=>d.id===t.id),o=n&&i,h=a("div",`op-navmenu__item${i?" is-group":""}${s?" is-expanded":""}${t.id===this.active?" is-active":""}${l&&n?" has-active":""}${t.disabled?" is-disabled":""}`,{role:"treeitem","data-id":t.id,"aria-level":e,"aria-expanded":i?String(o?this.flyoutOf===t.id:s):null,"aria-current":t.id===this.active?"page":null,"aria-haspopup":o?"menu":null,"aria-disabled":t.disabled?"true":null,title:n?t.text:null,tabindex:-1});return h.style.setProperty("--_level",String(e-1)),h.append(a("span","op-navmenu__icon",{},t.icon?c(t.icon):o?t.text.charAt(0).toUpperCase():""),a("span","op-navmenu__text",{},t.text)),t.badge!=null&&t.badge!==""&&h.append(a("span","op-navmenu__badge",{},String(t.badge))),i&&h.append(a("span","op-navmenu__chevron",{"aria-hidden":"true"},c("chevron-down"))),r.append(h),i&&s&&r.append(a("ul","op-navmenu__group",{role:"group"},...t.items.filter(d=>this.visible(d)).map(d=>this.node(d,e+1)))),r}activate(t){let e=this.getItem(t);if(!(!e||e.disabled)){if(e.items&&this.config.collapsed)return this.openFlyout(t,!0);if(e.items)return this.toggle(t);this.select(t)}}select(t){let e=this.getItem(t);!e||e.disabled||this.emit("before-select",e)===!1||(this.setActive(t),this.emit("select",e))}setActive(t){this.active=t,this.config.active=t,t&&(this.openParents(t),this.focusId=t),this.rendered&&this.paint()}getActive(){return this.active?this.getItem(this.active):void 0}expand(t){let e=this.getItem(t);if(!(!e?.items||this.open.has(t))){if(this.config.accordion)for(let i of this.siblings(t))this.open.delete(i.id);this.open.add(t),this.rendered&&this.paint(),this.emit("expand",e)}}collapse(t){let e=this.getItem(t);!e?.items||!this.open.delete(t)||(this.rendered&&this.paint(),this.emit("collapse",e))}toggle(t){this.open.has(t)?this.collapse(t):this.expand(t)}siblings(t){let e=this.parentsOf(t)??[];return(e.length?e[e.length-1].items:this.items).filter(s=>s.id!==t&&s.items)}expandAll(){let t=e=>e.forEach(i=>i.items&&(this.open.add(i.id),t(i.items)));t(this.items),this.rendered&&this.paint()}collapseAll(){this.open.clear(),this.active&&this.openParents(this.active),this.rendered&&this.paint()}setItems(t){this.items=p(t)??[],this.config.items=t,this.rendered&&this.paint()}updateItem(t,e){let i=this.getItem(t);i&&(Object.assign(i,e),this.rendered&&this.paint())}openFlyout(t,e){let i=this.getItem(t),s=this.root.querySelector(`[data-id="${CSS.escape(t)}"]`);if(!i?.items||!s)return;let n=(r,l)=>r.filter(o=>this.visible(o)).map(o=>({text:o.text,icon:o.icon,badge:o.badge,disabled:o.disabled,group:l?i.text:void 0,items:o.items?n(o.items,!1):void 0,handler:o.items?void 0:()=>this.select(o.id)}));this.flyout||(this.flyout=new g({cls:"op-navmenu__flyout"}),this.flyout.on("hide",()=>{let r=this.flyoutOf;this.flyoutOf=void 0,r&&this.root.querySelector(`[data-id="${CSS.escape(r)}"]`)?.setAttribute("aria-expanded","false")}),this.listen(this.flyout.el,"keydown",r=>r.key==="ArrowLeft"&&!r.target.closest('.op-menu__item[aria-expanded="true"]')&&this.flyout.hide())),this.flyout.hide(),this.flyoutOf=t,this.flyout.setItems(n(i.items,!0)),s.setAttribute("aria-expanded","true"),this.flyout.showBy(s,"right-start",e)}setCollapsed(t){this.config.collapsed=t,t||this.flyout?.hide(),this.rendered&&(this.fit(),this.paint())}fit(){let t=this.parent?.el,e=this.config.railWidth;!t||e==null||(this.config.collapsed?(this.parentWidth??=t.style.inlineSize,t.style.inlineSize=f(e)):this.parentWidth!==void 0&&(t.style.inlineSize=this.parentWidth,this.parentWidth=void 0))}filter(t){this.query=t.trim().toLowerCase(),this.rendered&&this.paint()}rows(){return Array.from(this.root.querySelectorAll(".op-navmenu__item"))}focusRow(t){t&&(this.rows().forEach(e=>e.tabIndex=e===t?0:-1),t.focus())}onKey(t){let e=t.target.closest(".op-navmenu__item");if(!e)return;let i=this.rows(),s=i.indexOf(e),n=this.getItem(e.dataset.id),r=e.getAttribute("aria-expanded")==="true";switch(t.key){case"ArrowDown":this.focusRow(i[s+1]);break;case"ArrowUp":this.focusRow(i[s-1]);break;case"Home":this.focusRow(i[0]);break;case"End":this.focusRow(i[i.length-1]);break;case"ArrowRight":n.items&&this.config.collapsed?this.openFlyout(n.id,!0):n.items&&!r?this.expand(n.id):n.items&&this.focusRow(i[s+1]);break;case"ArrowLeft":if(n.items&&r)this.collapse(n.id);else{let o=this.parentsOf(n.id)?.pop();o&&this.focusRow(this.root.querySelector(`[data-id="${CSS.escape(o.id)}"]`)??void 0)}break;case"Enter":case" ":this.activate(n.id);break;default:return}if(t.preventDefault(),this.flyout?.el.contains(document.activeElement))return;this.focusId=document.activeElement?.dataset?.id??n.id;let l=this.root.querySelector(`[data-id="${CSS.escape(this.focusId)}"]`);l&&document.activeElement!==l&&this.focusRow(l)}};v("navmenu",m);export{m as a};
2
+ //# sourceMappingURL=chunk-4QAHVGGE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/navigation/navmenu/navmenu.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h, px } from '../../../core/dom';\nimport { gate } from '../../../core/permission';\nimport { iconEl } from '../../base/icon/icon';\nimport { Menu, type MenuEntry } from '../../overlays/menu/menu';\n\nexport interface NavItem {\n id: string;\n text: string;\n icon?: string;\n badge?: string | number;\n items?: NavItem[];\n disabled?: boolean;\n hidden?: boolean;\n /** Hidden (or disabled) while `setPermissionResolver` denies it. */\n permission?: string;\n /** Groups: start open. */\n expanded?: boolean;\n data?: unknown;\n}\n\nexport interface NavMenuConfig extends ComponentConfig {\n items?: NavItem[];\n /** id of the active leaf. */\n active?: string;\n /** Rail: icons only. */\n collapsed?: boolean;\n /** Width (px or CSS) the parent container takes while collapsed, and gives back on expand: the sidebar follows the rail. */\n railWidth?: number | string;\n /** Opening a group closes the others at its level. */\n accordion?: boolean;\n}\n\n/** Sidebar tree: groups that open and close, one active leaf, badges, rail mode, filter and the APG tree keyboard model. */\nexport class NavMenu extends Component<NavMenuConfig> {\n protected override baseCls = 'op-navmenu';\n protected override tag = 'nav' as const;\n private items: NavItem[] = [];\n private open = new Set<string>();\n private active?: string;\n private query = '';\n private focusId?: string;\n private root!: HTMLElement;\n /** Rail mode: the floating menu of a group, and the group it belongs to. */\n private flyout?: Menu;\n private flyoutOf?: string;\n private hoverTimer?: () => void;\n private parentWidth?: string;\n\n protected override onRender() {\n const c = this.config;\n this.items = gate(c.items) ?? [];\n this.active = c.active;\n const seed = (list: NavItem[]) => list.forEach((i) => (i.expanded && this.open.add(i.id), i.items && seed(i.items)));\n seed(this.items);\n if (this.active) this.openParents(this.active);\n this.root = h('ul', 'op-navmenu__tree', { role: 'tree', 'aria-label': c.ariaLabel ?? null });\n this.el.append(this.root);\n this.fit();\n this.listen(this.root, 'click', (e: Event) => {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-navmenu__item');\n if (row) this.activate(row.dataset.id!);\n });\n this.listen(this.root, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n // rail: hovering a group's icon opens its menu (after a short pause, so passing over the rail does not)\n this.listen(this.root, 'pointerover', (e: Event) => {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-navmenu__item.is-group');\n this.hoverTimer?.();\n if (!this.config.collapsed || !row || row.dataset.id === this.flyoutOf) return;\n this.hoverTimer = this.later(() => this.openFlyout(row.dataset.id!, false), 200);\n });\n this.listen(this.root, 'pointerleave', () => this.hoverTimer?.());\n this.own(() => this.flyout?.destroy());\n this.listen(this.root, 'focusin', (e: Event) => {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-navmenu__item');\n if (row) this.focusId = row.dataset.id;\n });\n this.paint();\n }\n\n // ---- model -----------------------------------------------------------------------------------\n\n getItem(id: string, list = this.items): NavItem | undefined {\n for (const i of list) {\n if (i.id === id) return i;\n const hit = i.items && this.getItem(id, i.items);\n if (hit) return hit;\n }\n }\n private parentsOf(id: string, list = this.items, trail: NavItem[] = []): NavItem[] | undefined {\n for (const i of list) {\n if (i.id === id) return trail;\n const hit = i.items && this.parentsOf(id, i.items, [...trail, i]);\n if (hit) return hit;\n }\n }\n private openParents(id: string) {\n for (const p of this.parentsOf(id) ?? []) this.open.add(p.id);\n }\n private matches(i: NavItem, q: string): boolean {\n return i.text.toLowerCase().includes(q) || !!i.items?.some((c) => this.matches(c, q));\n }\n /** Visible = not hidden, matches the filter, and a group has at least one visible child. */\n private visible(i: NavItem): boolean {\n if (i.hidden) return false;\n if (this.query && !this.matches(i, this.query)) return false;\n return !i.items || i.items.some((c) => this.visible(c));\n }\n private isOpen(i: NavItem): boolean {\n if (this.config.collapsed) return false; // rail: a group's children live in its floating menu\n return this.query ? true : this.open.has(i.id);\n }\n\n // ---- rendering -------------------------------------------------------------------------------\n\n private paint() {\n this.el.classList.toggle('is-rail', !!this.config.collapsed);\n this.root.replaceChildren(...this.items.filter((i) => this.visible(i)).map((i) => this.node(i, 1)));\n const f = this.focusId && this.root.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(this.focusId)}\"]`);\n const first = f || this.root.querySelector<HTMLElement>('.op-navmenu__item.is-active') || this.root.querySelector<HTMLElement>('.op-navmenu__item');\n this.root.querySelectorAll<HTMLElement>('.op-navmenu__item').forEach((r) => (r.tabIndex = r === first ? 0 : -1));\n }\n\n private node(i: NavItem, level: number): HTMLElement {\n const group = !!i.items;\n const open = group && this.isOpen(i);\n const rail = !!this.config.collapsed;\n const li = h('li', 'op-navmenu__node', { role: 'none' });\n const holdsActive = group && !!this.active && !!this.parentsOf(this.active)?.some((p) => p.id === i.id);\n const flying = rail && group;\n const row = h('div', `op-navmenu__item${group ? ' is-group' : ''}${open ? ' is-expanded' : ''}${i.id === this.active ? ' is-active' : ''}${holdsActive && rail ? ' has-active' : ''}${i.disabled ? ' is-disabled' : ''}`, {\n role: 'treeitem', 'data-id': i.id, 'aria-level': level, 'aria-expanded': group ? String(flying ? this.flyoutOf === i.id : open) : null, 'aria-current': i.id === this.active ? 'page' : null,\n 'aria-haspopup': flying ? 'menu' : null, 'aria-disabled': i.disabled ? 'true' : null, title: rail ? i.text : null, tabindex: -1,\n });\n row.style.setProperty('--_level', String(level - 1));\n // in the rail a group shows its icon (or its initial) and opens a floating menu\n row.append(h('span', 'op-navmenu__icon', {}, i.icon ? iconEl(i.icon) : flying ? i.text.charAt(0).toUpperCase() : ''), h('span', 'op-navmenu__text', {}, i.text));\n if (i.badge != null && i.badge !== '') row.append(h('span', 'op-navmenu__badge', {}, String(i.badge)));\n if (group) row.append(h('span', 'op-navmenu__chevron', { 'aria-hidden': 'true' }, iconEl('chevron-down')));\n li.append(row);\n if (group && open) li.append(h('ul', 'op-navmenu__group', { role: 'group' }, ...i.items!.filter((c) => this.visible(c)).map((c) => this.node(c, level + 1))));\n return li;\n }\n\n // ---- behavior --------------------------------------------------------------------------------\n\n private activate(id: string) {\n const i = this.getItem(id);\n if (!i || i.disabled) return;\n if (i.items && this.config.collapsed) return this.openFlyout(id, true);\n if (i.items) return this.toggle(id);\n this.select(id);\n }\n\n private select(id: string) {\n const i = this.getItem(id);\n if (!i || i.disabled || this.emit('before-select', i) === false) return;\n this.setActive(id);\n this.emit('select', i);\n }\n\n /** Marks a leaf as the active page (and opens its parents). Does not emit `select`. */\n setActive(id: string | undefined) {\n this.active = id;\n this.config.active = id;\n if (id) {\n this.openParents(id);\n this.focusId = id;\n }\n if (this.rendered) this.paint();\n }\n getActive(): NavItem | undefined {\n return this.active ? this.getItem(this.active) : undefined;\n }\n\n expand(id: string) {\n const i = this.getItem(id);\n if (!i?.items || this.open.has(id)) return;\n if (this.config.accordion) for (const sib of this.siblings(id)) this.open.delete(sib.id);\n this.open.add(id);\n this.rendered && this.paint();\n this.emit('expand', i);\n }\n collapse(id: string) {\n const i = this.getItem(id);\n if (!i?.items || !this.open.delete(id)) return;\n this.rendered && this.paint();\n this.emit('collapse', i);\n }\n toggle(id: string) {\n if (this.open.has(id)) this.collapse(id);\n else this.expand(id);\n }\n private siblings(id: string): NavItem[] {\n const parents = this.parentsOf(id) ?? [];\n const list = parents.length ? parents[parents.length - 1].items! : this.items;\n return list.filter((x) => x.id !== id && x.items);\n }\n expandAll() {\n const walk = (l: NavItem[]) => l.forEach((i) => i.items && (this.open.add(i.id), walk(i.items)));\n walk(this.items);\n this.rendered && this.paint();\n }\n collapseAll() {\n this.open.clear();\n if (this.active) this.openParents(this.active);\n this.rendered && this.paint();\n }\n\n setItems(items: NavItem[]) {\n this.items = gate(items) ?? [];\n this.config.items = items;\n if (this.rendered) this.paint();\n }\n /** Changes an item in place (a badge, a label, disabled...). */\n updateItem(id: string, patch: Partial<NavItem>) {\n const i = this.getItem(id);\n if (!i) return;\n Object.assign(i, patch);\n if (this.rendered) this.paint();\n }\n /** Rail mode: a group's children in a Menu beside its icon (title as the header, badges kept). */\n private openFlyout(id: string, focus: boolean) {\n const group = this.getItem(id);\n const row = this.root.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(id)}\"]`);\n if (!group?.items || !row) return;\n const entries = (list: NavItem[], top: boolean): MenuEntry[] =>\n list.filter((c) => this.visible(c)).map((c) => ({\n text: c.text, icon: c.icon, badge: c.badge, disabled: c.disabled, group: top ? group.text : undefined,\n items: c.items ? entries(c.items, false) : undefined,\n handler: c.items ? undefined : () => this.select(c.id),\n }));\n if (!this.flyout) {\n this.flyout = new Menu({ cls: 'op-navmenu__flyout' });\n this.flyout.on('hide', () => {\n const was = this.flyoutOf;\n this.flyoutOf = undefined;\n if (was) this.root.querySelector(`[data-id=\"${CSS.escape(was)}\"]`)?.setAttribute('aria-expanded', 'false');\n });\n // \u2190 closes it (the Menu only does that for submenus) and gives the focus back to the icon\n this.listen(this.flyout.el, 'keydown', (e: KeyboardEvent) => e.key === 'ArrowLeft' && !(e.target as HTMLElement).closest('.op-menu__item[aria-expanded=\"true\"]') && this.flyout!.hide());\n }\n this.flyout.hide();\n this.flyoutOf = id;\n this.flyout.setItems(entries(group.items, true));\n row.setAttribute('aria-expanded', 'true');\n this.flyout.showBy(row, 'right-start', focus);\n }\n\n setCollapsed(collapsed: boolean) {\n this.config.collapsed = collapsed;\n if (!collapsed) this.flyout?.hide();\n if (this.rendered) (this.fit(), this.paint());\n }\n\n private fit() {\n const box = this.parent?.el;\n const rail = this.config.railWidth;\n if (!box || rail == null) return;\n if (this.config.collapsed) {\n this.parentWidth ??= box.style.inlineSize;\n box.style.inlineSize = px(rail);\n } else if (this.parentWidth !== undefined) {\n box.style.inlineSize = this.parentWidth;\n this.parentWidth = undefined;\n }\n }\n /** Hides what does not match and opens the groups that have a match; empty text clears the filter. */\n filter(text: string) {\n this.query = text.trim().toLowerCase();\n if (this.rendered) this.paint();\n }\n\n // ---- keyboard (APG tree) ---------------------------------------------------------------------\n\n private rows(): HTMLElement[] {\n return Array.from(this.root.querySelectorAll<HTMLElement>('.op-navmenu__item'));\n }\n private focusRow(row?: HTMLElement) {\n if (!row) return;\n this.rows().forEach((r) => (r.tabIndex = r === row ? 0 : -1));\n row.focus();\n }\n\n private onKey(e: KeyboardEvent) {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-navmenu__item');\n if (!row) return;\n const rows = this.rows();\n const i = rows.indexOf(row);\n const item = this.getItem(row.dataset.id!)!;\n const open = row.getAttribute('aria-expanded') === 'true';\n switch (e.key) {\n case 'ArrowDown': this.focusRow(rows[i + 1]); break;\n case 'ArrowUp': this.focusRow(rows[i - 1]); break;\n case 'Home': this.focusRow(rows[0]); break;\n case 'End': this.focusRow(rows[rows.length - 1]); break;\n case 'ArrowRight':\n if (item.items && this.config.collapsed) this.openFlyout(item.id, true);\n else if (item.items && !open) this.expand(item.id);\n else if (item.items) this.focusRow(rows[i + 1]);\n break;\n case 'ArrowLeft':\n if (item.items && open) this.collapse(item.id);\n else {\n const parent = this.parentsOf(item.id)?.pop();\n if (parent) this.focusRow(this.root.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(parent.id)}\"]`) ?? undefined);\n }\n break;\n case 'Enter':\n case ' ': this.activate(item.id); break;\n default: return;\n }\n e.preventDefault();\n if (this.flyout?.el.contains(document.activeElement)) return; // the focus went to the rail's floating menu: leave it there\n this.focusId = (document.activeElement as HTMLElement | null)?.dataset?.id ?? item.id;\n // a repaint (expand/collapse/select) rebuilt the rows: put the focus back on the one the user is on\n const again = this.root.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(this.focusId)}\"]`);\n if (again && document.activeElement !== again) this.focusRow(again);\n }\n}\nregister('navmenu', NavMenu);\n"],
5
+ "mappings": "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",
6
+ "names": ["NavMenu", "Component", "c", "gate", "seed", "list", "i", "h", "e", "row", "id", "hit", "trail", "p", "q", "first", "r", "level", "group", "open", "rail", "li", "holdsActive", "flying", "iconEl", "sib", "parents", "x", "walk", "l", "items", "patch", "focus", "entries", "top", "Menu", "was", "collapsed", "box", "px", "text", "rows", "item", "parent", "again", "register"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{c as g}from"./chunk-DIOJGTUN.js";import{a as n}from"./chunk-TIPK3SCJ.js";import{f as a}from"./chunk-UDXO3KM3.js";import{b as t}from"./chunk-PZSHOSOS.js";var s=class extends a{baseCls="op-image";img;ph;build(){return this.ph=t("div","op-image__fallback",{"aria-hidden":"true"}),t("div",this.baseCls,{},this.ph)}onRender(){let e=this.config;e.ratio&&(this.el.style.aspectRatio=e.ratio),this.el.classList.add(`op-image--${e.fit??"cover"}`),this.el.classList.toggle("op-image--rounded",!!e.rounded),this.setSrc(e.src)}setSrc(e,r=!1){if(r||(this.config.src=e),!this.rendered)return;this.img?.remove(),this.img=void 0,this.el.classList.toggle("has-image",!1);let o=this.config.fallback??"image";if(this.ph.replaceChildren(/[/.]/.test(o)?"":g(o)),!e)return;let i=this.img=t("img","op-image__img",{src:e,alt:this.config.alt??"",draggable:"false",loading:this.config.eager?"eager":"lazy",decoding:"async"});i.addEventListener("load",()=>this.el.classList.add("has-image")),i.addEventListener("error",()=>{i.remove(),this.img=void 0,!r&&/[/.]/.test(this.config.fallback??"")&&this.setSrc(this.config.fallback,!0),this.emit("error")}),this.el.append(i)}setAlt(e){this.config.alt=e,this.img&&(this.img.alt=e)}setRatio(e){this.config.ratio=e,this.rendered&&(this.el.style.aspectRatio=e)}};n("image",s);export{s as a};
2
- //# sourceMappingURL=chunk-I5A74NMJ.js.map
1
+ import{c as g}from"./chunk-QT5JRZZJ.js";import{a as n}from"./chunk-TIPK3SCJ.js";import{f as a}from"./chunk-KMBTJ5AG.js";import{b as t}from"./chunk-PZSHOSOS.js";var s=class extends a{baseCls="op-image";img;ph;build(){return this.ph=t("div","op-image__fallback",{"aria-hidden":"true"}),t("div",this.baseCls,{},this.ph)}onRender(){let e=this.config;e.ratio&&(this.el.style.aspectRatio=e.ratio),this.el.classList.add(`op-image--${e.fit??"cover"}`),this.el.classList.toggle("op-image--rounded",!!e.rounded),this.setSrc(e.src)}setSrc(e,r=!1){if(r||(this.config.src=e),!this.rendered)return;this.img?.remove(),this.img=void 0,this.el.classList.toggle("has-image",!1);let o=this.config.fallback??"image";if(this.ph.replaceChildren(/[/.]/.test(o)?"":g(o)),!e)return;let i=this.img=t("img","op-image__img",{src:e,alt:this.config.alt??"",draggable:"false",loading:this.config.eager?"eager":"lazy",decoding:"async"});i.addEventListener("load",()=>this.el.classList.add("has-image")),i.addEventListener("error",()=>{i.remove(),this.img=void 0,!r&&/[/.]/.test(this.config.fallback??"")&&this.setSrc(this.config.fallback,!0),this.emit("error")}),this.el.append(i)}setAlt(e){this.config.alt=e,this.img&&(this.img.alt=e)}setRatio(e){this.config.ratio=e,this.rendered&&(this.el.style.aspectRatio=e)}};n("image",s);export{s as a};
2
+ //# sourceMappingURL=chunk-4Z4E3BZ2.js.map
@@ -0,0 +1,2 @@
1
+ import{a as I}from"./chunk-DY3ZYMXD.js";import{a as D}from"./chunk-BPCD37A2.js";import{a as S}from"./chunk-KVUELLYF.js";import{a as B,c as T}from"./chunk-QT5JRZZJ.js";import{b as x}from"./chunk-PZSHOSOS.js";import{b as R}from"./chunk-IODSL7KU.js";import{b as L}from"./chunk-XFDNXSU5.js";import{e as v,f}from"./chunk-S4QD5NID.js";v("en",{gcExpand:"Expand all",gcCollapse:"Collapse all",gcBy:"Group by",gcNone:"No grouping",gcActions:"Groups"});v("pt-BR",{gcExpand:"Expandir tudo",gcCollapse:"Recolher tudo",gcBy:"Agrupar por",gcNone:"Sem agrupamento",gcActions:"Grupos"});B({expand:'<path d="m7 15 5 5 5-5M7 9l5-5 5 5"/>',collapse:'<path d="m7 20 5-5 5 5M7 4l5 5 5-5"/>'});function N(i,n,c){let a=new Map,E=x("div","op-groupcontrols op-footer-group",{role:"group","aria-label":f("gcActions")}),y=(d,u,g,w,_)=>{let k=new S({icon:u,variant:"ghost",ariaLabel:g,tooltip:g,hidden:!w,handler:()=>_(k)});k.mount(E),a.set(d,k)};y("expand","expand",f("gcExpand"),c.expand!==!1,()=>n.expandAll()),y("collapse","collapse",f("gcCollapse"),c.collapse!==!1,()=>n.collapseAll());let h=c.current?c.choices.findIndex(d=>d.field===c.current):-1,b=new D({});y("by","list",f("gcBy"),c.by!==!1&&c.choices.length>0,d=>{b.setItems([...c.choices.map((u,g)=>({text:u.text,checked:h===g,handler:()=>(h=g,n.setGroupBy(u.field??u.by))})),"-",{text:f("gcNone"),handler:()=>(h=-1,n.setGroupBy(null))}]),b.showBy(d.el)});let M=I(i,E);return{set:(d,u)=>a.get(d)?.[u?"show":"hide"](),disable:(d,u)=>a.get(d)?.setDisabled(u),destroy(){M(),b.destroy(),a.forEach(d=>d.destroy())}}}v("en",{groupTotal:"Total",groupCount:"{n}",groupToggle:"Toggle group"});v("pt-BR",{groupTotal:"Total",groupCount:"{n}",groupToggle:"Alternar grupo"});function X(i={}){let n,c=i.by??(i.field?o=>o.data[i.field]:void 0),a=new Set,E=!!i.collapsed,y=[],h=[],b,M=i.summary??"group",d=o=>o.filter(t=>!t.classList.contains("op-grid__selcell")&&!t.classList.contains("op-grid__actcell"));function u(o,t,s){return{cls:`op-grid__row--total ${s}`,paint(p,G){G.setAttribute("aria-label",o);let e=n.getColumns();d(p).forEach((r,m)=>{let l=e[m];if(!l)return;let A=l.summary?(C=>l.summaryRenderer?l.summaryRenderer(C,l):C==null?"":l.format?L(l.format,C):String(C))(R(l,t)):m===0?o:"";r.replaceChildren(A),r.classList.toggle("op-grid__cell--right",l.align==="right")})}}}function g(){let t=n.getStore().getRange();if(!c)return n.setRowLayout(void 0);let s=new Map;for(let e of t){let r=c(e);s.set(r,[...s.get(r)??[],e])}if(y=[...s.keys()],E){for(let e of y)a.add(String(e));E=!1}let p=[],G=n.getColumns().some(e=>e.summary);for(let[e,r]of s){let m=!a.has(String(e));if(p.push({level:1,expanded:m,cls:"op-grid__row--group",paint(l,A){let[C]=d(l);C.classList.add("is-group-label"),C.replaceChildren(x("span","op-grid__twist",{"aria-hidden":"true"},T("chevron-down")),x("span","op-grid__group-name",{},i.label?i.label(e,r):String(e??"\u2014")),x("span","op-grid__group-count",{},f("groupCount",{n:r.length}))),A.dataset.group=String(e)}}),!!m){for(let l of r)p.push({rec:l,level:2,cls:"is-grouped"});G&&M!=="grand"&&p.push(u(f("groupTotal"),r,"is-group-total"))}}G&&M!=="group"&&p.push(u(f("groupTotal"),t,"is-grand-total")),n.setRowLayout(p)}function w(o,t){let s=String(o),p=t??a.has(s);p!==!a.has(s)&&(p?a.delete(s):a.add(s),g(),n.emit("group-toggle",o,p))}let _=o=>{let t=o?.closest(".op-grid__row--group");return t?y.find(s=>String(s)===t.dataset.group):void 0},k={init(o){n=o;let t=o.el,s=t.querySelector("[role=grid]"),p=e=>{let r=_(e.target);(r!==void 0||e.target.closest(".op-grid__row--group"))&&w(r)},G=e=>{if(e.target!==s)return;let r=n.getRowEntry(n.getActive());if(!r||r.rec||r.level!==1)return;let m=_(document.getElementById(`${n.id}-r${n.getActive()}`)),l=r.expanded;if(e.key==="Enter"||e.key===" ")w(m);else if(e.key==="ArrowRight"&&!l)w(m,!0);else if(e.key==="ArrowLeft"&&l)w(m,!1);else return;e.preventDefault(),e.stopPropagation()};if(t.addEventListener("click",p),t.addEventListener("keydown",G,!0),h=[H(o),()=>t.removeEventListener("click",p),()=>t.removeEventListener("keydown",G,!0),()=>n.setRowLayout(void 0)],g(),i.controls){let e=i.controls===!0?{}:i.controls;b=N(o,k,{...e,choices:i.choices??[],current:i.field}),h.push(b.destroy)}return()=>h.forEach(e=>e())},expandAll(){a.clear(),g()},collapseAll(){for(let o of y)a.add(String(o));g()},toggle:w,setControlVisible:(o,t)=>b?.set(o,t),setControlDisabled:(o,t)=>b?.disable(o,t),setGroupBy(o){c=o===null?void 0:typeof o=="string"?t=>t.data[o]:o,a.clear(),g()}};return k;function H(o){return o.getStore().subscribe(t=>queueMicrotask(()=>!o.destroyed&&g()))}}export{X as a};
2
+ //# sourceMappingURL=chunk-5H533QXN.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/grouping/controls.ts", "../src/components/data/grouping/grouping.ts"],
4
+ "sourcesContent": ["import { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport type { Model } from '../../../data/model';\nimport { Button } from '../../base/button/button';\nimport { registerIcons } from '../../base/icon/icon';\nimport { Menu } from '../../overlays/menu/menu';\nimport { addFooterGroup } from '../grid/footer';\nimport type { Grid } from '../grid/grid';\n\naddMessages('en', { gcExpand: 'Expand all', gcCollapse: 'Collapse all', gcBy: 'Group by', gcNone: 'No grouping', gcActions: 'Groups' });\naddMessages('pt-BR', { gcExpand: 'Expandir tudo', gcCollapse: 'Recolher tudo', gcBy: 'Agrupar por', gcNone: 'Sem agrupamento', gcActions: 'Grupos' });\n\nregisterIcons({ expand: '<path d=\"m7 15 5 5 5-5M7 9l5-5 5 5\"/>', collapse: '<path d=\"m7 20 5-5 5 5M7 4l5 5 5-5\"/>' });\n\nexport type GroupingControl = 'expand' | 'collapse' | 'by';\n\n/** A way to group, offered in the \"Group by\" menu: a record field or any function of the record. */\nexport interface GroupChoice {\n text: string;\n field?: string;\n by?: (rec: Model) => unknown;\n}\n\ninterface Target {\n expandAll(): void;\n collapseAll(): void;\n setGroupBy(by: string | ((rec: Model) => unknown) | null): void;\n}\n\n/** Icon buttons in the grid's footer row (beside the pager): expand all, collapse all and a \"Group by\" menu. */\nexport function groupingControls(grid: Grid, target: Target, o: { expand?: boolean; collapse?: boolean; by?: boolean; choices: GroupChoice[]; current?: string }) {\n const buttons = new Map<GroupingControl, Button>();\n const group = h('div', 'op-groupcontrols op-footer-group', { role: 'group', 'aria-label': t('gcActions') });\n const add = (action: GroupingControl, icon: string, label: string, on: boolean, handler: (b: Button) => void) => {\n const b = new Button({ icon, variant: 'ghost', ariaLabel: label, tooltip: label, hidden: !on, handler: () => handler(b) });\n b.mount(group);\n buttons.set(action, b);\n };\n add('expand', 'expand', t('gcExpand'), o.expand !== false, () => target.expandAll());\n add('collapse', 'collapse', t('gcCollapse'), o.collapse !== false, () => target.collapseAll());\n let chosen = o.current ? o.choices.findIndex((c) => c.field === o.current) : -1;\n const menu = new Menu({});\n add('by', 'list', t('gcBy'), o.by !== false && o.choices.length > 0, (b) => {\n menu.setItems([\n ...o.choices.map((c, i) => ({ text: c.text, checked: chosen === i, handler: () => ((chosen = i), target.setGroupBy((c.field ?? c.by)!)) })),\n '-',\n { text: t('gcNone'), handler: () => ((chosen = -1), target.setGroupBy(null)) },\n ]);\n menu.showBy(b.el);\n });\n const leave = addFooterGroup(grid, group);\n return {\n set: (a: GroupingControl, visible: boolean) => buttons.get(a)?.[visible ? 'show' : 'hide'](),\n disable: (a: GroupingControl, disabled: boolean) => buttons.get(a)?.setDisabled(disabled),\n destroy() {\n leave();\n menu.destroy();\n buttons.forEach((b) => b.destroy());\n },\n };\n}\n", "// Row grouping with totals for the Grid, as a plugin: `plugins: [grouping({ field: 'event' })]`.\nimport { format } from '../../../data/format';\nimport type { Model } from '../../../data/model';\nimport { summarize } from '../../../data/column';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { iconEl } from '../../base/icon/icon';\nimport { groupingControls, type GroupChoice, type GroupingControl } from './controls';\nimport type { Grid, GridPlugin, RowEntry } from '../grid/grid';\n\naddMessages('en', { groupTotal: 'Total', groupCount: '{n}', groupToggle: 'Toggle group' });\naddMessages('pt-BR', { groupTotal: 'Total', groupCount: '{n}', groupToggle: 'Alternar grupo' });\n\nexport { summarize };\nexport type { GroupChoice, GroupingControl };\n\nexport interface GroupingOptions {\n /** Record field to group by. */\n field?: string;\n /** Or any function of the record (a year, a range): its result is the group. */\n by?: (rec: Model) => unknown;\n /** Text of a group header (before the count). Default: the key. */\n label?: (key: unknown, recs: Model[]) => string;\n /** Total rows of the columns that have a `summary`: `group` (under each group), `grand` (at the end) or `both`. Default `group`. */\n summary?: 'group' | 'grand' | 'both';\n /** Start with every group closed. */\n collapsed?: boolean;\n /** Icon buttons inside the grid, beside the pager: expand all, collapse all and, with `choices`, a \"Group by\" menu. `false` leaves one out. */\n controls?: boolean | { expand?: boolean; collapse?: boolean; by?: boolean };\n /** The ways to group offered by the controls' menu (a field or a function each). */\n choices?: GroupChoice[];\n}\n\nexport interface Grouping extends GridPlugin {\n expandAll(): void;\n collapseAll(): void;\n /** Changes what to group by; `null` shows the plain list. */\n setGroupBy(by: string | ((rec: Model) => unknown) | null): void;\n /** Opens or closes one group by its key. */\n toggle(key: unknown, open?: boolean): void;\n /** The in-grid controls: show or hide one. */\n setControlVisible(control: GroupingControl, visible: boolean): void;\n setControlDisabled(control: GroupingControl, disabled: boolean): void;\n}\n\n/**\n * Groups the rows of the current page (a remote store groups what it loaded, not the whole set) under a header with\n * its count; the header toggles by click, Enter/Space, \u2192 and \u2190. Sorting works inside each group. Group headers and total\n * rows are virtual rows like any other. Fires `group-toggle(key, open)` on the grid.\n */\nexport function grouping(options: GroupingOptions = {}): Grouping {\n let grid!: Grid;\n let by = options.by ?? (options.field ? (r: Model) => r.data[options.field!] : undefined);\n const closed = new Set<string>();\n let all = !!options.collapsed;\n let keys: unknown[] = [];\n let off: Array<() => void> = [];\n let controls: ReturnType<typeof groupingControls> | undefined;\n\n const where = options.summary ?? 'group';\n\n /** The cells of the user columns in a row (the checkbox and action cells are not). */\n const userCells = (cells: HTMLElement[]) => cells.filter((c) => !c.classList.contains('op-grid__selcell') && !c.classList.contains('op-grid__actcell'));\n\n function totals(label: string, recs: Model[], cls: string): RowEntry {\n return {\n cls: `op-grid__row--total ${cls}`,\n paint(cells, row) {\n row.setAttribute('aria-label', label);\n const cols = grid.getColumns();\n userCells(cells).forEach((cell, n) => {\n const col = cols[n];\n if (!col) return;\n const out = col.summary ? ((v) => (col.summaryRenderer ? col.summaryRenderer(v, col) : v == null ? '' : col.format ? format(col.format, v) : String(v)))(summarize(col, recs)) : n === 0 ? label : '';\n cell.replaceChildren(out);\n cell.classList.toggle('op-grid__cell--right', col.align === 'right');\n });\n },\n };\n }\n\n function build() {\n const store = grid.getStore();\n const recs = store.getRange();\n if (!by) return grid.setRowLayout(undefined);\n const groups = new Map<unknown, Model[]>();\n for (const r of recs) {\n const k = by(r);\n groups.set(k, [...(groups.get(k) ?? []), r]);\n }\n keys = [...groups.keys()];\n if (all) {\n for (const k of keys) closed.add(String(k));\n all = false;\n }\n const rows: RowEntry[] = [];\n const hasSummary = grid.getColumns().some((c) => c.summary);\n for (const [key, list] of groups) {\n const open = !closed.has(String(key));\n rows.push({\n level: 1,\n expanded: open,\n cls: 'op-grid__row--group',\n paint(cells, row) {\n const [label] = userCells(cells);\n label.classList.add('is-group-label');\n label.replaceChildren(\n h('span', 'op-grid__twist', { 'aria-hidden': 'true' }, iconEl('chevron-down')),\n h('span', 'op-grid__group-name', {}, options.label ? options.label(key, list) : String(key ?? '\u2014')),\n h('span', 'op-grid__group-count', {}, t('groupCount', { n: list.length })),\n );\n row.dataset.group = String(key);\n },\n });\n if (!open) continue;\n for (const rec of list) rows.push({ rec, level: 2, cls: 'is-grouped' });\n if (hasSummary && where !== 'grand') rows.push(totals(t('groupTotal'), list, 'is-group-total'));\n }\n if (hasSummary && where !== 'group') rows.push(totals(t('groupTotal'), recs, 'is-grand-total'));\n grid.setRowLayout(rows);\n }\n\n function toggle(key: unknown, open?: boolean) {\n const id = String(key);\n const to = open ?? closed.has(id);\n if (to === !closed.has(id)) return;\n if (to) closed.delete(id);\n else closed.add(id);\n build();\n grid.emit('group-toggle', key, to);\n }\n\n const keyOfRow = (el: Element | null) => {\n const row = el?.closest<HTMLElement>('.op-grid__row--group');\n return row ? keys.find((k) => String(k) === row.dataset.group) : undefined;\n };\n\n const plugin: Grouping = {\n init(g) {\n grid = g;\n const el = g.el;\n const table = el.querySelector<HTMLElement>('[role=grid]')!;\n const onClick = (e: Event) => {\n const k = keyOfRow(e.target as Element);\n if (k !== undefined || (e.target as Element).closest('.op-grid__row--group')) toggle(k);\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.target !== table) return;\n const active = grid.getRowEntry(grid.getActive());\n if (!active || active.rec || active.level !== 1) return;\n const k = keyOfRow(document.getElementById(`${grid.id}-r${grid.getActive()}`));\n const open = active.expanded;\n if (e.key === 'Enter' || e.key === ' ') toggle(k);\n else if (e.key === 'ArrowRight' && !open) toggle(k, true);\n else if (e.key === 'ArrowLeft' && open) toggle(k, false);\n else return;\n e.preventDefault();\n e.stopPropagation();\n };\n el.addEventListener('click', onClick);\n el.addEventListener('keydown', onKey, true);\n off = [store(g), () => el.removeEventListener('click', onClick), () => el.removeEventListener('keydown', onKey, true), () => grid.setRowLayout(undefined)];\n build();\n if (options.controls) {\n const c = options.controls === true ? {} : options.controls;\n controls = groupingControls(g, plugin, { ...c, choices: options.choices ?? [], current: options.field });\n off.push(controls.destroy);\n }\n return () => off.forEach((f) => f());\n },\n expandAll() {\n closed.clear();\n build();\n },\n collapseAll() {\n for (const k of keys) closed.add(String(k));\n build();\n },\n toggle,\n setControlVisible: (c, visible) => controls?.set(c, visible),\n setControlDisabled: (c, disabled) => controls?.disable(c, disabled),\n setGroupBy(next) {\n by = next === null ? undefined : typeof next === 'string' ? (r: Model) => r.data[next] : next;\n closed.clear();\n build();\n },\n };\n return plugin;\n\n function store(g: Grid) {\n return g.getStore().subscribe((c) => queueMicrotask(() => !g.destroyed && build()));\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "registerIcons", "groupingControls", "grid", "target", "o", "buttons", "group", "h", "t", "add", "action", "icon", "label", "on", "handler", "b", "Button", "chosen", "c", "menu", "Menu", "i", "leave", "addFooterGroup", "a", "visible", "disabled", "addMessages", "grouping", "options", "grid", "by", "r", "closed", "all", "keys", "off", "controls", "where", "userCells", "cells", "c", "totals", "label", "recs", "cls", "row", "cols", "cell", "n", "col", "out", "v", "format", "summarize", "build", "groups", "k", "rows", "hasSummary", "key", "list", "open", "h", "iconEl", "t", "rec", "toggle", "id", "to", "keyOfRow", "el", "plugin", "g", "table", "onClick", "onKey", "active", "store", "groupingControls", "f", "visible", "disabled", "next"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as s}from"./chunk-GX32KEG2.js";import{a as o}from"./chunk-WWETTEUZ.js";import{a as c}from"./chunk-J6D4T4WY.js";import{a as p}from"./chunk-5WE2JOBY.js";var C=r=>{let e=r.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").toLowerCase();return e.charAt(0).toUpperCase()+e.slice(1)},d=r=>r.label??C(r.name),m=(r,e)=>r.filter(t=>!t.hide?.includes(e));function f(r){return m(r,"grid").map(e=>{let t={field:e.name,header:d(e),sortable:!0,width:e.width,group:e.group,summary:e.summary};return e.type==="number"?t.align="right":e.type==="duration"?Object.assign(t,{format:"duration",align:"right"}):e.type==="money"?Object.assign(t,{format:"money",align:"right"}):e.type==="date"||e.type==="datetime"?t.format="date":e.type==="bool"&&Object.assign(t,{format:"bool",align:"center"}),{...t,...e.column}})}function y(r){return m(r,"form").map(e=>{let t={required:e.required||void 0,readonly:e.readonly||void 0,...e.field},n=d(e);if(e.lookup)return o.lookup(e.name,n,e.lookup,t);switch(e.type){case"email":return o.email(e.name,n,t);case"area":return o.area(e.name,n,{colspan:"full",...t});case"number":return o.number(e.name,n,t);case"duration":return o.number(e.name,n,{min:0,...t});case"money":return o.number(e.name,n,{decimals:2,min:0,...t});case"date":return o.date(e.name,n,t);case"datetime":return o.datetime(e.name,n,t);case"select":return o.select(e.name,n,e.options??[],t);case"bool":return o.check(e.name,n,t);default:return o.text(e.name,n,t)}})}function h(r){return m(r,"filter").map(e=>{let t=e.type==="number"||e.type==="money"||e.type==="duration"?"number":e.type==="date"||e.type==="datetime"?"date":e.type==="select"||e.type==="bool"?"select":"text",n=e.type==="bool"?[{value:"true",label:"Yes"},{value:"false",label:"No"}]:e.type==="select"?e.options:void 0;return{name:e.name,label:d(e),type:t,group:e.group,options:n,...e.filter}})}var w=(r,e={})=>new p({columns:f(r),...e});function x(r,e={}){let t=e.columns??2,n=m(r,"form"),b=y(r),u=[],l=new Map;b.forEach((i,F)=>{let a=n[F].group;if(!a)return void u.push(i);l.has(a)||(l.set(a,[]),u.push(a)),l.get(a).push(i)});let g=u.map(i=>typeof i=="string"?new s({title:i,columns:t,items:l.get(i)}):i);return new c({...e,columns:l.size?void 0:t,items:g})}export{f as a,y as b,h as c,w as d,x as e};
2
+ //# sourceMappingURL=chunk-5KJ5Y4GY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/build/build.ts"],
4
+ "sourcesContent": ["// One list of field specs feeds the grid columns, the form fields and the filter fields, so a screen is described once.\nimport { ui } from '../ui/ui';\nimport { Grid, type GridConfig } from '../components/data/grid/grid';\nimport { Form, type FormConfig } from '../components/form/form/form';\nimport { FieldSet } from '../components/layout/fieldset/fieldset';\nimport type { FilterField } from '../components/data/filterbuilder/filterbuilder';\nimport type { Column } from '../data/column';\nimport type { Component } from '../core/component';\n\nexport type FieldKind = 'text' | 'email' | 'area' | 'number' | 'money' | 'duration' | 'date' | 'datetime' | 'select' | 'bool';\ntype Cfg = Record<string, any>;\n\nexport interface FieldSpec {\n /** The record's property. */\n name: string;\n /** Default: the name as words (`unitPrice` \u2192 \"Unit price\"). */\n label?: string;\n /** Default `text`. `duration` is a number of minutes, shown as `7h 30m`. */\n type?: FieldKind;\n /** For `select`. */\n options?: Array<string | number | { value: string | number; label: string }>;\n /** Picks the value in a lookup window: a LookupDef or the name given to `registerLookup`. */\n lookup?: Cfg | string;\n required?: boolean;\n readonly?: boolean;\n /** A band over the grid header and a section of the form. */\n group?: string;\n /** Total of the (filtered) rows in the grid: the starting total of the `columnTotals()` plugin. */\n summary?: Column['summary'];\n /** Grid column width in px. */\n width?: number;\n /** Leaves the field out of some of the builds. */\n hide?: Array<'grid' | 'form' | 'filter'>;\n /** Overrides for what each build makes. */\n column?: Partial<Column>;\n field?: Cfg;\n filter?: Partial<FilterField>;\n}\n\nconst words = (name: string) => {\n const s = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' ').toLowerCase();\n return s.charAt(0).toUpperCase() + s.slice(1);\n};\nconst label = (s: FieldSpec) => s.label ?? words(s.name);\nconst shown = (specs: FieldSpec[], where: 'grid' | 'form' | 'filter') => specs.filter((s) => !s.hide?.includes(where));\n\n/** Grid columns: right-aligned numbers and money, formatted dates and booleans. */\nexport function buildColumns(specs: FieldSpec[]): Column[] {\n return shown(specs, 'grid').map((s) => {\n const col: Column = { field: s.name, header: label(s), sortable: true, width: s.width, group: s.group, summary: s.summary };\n if (s.type === 'number') col.align = 'right';\n else if (s.type === 'duration') Object.assign(col, { format: 'duration', align: 'right' });\n else if (s.type === 'money') Object.assign(col, { format: 'money', align: 'right' });\n else if (s.type === 'date' || s.type === 'datetime') col.format = 'date';\n else if (s.type === 'bool') Object.assign(col, { format: 'bool', align: 'center' });\n return { ...col, ...s.column };\n });\n}\n\n/** Form fields (instances), in order. */\nexport function buildFields(specs: FieldSpec[]): Component[] {\n return shown(specs, 'form').map((s) => {\n const c: Cfg = { required: s.required || undefined, readonly: s.readonly || undefined, ...s.field };\n const l = label(s);\n if (s.lookup) return ui.lookup(s.name, l, s.lookup, c);\n switch (s.type) {\n case 'email': return ui.email(s.name, l, c);\n case 'area': return ui.area(s.name, l, { colspan: 'full', ...c });\n case 'number': return ui.number(s.name, l, c);\n case 'duration': return ui.number(s.name, l, { min: 0, ...c });\n case 'money': return ui.number(s.name, l, { decimals: 2, min: 0, ...c });\n case 'date': return ui.date(s.name, l, c);\n case 'datetime': return ui.datetime(s.name, l, c);\n case 'select': return ui.select(s.name, l, (s.options ?? []) as any, c);\n case 'bool': return ui.check(s.name, l, c);\n default: return ui.text(s.name, l, c);\n }\n });\n}\n\n/** Fields for a `FilterBuilder`; `bool` filters as a Yes/No choice. */\nexport function buildFilterFields(specs: FieldSpec[]): FilterField[] {\n return shown(specs, 'filter').map((s) => {\n const type = s.type === 'number' || s.type === 'money' || s.type === 'duration' ? 'number' : s.type === 'date' || s.type === 'datetime' ? 'date' : s.type === 'select' || s.type === 'bool' ? 'select' : 'text';\n const options = s.type === 'bool' ? [{ value: 'true', label: 'Yes' }, { value: 'false', label: 'No' }] : s.type === 'select' ? s.options : undefined;\n return { name: s.name, label: label(s), type, group: s.group, options, ...s.filter };\n });\n}\n\n/** A `Grid` whose columns come from the specs. `cfg` adds or overrides anything (`store`, `selection`, ...). */\nexport const buildGrid = (specs: FieldSpec[], cfg: Partial<GridConfig> = {}) => new Grid({ columns: buildColumns(specs), ...cfg });\n\n/** A `Form` with the fields in `columns` columns (default 2); specs with a `group` go in a `FieldSet` of that title. */\nexport function buildForm(specs: FieldSpec[], cfg: FormConfig & { columns?: number } = {}) {\n const columns = cfg.columns ?? 2;\n const visible = shown(specs, 'form');\n const fields = buildFields(specs);\n const items: Array<Component | string> = [];\n const sets = new Map<string, Component[]>();\n fields.forEach((f, i) => {\n const g = visible[i].group;\n if (!g) return void items.push(f);\n if (!sets.has(g)) {\n sets.set(g, []);\n items.push(g);\n }\n sets.get(g)!.push(f);\n });\n const done = items.map((i) => (typeof i === 'string' ? new FieldSet({ title: i, columns, items: sets.get(i) as any }) : i));\n return new Form({ ...cfg, columns: sets.size ? undefined : columns, items: done as any });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["words", "name", "s", "label", "shown", "specs", "where", "buildColumns", "col", "buildFields", "c", "l", "ui", "buildFilterFields", "type", "options", "buildGrid", "cfg", "Grid", "buildForm", "columns", "visible", "fields", "items", "sets", "f", "i", "g", "done", "FieldSet", "Form"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as G}from"./chunk-BPCD37A2.js";import{a as $}from"./chunk-NBR5IRZT.js";import{a as R}from"./chunk-SQTM4QFP.js";import{a as z}from"./chunk-VCYCNSJY.js";import{a as b}from"./chunk-KVUELLYF.js";import{c as C}from"./chunk-QT5JRZZJ.js";import{a as x,b as L}from"./chunk-OWEQT2HN.js";import{a as _}from"./chunk-TIPK3SCJ.js";import{c as S,e as E,f as T}from"./chunk-KMBTJ5AG.js";import{b as d}from"./chunk-PZSHOSOS.js";import{a as H}from"./chunk-IODSL7KU.js";import{c as A}from"./chunk-L5SQQFO7.js";import{e as w,f as g}from"./chunk-S4QD5NID.js";w("en",{gridSelected:"{n} selected",gridSelectAll:"Select all {n}",gridClearSel:"Clear selection",gridSelectRow:"Select row",gridSelectPage:"Select all rows",gridRowActions:"Row actions",gridColumns:"Columns",gridResize:"Resize column",gridGroupAll:"All",gridOtherCols:"Other",gridGroups:"Column groups",gridColumnSearch:"Search columns",gridNoColumns:"No matching columns"});w("pt-BR",{gridSelected:"{n} selecionado(s)",gridSelectAll:"Selecionar todos os {n}",gridClearSel:"Limpar sele\xE7\xE3o",gridSelectRow:"Selecionar linha",gridSelectPage:"Selecionar todas as linhas",gridRowActions:"A\xE7\xF5es da linha",gridColumns:"Colunas",gridResize:"Redimensionar coluna",gridGroupAll:"Todas",gridOtherCols:"Outras",gridGroups:"Grupos de colunas",gridColumnSearch:"Buscar colunas",gridNoColumns:"Nenhuma coluna encontrada"});var v="__select",m="__actions",K={field:v,width:44,align:"center",cls:"op-grid__selcell",locked:"start"},P={field:m,width:44,align:"center",cls:"op-grid__actcell",locked:"end"},B="var(--op-grid-row-height, var(--op-row-height))",k=class extends T{baseCls="op-grid";store;offStore;headEl;headRow;viewport;emptyEl;table;pager;v;entries;lockEdge=[-1,-1];selected=new Set;active=-1;anchor=-1;justDragged=!1;cv=0;selAll;barEl;bulkEl;bulkCount;bulkBtns=[];selectAllBtn;rowMenu;colDd;colList;colSearch;colChips;colGroup="";cols(){let e=this.config;return[...e.checkboxSelection?[K]:[],...this.userCols(),...e.rowActions?.length?[P]:[]]}userCols(){let e=(this.config.columns??[]).filter(t=>!t.hidden);return[...e.filter(t=>t.locked==="start"),...e.filter(t=>!t.locked),...e.filter(t=>t.locked==="end")]}visibleActions(){return this.config.rowActionsMode==="visible"&&!!this.config.rowActions?.length}mode(){return this.config.checkboxSelection?"multi":this.config.selection??"single"}build(){let e=this.config;e.rowActions=E(e.rowActions),e.bulkActions=E(e.bulkActions),e.columns=e.columns.filter(i=>S(i.permission));let t=d("div",this.baseCls);return this.headRow=d("div","op-grid__row op-grid__header-row",{role:"row"}),this.headEl=d("div","op-grid__header",{},this.headRow),this.viewport=d("div","op-grid__viewport"),this.emptyEl=d("div","op-grid__empty"),(e.columnMenu||e.bulkActions?.length)&&(this.bulkEl=d("div","op-grid__bulk"),this.bulkEl.hidden=!0,this.barEl=d("div","op-grid__bar",{},this.bulkEl),t.append(this.barEl)),this.table=d("div","op-grid__table",{role:"grid",tabindex:0,"aria-multiselectable":e.selection==="multi"||e.checkboxSelection?"true":null},this.headEl,this.viewport,this.emptyEl),t.append(this.table),t.classList.toggle("op-grid--striped",!!e.striped),e.paging&&(this.pager=new z({cls:"op-grid__pager"}),t.append(this.pager.el)),t}onRender(){let e=this.config;if(this.bindStore(e.store??new A({data:e.data??[]})),this.buildHeader(),this.buildBar(),this.v=x({scroller:this.viewport,count:this.count(),rowHeight:e.rowHeight??(L(this.el,B)||36),render:(t,i)=>this.renderRow(t,i),rowCls:"op-grid__row op-grid__body-row"}),this.own(()=>this.v.destroy()),this.sync(),this.listen(this.viewport,"scroll",()=>this.onScrollX(),{passive:!0}),this.listen(this.viewport,"click",t=>this.onRowEvent(t,"row-click")),this.listen(this.viewport,"dblclick",t=>this.onRowEvent(t,"row-dblclick")),this.listen(this.el,"keydown",t=>this.onKey(t)),this.listen(this.headRow,"change",t=>{t.target===this.selAll&&(this.selAll.checked?this.store.each(i=>this.selected.add(i)):this.config.keepSelection?this.store.each(i=>this.selected.delete(i)):this.selected.clear(),this.changed())}),e.reorderableColumns&&this.initColumnDrag(),e.resizableColumns&&this.initColumnResize(),this.listen(this.headRow,"click",t=>{if(this.justDragged||t.target.closest(".op-grid__resizer"))return;let i=t.target.closest("[data-field]"),s=i&&this.userCols().find(r=>r.field===i.dataset.field);s&&(this.emit("column-click",s),s.sortable&&this.sortBy(s))}),typeof ResizeObserver<"u"){let t=new ResizeObserver(()=>this.layout());t.observe(this.viewport),this.own(()=>t.disconnect())}this.pager&&(this.pager.setStore(this.store),this.store.pageSize||this.store.setPageSize(e.pageSize??20)),this.own(()=>this.pager?.destroy());for(let t of e.plugins??[]){let i=t.init(this);i&&this.own(i),t.destroy&&this.own(()=>t.destroy())}}cellAt(e){let t=e?.closest?.(".op-grid__body-row .op-grid__cell"),i=Number(t?.parentElement?.dataset.i),s=t&&this.cols()[Number(t.getAttribute("aria-colindex"))-1],r=t&&this.recAt(i);return s&&r&&![v,m].includes(s.field)?{index:i,record:r,column:s,el:t}:void 0}getCell(e,t){let i=this.cols().findIndex(s=>s.field===t);return document.getElementById(`${this.id}-r${e}`)?.querySelector(`[aria-colindex="${i+1}"]`)??void 0}getColumns(){return this.userCols()}getActive(){return this.active}notifyMount(){super.notifyMount(),this.layout(),this.pager?.notifyMount()}onScrollX(){let e=this.viewport,t=Math.max(0,e.scrollWidth-e.clientWidth-e.scrollLeft);this.headEl.scrollLeft=e.scrollLeft,this.el.style.setProperty("--op-grid-scroll-x",`${e.scrollLeft}px`),this.el.style.setProperty("--op-grid-scroll-end",`${t}px`),this.el.classList.toggle("is-scrolled-start",e.scrollLeft>0),this.el.classList.toggle("is-scrolled-end",t>0)}layout(){if(this.rendered){if(!this.config.rowHeight){let e=L(this.el,B);e&&this.v.setRowHeight(e)}this.headEl.style.paddingInlineEnd=`${this.viewport.offsetWidth-this.viewport.clientWidth}px`,this.v.refresh(),this.onScrollX()}}bindStore(e){this.offStore?.(),this.store=e;let t=e.subscribe(s=>{this.rendered&&(this.sync(),s.type==="sort"&&this.paintSort())}),i=e.on("loading",s=>this.setLoading(s));this.offStore=()=>(t(),i()),this.own(()=>this.offStore?.())}sync(){let e=this.selected.size;if(!this.config.keepSelection)for(let t of this.selected)this.store.indexOf(t)<0&&this.selected.delete(t);this.active=Math.min(this.active,this.count()-1),this.v.setCount(this.count()),this.table.setAttribute("aria-rowcount",String(this.store.totalCount+1)),this.emptyEl.textContent=this.config.emptyText??g("empty"),this.emptyEl.hidden=this.count()>0||!!this.config.loading,this.el.classList.toggle("is-empty",this.count()===0),this.updateActiveDescendant(),this.paintSelection(),this.selected.size!==e&&this.emit("select",this.getSelection())}setStore(e){this.config.store=e,this.selected.clear(),this.active=this.anchor=-1,this.rendered&&(this.bindStore(e),this.pager?.setStore(e),this.paintSort(),this.sync())}getStore(){return this.render(),this.store}count(){return this.entries?this.entries.length:this.store.count}recAt(e){return this.entries?this.entries[e]?.rec:this.store.getAt(e)}setRowLayout(e){this.entries=e,this.rendered&&this.sync()}getRowEntry(e){return this.entries?this.entries[e]:(t=>t&&{rec:t})(this.store.getAt(e))}getRowCount(){return this.count()}layoutColumns(){let e=this.cols(),t=this.visibleActions()?this.config.rowActions.length:1,i=n=>n.field===m?`calc(${t} * var(--op-grid-action-size) + ${t+1} * var(--op-grid-action-gap))`:`${n.width}px`,s=n=>n.field===m?i(n):`${n.width??140}px`,r=e.map(n=>n.locked?s(n):n.width?`${n.width}px`:`minmax(${n.minWidth??96}px, ${n.flex??1}fr)`).join(" "),o=n=>n.reduce((c,[a,h])=>(this.el.style.setProperty(`--op-grid-lock-${a}`,c.length?`calc(${c.join(" + ")})`:"0px"),[...c,s(h)]),[]),l=e.map((n,c)=>[c,n]);o(l.filter(([,n])=>n.locked==="start")),o(l.filter(([,n])=>n.locked==="end").reverse()),this.lockEdge=[e.map(n=>n.locked).lastIndexOf("start"),e.findIndex(n=>n.locked==="end")],this.el.style.setProperty("--op-grid-cols",r),this.el.style.setProperty("--op-grid-min-width",`${e.reduce((n,c)=>n+(c.field===m?t*36:c.width??(c.locked?140:c.minWidth??96)),0)}px`)}lock(e,t,i){t.locked&&(e.classList.add("is-locked",`is-locked-${t.locked}`),e.classList.toggle("is-lock-edge",this.lockEdge[t.locked==="start"?0:1]===i),e.style.setProperty("--_lock",`var(--op-grid-lock-${i})`))}buildHeader(){let e=this.cols();this.layoutColumns(),this.el.classList.toggle("op-grid--actions-visible",this.visibleActions()),this.el.classList.toggle("op-grid--reorderable",!!this.config.reorderableColumns),this.el.classList.toggle("op-grid--resizable",!!this.config.resizableColumns),this.table.setAttribute("aria-colcount",String(e.length)),this.selAll=void 0,this.headRow.replaceChildren(...e.map((i,s)=>{let r=i.header??i.field,o=d("div",`op-grid__cell op-grid__hcell${i.align?` op-grid__cell--${i.align}`:""}${i.sortable?" is-sortable":""}`,{role:"columnheader","aria-colindex":s+1,"data-field":i.field});this.lock(o,i,s),i.field===v?o.append(this.selAll=d("input","op-grid__check",{type:"checkbox","aria-label":g("gridSelectPage")})):i.field===m?o.append(d("span","op-sr-only",{},g("gridRowActions"))):i.sortable?o.append(d("button","op-grid__sort",{type:"button"},d("span","op-grid__label",{},r),d("span","op-grid__arrow",{"aria-hidden":"true"},C("arrow-up")))):o.append(d("span","op-grid__label",{},r));let l=i.field!==v&&i.field!==m;return this.config.reorderableColumns&&l&&o.classList.add("is-reorderable"),this.canResize(i)&&o.append(d("span","op-grid__resizer",{role:"separator","aria-orientation":"vertical","aria-label":`${g("gridResize")} ${r}`})),l&&!i.sortable&&(this.config.reorderableColumns||this.canResize(i))&&(o.tabIndex=0),o}));let t=this.groupBand(e);this.headEl.replaceChildren(...t?[t]:[],this.headRow),this.paintSort(),this.emit("header-paint")}groupBand(e){if(this.config.groupHeaders===!1||!e.some(s=>s.group))return null;let t=[],i=0;for(;i<e.length;){let s=e[i].group??"",r=1;for(;i+r<e.length&&(e[i+r].group??"")===s;)r++;let o=d("div",`op-grid__gcell${s?"":" is-empty"}`,{role:"columnheader","aria-colindex":i+1,"aria-colspan":r},s);o.style.gridColumn=`span ${r}`,t.push(o),i+=r}return d("div","op-grid__row op-grid__group-row",{role:"row"},...t)}getColumnGroups(){return[...new Set(this.config.columns.map(e=>e.group).filter(e=>!!e))]}setColumnGroupVisible(e,t){let i=this.config.columns.filter(s=>(s.group??"")===e);if(i.length){for(let s of i)s.hidden=!t;this.config.columns.some(s=>!s.hidden)||(i[0].hidden=!1),this.setColumns(this.config.columns),this.emit("columns-change",this.getColumnState())}}setColumnLocked(e,t){let i=this.config.columns.find(s=>s.field===e);!i||i.locked===(t??void 0)||(this.setColumns(this.config.columns.map(s=>s===i?{...s,locked:t??void 0}:s)),this.emit("columns-change",this.getColumnState()))}setColumns(e){this.config.columns=e,this.rendered&&(this.cv++,this.buildHeader(),this.paintSelection(),this.v.refresh())}getColumnState(){return this.config.columns.map(e=>({field:e.field,hidden:!!e.hidden,width:e.width,locked:e.locked}))}setColumnState(e){let t=new Map(this.config.columns.map(s=>[s.field,s])),i=e.flatMap(s=>{let r=t.get(s.field);return t.delete(s.field),r?[{...r,hidden:s.hidden,width:s.width??r.width,locked:"locked"in s?s.locked:r.locked}]:[]});this.setColumns([...i,...t.values()]),this.emit("columns-change",this.getColumnState())}canResize(e){return!!this.config.resizableColumns&&e.field!==v&&e.field!==m&&e.resizable!==!1}setColumnWidth(e,t){let i=this.config.columns.find(s=>s.field===e);i&&(i.width=t==null?void 0:Math.round(Math.max(i.minWidth??48,Math.min(t,i.maxWidth??1/0))),this.layoutColumns(),this.emit("column-resize",e,i.width),this.emit("columns-change",this.getColumnState()))}initColumnResize(){let e=this.headRow;this.listen(e,"pointerdown",t=>{let i=t.target.closest(".op-grid__resizer");if(!i||t.button)return;t.preventDefault();let s=i.parentElement,r=s.dataset.field,o=this.config.columns.find(u=>u.field===r),l=t.clientX,n=s.getBoundingClientRect().width||o.width||96;this.el.classList.add("is-resizing");let c=o.width,a=u=>{let p=Math.round(Math.max(o.minWidth??48,Math.min(n+(u.clientX-l)*(this.dir()==="rtl"?-1:1),o.maxWidth??1/0)));o.width=c=p,this.layoutColumns()},h=()=>{document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",h),this.el.classList.remove("is-resizing"),this.justDragged=!0,setTimeout(()=>this.justDragged=!1),c!==void 0&&(this.emit("column-resize",r,c),this.emit("columns-change",this.getColumnState()))};document.addEventListener("pointermove",a),document.addEventListener("pointerup",h),this.own(()=>(document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",h)))}),this.listen(e,"dblclick",t=>{let i=t.target.closest(".op-grid__resizer");i&&this.setColumnWidth(i.parentElement.dataset.field,void 0)}),this.listen(e,"keydown",t=>{if(!(t.altKey&&t.shiftKey)||t.key!=="ArrowLeft"&&t.key!=="ArrowRight")return;let i=t.target.closest(".op-grid__hcell"),s=i&&this.config.columns.find(o=>o.field===i.dataset.field);if(!i||!s||!this.canResize(s))return;t.preventDefault();let r=i.getBoundingClientRect().width||s.width||96;this.setColumnWidth(s.field,r+(t.key==="ArrowRight"?16:-16))})}dir(){return getComputedStyle(this.el).direction}moveColumn(e,t){let i=this.config.columns,s=i.find(h=>h.field===e);if(!s||e===t)return;let r=this.userCols(),o=r.indexOf(s),l=[...i.filter(h=>h!==s)],n=t==null?void 0:l.find(h=>h.field===t),c=r.filter(h=>h!==s).pop(),a=n?l.indexOf(n):c?l.indexOf(c)+1:l.length;l.splice(a,0,s),!l.every((h,u)=>h===i[u])&&(this.setColumns(l),this.emit("column-move",e,o,this.userCols().indexOf(s)),this.emit("columns-change",this.getColumnState()))}initColumnDrag(){let e=this.headRow,t=()=>Array.from(e.querySelectorAll(".is-reorderable"));this.listen(e,"pointerdown",i=>{let s=i.target.closest(".is-reorderable");if(!s||i.button||i.target.closest(".op-grid__resizer"))return;let r=s.dataset.field,o=i.clientX,l,n,c=null,a=u=>{if(!l){if(Math.abs(u.clientX-o)<6)return;l=d("div","op-grid__ghost",{},s.textContent??""),n=d("div","op-grid__drop"),this.el.append(l),this.headEl.append(n),s.classList.add("is-dragging-col")}l.style.left=`${u.clientX}px`,l.style.top=`${u.clientY}px`;let p=t(),f=p.find(O=>{let M=O.getBoundingClientRect();return u.clientX<M.left+M.width/2});c=f?f.dataset.field:null;let y=(f??p[p.length-1])?.getBoundingClientRect(),D=this.headEl.getBoundingClientRect();y&&n&&(n.style.left=`${(f?y.left:y.right)-D.left+this.headEl.scrollLeft}px`)},h=()=>{document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",h),l&&(l.remove(),n?.remove(),s.classList.remove("is-dragging-col"),this.justDragged=!0,setTimeout(()=>this.justDragged=!1),this.moveColumn(r,c))};document.addEventListener("pointermove",a),document.addEventListener("pointerup",h),this.own(()=>(document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",h)))}),this.listen(e,"keydown",i=>{if(!i.altKey||i.shiftKey||i.key!=="ArrowLeft"&&i.key!=="ArrowRight")return;let s=i.target.closest(".is-reorderable");if(!s)return;i.preventDefault();let r=this.userCols(),o=r.findIndex(c=>c.field===s.dataset.field),l=i.key==="ArrowLeft"?o-1:o+1;if(l<0||l>=r.length)return;this.moveColumn(r[o].field,i.key==="ArrowLeft"?r[l].field:r[l+1]?.field??null);let n=e.querySelector(`[data-field="${CSS.escape(r[o].field)}"]`);(n?.querySelector("button")??n)?.focus()})}paintSort(){let e=this.store.getSorters()[0];for(let t of Array.from(this.headRow.children)){let i=!!e&&t.dataset.field===e.field;t.classList.toggle("is-sorted-asc",i&&e.dir==="asc"),t.classList.toggle("is-sorted-desc",i&&e.dir==="desc"),t.classList.contains("is-sortable")&&t.setAttribute("aria-sort",i?e.dir==="asc"?"ascending":"descending":"none")}}sortBy(e){let t=this.store.getSorters()[0],i=t?.field===e.field?t.dir==="asc"?"desc":null:"asc";this.emit("before-sort",e.field,i)!==!1&&(this.store.sort(i?e.field:null,i??void 0),this.emit("sort",e.field,i))}rowIndexOffset(){return this.store.pageSize?(this.store.page-1)*this.store.pageSize:0}renderRow(e,t){let i=this.getRowEntry(t);if(!i)return;let s=i.rec,r=this.cols();e.id=`${this.id}-r${t}`,e.dataset.i=String(t),e.setAttribute("role","row"),e.setAttribute("aria-rowindex",String(this.rowIndexOffset()+t+2));let o=!!s&&this.selected.has(s);e.dataset.ec&&e.classList.remove(...e.dataset.ec.split(" ")),e.dataset.ec=i.cls??"",i.cls&&e.classList.add(...i.cls.split(" "));for(let[n,c]of[["aria-level",i.level],["aria-expanded",i.expanded]])c==null?e.removeAttribute(n):e.setAttribute(n,String(c));e.setAttribute("aria-selected",this.mode()==="none"||!s?"false":String(o)),e.classList.toggle("is-selected",o),e.classList.toggle("is-active",t===this.active),e.classList.toggle("is-odd",t%2===1),(e.dataset.cv!==String(this.cv)||e.dataset.cn!==String(r.length))&&(e.dataset.cv=String(this.cv),e.dataset.cn=String(r.length),e.replaceChildren(...r.map((n,c)=>{let a=d("div",`op-grid__cell${n.align?` op-grid__cell--${n.align}`:""}${n.cls?` ${n.cls}`:""}`,{role:"gridcell","aria-colindex":c+1});return this.lock(a,n,c),a})));let l=Array.from(e.children).filter(n=>n.classList.contains("op-grid__cell"));if(!s){for(let n of l)n.replaceChildren();return i.paint?.(l,e)}r.forEach((n,c)=>{let a=e.children[c];if(a.classList.contains("is-editing"))return;if(n.field===v){let u=a.firstElementChild??a.appendChild(d("input","op-grid__check",{type:"checkbox",tabindex:-1,"aria-label":g("gridSelectRow")}));u.checked=o;return}if(n.field===m){let u=this.config.rowActions??[];if(!this.visibleActions()){a.firstChild||a.append(d("button","op-grid__actbtn",{type:"button",tabindex:-1,"aria-label":g("gridRowActions"),"aria-haspopup":"menu"},C("more")));return}(a.children.length!==u.length||a.firstElementChild?.dataset.a==null)&&a.replaceChildren(...u.map((p,f)=>d("button",`op-grid__actbtn${p.variant==="danger"?" is-danger":""}`,{type:"button",tabindex:-1,"data-a":f,"aria-label":p.text,title:p.text},p.icon?C(p.icon):p.text))),u.forEach((p,f)=>a.children[f].disabled=!!p.disabled?.(s));return}let h=H(n,s);typeof h=="string"?a.textContent=h:a.replaceChildren(h)}),i.paint?.(l,e)}indexOfEvent(e){let t=e.target.closest(".op-grid__body-row");return t?Number(t.dataset.i):-1}onRowEvent(e,t){let i=this.indexOfEvent(e),s=this.recAt(i);if(s){if(t==="row-click"){let r=e.target.closest(".op-grid__actbtn");if(r){if(r.dataset.a==null)return this.openRowMenu(s,r);r.disabled||this.config.rowActions[Number(r.dataset.a)].handler(s,this);return}this.setActive(i,!1),this.pick(i,e)}this.emit(t,s,i,e)}}getSelection(){return[...this.selected]}select(e,t={}){let i=typeof e=="number"?this.recAt(e):e,s=this.mode();!i||s==="none"||((s==="single"||!t.add)&&this.selected.clear(),this.selected.add(i),this.changed())}deselectAll(){this.selected.size&&(this.selected.clear(),this.changed())}changed(){this.v?.refresh(),this.paintSelection(),this.emit("select",this.getSelection())}selectAllFiltered(){if(this.mode()==="multi"){for(let e of this.store.getFiltered())this.selected.add(e);this.changed()}}pick(e,t){let i=this.mode(),s=this.recAt(e);if(!(!s||i==="none")){if(i==="multi"&&t.shiftKey&&this.anchor>=0){this.config.checkboxSelection||this.selected.clear();for(let r=Math.min(this.anchor,e);r<=Math.max(this.anchor,e);r++){let o=this.recAt(r);o&&this.selected.add(o)}}else i==="multi"&&(t.ctrlKey||t.metaKey||this.config.checkboxSelection)?(this.selected.delete(s)||this.selected.add(s),this.anchor=e):(this.selected.clear(),this.selected.add(s),this.anchor=e);this.changed()}}setActive(e,t=!0){this.active=e,t&&e>=0&&this.v.scrollTo(e),this.v.refresh(),this.updateActiveDescendant()}updateActiveDescendant(){this.active>=0&&this.active<this.count()?this.table.setAttribute("aria-activedescendant",`${this.id}-r${this.active}`):this.table.removeAttribute("aria-activedescendant")}focusRow(e){this.render(),this.setActive(Math.max(0,Math.min(e,this.count()-1))),this.table.focus()}focusEl(){return this.table}scrollToRow(e){this.v?.scrollTo(e)}onKey(e){let t=e.target;if(t.closest(".op-grid__header")||t!==this.table&&t.matches("input:not([type=checkbox]),textarea,select,[contenteditable]"))return;let i=this.count();if(!i)return;if((e.key==="ContextMenu"||e.shiftKey&&e.key==="F10")&&this.active>=0&&this.config.rowActions?.length){e.preventDefault();let n=this.recAt(this.active);return n?this.openRowMenu(n,document.getElementById(`${this.id}-r${this.active}`)??this.el):void 0}let s=Math.max(1,Math.floor((this.viewport.clientHeight||400)/this.config.rowHeight||10)),r=this.active<0?0:this.active,o=this.mode(),l={ArrowDown:Math.min(i-1,this.active<0?0:r+1),ArrowUp:Math.max(0,r-1),Home:0,End:i-1,PageDown:Math.min(i-1,r+s),PageUp:Math.max(0,r-s)};if(e.key in l){e.preventDefault();let n=l[e.key];this.setActive(n),(o==="single"||o==="multi"&&!e.ctrlKey&&!e.metaKey&&!this.config.checkboxSelection)&&this.pick(n,e)}else e.key===" "&&this.active>=0?(e.preventDefault(),o==="multi"?this.pick(this.active,{ctrlKey:!0}):this.pick(this.active,e)):e.key==="Enter"&&this.active>=0?this.emit("row-activate",this.recAt(this.active),this.active):(e.key==="a"||e.key==="A")&&(e.ctrlKey||e.metaKey)&&o==="multi"&&(e.preventDefault(),this.store.each(n=>this.selected.add(n)),this.changed())}refresh(){this.v?.refresh()}buildBar(){let e=this.config;if(!this.barEl)return;this.bulkCount=d("span","op-grid__count",{"aria-live":"polite"}),this.selectAllBtn=new b({text:"",variant:"ghost",handler:()=>this.selectAllFiltered()}),this.bulkBtns=(e.bulkActions??[]).map(i=>new b({text:i.text,icon:i.icon,variant:i.variant==="danger"?"danger":"default",handler:()=>i.handler(this.getSelection(),this)}));let t=new b({text:g("gridClearSel"),variant:"ghost",handler:()=>this.deselectAll()});this.bulkEl.append(this.bulkCount,this.selectAllBtn.el,...this.bulkBtns.map(i=>i.el),t.el),this.own(()=>[this.selectAllBtn,...this.bulkBtns,t].forEach(i=>i?.destroy())),e.columnMenu&&this.buildColumnMenu(),this.paintSelection()}paintSelection(){if(!this.rendered)return;let e=this.store.count,t=0;if(this.store.each(r=>this.selected.has(r)&&t++),this.selAll&&(this.selAll.checked=e>0&&t===e,this.selAll.indeterminate=t>0&&t<e),!this.bulkEl)return;let i=this.selected.size;if(this.bulkEl.hidden=!i||!this.config.bulkActions?.length,this.bulkEl.hidden)return;this.bulkCount.textContent=g("gridSelected",{n:i});let s=this.store.getFiltered().length;this.selectAllBtn.el.hidden=!(this.mode()==="multi"&&t===e&&s>e&&i<s),this.selectAllBtn.setText(g("gridSelectAll",{n:s}))}openRowMenu(e,t){this.rowMenu??=new G({}),this.rowMenu.setItems((this.config.rowActions??[]).map(i=>({text:i.text,icon:i.icon,disabled:!!i.disabled?.(e),handler:()=>i.handler(e,this)}))),this.rowMenu.showBy(t)}buildColumnMenu(){let e=new b({text:g("gridColumns"),icon:"columns",variant:"ghost"});this.colSearch=new R({placeholder:g("gridColumnSearch"),clearable:!0}),this.colChips=d("div","op-grid__colchips",{role:"group","aria-label":g("gridGroups")}),this.colList=d("div","op-grid__collist",{role:"group","aria-label":g("gridColumns")});let t=d("div","op-grid__colempty",{},g("gridNoColumns"));t.hidden=!0;let i=d("div","op-grid__colmenu",{},this.colSearch.el,this.colChips,this.colList,t);this.colDd=new $({anchor:e.el,content:i,placement:"bottom-end",role:"dialog",autoFocus:!1}),this.barEl.append(e.el),this.own(()=>e.destroy());let s=()=>{let r=(this.colSearch.getValue()??"").toLowerCase(),o=0,l,n=0,c=()=>l&&(l.hidden=n===0);for(let a of Array.from(this.colList.children)){if(a.classList.contains("op-grid__colgroup")){c(),l=a,n=0;continue}let h=a.dataset.group??"",u=!this.colGroup||h===this.colGroup,p=!r||h.toLowerCase().includes(r)||a.textContent.toLowerCase().includes(r);a.hidden=!(u&&p),a.hidden||(o++,n++)}c(),t.hidden=o>0};this.colSearch.on("change",s),this.listen(this.colChips,"click",r=>{let o=r.target.closest("[data-g]");o&&(this.colGroup=o.dataset.g,this.paintColumnList(),s())}),e.on("click",()=>{if(this.colDd.isOpen())return this.colDd.close();this.colSearch.setValue(""),this.colGroup="",this.paintColumnList(),this.colDd.open(),this.colList.querySelector("input")?.focus()}),this.listen(this.colList,"change",r=>{let o=r.target;if(o.dataset.groupToggle!=null)this.setColumnGroupVisible(o.dataset.groupToggle,o.checked);else{let l=this.config.columns.find(n=>n.field===o.value);if(!l)return;l.hidden=!o.checked,this.setColumns(this.config.columns),this.emit("columns-change",this.getColumnState())}this.paintColumnList(),s()})}paintColumnList(){let e=this.config.columns,t=this.getColumnGroups(),i=this.userCols().length===1?this.userCols()[0]:null,s=o=>{let l=d("input","op-grid__check",{type:"checkbox",value:o.field});return l.checked=!o.hidden,l.disabled=o===i,d("label","op-grid__colitem",{"data-group":o.group??""},l,d("span","",{},o.header??o.field))};if(this.colChips.hidden=t.length<2,this.colChips.replaceChildren(...[["",g("gridGroupAll")],...t.map(o=>[o,o])].map(([o,l])=>d("button",`op-grid__colchip${this.colGroup===o?" is-on":""}`,{type:"button","data-g":o,"aria-pressed":String(this.colGroup===o)},l))),!t.length)return this.colList.replaceChildren(...e.map(s));let r=[];for(let o of[...t,""]){let l=e.filter(a=>(a.group??"")===o);if(!l.length)continue;let n=l.filter(a=>!a.hidden).length,c=d("input","op-grid__check",{type:"checkbox","data-group-toggle":o,"aria-label":o||g("gridOtherCols")});c.checked=n===l.length,c.indeterminate=n>0&&n<l.length,r.push(d("div","op-grid__colgroup",{"data-group":o},d("label","",{},c,d("span","",{},o||g("gridOtherCols"))),d("span","op-grid__colcount",{},`${n}/${l.length}`)),...l.map(s))}this.colList.replaceChildren(...r)}onDestroy(){this.pager?.destroy(),this.rowMenu?.destroy(),this.colDd?.destroy(),this.colSearch?.destroy()}};_("grid",k);export{k as a};
2
+ //# sourceMappingURL=chunk-5WE2JOBY.js.map