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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/grid/grid.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { virtualize, measure } from '../../../core/virtual';\nimport { Store } from '../../../data/store';\nimport type { Model } from '../../../data/model';\nimport { cellContent, type Column } from '../../../data/column';\nimport { allowed, gate } from '../../../core/permission';\nimport { iconEl } from '../../base/icon/icon';\nimport { Pagination } from '../pagination/pagination';\nimport { Button } from '../../base/button/button';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Dropdown } from '../../overlays/dropdown/dropdown';\nimport { Menu } from '../../overlays/menu/menu';\n\naddMessages('en', {\n gridSelected: '{n} selected',\n gridSelectAll: 'Select all {n}',\n gridClearSel: 'Clear selection',\n gridSelectRow: 'Select row',\n gridSelectPage: 'Select all rows',\n gridRowActions: 'Row actions',\n gridColumns: 'Columns',\n gridResize: 'Resize column',\n gridGroupAll: 'All',\n gridOtherCols: 'Other',\n gridGroups: 'Column groups',\n gridColumnSearch: 'Search columns',\n gridNoColumns: 'No matching columns',\n});\naddMessages('pt-BR', {\n gridSelected: '{n} selecionado(s)',\n gridSelectAll: 'Selecionar todos os {n}',\n gridClearSel: 'Limpar sele\u00E7\u00E3o',\n gridSelectRow: 'Selecionar linha',\n gridSelectPage: 'Selecionar todas as linhas',\n gridRowActions: 'A\u00E7\u00F5es da linha',\n gridColumns: 'Colunas',\n gridResize: 'Redimensionar coluna',\n gridGroupAll: 'Todas',\n gridOtherCols: 'Outras',\n gridGroups: 'Grupos de colunas',\n gridColumnSearch: 'Buscar colunas',\n gridNoColumns: 'Nenhuma coluna encontrada',\n});\n\nexport interface GridConfig<T extends Record<string, any> = any> extends ComponentConfig {\n store?: Store<T>;\n /** Used when no `store` is given. */\n data?: Partial<T>[];\n columns: Column<T>[];\n selection?: 'none' | 'single' | 'multi';\n /** Row height in px. Default: measured from the `--op-grid-row-height` / `--op-row-height` tokens. */\n rowHeight?: number;\n /** Adds a Pagination bar bound to the store (give the store a `pageSize`, or set it here). */\n paging?: boolean;\n pageSize?: number;\n emptyText?: string;\n striped?: boolean;\n /** Adds a leading checkbox column with a select-all in the header. Implies multi selection; a row click toggles. */\n checkboxSelection?: boolean;\n /** Keep selected records when the page or the filters change. Default false. */\n keepSelection?: boolean;\n /** Buttons shown in a bar above the header while records are selected. */\n bulkActions?: GridAction<T>[];\n /** Actions at the end of every row (see `rowActionsMode`). */\n rowActions?: GridRowAction<T>[];\n /** Optional features (`cellEditing()`...). See `GridPlugin`. */\n plugins?: GridPlugin<T>[];\n /** `'menu'` (default): one \"\u22EF\" button opens a menu. `'visible'`: every action is an icon button, always shown (dimmed until the row is hovered, active or selected). */\n rowActionsMode?: 'menu' | 'visible';\n /** A \"Columns\" button in the bar: toggle columns on and off, with search. */\n columnMenu?: boolean;\n /** Drag a header to a new place (or Alt+\u2190/\u2192 on a focused header). `column-move` and `columns-change` fire; ViewManager saves the order. */\n reorderableColumns?: boolean;\n /** A handle on each header's edge: drag to resize (double-click resets), Alt+Shift+\u2190/\u2192 on a focused header. Widths are part of `getColumnState`. */\n resizableColumns?: boolean;\n /** Show the group labels (`Column.group`) as a band over the header. Default true when any column has a group. */\n groupHeaders?: boolean;\n}\n\n/** Extends a Grid without growing its base: `init` runs once the grid is rendered and may return a cleanup. */\nexport interface GridPlugin<T extends Record<string, any> = any> {\n init(grid: Grid<T>): void | (() => void);\n destroy?(): void;\n}\n\n/**\n * One displayed row. Without a row layout every store record is a row; a plugin (grouping, tree) replaces the list with\n * its own, mixing records with rows that are not records (a group header, a total).\n */\nexport interface RowEntry<T extends Record<string, any> = any> {\n /** The record this row shows; absent on a header or total row (which cannot be selected). */\n rec?: Model<T>;\n /** `aria-level` and, with `expanded`, `aria-expanded`: for rows that open and close (a group, a tree node). */\n level?: number;\n expanded?: boolean;\n /** Extra classes on the row (`op-grid__row--group`...). */\n cls?: string;\n /** Fills the row's cells after the grid did (or, on a row without a record, instead of it). */\n paint?(cells: HTMLElement[], row: HTMLElement): void;\n}\n\n/** What `cellAt` finds under a DOM node: the row index, its record, the column and the cell element. */\nexport interface GridCell<T extends Record<string, any> = any> {\n index: number;\n record: Model<T>;\n column: Column<T>;\n el: HTMLElement;\n}\n\nexport interface GridAction<T extends Record<string, any> = any> {\n text: string;\n icon?: string;\n variant?: 'default' | 'danger';\n /** Left out (or disabled) while `setPermissionResolver` denies it. */\n permission?: string;\n handler: (records: Model<T>[], grid: Grid<T>) => void;\n}\nexport interface GridRowAction<T extends Record<string, any> = any> {\n text: string;\n icon?: string;\n variant?: 'default' | 'danger';\n /** Left out (or disabled) while `setPermissionResolver` denies it. */\n permission?: string;\n /** Disabled for the records where this returns true. */\n disabled?: (record: Model<T>) => boolean;\n handler: (record: Model<T>, grid: Grid<T>) => void;\n}\nexport interface ColumnState {\n field: string;\n hidden: boolean;\n width?: number;\n locked?: 'start' | 'end';\n}\n\nconst SEL = '__select';\nconst ACT = '__actions';\nconst SEL_COL: Column = { field: SEL, width: 44, align: 'center', cls: 'op-grid__selcell', locked: 'start' };\nconst ACT_COL: Column = { field: ACT, width: 44, align: 'center', cls: 'op-grid__actcell', locked: 'end' };\n\nconst ROW = 'var(--op-grid-row-height, var(--op-row-height))';\n\n/** Data grid with a virtualized body: only the visible rows (plus a small overscan) exist in the DOM. */\n/** `T` is the record shape; `new Grid({ store })` infers it from a typed `Store<T>`. */\nexport class Grid<T extends Record<string, any> = any> extends Component<GridConfig<T>> {\n protected override baseCls = 'op-grid';\n private store!: Store<T>;\n private offStore?: () => void;\n private headEl!: HTMLElement;\n private headRow!: HTMLElement;\n private viewport!: HTMLElement;\n private emptyEl!: HTMLElement;\n /** The focusable `role=grid` part (header + rows); the root also holds the bulk bar and the pager, which a grid may not contain. */\n private table!: HTMLElement;\n private pager?: Pagination;\n private v!: ReturnType<typeof virtualize>;\n private entries?: RowEntry<T>[];\n private lockEdge = [-1, -1];\n private selected = new Set<Model<T>>();\n private active = -1;\n private anchor = -1;\n private justDragged = false;\n private cv = 0; // bumps when the columns change, so pooled rows rebuild their cells\n private selAll?: HTMLInputElement;\n private barEl?: HTMLElement;\n private bulkEl?: HTMLElement;\n private bulkCount?: HTMLElement;\n private bulkBtns: Button[] = [];\n private selectAllBtn?: Button;\n private rowMenu?: Menu;\n private colDd?: Dropdown;\n private colList?: HTMLElement;\n private colSearch?: TextField;\n private colChips?: HTMLElement;\n private colGroup = '';\n\n private cols(): Column[] {\n const c = this.config;\n return [...(c.checkboxSelection ? [SEL_COL] : []), ...this.userCols(), ...(c.rowActions?.length ? [ACT_COL] : [])];\n }\n /** Visible columns; the locked ones are kept together at their edge, whatever the order they were given or dragged to. */\n private userCols(): Column[] {\n const vis = (this.config.columns ?? []).filter((c) => !c.hidden);\n return [...vis.filter((c) => c.locked === 'start'), ...vis.filter((c) => !c.locked), ...vis.filter((c) => c.locked === 'end')];\n }\n private visibleActions(): boolean {\n return this.config.rowActionsMode === 'visible' && !!this.config.rowActions?.length;\n }\n private mode(): 'none' | 'single' | 'multi' {\n return this.config.checkboxSelection ? 'multi' : (this.config.selection ?? 'single');\n }\n\n protected override build() {\n const c = this.config;\n c.rowActions = gate(c.rowActions);\n c.bulkActions = gate(c.bulkActions);\n c.columns = c.columns.filter((col) => allowed(col.permission));\n const el = h('div', this.baseCls);\n this.headRow = h('div', 'op-grid__row op-grid__header-row', { role: 'row' });\n this.headEl = h('div', 'op-grid__header', {}, this.headRow);\n this.viewport = h('div', 'op-grid__viewport');\n this.emptyEl = h('div', 'op-grid__empty');\n if (c.columnMenu || c.bulkActions?.length) {\n this.bulkEl = h('div', 'op-grid__bulk');\n this.bulkEl.hidden = true;\n this.barEl = h('div', 'op-grid__bar', {}, this.bulkEl);\n el.append(this.barEl);\n }\n this.table = h('div', 'op-grid__table', { role: 'grid', tabindex: 0, 'aria-multiselectable': c.selection === 'multi' || c.checkboxSelection ? 'true' : null }, this.headEl, this.viewport, this.emptyEl);\n el.append(this.table);\n el.classList.toggle('op-grid--striped', !!c.striped);\n if (c.paging) {\n this.pager = new Pagination({ cls: 'op-grid__pager' });\n el.append(this.pager.el);\n }\n return el;\n }\n\n protected override onRender() {\n const c = this.config;\n this.bindStore(c.store ?? new Store<T>({ data: c.data ?? [] }));\n this.buildHeader();\n this.buildBar();\n this.v = virtualize({\n scroller: this.viewport,\n count: this.count(),\n rowHeight: c.rowHeight ?? (measure(this.el, ROW) || 36),\n render: (row, i) => this.renderRow(row, i),\n rowCls: 'op-grid__row op-grid__body-row',\n });\n this.own(() => this.v.destroy());\n this.sync();\n\n this.listen(this.viewport, 'scroll', () => this.onScrollX(), { passive: true });\n this.listen(this.viewport, 'click', (e: MouseEvent) => this.onRowEvent(e, 'row-click'));\n this.listen(this.viewport, 'dblclick', (e: MouseEvent) => this.onRowEvent(e, 'row-dblclick'));\n this.listen(this.el, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.listen(this.headRow, 'change', (e: Event) => {\n if (e.target !== this.selAll) return;\n if (this.selAll!.checked) this.store.each((r) => this.selected.add(r));\n else if (this.config.keepSelection) this.store.each((r) => this.selected.delete(r));\n else this.selected.clear();\n this.changed();\n });\n if (c.reorderableColumns) this.initColumnDrag();\n if (c.resizableColumns) this.initColumnResize();\n this.listen(this.headRow, 'click', (e: Event) => {\n if (this.justDragged || (e.target as HTMLElement).closest('.op-grid__resizer')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('[data-field]');\n const col = cell && this.userCols().find((x) => x.field === cell.dataset.field);\n if (!col) return;\n this.emit('column-click', col);\n if (col.sortable) this.sortBy(col);\n });\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.layout());\n ro.observe(this.viewport);\n this.own(() => ro.disconnect());\n }\n if (this.pager) {\n this.pager.setStore(this.store);\n if (!this.store.pageSize) this.store.setPageSize(c.pageSize ?? 20);\n }\n this.own(() => this.pager?.destroy());\n for (const p of c.plugins ?? []) {\n const off = p.init(this);\n if (off) this.own(off);\n if (p.destroy) this.own(() => p.destroy!());\n }\n }\n\n /** The row, record, column and cell element under a node (e.g. an event target), if it is a body cell. */\n cellAt(node: EventTarget | null): GridCell<T> | undefined {\n const cell = (node as HTMLElement | null)?.closest?.<HTMLElement>('.op-grid__body-row .op-grid__cell');\n const index = Number(cell?.parentElement?.dataset.i);\n const column = cell && this.cols()[Number(cell.getAttribute('aria-colindex')) - 1];\n const record = cell && this.recAt(index);\n return column && record && ![SEL, ACT].includes(column.field) ? { index, record, column, el: cell } : undefined;\n }\n\n /** The body cell of row `index` and column `field`, when that row is in the DOM (rows are virtualized). */\n getCell(index: number, field: string): HTMLElement | undefined {\n const n = this.cols().findIndex((c) => c.field === field);\n return document.getElementById(`${this.id}-r${index}`)?.querySelector<HTMLElement>(`[aria-colindex=\"${n + 1}\"]`) ?? undefined;\n }\n\n /** The visible data columns, in order (no checkbox/action columns). */\n getColumns(): Column<T>[] {\n return this.userCols();\n }\n\n /** The active row index (keyboard cursor), or -1. */\n getActive(): number {\n return this.active;\n }\n\n override notifyMount() {\n super.notifyMount();\n this.layout();\n this.pager?.notifyMount();\n }\n\n /** The header follows the body sideways; its locked cells hold still, and the edges say when there is more to scroll. */\n private onScrollX() {\n const v = this.viewport;\n const end = Math.max(0, v.scrollWidth - v.clientWidth - v.scrollLeft);\n this.headEl.scrollLeft = v.scrollLeft;\n this.el.style.setProperty('--op-grid-scroll-x', `${v.scrollLeft}px`);\n this.el.style.setProperty('--op-grid-scroll-end', `${end}px`);\n this.el.classList.toggle('is-scrolled-start', v.scrollLeft > 0);\n this.el.classList.toggle('is-scrolled-end', end > 0);\n }\n\n /** Re-measures row height and scrollbar (needed after the grid becomes visible or resizes). */\n private layout() {\n if (!this.rendered) return;\n if (!this.config.rowHeight) {\n const hgt = measure(this.el, ROW);\n if (hgt) this.v.setRowHeight(hgt);\n }\n this.headEl.style.paddingInlineEnd = `${this.viewport.offsetWidth - this.viewport.clientWidth}px`;\n this.v.refresh();\n this.onScrollX();\n }\n\n // ---- store ---------------------------------------------------------------------------------\n\n private bindStore(store: Store<T>) {\n this.offStore?.();\n this.store = store;\n const offChange = store.subscribe((c) => {\n if (!this.rendered) return;\n this.sync();\n if (c.type === 'sort') this.paintSort();\n });\n const offLoading = store.on('loading', (on: boolean) => this.setLoading(on));\n this.offStore = () => (offChange(), offLoading());\n this.own(() => this.offStore?.());\n }\n\n /** Brings count, selection and the empty state in line with the store. */\n private sync() {\n const before = this.selected.size;\n if (!this.config.keepSelection) for (const r of this.selected) if (this.store.indexOf(r) < 0) this.selected.delete(r);\n this.active = Math.min(this.active, this.count() - 1);\n this.v.setCount(this.count());\n this.table.setAttribute('aria-rowcount', String(this.store.totalCount + 1));\n this.emptyEl.textContent = this.config.emptyText ?? t('empty');\n this.emptyEl.hidden = this.count() > 0 || !!this.config.loading;\n this.el.classList.toggle('is-empty', this.count() === 0);\n this.updateActiveDescendant();\n this.paintSelection();\n if (this.selected.size !== before) this.emit('select', this.getSelection());\n }\n\n setStore(store: Store<T>) {\n this.config.store = store;\n this.selected.clear();\n this.active = this.anchor = -1;\n if (!this.rendered) return;\n this.bindStore(store);\n this.pager?.setStore(store);\n this.paintSort();\n this.sync();\n }\n getStore(): Store<T> {\n this.render();\n return this.store;\n }\n\n private count(): number {\n return this.entries ? this.entries.length : this.store.count;\n }\n private recAt(i: number): Model<T> | undefined {\n return this.entries ? this.entries[i]?.rec : this.store.getAt(i);\n }\n\n /** For plugins: replaces the displayed rows (`undefined` goes back to one row per store record) and repaints. */\n setRowLayout(rows: RowEntry<T>[] | undefined): void {\n this.entries = rows;\n if (this.rendered) this.sync();\n }\n /** The displayed row `i`: its record, or the header/total a plugin put there. */\n getRowEntry(i: number): RowEntry<T> | undefined {\n return this.entries ? this.entries[i] : ((rec) => rec && { rec })(this.store.getAt(i));\n }\n /** How many rows are displayed (records plus whatever a plugin added). */\n getRowCount(): number {\n return this.count();\n }\n\n // ---- header / columns ----------------------------------------------------------------------\n\n /** Column widths \u2192 the CSS grid template shared by the header and every row. */\n private layoutColumns() {\n const cols = this.cols();\n const n = this.visibleActions() ? this.config.rowActions!.length : 1;\n const wide = (c: Column) => (c.field === ACT ? `calc(${n} * var(--op-grid-action-size) + ${n + 1} * var(--op-grid-action-gap))` : `${c.width}px`);\n const px = (c: Column) => (c.field === ACT ? wide(c) : `${c.width ?? 140}px`);\n const tpl = cols.map((c) => (c.locked ? px(c) : c.width ? `${c.width}px` : `minmax(${c.minWidth ?? 96}px, ${c.flex ?? 1}fr)`)).join(' ');\n // a locked cell sticks at the sum of the locked widths before it (or, for the end, after it)\n const sums = (list: Array<[number, Column]>) => list.reduce<string[]>((acc, [n, c]) => (this.el.style.setProperty(`--op-grid-lock-${n}`, acc.length ? `calc(${acc.join(' + ')})` : '0px'), [...acc, px(c)]), []);\n const at = cols.map((c, n): [number, Column] => [n, c]);\n sums(at.filter(([, c]) => c.locked === 'start'));\n sums(at.filter(([, c]) => c.locked === 'end').reverse());\n this.lockEdge = [cols.map((c) => c.locked).lastIndexOf('start'), cols.findIndex((c) => c.locked === 'end')];\n this.el.style.setProperty('--op-grid-cols', tpl);\n this.el.style.setProperty('--op-grid-min-width', `${cols.reduce((sum, c) => sum + (c.field === ACT ? n * 36 : (c.width ?? (c.locked ? 140 : (c.minWidth ?? 96)))), 0)}px`);\n }\n\n /** Classes and offset of a locked cell (header or body); `n` is the column's place. */\n private lock(cell: HTMLElement, c: Column, n: number) {\n if (!c.locked) return;\n cell.classList.add('is-locked', `is-locked-${c.locked}`);\n cell.classList.toggle('is-lock-edge', this.lockEdge[c.locked === 'start' ? 0 : 1] === n);\n cell.style.setProperty('--_lock', `var(--op-grid-lock-${n})`);\n }\n\n private buildHeader() {\n const cols = this.cols();\n this.layoutColumns();\n this.el.classList.toggle('op-grid--actions-visible', this.visibleActions());\n this.el.classList.toggle('op-grid--reorderable', !!this.config.reorderableColumns);\n this.el.classList.toggle('op-grid--resizable', !!this.config.resizableColumns);\n this.table.setAttribute('aria-colcount', String(cols.length));\n this.selAll = undefined;\n this.headRow.replaceChildren(\n ...cols.map((c, i) => {\n const label = c.header ?? c.field;\n const cell = h('div', `op-grid__cell op-grid__hcell${c.align ? ` op-grid__cell--${c.align}` : ''}${c.sortable ? ' is-sortable' : ''}`, { role: 'columnheader', 'aria-colindex': i + 1, 'data-field': c.field });\n this.lock(cell, c, i);\n if (c.field === SEL) cell.append((this.selAll = h('input', 'op-grid__check', { type: 'checkbox', 'aria-label': t('gridSelectPage') })));\n else if (c.field === ACT) cell.append(h('span', 'op-sr-only', {}, t('gridRowActions')));\n else if (c.sortable) cell.append(h('button', 'op-grid__sort', { type: 'button' }, h('span', 'op-grid__label', {}, label), h('span', 'op-grid__arrow', { 'aria-hidden': 'true' }, iconEl('arrow-up'))));\n else cell.append(h('span', 'op-grid__label', {}, label));\n const user = c.field !== SEL && c.field !== ACT;\n if (this.config.reorderableColumns && user) cell.classList.add('is-reorderable');\n if (this.canResize(c)) {\n cell.append(h('span', 'op-grid__resizer', { role: 'separator', 'aria-orientation': 'vertical', 'aria-label': `${t('gridResize')} ${label}` }));\n }\n // a sortable header already has its button to focus; the others need a tab stop to be moved/resized by keyboard\n if (user && !c.sortable && (this.config.reorderableColumns || this.canResize(c))) cell.tabIndex = 0;\n return cell;\n }),\n );\n const band = this.groupBand(cols);\n this.headEl.replaceChildren(...(band ? [band] : []), this.headRow);\n this.paintSort();\n this.emit('header-paint');\n }\n\n /** Labels over runs of neighbouring columns that share a group (a dragged column can split a group: it shows twice). */\n private groupBand(cols: Column[]): HTMLElement | null {\n if (this.config.groupHeaders === false || !cols.some((c) => c.group)) return null;\n const cells: HTMLElement[] = [];\n let i = 0;\n while (i < cols.length) {\n const g = cols[i].group ?? '';\n let n = 1;\n while (i + n < cols.length && (cols[i + n].group ?? '') === g) n++;\n const cell = h('div', `op-grid__gcell${g ? '' : ' is-empty'}`, { role: 'columnheader', 'aria-colindex': i + 1, 'aria-colspan': n }, g);\n cell.style.gridColumn = `span ${n}`;\n cells.push(cell);\n i += n;\n }\n return h('div', 'op-grid__row op-grid__group-row', { role: 'row' }, ...cells);\n }\n\n /** The group labels in the order they first appear. */\n getColumnGroups(): string[] {\n return [...new Set(this.config.columns.map((c) => c.group).filter((g): g is string => !!g))];\n }\n\n /** Shows or hides every column of a group at once (at least one column always stays visible). */\n setColumnGroupVisible(group: string, visible: boolean): void {\n const cols = this.config.columns.filter((c) => (c.group ?? '') === group);\n if (!cols.length) return;\n for (const c of cols) c.hidden = !visible;\n if (!this.config.columns.some((c) => !c.hidden)) cols[0].hidden = false;\n this.setColumns(this.config.columns);\n this.emit('columns-change', this.getColumnState());\n }\n\n /** Pins a column to the start or the end while the body scrolls sideways (`null` releases it). A locked column needs a `width` (default 140). */\n setColumnLocked(field: string, locked: 'start' | 'end' | null): void {\n const col = this.config.columns.find((c) => c.field === field);\n if (!col || col.locked === (locked ?? undefined)) return;\n this.setColumns(this.config.columns.map((c) => (c === col ? { ...c, locked: locked ?? undefined } : c)));\n this.emit('columns-change', this.getColumnState());\n }\n\n setColumns(columns: Column[]) {\n this.config.columns = columns;\n if (!this.rendered) return;\n this.cv++;\n this.buildHeader();\n this.paintSelection();\n this.v.refresh();\n }\n\n /** Order, visibility and width of every column; save it and give it back to `setColumnState`. */\n getColumnState(): ColumnState[] {\n return this.config.columns.map((c) => ({ field: c.field, hidden: !!c.hidden, width: c.width, locked: c.locked }));\n }\n /** Restores a saved state: columns follow its order (unknown ones keep their place at the end). */\n setColumnState(state: ColumnState[]): void {\n const by = new Map(this.config.columns.map((c) => [c.field, c]));\n const ordered = state.flatMap((s) => {\n const c = by.get(s.field);\n by.delete(s.field);\n return c ? [{ ...c, hidden: s.hidden, width: s.width ?? c.width, locked: 'locked' in s ? s.locked : c.locked }] : [];\n });\n this.setColumns([...ordered, ...by.values()]);\n this.emit('columns-change', this.getColumnState());\n }\n\n // ---- column drag ---------------------------------------------------------------------------\n\n // ---- column resize -------------------------------------------------------------------------\n\n private canResize(c: Column): boolean {\n return !!this.config.resizableColumns && c.field !== SEL && c.field !== ACT && c.resizable !== false;\n }\n\n /** Sets a column's width in px (clamped to `minWidth`/`maxWidth`); `undefined` gives it back its flexible width. */\n setColumnWidth(field: string, width: number | undefined): void {\n const col = this.config.columns.find((x) => x.field === field);\n if (!col) return;\n col.width = width == null ? undefined : Math.round(Math.max(col.minWidth ?? 48, Math.min(width, col.maxWidth ?? Infinity)));\n this.layoutColumns();\n this.emit('column-resize', field, col.width);\n this.emit('columns-change', this.getColumnState());\n }\n\n private initColumnResize(): void {\n const head = this.headRow;\n this.listen(head, 'pointerdown', (e: PointerEvent) => {\n const grip = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__resizer');\n if (!grip || e.button) return;\n e.preventDefault();\n const cell = grip.parentElement!;\n const field = cell.dataset.field!;\n const col = this.config.columns.find((x) => x.field === field)!;\n const x0 = e.clientX;\n const w0 = cell.getBoundingClientRect().width || col.width || 96; // a flexible column starts from what it shows now\n this.el.classList.add('is-resizing');\n let last = col.width;\n const move = (m: PointerEvent) => {\n // set without events while dragging; one event when it ends\n const w = Math.round(Math.max(col.minWidth ?? 48, Math.min(w0 + (m.clientX - x0) * (this.dir() === 'rtl' ? -1 : 1), col.maxWidth ?? Infinity)));\n col.width = last = w;\n this.layoutColumns();\n };\n const up = () => {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n this.el.classList.remove('is-resizing');\n this.justDragged = true;\n setTimeout(() => (this.justDragged = false));\n if (last !== undefined) {\n this.emit('column-resize', field, last);\n this.emit('columns-change', this.getColumnState());\n }\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.own(() => (document.removeEventListener('pointermove', move), document.removeEventListener('pointerup', up)));\n });\n // double-click on the handle: back to the flexible width\n this.listen(head, 'dblclick', (e: Event) => {\n const grip = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__resizer');\n if (grip) this.setColumnWidth(grip.parentElement!.dataset.field!, undefined);\n });\n // keyboard: Alt+Shift+\u2190/\u2192 on a focused header\n this.listen(head, 'keydown', (e: KeyboardEvent) => {\n if (!(e.altKey && e.shiftKey) || (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__hcell');\n const col = cell && this.config.columns.find((x) => x.field === cell.dataset.field);\n if (!cell || !col || !this.canResize(col)) return;\n e.preventDefault();\n const w = cell.getBoundingClientRect().width || col.width || 96;\n this.setColumnWidth(col.field, w + (e.key === 'ArrowRight' ? 16 : -16));\n });\n }\n\n private dir(): string {\n return getComputedStyle(this.el).direction;\n }\n\n /** Moves a (user) column in front of `before` (or to the end when null). Hidden columns keep their places. */\n moveColumn(field: string, before: string | null): void {\n const cols = this.config.columns;\n const col = cols.find((x) => x.field === field);\n if (!col || field === before) return;\n const vis = this.userCols();\n const from = vis.indexOf(col);\n const next = [...cols.filter((x) => x !== col)];\n const target = before == null ? undefined : next.find((x) => x.field === before);\n const lastVis = vis.filter((x) => x !== col).pop();\n const at = target ? next.indexOf(target) : lastVis ? next.indexOf(lastVis) + 1 : next.length;\n next.splice(at, 0, col);\n if (next.every((x, i) => x === cols[i])) return;\n this.setColumns(next);\n this.emit('column-move', field, from, this.userCols().indexOf(col));\n this.emit('columns-change', this.getColumnState());\n }\n\n private initColumnDrag(): void {\n const head = this.headRow;\n const cellsOf = () => Array.from(head.querySelectorAll<HTMLElement>('.is-reorderable'));\n this.listen(head, 'pointerdown', (e: PointerEvent) => {\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.is-reorderable');\n if (!cell || e.button || (e.target as HTMLElement).closest('.op-grid__resizer')) return;\n const field = cell.dataset.field!;\n const x0 = e.clientX;\n let ghost: HTMLElement | undefined;\n let mark: HTMLElement | undefined;\n let before: string | null = null;\n const move = (m: PointerEvent) => {\n if (!ghost) {\n if (Math.abs(m.clientX - x0) < 6) return; // a click, not a drag\n ghost = h('div', 'op-grid__ghost', {}, cell.textContent ?? '');\n mark = h('div', 'op-grid__drop');\n this.el.append(ghost);\n this.headEl.append(mark);\n cell.classList.add('is-dragging-col');\n }\n ghost.style.left = `${m.clientX}px`;\n ghost.style.top = `${m.clientY}px`;\n // the drop boundary is the nearest cell edge: before the first cell whose middle is right of the pointer\n const cells = cellsOf();\n const hit = cells.find((c) => {\n const r = c.getBoundingClientRect();\n return m.clientX < r.left + r.width / 2;\n });\n before = hit ? hit.dataset.field! : null;\n const edge = hit ?? cells[cells.length - 1];\n const r = edge?.getBoundingClientRect();\n const hr = this.headEl.getBoundingClientRect();\n if (r && mark) mark.style.left = `${(hit ? r.left : r.right) - hr.left + this.headEl.scrollLeft}px`;\n };\n const up = () => {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n if (!ghost) return;\n ghost.remove();\n mark?.remove();\n cell.classList.remove('is-dragging-col');\n this.justDragged = true;\n setTimeout(() => (this.justDragged = false));\n this.moveColumn(field, before);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.own(() => (document.removeEventListener('pointermove', move), document.removeEventListener('pointerup', up)));\n });\n // keyboard: Alt+\u2190 / Alt+\u2192 on a focused header moves its column one step\n this.listen(head, 'keydown', (e: KeyboardEvent) => {\n if (!e.altKey || e.shiftKey || (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.is-reorderable');\n if (!cell) return;\n e.preventDefault();\n const vis = this.userCols();\n const i = vis.findIndex((x) => x.field === cell.dataset.field);\n const j = e.key === 'ArrowLeft' ? i - 1 : i + 1;\n if (j < 0 || j >= vis.length) return;\n this.moveColumn(vis[i].field, e.key === 'ArrowLeft' ? vis[j].field : (vis[j + 1]?.field ?? null));\n const again = head.querySelector<HTMLElement>(`[data-field=\"${CSS.escape(vis[i].field)}\"]`);\n (again?.querySelector<HTMLElement>('button') ?? again)?.focus();\n });\n }\n\n private paintSort() {\n const s = this.store.getSorters()[0];\n for (const cell of Array.from(this.headRow.children) as HTMLElement[]) {\n const on = !!s && cell.dataset.field === s.field;\n cell.classList.toggle('is-sorted-asc', on && s.dir === 'asc');\n cell.classList.toggle('is-sorted-desc', on && s.dir === 'desc');\n if (cell.classList.contains('is-sortable')) cell.setAttribute('aria-sort', on ? (s.dir === 'asc' ? 'ascending' : 'descending') : 'none');\n }\n }\n\n /** asc \u2192 desc \u2192 unsorted. */\n private sortBy(col: Column) {\n const s = this.store.getSorters()[0];\n const dir = s?.field === col.field ? (s.dir === 'asc' ? 'desc' : null) : 'asc';\n if (this.emit('before-sort', col.field, dir) === false) return;\n this.store.sort(dir ? col.field : null, dir ?? undefined);\n this.emit('sort', col.field, dir);\n }\n\n // ---- rows ----------------------------------------------------------------------------------\n\n private rowIndexOffset(): number {\n return this.store.pageSize ? (this.store.page - 1) * this.store.pageSize : 0;\n }\n\n private renderRow(row: HTMLElement, i: number) {\n const entry = this.getRowEntry(i);\n if (!entry) return;\n const rec = entry.rec;\n const cols = this.cols();\n row.id = `${this.id}-r${i}`;\n row.dataset.i = String(i);\n row.setAttribute('role', 'row');\n row.setAttribute('aria-rowindex', String(this.rowIndexOffset() + i + 2));\n const sel = !!rec && this.selected.has(rec);\n if (row.dataset.ec) row.classList.remove(...row.dataset.ec.split(' '));\n row.dataset.ec = entry.cls ?? '';\n if (entry.cls) row.classList.add(...entry.cls.split(' '));\n for (const [a, v] of [['aria-level', entry.level], ['aria-expanded', entry.expanded]] as const) {\n if (v == null) row.removeAttribute(a);\n else row.setAttribute(a, String(v));\n }\n row.setAttribute('aria-selected', this.mode() === 'none' || !rec ? 'false' : String(sel));\n row.classList.toggle('is-selected', sel);\n row.classList.toggle('is-active', i === this.active);\n row.classList.toggle('is-odd', i % 2 === 1);\n if (row.dataset.cv !== String(this.cv) || row.dataset.cn !== String(cols.length)) {\n row.dataset.cv = String(this.cv);\n row.dataset.cn = String(cols.length);\n row.replaceChildren(\n ...cols.map((c, n) => {\n const cell = h('div', `op-grid__cell${c.align ? ` op-grid__cell--${c.align}` : ''}${c.cls ? ` ${c.cls}` : ''}`, { role: 'gridcell', 'aria-colindex': n + 1 });\n this.lock(cell, c, n);\n return cell;\n }),\n );\n }\n const cells = (Array.from(row.children) as HTMLElement[]).filter((c) => c.classList.contains('op-grid__cell')); // a plugin may add its own child (an edit bar)\n if (!rec) {\n for (const cell of cells) cell.replaceChildren();\n return entry.paint?.(cells, row);\n }\n cols.forEach((c, n) => {\n const cell = row.children[n] as HTMLElement;\n if (cell.classList.contains('is-editing')) return; // an editor plugin owns this cell until it finishes\n if (c.field === SEL) {\n const box = (cell.firstElementChild as HTMLInputElement | null) ?? cell.appendChild(h('input', 'op-grid__check', { type: 'checkbox', tabindex: -1, 'aria-label': t('gridSelectRow') }));\n box.checked = sel;\n return;\n }\n if (c.field === ACT) {\n const acts = this.config.rowActions ?? [];\n if (!this.visibleActions()) {\n if (!cell.firstChild) cell.append(h('button', 'op-grid__actbtn', { type: 'button', tabindex: -1, 'aria-label': t('gridRowActions'), 'aria-haspopup': 'menu' }, iconEl('more')));\n return;\n }\n if (cell.children.length !== acts.length || (cell.firstElementChild as HTMLElement | null)?.dataset.a == null) {\n cell.replaceChildren(...acts.map((a, k) => h('button', `op-grid__actbtn${a.variant === 'danger' ? ' is-danger' : ''}`, { type: 'button', tabindex: -1, 'data-a': k, 'aria-label': a.text, title: a.text }, a.icon ? iconEl(a.icon) : a.text)));\n }\n acts.forEach((a, k) => ((cell.children[k] as HTMLButtonElement).disabled = !!a.disabled?.(rec)));\n return;\n }\n const content = cellContent(c, rec);\n if (typeof content === 'string') cell.textContent = content;\n else cell.replaceChildren(content);\n });\n entry.paint?.(cells, row);\n }\n\n private indexOfEvent(e: Event): number {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__body-row');\n return row ? Number(row.dataset.i) : -1;\n }\n\n private onRowEvent(e: MouseEvent, name: string) {\n const i = this.indexOfEvent(e);\n const rec = this.recAt(i);\n if (!rec) return;\n if (name === 'row-click') {\n const btn = (e.target as HTMLElement).closest<HTMLButtonElement>('.op-grid__actbtn');\n if (btn) {\n if (btn.dataset.a == null) return this.openRowMenu(rec, btn);\n if (!btn.disabled) this.config.rowActions![Number(btn.dataset.a)].handler(rec, this);\n return;\n }\n this.setActive(i, false);\n this.pick(i, e);\n }\n this.emit(name, rec, i, e);\n }\n\n // ---- selection / keyboard ------------------------------------------------------------------\n\n getSelection(): Model<T>[] {\n return [...this.selected];\n }\n\n /** Selects a record or row index. `add` keeps the current selection (multi mode). */\n select(target: Model<T> | number, opts: { add?: boolean } = {}): void {\n const rec = typeof target === 'number' ? this.recAt(target) : target;\n const mode = this.mode();\n if (!rec || mode === 'none') return;\n if (mode === 'single' || !opts.add) this.selected.clear();\n this.selected.add(rec);\n this.changed();\n }\n\n deselectAll(): void {\n if (!this.selected.size) return;\n this.selected.clear();\n this.changed();\n }\n\n private changed() {\n this.v?.refresh();\n this.paintSelection();\n this.emit('select', this.getSelection());\n }\n\n /** Selects every record that matches the filters, across pages (a remote store: the loaded page). */\n selectAllFiltered(): void {\n if (this.mode() !== 'multi') return;\n for (const r of this.store.getFiltered()) this.selected.add(r);\n this.changed();\n }\n\n /** Click semantics: plain = replace, ctrl/meta = toggle, shift = range from the anchor (multi only). */\n private pick(i: number, e: { ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean }) {\n const mode = this.mode();\n const rec = this.recAt(i);\n if (!rec || mode === 'none') return;\n if (mode === 'multi' && e.shiftKey && this.anchor >= 0) {\n if (!this.config.checkboxSelection) this.selected.clear();\n for (let k = Math.min(this.anchor, i); k <= Math.max(this.anchor, i); k++) {\n const r = this.recAt(k);\n if (r) this.selected.add(r);\n }\n } else if (mode === 'multi' && (e.ctrlKey || e.metaKey || this.config.checkboxSelection)) {\n if (!this.selected.delete(rec)) this.selected.add(rec);\n this.anchor = i;\n } else {\n this.selected.clear();\n this.selected.add(rec);\n this.anchor = i;\n }\n this.changed();\n }\n\n private setActive(i: number, scroll = true) {\n this.active = i;\n if (scroll && i >= 0) this.v.scrollTo(i);\n this.v.refresh();\n this.updateActiveDescendant();\n }\n\n private updateActiveDescendant() {\n if (this.active >= 0 && this.active < this.count()) this.table.setAttribute('aria-activedescendant', `${this.id}-r${this.active}`);\n else this.table.removeAttribute('aria-activedescendant');\n }\n\n focusRow(i: number) {\n this.render();\n this.setActive(Math.max(0, Math.min(i, this.count() - 1)));\n this.table.focus();\n }\n\n protected override focusEl(): HTMLElement {\n return this.table;\n }\n\n scrollToRow(i: number) {\n this.v?.scrollTo(i);\n }\n\n private onKey(e: KeyboardEvent) {\n const target = e.target as HTMLElement;\n if (target.closest('.op-grid__header')) return; // header buttons keep their own keys\n if (target !== this.table && target.matches('input:not([type=checkbox]),textarea,select,[contenteditable]')) return; // an editor in a cell keeps its keys\n const n = this.count();\n if (!n) return;\n if ((e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) && this.active >= 0 && this.config.rowActions?.length) {\n e.preventDefault();\n const arec = this.recAt(this.active);\n if (!arec) return;\n return this.openRowMenu(arec, document.getElementById(`${this.id}-r${this.active}`) ?? this.el);\n }\n const page = Math.max(1, Math.floor((this.viewport.clientHeight || 400) / this.config.rowHeight! || 10));\n const cur = this.active < 0 ? 0 : this.active;\n const mode = this.mode();\n const targets: Record<string, number> = {\n ArrowDown: Math.min(n - 1, this.active < 0 ? 0 : cur + 1),\n ArrowUp: Math.max(0, cur - 1),\n Home: 0,\n End: n - 1,\n PageDown: Math.min(n - 1, cur + page),\n PageUp: Math.max(0, cur - page),\n };\n if (e.key in targets) {\n e.preventDefault();\n const to = targets[e.key];\n this.setActive(to);\n if (mode === 'single' || (mode === 'multi' && !e.ctrlKey && !e.metaKey && !this.config.checkboxSelection)) this.pick(to, e);\n } else if (e.key === ' ' && this.active >= 0) {\n e.preventDefault();\n if (mode === 'multi') this.pick(this.active, { ctrlKey: true });\n else this.pick(this.active, e);\n } else if (e.key === 'Enter' && this.active >= 0) {\n this.emit('row-activate', this.recAt(this.active), this.active);\n } else if ((e.key === 'a' || e.key === 'A') && (e.ctrlKey || e.metaKey) && mode === 'multi') {\n e.preventDefault();\n this.store.each((r) => this.selected.add(r));\n this.changed();\n }\n }\n\n refresh() {\n this.v?.refresh();\n }\n\n // ---- bar: bulk actions and the column menu ------------------------------------------------\n\n private buildBar() {\n const c = this.config;\n if (!this.barEl) return;\n this.bulkCount = h('span', 'op-grid__count', { 'aria-live': 'polite' });\n this.selectAllBtn = new Button({ text: '', variant: 'ghost', handler: () => this.selectAllFiltered() });\n this.bulkBtns = (c.bulkActions ?? []).map((a) => new Button({ text: a.text, icon: a.icon, variant: a.variant === 'danger' ? 'danger' : 'default', handler: () => a.handler(this.getSelection(), this) }));\n const clear = new Button({ text: t('gridClearSel'), variant: 'ghost', handler: () => this.deselectAll() });\n this.bulkEl!.append(this.bulkCount, this.selectAllBtn.el, ...this.bulkBtns.map((b) => b.el), clear.el);\n this.own(() => [this.selectAllBtn, ...this.bulkBtns, clear].forEach((b) => b?.destroy()));\n if (c.columnMenu) this.buildColumnMenu();\n this.paintSelection();\n }\n\n /** Header checkbox state and the bulk bar, from the current selection. */\n private paintSelection() {\n if (!this.rendered) return;\n const n = this.store.count;\n let k = 0;\n this.store.each((r) => this.selected.has(r) && k++);\n if (this.selAll) {\n this.selAll.checked = n > 0 && k === n;\n this.selAll.indeterminate = k > 0 && k < n;\n }\n if (!this.bulkEl) return;\n const size = this.selected.size;\n this.bulkEl.hidden = !size || !this.config.bulkActions?.length;\n if (this.bulkEl.hidden) return;\n this.bulkCount!.textContent = t('gridSelected', { n: size });\n const more = this.store.getFiltered().length;\n this.selectAllBtn!.el.hidden = !(this.mode() === 'multi' && k === n && more > n && size < more);\n this.selectAllBtn!.setText(t('gridSelectAll', { n: more }));\n }\n\n private openRowMenu(rec: Model<T>, btn: HTMLElement) {\n this.rowMenu ??= new Menu({});\n this.rowMenu.setItems((this.config.rowActions ?? []).map((a) => ({ text: a.text, icon: a.icon, disabled: !!a.disabled?.(rec), handler: () => a.handler(rec, this) })));\n this.rowMenu.showBy(btn);\n }\n private buildColumnMenu() {\n const btn = new Button({ text: t('gridColumns'), icon: 'columns', variant: 'ghost' });\n this.colSearch = new TextField({ placeholder: t('gridColumnSearch'), clearable: true });\n this.colChips = h('div', 'op-grid__colchips', { role: 'group', 'aria-label': t('gridGroups') });\n this.colList = h('div', 'op-grid__collist', { role: 'group', 'aria-label': t('gridColumns') });\n const none = h('div', 'op-grid__colempty', {}, t('gridNoColumns'));\n none.hidden = true;\n const panel = h('div', 'op-grid__colmenu', {}, this.colSearch.el, this.colChips, this.colList, none);\n this.colDd = new Dropdown({ anchor: btn.el, content: panel, placement: 'bottom-end', role: 'dialog', autoFocus: false });\n this.barEl!.append(btn.el);\n this.own(() => btn.destroy());\n /** Search text and the group chip decide what is listed; a search that names a group shows the whole group. */\n const filter = () => {\n const q = (this.colSearch!.getValue() ?? '').toLowerCase();\n let shown = 0;\n let head: HTMLElement | undefined;\n let rowsInGroup = 0;\n const closeGroup = () => head && (head.hidden = rowsInGroup === 0);\n for (const el of Array.from(this.colList!.children) as HTMLElement[]) {\n if (el.classList.contains('op-grid__colgroup')) {\n closeGroup();\n head = el;\n rowsInGroup = 0;\n continue;\n }\n const g = el.dataset.group ?? '';\n const byChip = !this.colGroup || g === this.colGroup;\n const byText = !q || g.toLowerCase().includes(q) || el.textContent!.toLowerCase().includes(q);\n el.hidden = !(byChip && byText);\n if (!el.hidden) (shown++, rowsInGroup++);\n }\n closeGroup();\n none.hidden = shown > 0;\n };\n this.colSearch.on('change', filter);\n this.listen(this.colChips, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('[data-g]');\n if (!b) return;\n this.colGroup = b.dataset.g!;\n this.paintColumnList();\n filter();\n });\n btn.on('click', () => {\n if (this.colDd!.isOpen()) return this.colDd!.close();\n this.colSearch!.setValue('');\n this.colGroup = '';\n this.paintColumnList();\n this.colDd!.open();\n this.colList!.querySelector<HTMLElement>('input')?.focus(); // not the search field: a phone keyboard would cover the list\n });\n this.listen(this.colList, 'change', (e: Event) => {\n const input = e.target as HTMLInputElement;\n if (input.dataset.groupToggle != null) this.setColumnGroupVisible(input.dataset.groupToggle, input.checked);\n else {\n const col = this.config.columns.find((x) => x.field === input.value);\n if (!col) return;\n col.hidden = !input.checked;\n this.setColumns(this.config.columns);\n this.emit('columns-change', this.getColumnState());\n }\n this.paintColumnList();\n filter();\n });\n }\n\n private paintColumnList() {\n const cols = this.config.columns;\n const groups = this.getColumnGroups();\n const last = this.userCols().length === 1 ? this.userCols()[0] : null; // at least one column stays visible\n const row = (c: Column) => {\n const box = h('input', 'op-grid__check', { type: 'checkbox', value: c.field });\n box.checked = !c.hidden;\n box.disabled = c === last;\n return h('label', 'op-grid__colitem', { 'data-group': c.group ?? '' }, box, h('span', '', {}, c.header ?? c.field));\n };\n this.colChips!.hidden = groups.length < 2;\n this.colChips!.replaceChildren(...[['', t('gridGroupAll')], ...groups.map((g) => [g, g])].map(([g, label]) => h('button', `op-grid__colchip${this.colGroup === g ? ' is-on' : ''}`, { type: 'button', 'data-g': g, 'aria-pressed': String(this.colGroup === g) }, label)));\n if (!groups.length) return this.colList!.replaceChildren(...cols.map(row));\n const out: HTMLElement[] = [];\n for (const g of [...groups, '']) {\n const items = cols.filter((c) => (c.group ?? '') === g);\n if (!items.length) continue;\n const on = items.filter((c) => !c.hidden).length;\n const toggle = h('input', 'op-grid__check', { type: 'checkbox', 'data-group-toggle': g, 'aria-label': g || t('gridOtherCols') });\n toggle.checked = on === items.length;\n toggle.indeterminate = on > 0 && on < items.length;\n out.push(h('div', 'op-grid__colgroup', { 'data-group': g }, h('label', '', {}, toggle, h('span', '', {}, g || t('gridOtherCols'))), h('span', 'op-grid__colcount', {}, `${on}/${items.length}`)), ...items.map(row));\n }\n this.colList!.replaceChildren(...out);\n }\n\n protected override onDestroy() {\n this.pager?.destroy();\n this.rowMenu?.destroy();\n this.colDd?.destroy();\n this.colSearch?.destroy();\n }\n}\nregister('grid', Grid);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "SEL", "ACT", "SEL_COL", "ACT_COL", "ROW", "Grid", "Component", "c", "vis", "gate", "col", "allowed", "el", "h", "Pagination", "Store", "virtualize", "measure", "row", "e", "r", "cell", "x", "ro", "p", "off", "node", "index", "column", "record", "field", "n", "v", "end", "hgt", "store", "offChange", "offLoading", "on", "before", "t", "i", "rows", "rec", "cols", "wide", "px", "tpl", "sums", "list", "acc", "at", "sum", "label", "iconEl", "user", "band", "cells", "g", "group", "visible", "locked", "columns", "state", "by", "ordered", "width", "head", "grip", "x0", "w0", "last", "move", "m", "w", "up", "from", "next", "target", "lastVis", "cellsOf", "ghost", "mark", "hit", "hr", "j", "again", "s", "dir", "entry", "sel", "a", "box", "acts", "k", "content", "cellContent", "name", "btn", "opts", "mode", "scroll", "arec", "page", "cur", "targets", "to", "Button", "clear", "b", "size", "more", "Menu", "TextField", "none", "panel", "Dropdown", "filter", "q", "shown", "rowsInGroup", "closeGroup", "byChip", "byText", "input", "groups", "out", "items", "toggle", "register"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as o}from"./chunk-TIPK3SCJ.js";import{f as i}from"./chunk-UDXO3KM3.js";var t=class extends i{baseCls="op-spacer";tag="span";onRender(){let e=this.config;e.width==null&&e.flex==null&&!e.line&&(this.el.style.flex="1"),this.setLine(!!e.line)}setLine(e){this.config.line=e,this.rendered&&(this.el.classList.toggle("op-spacer--line",e),e?this.el.setAttribute("role","separator"):this.el.setAttribute("aria-hidden","true"),e&&this.el.removeAttribute("aria-hidden"))}};o("spacer",t);export{t as a};
2
- //# sourceMappingURL=chunk-SEW5OCQF.js.map
1
+ import{a as o}from"./chunk-TIPK3SCJ.js";import{f as i}from"./chunk-KMBTJ5AG.js";var t=class extends i{baseCls="op-spacer";tag="span";onRender(){let e=this.config;e.width==null&&e.flex==null&&!e.line&&(this.el.style.flex="1"),this.setLine(!!e.line)}setLine(e){this.config.line=e,this.rendered&&(this.el.classList.toggle("op-spacer--line",e),e?this.el.setAttribute("role","separator"):this.el.setAttribute("aria-hidden","true"),e&&this.el.removeAttribute("aria-hidden"))}};o("spacer",t);export{t as a};
2
+ //# sourceMappingURL=chunk-6IXVTWFH.js.map
@@ -1,4 +1,4 @@
1
- import{a as b}from"./chunk-HLS5FI55.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-UDXO3KM3.js";import{b as r}from"./chunk-PZSHOSOS.js";import{e as g,f as p}from"./chunk-S4QD5NID.js";g("en",{codeCopy:"Copy",codeCopied:"Copied"});g("pt-BR",{codeCopy:"Copiar",codeCopied:"Copiado"});var w={ts:"TypeScript",js:"JavaScript",json:"JSON",css:"CSS",html:"HTML",sh:"Shell",text:"Text"},y="import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined",c=`'(?:[^'\\\\\\n]|\\\\.)*'|"(?:[^"\\\\\\n]|\\\\.)*"`,l={ts:[new RegExp(`(\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?\\*\\/)|(${c}|\`(?:[^\`\\\\]|\\\\.)*\`)|\\b(${y})\\b|\\b(\\d+(?:\\.\\d+)?)\\b`,"g"),["comment","string","keyword","number"]],js:[/./g,[]],json:[new RegExp(`("(?:[^"\\\\\\n]|\\\\.)*")(?=\\s*:)|(${c})|\\b(true|false|null)\\b|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)`,"g"),["property","string","keyword","number"]],css:[new RegExp(`(\\/\\*[\\s\\S]*?\\*\\/)|(${c})|(@[\\w-]+)|([\\w-]+)(?=\\s*:[^:{;]*[;}\\n])|(#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:%|[a-z]+)?)`,"g"),["comment","string","keyword","property","number"]],html:[new RegExp(`(<!--[\\s\\S]*?-->)|(<\\/?[\\w-]+|\\/?>)|([\\w:-]+)(?==)|(${c})`,"g"),["comment","tag","attr","string"]],sh:[new RegExp(`(#[^\\n]*)|(${c})|\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\b|(\\$\\{?[\\w]+\\}?|--?[\\w-]+)`,"g"),["comment","string","keyword","attr"]]};l.js=l.ts;function x(s,e="ts"){if(e==="text"||!l[e])return[["",s]];let[t,a]=l[e],i=[],n=0;for(let o of s.matchAll(t))o.index>n&&i.push(["",s.slice(n,o.index)]),i.push([a[o.slice(1).findIndex(d=>d!==void 0)]??"",o[0]]),n=o.index+o[0].length;return n<s.length&&i.push(["",s.slice(n)]),i}var v=s=>{if(Array.isArray(s))return new Set(s);let e=new Set;for(let t of(s??"").split(",")){let[a,i]=t.split("-").map(n=>Number(n.trim()));if(Number.isFinite(a))for(let n=a;n<=(Number.isFinite(i)?i:a);n++)e.add(n)}return e},u=class extends f{baseCls="op-codeviewer";titleEl;bar;pre;codeEl;status;copyBtn;build(){return this.titleEl=r("span","op-codeviewer__title"),this.copyBtn=new b({text:p("codeCopy"),icon:"file",variant:"ghost",handler:()=>{this.copy()}}),this.status=r("span","op-sr-only op-codeviewer__status",{"aria-live":"polite"}),this.bar=r("div","op-codeviewer__bar",{},this.titleEl,this.copyBtn.el,this.status),this.codeEl=r("code","op-codeviewer__code"),this.pre=r("pre","op-codeviewer__pre",{tabindex:0},this.codeEl),r("div","op-codeviewer",{},this.bar,this.pre)}onRender(){this.own(()=>this.copyBtn.destroy()),this.paintBar(),this.paintCode(),this.setWrap(!!this.config.wrap),this.setMaxHeight(this.config.maxHeight)}get language(){return this.config.language??"ts"}paintBar(){let e=this.config,t=e.title??w[this.language]??this.language;this.titleEl.textContent=t,this.pre.setAttribute("aria-label",t),this.bar.hidden=e.bar===!1,this.copyBtn.el.hidden=e.copyable===!1}paintCode(){let e=this.config,t=e.startLine??1,a=v(e.highlight),i=[r("span","op-codeviewer__line")];for(let[o,d]of x(e.code??"",this.language))d.split(`
1
+ import{a as b}from"./chunk-KVUELLYF.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-KMBTJ5AG.js";import{b as r}from"./chunk-PZSHOSOS.js";import{e as g,f as p}from"./chunk-S4QD5NID.js";g("en",{codeCopy:"Copy",codeCopied:"Copied"});g("pt-BR",{codeCopy:"Copiar",codeCopied:"Copiado"});var w={ts:"TypeScript",js:"JavaScript",json:"JSON",css:"CSS",html:"HTML",sh:"Shell",text:"Text"},y="import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined",c=`'(?:[^'\\\\\\n]|\\\\.)*'|"(?:[^"\\\\\\n]|\\\\.)*"`,l={ts:[new RegExp(`(\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?\\*\\/)|(${c}|\`(?:[^\`\\\\]|\\\\.)*\`)|\\b(${y})\\b|\\b(\\d+(?:\\.\\d+)?)\\b`,"g"),["comment","string","keyword","number"]],js:[/./g,[]],json:[new RegExp(`("(?:[^"\\\\\\n]|\\\\.)*")(?=\\s*:)|(${c})|\\b(true|false|null)\\b|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)`,"g"),["property","string","keyword","number"]],css:[new RegExp(`(\\/\\*[\\s\\S]*?\\*\\/)|(${c})|(@[\\w-]+)|([\\w-]+)(?=\\s*:[^:{;]*[;}\\n])|(#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:%|[a-z]+)?)`,"g"),["comment","string","keyword","property","number"]],html:[new RegExp(`(<!--[\\s\\S]*?-->)|(<\\/?[\\w-]+|\\/?>)|([\\w:-]+)(?==)|(${c})`,"g"),["comment","tag","attr","string"]],sh:[new RegExp(`(#[^\\n]*)|(${c})|\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\b|(\\$\\{?[\\w]+\\}?|--?[\\w-]+)`,"g"),["comment","string","keyword","attr"]]};l.js=l.ts;function x(s,e="ts"){if(e==="text"||!l[e])return[["",s]];let[t,a]=l[e],i=[],n=0;for(let o of s.matchAll(t))o.index>n&&i.push(["",s.slice(n,o.index)]),i.push([a[o.slice(1).findIndex(d=>d!==void 0)]??"",o[0]]),n=o.index+o[0].length;return n<s.length&&i.push(["",s.slice(n)]),i}var v=s=>{if(Array.isArray(s))return new Set(s);let e=new Set;for(let t of(s??"").split(",")){let[a,i]=t.split("-").map(n=>Number(n.trim()));if(Number.isFinite(a))for(let n=a;n<=(Number.isFinite(i)?i:a);n++)e.add(n)}return e},u=class extends f{baseCls="op-codeviewer";titleEl;bar;pre;codeEl;status;copyBtn;build(){return this.titleEl=r("span","op-codeviewer__title"),this.copyBtn=new b({text:p("codeCopy"),icon:"file",variant:"ghost",handler:()=>{this.copy()}}),this.status=r("span","op-sr-only op-codeviewer__status",{"aria-live":"polite"}),this.bar=r("div","op-codeviewer__bar",{},this.titleEl,this.copyBtn.el,this.status),this.codeEl=r("code","op-codeviewer__code"),this.pre=r("pre","op-codeviewer__pre",{tabindex:0},this.codeEl),r("div","op-codeviewer",{},this.bar,this.pre)}onRender(){this.own(()=>this.copyBtn.destroy()),this.paintBar(),this.paintCode(),this.setWrap(!!this.config.wrap),this.setMaxHeight(this.config.maxHeight)}get language(){return this.config.language??"ts"}paintBar(){let e=this.config,t=e.title??w[this.language]??this.language;this.titleEl.textContent=t,this.pre.setAttribute("aria-label",t),this.bar.hidden=e.bar===!1,this.copyBtn.el.hidden=e.copyable===!1}paintCode(){let e=this.config,t=e.startLine??1,a=v(e.highlight),i=[r("span","op-codeviewer__line")];for(let[o,d]of x(e.code??"",this.language))d.split(`
2
2
  `).forEach((h,C)=>{C&&i.push(r("span","op-codeviewer__line")),h&&i[i.length-1].append(o?r("span",`op-codeviewer__tok--${o}`,{},h):h)});i.forEach((o,d)=>{a.has(t+d)&&o.classList.add("is-marked"),d<i.length-1&&o.append(`
3
3
  `)}),this.codeEl.replaceChildren(...i);let n=e.lineNumbers!==!1;this.el.classList.toggle("has-numbers",n),this.codeEl.style.counterReset=`op-codeline ${t-1}`,this.codeEl.style.setProperty("--op-codeviewer-gutter",`${String(t+i.length-1).length}ch`)}getCode(){return this.config.code??""}async copy(){let e=this.getCode();try{await navigator.clipboard.writeText(e)}catch{let t=document.createRange();return t.selectNodeContents(this.codeEl),getSelection()?.removeAllRanges(),getSelection()?.addRange(t),!1}return this.copyBtn.setText(p("codeCopied")),this.copyBtn.setIcon("check"),this.status.textContent=p("codeCopied"),this.later(()=>{this.copyBtn.setText(p("codeCopy")),this.copyBtn.setIcon("file"),this.status.textContent=""},1600),this.emit("copy",e),!0}update(e,t=!1){Object.assign(this.config,e),this.rendered&&(t&&this.paintBar(),this.paintCode())}setCode(e){this.update({code:e})}setLanguage(e){this.update({language:e},!0)}setTitle(e){this.update({title:e},!0)}setLineNumbers(e){this.update({lineNumbers:e})}setStartLine(e){this.update({startLine:e})}setHighlight(e){this.update({highlight:e})}setWrap(e){this.config.wrap=e,this.rendered&&this.el.classList.toggle("is-wrapped",e)}setMaxHeight(e){this.config.maxHeight=e,this.rendered&&(this.pre.style.maxBlockSize=e==null?"":typeof e=="number"?`${e}px`:e)}};m("codeviewer",u);export{x as a,u as b};
4
- //# sourceMappingURL=chunk-NJ5IFOPR.js.map
4
+ //# sourceMappingURL=chunk-6S4BKUGD.js.map
@@ -1,2 +1,2 @@
1
- import{c as t}from"./chunk-BQEFLPDA.js";import{a as o}from"./chunk-TIPK3SCJ.js";var e,r=class extends t{baseCls="op-viewport";constructor(n={}){if(super(n),e&&!e.destroyed)throw new Error("Optikos: only one Viewport can exist at a time");e=this}onRender(){this.config.layout??="fit",super.onRender()}};o("viewport",r);export{r as a};
2
- //# sourceMappingURL=chunk-CWIE74NX.js.map
1
+ import{c as t}from"./chunk-U5RENLU4.js";import{a as o}from"./chunk-TIPK3SCJ.js";var e,r=class extends t{baseCls="op-viewport";constructor(n={}){if(super(n),e&&!e.destroyed)throw new Error("Optikos: only one Viewport can exist at a time");e=this}onRender(){this.config.layout??="fit",super.onRender()}};o("viewport",r);export{r as a};
2
+ //# sourceMappingURL=chunk-6VWSTY32.js.map
@@ -1,2 +1,2 @@
1
- import{c as x}from"./chunk-DIOJGTUN.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as c}from"./chunk-XR677UYD.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as n}from"./chunk-PZSHOSOS.js";var a=class extends d{baseCls="op-inputgroup";affixes=[];getField(){return this.query(i=>i instanceof c)[0]}onRender(){super.onRender(),this.paint();for(let i of["invalid","valid"])this.getField()?.on(i,()=>this.describe())}describe(){let i=this.getField()?.el.querySelector("[aria-invalid]");if(!i)return;let t=[...(i.getAttribute("aria-describedby")??"").split(" ").filter(r=>r&&!r.startsWith(`${this.id}-`)),...this.affixes.filter(r=>r.tagName==="SPAN").map(r=>r.id)];t.length?i.setAttribute("aria-describedby",t.join(" ")):i.removeAttribute("aria-describedby")}paint(){let i=this.getField();if(!i)return;this.affixes.forEach(e=>e.remove()),this.affixes=[];let o=i.el.querySelector(".op-field__control"),t=o.querySelector(":scope > .op-inputgroup__row");t||(t=n("div","op-inputgroup__row"),t.append(...Array.from(o.childNodes)),o.append(t));let r=(e,p)=>{if(typeof e=="string")return n("span",`op-inputgroup__affix op-inputgroup__affix--${p}`,{id:`${this.id}-${p}`},e);let u=n("button",`op-inputgroup__affix op-inputgroup__btn op-inputgroup__affix--${p}`,{type:"button","aria-label":e.ariaLabel??null},e.icon?x(e.icon):"",e.text?n("span","",{},e.text):"");return this.listen(u,"click",()=>e.handler?.(i)),u},{prefix:f,suffix:s}=this.config;f!=null&&t.prepend(this.track(r(f,"prefix"))),s!=null&&t.append(this.track(r(s,"suffix"))),i.el.classList.toggle("has-prefix",f!=null),i.el.classList.toggle("has-suffix",s!=null),this.describe()}track(i){return this.affixes.push(i),i}setPrefix(i){this.config.prefix=i,this.rendered&&this.paint()}setSuffix(i){this.config.suffix=i,this.rendered&&this.paint()}};l("inputgroup",a);export{a};
2
- //# sourceMappingURL=chunk-F4HZUAKM.js.map
1
+ import{c as x}from"./chunk-QT5JRZZJ.js";import{c as d}from"./chunk-U5RENLU4.js";import{a as c}from"./chunk-RI62AESU.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as n}from"./chunk-PZSHOSOS.js";var a=class extends d{baseCls="op-inputgroup";affixes=[];getField(){return this.query(i=>i instanceof c)[0]}onRender(){super.onRender(),this.paint();for(let i of["invalid","valid"])this.getField()?.on(i,()=>this.describe())}describe(){let i=this.getField()?.el.querySelector("[aria-invalid]");if(!i)return;let t=[...(i.getAttribute("aria-describedby")??"").split(" ").filter(r=>r&&!r.startsWith(`${this.id}-`)),...this.affixes.filter(r=>r.tagName==="SPAN").map(r=>r.id)];t.length?i.setAttribute("aria-describedby",t.join(" ")):i.removeAttribute("aria-describedby")}paint(){let i=this.getField();if(!i)return;this.affixes.forEach(e=>e.remove()),this.affixes=[];let o=i.el.querySelector(".op-field__control"),t=o.querySelector(":scope > .op-inputgroup__row");t||(t=n("div","op-inputgroup__row"),t.append(...Array.from(o.childNodes)),o.append(t));let r=(e,p)=>{if(typeof e=="string")return n("span",`op-inputgroup__affix op-inputgroup__affix--${p}`,{id:`${this.id}-${p}`},e);let u=n("button",`op-inputgroup__affix op-inputgroup__btn op-inputgroup__affix--${p}`,{type:"button","aria-label":e.ariaLabel??null},e.icon?x(e.icon):"",e.text?n("span","",{},e.text):"");return this.listen(u,"click",()=>e.handler?.(i)),u},{prefix:f,suffix:s}=this.config;f!=null&&t.prepend(this.track(r(f,"prefix"))),s!=null&&t.append(this.track(r(s,"suffix"))),i.el.classList.toggle("has-prefix",f!=null),i.el.classList.toggle("has-suffix",s!=null),this.describe()}track(i){return this.affixes.push(i),i}setPrefix(i){this.config.prefix=i,this.rendered&&this.paint()}setSuffix(i){this.config.suffix=i,this.rendered&&this.paint()}};l("inputgroup",a);export{a};
2
+ //# sourceMappingURL=chunk-72ESP5DB.js.map
@@ -0,0 +1,3 @@
1
+ import{b as S}from"./chunk-OK3SN5PN.js";import{a as A}from"./chunk-IE7KRNFJ.js";import{a as E}from"./chunk-BPCD37A2.js";import{c as T}from"./chunk-QT5JRZZJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{b as _}from"./chunk-IODSL7KU.js";import{b as L}from"./chunk-XFDNXSU5.js";import{e as h,f as c}from"./chunk-S4QD5NID.js";h("en",{ctActions:"Column actions: {col}",ctNone:"No total",ctSum:"Sum",ctAvg:"Average",ctMin:"Minimum",ctMax:"Maximum",ctCount:"Count",ctEarliest:"Earliest",ctLatest:"Latest",ctTotals:"Totals",ctResult:"{op} of {col}: {value}",ctRows:"{n} rows"});h("pt-BR",{ctActions:"A\xE7\xF5es da coluna: {col}",ctNone:"Sem total",ctSum:"Soma",ctAvg:"M\xE9dia",ctMin:"M\xEDnimo",ctMax:"M\xE1ximo",ctCount:"Contagem",ctEarliest:"Mais antiga",ctLatest:"Mais recente",ctTotals:"Totais",ctResult:"{op} de {col}: {value}",ctRows:"{n} linhas"});var O=["sum","avg","min","max","count"],k={sum:"ctSum",avg:"ctAvg",min:"ctMin",max:"ctMax",count:"ctCount"},I={number:O,date:["min","max","count"],text:["count"]},q=(i,s)=>{let n=s.map(m=>m.data[i.field]).find(m=>m!=null&&m!=="");return n instanceof Date||typeof n=="string"&&/^\d{4}-\d{2}-\d{2}/.test(n)?"date":typeof n=="number"||typeof n=="string"&&n.trim()!==""&&!isNaN(Number(n))?"number":"text"};function D(i={}){return{init(s){let n=d("div","op-columntotals",{role:"group","aria-label":c("ctTotals")});n.hidden=!0;let m=new E({}),g=s.getStore(),f=()=>g.getFiltered(),v=i.operations??[],b=t=>typeof t.summary=="function"?v.find(l=>l.run===t.summary)?.text:t.summary&&c(k[t.summary]),x=(t,l)=>{let e=_(t,l);return t.summaryRenderer?t.summaryRenderer(e,t):e==null?"":t.format&&typeof t.summary!="function"&&t.summary!=="count"?L(t.format,e):String(e)};function R(t,l){let e=f(),o={...t,summary:l},a=x(o,e),u=c("ctResult",{op:b(o)??"",col:t.header??t.field,value:typeof a=="string"?a:a.textContent??""}),r=c("ctRows",{n:e.length});i.show==="toast"?S({type:"info",title:u,text:r}):A.alert(`${u}
2
+ ${r}`,{title:c("ctTotals"),icon:"info"})}function p(){let t=s.getColumns();if(n.hidden=(i.show??"bar")!=="bar"||!t.some(o=>o.summary),n.hidden)return;let l=f(),e=o=>{let a=d("div","op-columntotals__cell"+(o?.align?` op-columntotals__cell--${o.align}`:""),C?{role:"gridcell"}:{});return o?.summary&&a.append(d("span","op-columntotals__op",{},b(o)??""),x(o,l)),a};n.replaceChildren(...s.config.checkboxSelection?[e()]:[],...t.map(e),...s.config.rowActions?.length?[e()]:[])}function N(t,l){let e=q(t,f()),o=i.show===void 0||i.show==="bar",a=r=>{if(!o)return R(t,r);t.summary=t.summary===r?void 0:r,p()},u=r=>o?t.summary===r:void 0;m.setItems([...I[e].map(r=>({text:e==="date"&&r!=="count"?c(r==="min"?"ctEarliest":"ctLatest"):c(k[r]),checked:u(r),handler:()=>a(r)})),...v.map(r=>({text:r.text,checked:u(r.run),handler:()=>a(r.run)})),...o?["-",{text:c("ctNone"),disabled:!t.summary,handler:()=>a(t.summary)}]:[]]),m.showBy(l)}function M(){let t=s.getColumns();for(let l of Array.from(s.el.querySelectorAll(".op-grid__hcell[data-field]"))){let e=t.find(a=>a.field===l.dataset.field);if(!e)continue;let o=d("button","op-columntotals__btn",{type:"button","aria-haspopup":"menu","aria-label":c("ctActions",{col:e.header??e.field})},T("more"));for(let a of["click","pointerdown","keydown"])o.addEventListener(a,u=>u.stopPropagation());o.addEventListener("click",()=>N(e,o)),l.append(o)}p()}let C=i.position==="top";C?(n.classList.add("op-columntotals--top"),n.setAttribute("role","row"),s.el.querySelector(".op-grid__header").after(n)):s.el.querySelector(".op-grid__table").after(n);let y=s.el.querySelector(".op-grid__viewport"),w=()=>n.scrollLeft=y.scrollLeft;y.addEventListener("scroll",w);let B=[s.on("header-paint",M),g.subscribe(p)];return M(),()=>{B.forEach(t=>t()),y.removeEventListener("scroll",w),m.destroy(),n.remove()}}}}export{D as a};
3
+ //# sourceMappingURL=chunk-74IVU356.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/columntotals/columntotals.ts"],
4
+ "sourcesContent": ["import { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { format } from '../../../data/format';\nimport { summarize, type Column } from '../../../data/column';\nimport type { Model } from '../../../data/model';\nimport { Menu } from '../../overlays/menu/menu';\nimport { MessageBox } from '../../overlays/messagebox/messagebox';\nimport { toast } from '../../overlays/toast/toast';\nimport { iconEl } from '../../base/icon/icon';\nimport type { Grid, GridPlugin } from '../grid/grid';\n\naddMessages('en', { ctActions: 'Column actions: {col}', ctNone: 'No total', ctSum: 'Sum', ctAvg: 'Average', ctMin: 'Minimum', ctMax: 'Maximum', ctCount: 'Count', ctEarliest: 'Earliest', ctLatest: 'Latest', ctTotals: 'Totals', ctResult: '{op} of {col}: {value}', ctRows: '{n} rows' });\naddMessages('pt-BR', { ctActions: 'A\u00E7\u00F5es da coluna: {col}', ctNone: 'Sem total', ctSum: 'Soma', ctAvg: 'M\u00E9dia', ctMin: 'M\u00EDnimo', ctMax: 'M\u00E1ximo', ctCount: 'Contagem', ctEarliest: 'Mais antiga', ctLatest: 'Mais recente', ctTotals: 'Totais', ctResult: '{op} de {col}: {value}', ctRows: '{n} linhas' });\n\n/** An operation offered in the column menu besides the built-in ones. */\nexport interface TotalOperation {\n text: string;\n /** The column's values and the records of every filtered row. */\n run: (values: any[], recs: Model[]) => unknown;\n}\n\nexport interface ColumnTotalsOptions {\n /** Your own operations (a median, a weighted mean...). Offered on every column. */\n operations?: TotalOperation[];\n /**\n * Where the answer goes: `'bar'` (default) keeps it in a bar under the grid; `'modal'` answers in a dialog and `'toast'` in a\n * notice, once, and nothing stays on the grid.\n */\n show?: 'bar' | 'modal' | 'toast';\n /** `bar` only: under the grid (default) or `'top'`, right under the header, above the rows (a row of the grid itself). */\n position?: 'bottom' | 'top';\n}\n\ntype Kind = 'number' | 'date' | 'text';\nconst BUILT_IN = ['sum', 'avg', 'min', 'max', 'count'] as const;\nconst LABEL = { sum: 'ctSum', avg: 'ctAvg', min: 'ctMin', max: 'ctMax', count: 'ctCount' } as const;\nconst FOR: Record<Kind, readonly (typeof BUILT_IN)[number][]> = { number: BUILT_IN, date: ['min', 'max', 'count'], text: ['count'] };\n\nconst kindOf = (col: Column, recs: Model[]): Kind => {\n const v = recs.map((r) => r.data[col.field]).find((x) => x != null && x !== '');\n if (v instanceof Date || (typeof v === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(v))) return 'date';\n return typeof v === 'number' || (typeof v === 'string' && v.trim() !== '' && !isNaN(Number(v))) ? 'number' : 'text';\n};\n\n/**\n * A button on every column header opens a menu of totals (sum, average, minimum, maximum, count, your own); the choice\n * shows in a bar under the grid, over every filtered row. A column's `summary` is where it starts and where it is kept.\n */\nexport function columnTotals(options: ColumnTotalsOptions = {}): GridPlugin {\n return {\n init(grid: Grid) {\n const bar = h('div', 'op-columntotals', { role: 'group', 'aria-label': t('ctTotals') });\n bar.hidden = true;\n const menu = new Menu({});\n const store = grid.getStore();\n const rows = () => store.getFiltered();\n const custom = options.operations ?? [];\n const active = (col: Column) => (typeof col.summary === 'function' ? custom.find((o) => o.run === col.summary)?.text : col.summary && t(LABEL[col.summary as keyof typeof LABEL]));\n\n const valueOf = (c: Column, recs: Model[]) => {\n const v = summarize(c, recs);\n return c.summaryRenderer ? c.summaryRenderer(v, c) : v == null ? '' : c.format && typeof c.summary !== 'function' && c.summary !== 'count' ? format(c.format, v) : String(v);\n };\n\n /** `modal` and `toast`: the answer for one choice, without touching the column. */\n function announce(col: Column, summary: Column['summary']) {\n const recs = rows();\n const once = { ...col, summary };\n const value = valueOf(once, recs);\n const text = t('ctResult', { op: active(once) ?? '', col: col.header ?? col.field, value: typeof value === 'string' ? value : value.textContent ?? '' });\n const detail = t('ctRows', { n: recs.length });\n if (options.show === 'toast') toast({ type: 'info', title: text, text: detail });\n else void MessageBox.alert(`${text}\\n${detail}`, { title: t('ctTotals'), icon: 'info' });\n }\n\n function paintBar() {\n const cols = grid.getColumns();\n bar.hidden = (options.show ?? 'bar') !== 'bar' || !cols.some((c) => c.summary);\n if (bar.hidden) return;\n const recs = rows();\n const cell = (c?: Column) => {\n const el = h('div', 'op-columntotals__cell' + (c?.align ? ` op-columntotals__cell--${c.align}` : ''), top ? { role: 'gridcell' } : {});\n if (c?.summary) el.append(h('span', 'op-columntotals__op', {}, active(c) ?? ''), valueOf(c, recs));\n return el;\n };\n bar.replaceChildren(...(grid.config.checkboxSelection ? [cell()] : []), ...cols.map(cell), ...(grid.config.rowActions?.length ? [cell()] : []));\n }\n\n function open(col: Column, btn: HTMLElement) {\n const kind = kindOf(col, rows());\n const bar_ = options.show === undefined || options.show === 'bar';\n const pick = (summary: Column['summary']) => {\n if (!bar_) return announce(col, summary);\n col.summary = col.summary === summary ? undefined : summary;\n paintBar();\n };\n const checked = (summary: Column['summary']) => (bar_ ? col.summary === summary : undefined);\n menu.setItems([\n ...FOR[kind].map((op) => ({ text: kind === 'date' && op !== 'count' ? t(op === 'min' ? 'ctEarliest' : 'ctLatest') : t(LABEL[op]), checked: checked(op), handler: () => pick(op) })),\n ...custom.map((o) => ({ text: o.text, checked: checked(o.run), handler: () => pick(o.run) })),\n ...(bar_ ? ['-', { text: t('ctNone'), disabled: !col.summary, handler: () => pick(col.summary) }] : []),\n ]);\n menu.showBy(btn);\n }\n\n function paintHeader() {\n const cols = grid.getColumns();\n for (const cell of Array.from(grid.el.querySelectorAll<HTMLElement>('.op-grid__hcell[data-field]'))) {\n const col = cols.find((c) => c.field === cell.dataset.field);\n if (!col) continue;\n const btn = h('button', 'op-columntotals__btn', { type: 'button', 'aria-haspopup': 'menu', 'aria-label': t('ctActions', { col: col.header ?? col.field }) }, iconEl('more'));\n // the header cell sorts and drags: the button must not start either\n for (const ev of ['click', 'pointerdown', 'keydown']) btn.addEventListener(ev, (e) => e.stopPropagation());\n btn.addEventListener('click', () => open(col, btn));\n cell.append(btn);\n }\n paintBar();\n }\n\n const top = options.position === 'top';\n if (top) {\n bar.classList.add('op-columntotals--top');\n bar.setAttribute('role', 'row');\n grid.el.querySelector('.op-grid__header')!.after(bar);\n } else grid.el.querySelector('.op-grid__table')!.after(bar);\n const viewport = grid.el.querySelector<HTMLElement>('.op-grid__viewport')!;\n const follow = () => (bar.scrollLeft = viewport.scrollLeft);\n viewport.addEventListener('scroll', follow);\n const offs = [grid.on('header-paint', paintHeader), store.subscribe(paintBar)];\n paintHeader();\n return () => {\n offs.forEach((off) => off());\n viewport.removeEventListener('scroll', follow);\n menu.destroy();\n bar.remove();\n };\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "BUILT_IN", "LABEL", "FOR", "kindOf", "col", "recs", "v", "r", "x", "columnTotals", "options", "grid", "bar", "h", "t", "menu", "Menu", "store", "rows", "custom", "active", "o", "valueOf", "c", "summarize", "format", "announce", "summary", "once", "value", "text", "detail", "toast", "MessageBox", "paintBar", "cols", "cell", "el", "top", "open", "btn", "kind", "bar_", "pick", "checked", "op", "paintHeader", "iconEl", "ev", "e", "viewport", "follow", "offs", "off"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as s,b as f}from"./chunk-34KVSA2V.js";import{a as E}from"./chunk-DY3ZYMXD.js";import{a as m}from"./chunk-KVUELLYF.js";import{a as g}from"./chunk-QT5JRZZJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{e as p,f as a}from"./chunk-S4QD5NID.js";p("en",{ebCsv:"Export CSV",ebXlsx:"Export Excel",ebPage:"Export this page (CSV)",ebPrint:"Print",ebActions:"Export and print"});p("pt-BR",{ebCsv:"Exportar CSV",ebXlsx:"Exportar Excel",ebPage:"Exportar esta p\xE1gina (CSV)",ebPrint:"Imprimir",ebActions:"Exportar e imprimir"});g({download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3"/>',printer:'<path d="M6 9V2h12v7M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2M6 14h12v8H6z"/>',table:'<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M3 15h18M9 3v18"/>'});var u={csv:"download",xlsx:"table",page:"file",print:"printer"},B={csv:"ebCsv",xlsx:"ebXlsx",page:"ebPage",print:"ebPrint"},P={csv:"CSV",xlsx:"Excel",page:"1",print:""};function G(n={}){let r=new Map,l=()=>{};return{init(e){let o=n.filename??"export",c={csv:()=>s(e,{filename:o}),xlsx:()=>s(e,{format:"xlsx",filename:o}),page:()=>s(e,{scope:"page",filename:o}),print:()=>f(e,{title:n.title})},x=d("div","op-exportbar op-footer-group",{role:"group","aria-label":a("ebActions")});for(let t of Object.keys(c)){let h=n[t]??(t!=="page"||!!e.config.paging),b=a(B[t]),i=new m({icon:u[t],variant:"ghost",ariaLabel:b,tooltip:b,hidden:!h,text:n.labels?t==="page"?a("ebPage"):t==="print"?a("ebPrint"):P[t]:void 0,handler:async()=>{i.setDisabled(!0);try{await c[t]()}finally{i.setDisabled(!1)}}});i.mount(x),r.set(t,i)}let v=E(e,x);return l=()=>{v(),r.forEach(t=>t.destroy()),r.clear()},()=>l()},setVisible:(e,o)=>r.get(e)?.[o?"show":"hide"](),setDisabled:(e,o)=>r.get(e)?.setDisabled(o)}}export{G as a};
2
+ //# sourceMappingURL=chunk-76A4MY7P.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/exportbar/exportbar.ts"],
4
+ "sourcesContent": ["import { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { Button } from '../../base/button/button';\nimport { registerIcons } from '../../base/icon/icon';\nimport { exportGrid, printGrid } from '../gridexport/gridexport';\nimport { addFooterGroup } from '../grid/footer';\nimport type { Grid, GridPlugin } from '../grid/grid';\n\naddMessages('en', { ebCsv: 'Export CSV', ebXlsx: 'Export Excel', ebPage: 'Export this page (CSV)', ebPrint: 'Print', ebActions: 'Export and print' });\naddMessages('pt-BR', { ebCsv: 'Exportar CSV', ebXlsx: 'Exportar Excel', ebPage: 'Exportar esta p\u00E1gina (CSV)', ebPrint: 'Imprimir', ebActions: 'Exportar e imprimir' });\n\nregisterIcons({\n download: '<path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3\"/>',\n printer: '<path d=\"M6 9V2h12v7M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2M6 14h12v8H6z\"/>',\n table: '<rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M3 9h18M3 15h18M9 3v18\"/>',\n});\n\nexport type ExportBarAction = 'csv' | 'xlsx' | 'page' | 'print';\n\nexport interface ExportBarOptions {\n /** Each button: `false` leaves it out. `csv`, `xlsx` and `print` default to true; `page` (CSV of the page on screen) to true on a paged grid. */\n csv?: boolean;\n xlsx?: boolean;\n page?: boolean;\n print?: boolean;\n /** File name without extension. Default `export`. */\n filename?: string;\n /** A heading above the printed table. */\n title?: string;\n /** Show the text beside the icons. Default false (icons with a tooltip). */\n labels?: boolean;\n}\n\nexport interface ExportBar extends GridPlugin {\n setVisible(action: ExportBarAction, visible: boolean): void;\n setDisabled(action: ExportBarAction, disabled: boolean): void;\n}\n\nconst ICON = { csv: 'download', xlsx: 'table', page: 'file', print: 'printer' } as const;\nconst TEXT = { csv: 'ebCsv', xlsx: 'ebXlsx', page: 'ebPage', print: 'ebPrint' } as const;\nconst SHORT = { csv: 'CSV', xlsx: 'Excel', page: '1', print: '' } as const;\n\n/**\n * Export and print buttons inside the grid, in a row with the pager: `plugins: [exportBar({ print: false })]`. They run\n * `exportGrid` and `printGrid`, which still work on their own from your own buttons.\n */\nexport function exportBar(options: ExportBarOptions = {}): ExportBar {\n const buttons = new Map<ExportBarAction, Button>();\n let cleanup = () => {};\n return {\n init(grid: Grid) {\n const name = options.filename ?? 'export';\n const run: Record<ExportBarAction, () => Promise<unknown>> = {\n csv: () => exportGrid(grid, { filename: name }),\n xlsx: () => exportGrid(grid, { format: 'xlsx', filename: name }),\n page: () => exportGrid(grid, { scope: 'page', filename: name }),\n print: () => printGrid(grid, { title: options.title }),\n };\n const group = h('div', 'op-exportbar op-footer-group', { role: 'group', 'aria-label': t('ebActions') });\n for (const action of Object.keys(run) as ExportBarAction[]) {\n const on = options[action] ?? (action !== 'page' || !!grid.config.paging);\n const label = t(TEXT[action]);\n const btn = new Button({\n icon: ICON[action], variant: 'ghost', ariaLabel: label, tooltip: label, hidden: !on,\n text: options.labels ? (action === 'page' ? t('ebPage') : action === 'print' ? t('ebPrint') : SHORT[action]) : undefined,\n handler: async () => {\n btn.setDisabled(true);\n try {\n await run[action]();\n } finally {\n btn.setDisabled(false);\n }\n },\n });\n btn.mount(group);\n buttons.set(action, btn);\n }\n const leave = addFooterGroup(grid, group);\n cleanup = () => {\n leave();\n buttons.forEach((b) => b.destroy());\n buttons.clear();\n };\n return () => cleanup();\n },\n setVisible: (action, visible) => buttons.get(action)?.[visible ? 'show' : 'hide'](),\n setDisabled: (action, disabled) => buttons.get(action)?.setDisabled(disabled),\n };\n}\n"],
5
+ "mappings": "8PAQAA,EAAY,KAAM,CAAE,MAAO,aAAc,OAAQ,eAAgB,OAAQ,yBAA0B,QAAS,QAAS,UAAW,kBAAmB,CAAC,EACpJA,EAAY,QAAS,CAAE,MAAO,eAAgB,OAAQ,iBAAkB,OAAQ,gCAA8B,QAAS,WAAY,UAAW,qBAAsB,CAAC,EAErKC,EAAc,CACZ,SAAU,6EACV,QAAS,iHACT,MAAO,qFACT,CAAC,EAuBD,IAAMC,EAAO,CAAE,IAAK,WAAY,KAAM,QAAS,KAAM,OAAQ,MAAO,SAAU,EACxEC,EAAO,CAAE,IAAK,QAAS,KAAM,SAAU,KAAM,SAAU,MAAO,SAAU,EACxEC,EAAQ,CAAE,IAAK,MAAO,KAAM,QAAS,KAAM,IAAK,MAAO,EAAG,EAMzD,SAASC,EAAUC,EAA4B,CAAC,EAAc,CACnE,IAAMC,EAAU,IAAI,IAChBC,EAAU,IAAM,CAAC,EACrB,MAAO,CACL,KAAKC,EAAY,CACf,IAAMC,EAAOJ,EAAQ,UAAY,SAC3BK,EAAuD,CAC3D,IAAK,IAAMC,EAAWH,EAAM,CAAE,SAAUC,CAAK,CAAC,EAC9C,KAAM,IAAME,EAAWH,EAAM,CAAE,OAAQ,OAAQ,SAAUC,CAAK,CAAC,EAC/D,KAAM,IAAME,EAAWH,EAAM,CAAE,MAAO,OAAQ,SAAUC,CAAK,CAAC,EAC9D,MAAO,IAAMG,EAAUJ,EAAM,CAAE,MAAOH,EAAQ,KAAM,CAAC,CACvD,EACMQ,EAAQC,EAAE,MAAO,+BAAgC,CAAE,KAAM,QAAS,aAAcC,EAAE,WAAW,CAAE,CAAC,EACtG,QAAWC,KAAU,OAAO,KAAKN,CAAG,EAAwB,CAC1D,IAAMO,EAAKZ,EAAQW,CAAM,IAAMA,IAAW,QAAU,CAAC,CAACR,EAAK,OAAO,QAC5DU,EAAQH,EAAEb,EAAKc,CAAM,CAAC,EACtBG,EAAM,IAAIC,EAAO,CACrB,KAAMnB,EAAKe,CAAM,EAAG,QAAS,QAAS,UAAWE,EAAO,QAASA,EAAO,OAAQ,CAACD,EACjF,KAAMZ,EAAQ,OAAUW,IAAW,OAASD,EAAE,QAAQ,EAAIC,IAAW,QAAUD,EAAE,SAAS,EAAIZ,EAAMa,CAAM,EAAK,OAC/G,QAAS,SAAY,CACnBG,EAAI,YAAY,EAAI,EACpB,GAAI,CACF,MAAMT,EAAIM,CAAM,EAAE,CACpB,QAAE,CACAG,EAAI,YAAY,EAAK,CACvB,CACF,CACF,CAAC,EACDA,EAAI,MAAMN,CAAK,EACfP,EAAQ,IAAIU,EAAQG,CAAG,CACzB,CACA,IAAME,EAAQC,EAAed,EAAMK,CAAK,EACxC,OAAAN,EAAU,IAAM,CACdc,EAAM,EACNf,EAAQ,QAASiB,GAAMA,EAAE,QAAQ,CAAC,EAClCjB,EAAQ,MAAM,CAChB,EACO,IAAMC,EAAQ,CACvB,EACA,WAAY,CAACS,EAAQQ,IAAYlB,EAAQ,IAAIU,CAAM,IAAIQ,EAAU,OAAS,MAAM,EAAE,EAClF,YAAa,CAACR,EAAQS,IAAanB,EAAQ,IAAIU,CAAM,GAAG,YAAYS,CAAQ,CAC9E,CACF",
6
+ "names": ["addMessages", "registerIcons", "ICON", "TEXT", "SHORT", "exportBar", "options", "buttons", "cleanup", "grid", "name", "run", "exportGrid", "printGrid", "group", "h", "t", "action", "on", "label", "btn", "Button", "leave", "addFooterGroup", "b", "visible", "disabled"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{c as o}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{f as h}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as s,f as r}from"./chunk-S4QD5NID.js";s("en",{chipRemove:"Remove {text}"});s("pt-BR",{chipRemove:"Remover {text}"});var n=class extends h{baseCls="op-chip";tag="span";main;textEl;removeBtn;onRender(){let e=this.config;this.textEl=i("span","op-chip__text"),this.main=i("button","op-chip__main",{type:"button"},e.icon?o(e.icon):"",this.textEl),this.el.append(this.main),this.listen(this.main,"click",()=>{this.config.disabled||(this.config.selectable&&this.setSelected(!this.config.selected,!0),this.config.handler?.(this),this.emit("click",this))}),e.removable&&(this.removeBtn=i("button","op-chip__remove",{type:"button"},o("x")),this.el.append(this.removeBtn),this.listen(this.removeBtn,"click",()=>!this.config.disabled&&this.emit("remove",this)),this.listen(this.main,"keydown",t=>{(t.key==="Delete"||t.key==="Backspace")&&!this.config.disabled&&this.emit("remove",this)})),this.setText(e.text??""),this.setSelected(!!e.selected),this.setDisabled(!!e.disabled)}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=e,this.removeBtn?.setAttribute("aria-label",r("chipRemove",{text:e})))}setSelected(e,t=!1){this.config.selected=e,this.rendered&&(this.el.classList.toggle("is-selected",e),this.config.selectable&&this.main.setAttribute("aria-pressed",String(e)),t&&this.emit("change",e))}isSelected(){return!!this.config.selected}setDisabled(e){super.setDisabled(e),this.rendered&&(this.main.disabled=e,this.removeBtn&&(this.removeBtn.disabled=e))}focusEl(){return this.main}};l("chip",n);export{n as a};
2
- //# sourceMappingURL=chunk-3BG75P7T.js.map
1
+ import{c as o}from"./chunk-QT5JRZZJ.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{f as h}from"./chunk-KMBTJ5AG.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as s,f as r}from"./chunk-S4QD5NID.js";s("en",{chipRemove:"Remove {text}"});s("pt-BR",{chipRemove:"Remover {text}"});var n=class extends h{baseCls="op-chip";tag="span";main;textEl;removeBtn;onRender(){let e=this.config;this.textEl=i("span","op-chip__text"),this.main=i("button","op-chip__main",{type:"button"},e.icon?o(e.icon):"",this.textEl),this.el.append(this.main),this.listen(this.main,"click",()=>{this.config.disabled||(this.config.selectable&&this.setSelected(!this.config.selected,!0),this.config.handler?.(this),this.emit("click",this))}),e.removable&&(this.removeBtn=i("button","op-chip__remove",{type:"button"},o("x")),this.el.append(this.removeBtn),this.listen(this.removeBtn,"click",()=>!this.config.disabled&&this.emit("remove",this)),this.listen(this.main,"keydown",t=>{(t.key==="Delete"||t.key==="Backspace")&&!this.config.disabled&&this.emit("remove",this)})),this.setText(e.text??""),this.setSelected(!!e.selected),this.setDisabled(!!e.disabled)}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=e,this.removeBtn?.setAttribute("aria-label",r("chipRemove",{text:e})))}setSelected(e,t=!1){this.config.selected=e,this.rendered&&(this.el.classList.toggle("is-selected",e),this.config.selectable&&this.main.setAttribute("aria-pressed",String(e)),t&&this.emit("change",e))}isSelected(){return!!this.config.selected}setDisabled(e){super.setDisabled(e),this.rendered&&(this.main.disabled=e,this.removeBtn&&(this.removeBtn.disabled=e))}focusEl(){return this.main}};l("chip",n);export{n as a};
2
+ //# sourceMappingURL=chunk-7SE4B4TC.js.map
@@ -1,2 +1,2 @@
1
- import{c as r}from"./chunk-DIOJGTUN.js";import{a as i}from"./chunk-TIPK3SCJ.js";import{f as o}from"./chunk-UDXO3KM3.js";import{b as t}from"./chunk-PZSHOSOS.js";var n=class extends o{baseCls="op-badge";tag="span";textEl;onRender(){let e=this.config;e.dot&&this.el.append(t("span","op-badge__dot",{"aria-hidden":"true"})),e.icon&&this.el.append(r(e.icon)),this.textEl=this.el.appendChild(t("span","op-badge__text")),this.setText(e.text??""),this.setTone(e.tone??"neutral")}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=String(e))}setTone(e){this.config.tone=e,this.rendered&&(this.el.className=this.el.className.replace(/\bop-badge--\w+/g,"").trim(),this.el.classList.add(`op-badge--${e}`))}};i("badge",n);export{n as a};
2
- //# sourceMappingURL=chunk-PGVLRMTQ.js.map
1
+ import{c as r}from"./chunk-QT5JRZZJ.js";import{a as i}from"./chunk-TIPK3SCJ.js";import{f as o}from"./chunk-KMBTJ5AG.js";import{b as t}from"./chunk-PZSHOSOS.js";var n=class extends o{baseCls="op-badge";tag="span";textEl;onRender(){let e=this.config;e.dot&&this.el.append(t("span","op-badge__dot",{"aria-hidden":"true"})),e.icon&&this.el.append(r(e.icon)),this.textEl=this.el.appendChild(t("span","op-badge__text")),this.setText(e.text??""),this.setTone(e.tone??"neutral")}setText(e){this.config.text=e,this.rendered&&(this.textEl.textContent=String(e))}setTone(e){this.config.tone=e,this.rendered&&(this.el.className=this.el.className.replace(/\bop-badge--\w+/g,"").trim(),this.el.classList.add(`op-badge--${e}`))}};i("badge",n);export{n as a};
2
+ //# sourceMappingURL=chunk-A5N2AJCE.js.map
@@ -1,2 +1,2 @@
1
- import{a as V}from"./chunk-TIPK3SCJ.js";import{b as D}from"./chunk-XQHATUKN.js";import{f as O}from"./chunk-UDXO3KM3.js";import{b as c}from"./chunk-PZSHOSOS.js";import{e as R,f as A}from"./chunk-S4QD5NID.js";R("en",{chart:"Chart",chartPercent:"{n}%"});R("pt-BR",{chart:"Gr\xE1fico",chartPercent:"{n}%"});var Y="http://www.w3.org/2000/svg",W=y=>y%8?`var(--op-chart-${y%8+1})`:"var(--op-chart-1, var(--op-color-primary))";function m(y,t={},i=""){let e=document.createElementNS(Y,y);i&&e.setAttribute("class",i);for(let a in t)e.setAttribute(a,String(t[a]));return e}function Z(y,t,i=4){let a=(t-y||1)/i,s=10**Math.floor(Math.log10(a)),l=([1,2,2.5,5,10].find(r=>r*s>=a)??10)*s,o=[];for(let r=Math.floor(y/l)*l;r<t+l*.999;r+=l)o.push(Math.round(r/l)*l);return o}var F=class extends O{baseCls="op-chart";svg;plot;tip;legendEl;sr;hidden=new Set;rows=[];active=-1;geom;queued=!1;offStore;build(){return this.svg=m("svg",{role:"img",tabindex:0,preserveAspectRatio:"xMidYMid meet"},"op-chart__svg"),this.tip=c("div","op-chart__tip",{role:"status"}),this.tip.hidden=!0,this.plot=c("div","op-chart__plot",{},this.svg,this.tip),this.legendEl=c("div","op-chart__legend"),this.sr=c("table","op-sr-only"),c("div",this.baseCls,{},this.plot,this.legendEl,this.sr)}onRender(){let t=this.config;if(this.el.classList.add(`op-chart--${t.kind??"bar"}`),t.store&&this.bindStore(t.store),this.setData(t.data??[]),this.listen(this.svg,"keydown",i=>this.onKey(i)),this.listen(this.svg,"blur",()=>this.activate(-1)),this.listen(this.svg,"pointerleave",()=>this.activate(-1)),typeof ResizeObserver=="function"){let i=0,e=new ResizeObserver(()=>this.plot.clientWidth!==i&&(i=this.plot.clientWidth,this.paint()));e.observe(this.plot),this.own(()=>e.disconnect())}}bindStore(t){this.offStore?.(),this.config.store=t,this.offStore=t.subscribe(()=>{this.queued||(this.queued=!0,queueMicrotask(()=>(this.queued=!1,this.rendered&&!this.destroyed&&this.setData(t.getFiltered().map(i=>i.data)))))}),this.own(()=>this.offStore?.())}setStore(t){this.bindStore(t),this.rendered&&this.setData(t.getFiltered().map(i=>i.data))}setData(t){this.rows=t,this.rendered&&this.paint()}setKind(t){this.el.classList.remove(`op-chart--${this.config.kind??"bar"}`),this.config.kind=t,this.el.classList.add(`op-chart--${t}`),this.paint()}setSeries(t){this.config.series=t,this.hidden.clear(),this.paint()}series(){return this.config.series.map((t,i)=>{let e=typeof t=="string"?{field:t}:t;return{field:e.field,label:e.label??e.field,color:e.color??W(i),idx:i}})}fmt(t){return D(this.config.format??"number",t)}isPie(){return this.config.kind==="pie"||this.config.kind==="donut"}slices(){let t=this.series()[0].field;return this.rows.map((i,e)=>({label:String(i[this.config.x]??""),value:Math.max(0,Number(i[t])||0),color:W(e),idx:e}))}paint(){if(!this.rendered)return;let t=this.config,i=t.kind??"bar",e=i==="sparkline",a=Math.max(this.plot.clientWidth,0)||600,s=t.height??(e?36:240);this.svg.replaceChildren(),this.svg.setAttribute("viewBox",`0 0 ${a} ${s}`),this.svg.style.height=`${s}px`,this.svg.setAttribute("aria-label",t.title??A("chart")),this.geom=void 0,this.active=-1,this.tip.hidden=!0,!this.rows.length||!t.series.length?this.svg.append(Object.assign(m("text",{x:a/2,y:s/2,"text-anchor":"middle"},"op-chart__empty"),{textContent:A("empty")})):this.isPie()?this.paintPie(a,s):this.paintXY(a,s,i),this.paintLegend(),this.paintTable()}paintXY(t,i,e){let a=this.config,s=e==="sparkline",l=this.series().filter(n=>!this.hidden.has(n.idx)),o=this.rows.length,r=l.map(n=>this.rows.map(h=>Number(h[n.field])||0)),g=!!a.stacked&&(e==="bar"||e==="area"),p=r.map((n,h)=>n.map((f,v)=>g?r.slice(0,h).reduce((w,u)=>w+u[v],0):0)),d=r.map((n,h)=>n.map((f,v)=>f+p[h][v])),b=d.flat(),C=e==="line"||s?Math.min(0,...b):0,E=Math.max(...b,0),_=s?[C,E]:Z(C,E),N=_[0],I=_[_.length-1]||1,$=s?2:Math.max(..._.map(n=>this.fmt(n).length))*6.5+12,T=s?2:8,P=s?3:8,L=s?i-3:i-24,M=(t-$-T)/o,x=n=>L-(n-N)/(I-N||1)*(L-P),S=n=>$+M*(n+.5);if(this.geom={left:$,band:M,top:P,bottom:L,n:o},!s){let n=m("g",{},"op-chart__grid");for(let f of _)n.append(m("line",{x1:$,x2:t-T,y1:x(f),y2:x(f)},f===0?"op-chart__axis":"")),n.append(Object.assign(m("text",{x:$-6,y:x(f),"text-anchor":"end",dy:"0.32em"},"op-chart__tick"),{textContent:this.fmt(f)}));let h=Math.ceil(48/M);this.rows.forEach((f,v)=>v%h===0&&n.append(Object.assign(m("text",{x:S(v),y:i-7,"text-anchor":"middle"},"op-chart__tick"),{textContent:String(f[a.x]??"")}))),this.svg.append(n)}let q=m("g",{},"op-chart__marks");l.forEach((n,h)=>{let f=m("g",{style:`--op-chart-c:${n.color}`},"op-chart__series");if(e==="bar"){let v=M*.7/(g?1:l.length);r[h].forEach((w,u)=>{let k=S(u)-M*.7/2+(g?0:h*v),K=x(d[h][u]);f.append(m("rect",{x:k,y:Math.min(K,x(p[h][u])),width:Math.max(v-(g?0:1),1),height:Math.abs(x(p[h][u])-K),rx:2},"op-chart__bar"))})}else{let v=d[h].map((w,u)=>`${u?"L":"M"}${S(u).toFixed(1)} ${x(w).toFixed(1)}`).join("");if(e!=="line"){let w=g?p[h].map((u,k)=>`L${S(o-1-k).toFixed(1)} ${x(p[h][o-1-k]).toFixed(1)}`).join(""):`L${S(o-1)} ${x(0)}L${S(0)} ${x(0)}`;f.append(m("path",{d:`${v}${w}Z`},"op-chart__area"))}if(f.append(m("path",{d:v},"op-chart__line")),s||o<=40){let w=s?[o-1]:d[h].map((u,k)=>k);for(let u of w)f.append(m("circle",{cx:S(u),cy:x(d[h][u]),r:s?2.5:3},"op-chart__dot"))}}q.append(f)}),this.svg.append(q),this.svg.append(m("line",{y1:P,y2:L,x1:0,x2:0},"op-chart__guide"));let G=m("g");for(let n=0;n<o;n++){let h=m("rect",{x:$+M*n,y:0,width:M,height:i},"op-chart__hit");h.addEventListener("pointerenter",()=>this.activate(n)),h.addEventListener("pointerdown",()=>this.activate(n)),G.append(h)}this.svg.append(G)}paintPie(t,i){let e=this.slices().filter(d=>!this.hidden.has(d.idx)),a=e.reduce((d,b)=>d+b.value,0)||1,s=Math.min(t,i)/2-6,l=this.config.kind==="donut"?s*.6:0,[o,r]=[t/2,i/2],g=(d,b)=>`${(o+b*Math.sin(d)).toFixed(2)} ${(r-b*Math.cos(d)).toFixed(2)}`,p=0;for(let d of e){let b=p+Math.min(d.value/a*Math.PI*2,Math.PI*2-1e-4),C=b-p>Math.PI?1:0,E=`M${g(p,s)}A${s} ${s} 0 ${C} 1 ${g(b,s)}`+(l?`L${g(b,l)}A${l} ${l} 0 ${C} 0 ${g(p,l)}Z`:`L${o} ${r}Z`),_=m("path",{d:E,style:`--op-chart-c:${d.color}`},"op-chart__slice");_.addEventListener("pointerenter",()=>this.activate(d.idx)),this.svg.append(_),p=b}l&&this.svg.append(Object.assign(m("text",{x:o,y:r,"text-anchor":"middle",dy:"0.32em"},"op-chart__total"),{textContent:this.fmt(a)}))}paintLegend(){let t=this.config,i=this.isPie()?this.slices().map(e=>({label:e.label,color:e.color,idx:e.idx})):this.series();this.legendEl.hidden=!(t.legend??(this.isPie()||i.length>1))||t.kind==="sparkline"||!this.rows.length,this.legendEl.replaceChildren(...i.map(e=>{let a=c("button",`op-chart__key${this.hidden.has(e.idx)?" is-off":""}`,{type:"button","aria-pressed":String(!this.hidden.has(e.idx))},c("span","op-chart__swatch"),e.label);return a.style.setProperty("--op-chart-c",e.color),a.addEventListener("click",()=>(this.hidden.has(e.idx)?this.hidden.delete(e.idx):this.hidden.add(e.idx),this.paint())),a}))}paintTable(){let t=this.config,i=this.series();this.sr.replaceChildren(Object.assign(c("caption"),{textContent:t.title??""}),c("thead","",{},c("tr","",{},c("th","",{},t.x),...i.map(e=>c("th","",{},e.label)))),c("tbody","",{},...this.rows.map(e=>c("tr","",{},c("td","",{},String(e[t.x]??"")),...i.map(a=>c("td","",{},this.fmt(Number(e[a.field])||0)))))))}activate(t){this.active=t;let i=this.geom,e=this.svg.querySelector(".op-chart__guide");if(this.svg.querySelectorAll(".op-chart__slice").forEach((r,g)=>r.classList.toggle("is-active",this.slices().filter(p=>!this.hidden.has(p.idx))[g]?.idx===t)),t<0||!this.rows[t])return this.tip.hidden=!0,void e?.classList.remove("is-on");let a=this.config,s=[],l=String(this.rows[t][a.x]??""),o;if(this.isPie()){let r=this.slices()[t],g=this.slices().filter(p=>!this.hidden.has(p.idx)).reduce((p,d)=>p+d.value,0)||1;s.push([r.color,this.fmt(r.value),A("chartPercent",{n:Math.round(r.value/g*100)})]),o=this.plot.clientWidth/2}else{for(let r of this.series().filter(g=>!this.hidden.has(g.idx)))s.push([r.color,r.label,this.fmt(Number(this.rows[t][r.field])||0)]);o=i?i.left+i.band*(t+.5):0,e&&i&&(e.setAttribute("x1",String(o)),e.setAttribute("x2",String(o)),e.classList.add("is-on"))}this.tip.replaceChildren(c("div","op-chart__tip-head",{},l),...s.map(([r,g,p])=>{let d=c("div","op-chart__tip-row",{},c("span","op-chart__swatch"),c("span","",{},g),c("b","",{},p));return d.style.setProperty("--op-chart-c",r),d})),this.tip.hidden=!1,this.tip.classList.toggle("is-left",o>this.plot.clientWidth/2),this.tip.style.left=`${o}px`,this.emit("point",this.rows[t],t)}onKey(t){let i=this.rows.length,e=t.key==="ArrowRight"||t.key==="ArrowDown"?this.active+1:t.key==="ArrowLeft"||t.key==="ArrowUp"?this.active-1:t.key==="Home"?0:t.key==="End"?i-1:t.key==="Escape"?-1:void 0;e!==void 0&&(t.preventDefault(),this.activate(Math.max(-1,Math.min(i-1,e))))}};V("chart",F);export{F as a};
2
- //# sourceMappingURL=chunk-3QRA3XOA.js.map
1
+ import{a as V}from"./chunk-TIPK3SCJ.js";import{f as O}from"./chunk-KMBTJ5AG.js";import{b as c}from"./chunk-PZSHOSOS.js";import{b as D}from"./chunk-XFDNXSU5.js";import{e as R,f as A}from"./chunk-S4QD5NID.js";R("en",{chart:"Chart",chartPercent:"{n}%"});R("pt-BR",{chart:"Gr\xE1fico",chartPercent:"{n}%"});var Y="http://www.w3.org/2000/svg",W=y=>y%8?`var(--op-chart-${y%8+1})`:"var(--op-chart-1, var(--op-color-primary))";function m(y,t={},i=""){let e=document.createElementNS(Y,y);i&&e.setAttribute("class",i);for(let a in t)e.setAttribute(a,String(t[a]));return e}function Z(y,t,i=4){let a=(t-y||1)/i,s=10**Math.floor(Math.log10(a)),l=([1,2,2.5,5,10].find(r=>r*s>=a)??10)*s,o=[];for(let r=Math.floor(y/l)*l;r<t+l*.999;r+=l)o.push(Math.round(r/l)*l);return o}var F=class extends O{baseCls="op-chart";svg;plot;tip;legendEl;sr;hidden=new Set;rows=[];active=-1;geom;queued=!1;offStore;build(){return this.svg=m("svg",{role:"img",tabindex:0,preserveAspectRatio:"xMidYMid meet"},"op-chart__svg"),this.tip=c("div","op-chart__tip",{role:"status"}),this.tip.hidden=!0,this.plot=c("div","op-chart__plot",{},this.svg,this.tip),this.legendEl=c("div","op-chart__legend"),this.sr=c("table","op-sr-only"),c("div",this.baseCls,{},this.plot,this.legendEl,this.sr)}onRender(){let t=this.config;if(this.el.classList.add(`op-chart--${t.kind??"bar"}`),t.store&&this.bindStore(t.store),this.setData(t.data??[]),this.listen(this.svg,"keydown",i=>this.onKey(i)),this.listen(this.svg,"blur",()=>this.activate(-1)),this.listen(this.svg,"pointerleave",()=>this.activate(-1)),typeof ResizeObserver=="function"){let i=0,e=new ResizeObserver(()=>this.plot.clientWidth!==i&&(i=this.plot.clientWidth,this.paint()));e.observe(this.plot),this.own(()=>e.disconnect())}}bindStore(t){this.offStore?.(),this.config.store=t,this.offStore=t.subscribe(()=>{this.queued||(this.queued=!0,queueMicrotask(()=>(this.queued=!1,this.rendered&&!this.destroyed&&this.setData(t.getFiltered().map(i=>i.data)))))}),this.own(()=>this.offStore?.())}setStore(t){this.bindStore(t),this.rendered&&this.setData(t.getFiltered().map(i=>i.data))}setData(t){this.rows=t,this.rendered&&this.paint()}setKind(t){this.el.classList.remove(`op-chart--${this.config.kind??"bar"}`),this.config.kind=t,this.el.classList.add(`op-chart--${t}`),this.paint()}setSeries(t){this.config.series=t,this.hidden.clear(),this.paint()}series(){return this.config.series.map((t,i)=>{let e=typeof t=="string"?{field:t}:t;return{field:e.field,label:e.label??e.field,color:e.color??W(i),idx:i}})}fmt(t){return D(this.config.format??"number",t)}isPie(){return this.config.kind==="pie"||this.config.kind==="donut"}slices(){let t=this.series()[0].field;return this.rows.map((i,e)=>({label:String(i[this.config.x]??""),value:Math.max(0,Number(i[t])||0),color:W(e),idx:e}))}paint(){if(!this.rendered)return;let t=this.config,i=t.kind??"bar",e=i==="sparkline",a=Math.max(this.plot.clientWidth,0)||600,s=t.height??(e?36:240);this.svg.replaceChildren(),this.svg.setAttribute("viewBox",`0 0 ${a} ${s}`),this.svg.style.height=`${s}px`,this.svg.setAttribute("aria-label",t.title??A("chart")),this.geom=void 0,this.active=-1,this.tip.hidden=!0,!this.rows.length||!t.series.length?this.svg.append(Object.assign(m("text",{x:a/2,y:s/2,"text-anchor":"middle"},"op-chart__empty"),{textContent:A("empty")})):this.isPie()?this.paintPie(a,s):this.paintXY(a,s,i),this.paintLegend(),this.paintTable()}paintXY(t,i,e){let a=this.config,s=e==="sparkline",l=this.series().filter(n=>!this.hidden.has(n.idx)),o=this.rows.length,r=l.map(n=>this.rows.map(h=>Number(h[n.field])||0)),g=!!a.stacked&&(e==="bar"||e==="area"),p=r.map((n,h)=>n.map((f,v)=>g?r.slice(0,h).reduce((w,u)=>w+u[v],0):0)),d=r.map((n,h)=>n.map((f,v)=>f+p[h][v])),b=d.flat(),C=e==="line"||s?Math.min(0,...b):0,E=Math.max(...b,0),_=s?[C,E]:Z(C,E),N=_[0],I=_[_.length-1]||1,$=s?2:Math.max(..._.map(n=>this.fmt(n).length))*6.5+12,T=s?2:8,P=s?3:8,L=s?i-3:i-24,M=(t-$-T)/o,x=n=>L-(n-N)/(I-N||1)*(L-P),S=n=>$+M*(n+.5);if(this.geom={left:$,band:M,top:P,bottom:L,n:o},!s){let n=m("g",{},"op-chart__grid");for(let f of _)n.append(m("line",{x1:$,x2:t-T,y1:x(f),y2:x(f)},f===0?"op-chart__axis":"")),n.append(Object.assign(m("text",{x:$-6,y:x(f),"text-anchor":"end",dy:"0.32em"},"op-chart__tick"),{textContent:this.fmt(f)}));let h=Math.ceil(48/M);this.rows.forEach((f,v)=>v%h===0&&n.append(Object.assign(m("text",{x:S(v),y:i-7,"text-anchor":"middle"},"op-chart__tick"),{textContent:String(f[a.x]??"")}))),this.svg.append(n)}let q=m("g",{},"op-chart__marks");l.forEach((n,h)=>{let f=m("g",{style:`--op-chart-c:${n.color}`},"op-chart__series");if(e==="bar"){let v=M*.7/(g?1:l.length);r[h].forEach((w,u)=>{let k=S(u)-M*.7/2+(g?0:h*v),K=x(d[h][u]);f.append(m("rect",{x:k,y:Math.min(K,x(p[h][u])),width:Math.max(v-(g?0:1),1),height:Math.abs(x(p[h][u])-K),rx:2},"op-chart__bar"))})}else{let v=d[h].map((w,u)=>`${u?"L":"M"}${S(u).toFixed(1)} ${x(w).toFixed(1)}`).join("");if(e!=="line"){let w=g?p[h].map((u,k)=>`L${S(o-1-k).toFixed(1)} ${x(p[h][o-1-k]).toFixed(1)}`).join(""):`L${S(o-1)} ${x(0)}L${S(0)} ${x(0)}`;f.append(m("path",{d:`${v}${w}Z`},"op-chart__area"))}if(f.append(m("path",{d:v},"op-chart__line")),s||o<=40){let w=s?[o-1]:d[h].map((u,k)=>k);for(let u of w)f.append(m("circle",{cx:S(u),cy:x(d[h][u]),r:s?2.5:3},"op-chart__dot"))}}q.append(f)}),this.svg.append(q),this.svg.append(m("line",{y1:P,y2:L,x1:0,x2:0},"op-chart__guide"));let G=m("g");for(let n=0;n<o;n++){let h=m("rect",{x:$+M*n,y:0,width:M,height:i},"op-chart__hit");h.addEventListener("pointerenter",()=>this.activate(n)),h.addEventListener("pointerdown",()=>this.activate(n)),G.append(h)}this.svg.append(G)}paintPie(t,i){let e=this.slices().filter(d=>!this.hidden.has(d.idx)),a=e.reduce((d,b)=>d+b.value,0)||1,s=Math.min(t,i)/2-6,l=this.config.kind==="donut"?s*.6:0,[o,r]=[t/2,i/2],g=(d,b)=>`${(o+b*Math.sin(d)).toFixed(2)} ${(r-b*Math.cos(d)).toFixed(2)}`,p=0;for(let d of e){let b=p+Math.min(d.value/a*Math.PI*2,Math.PI*2-1e-4),C=b-p>Math.PI?1:0,E=`M${g(p,s)}A${s} ${s} 0 ${C} 1 ${g(b,s)}`+(l?`L${g(b,l)}A${l} ${l} 0 ${C} 0 ${g(p,l)}Z`:`L${o} ${r}Z`),_=m("path",{d:E,style:`--op-chart-c:${d.color}`},"op-chart__slice");_.addEventListener("pointerenter",()=>this.activate(d.idx)),this.svg.append(_),p=b}l&&this.svg.append(Object.assign(m("text",{x:o,y:r,"text-anchor":"middle",dy:"0.32em"},"op-chart__total"),{textContent:this.fmt(a)}))}paintLegend(){let t=this.config,i=this.isPie()?this.slices().map(e=>({label:e.label,color:e.color,idx:e.idx})):this.series();this.legendEl.hidden=!(t.legend??(this.isPie()||i.length>1))||t.kind==="sparkline"||!this.rows.length,this.legendEl.replaceChildren(...i.map(e=>{let a=c("button",`op-chart__key${this.hidden.has(e.idx)?" is-off":""}`,{type:"button","aria-pressed":String(!this.hidden.has(e.idx))},c("span","op-chart__swatch"),e.label);return a.style.setProperty("--op-chart-c",e.color),a.addEventListener("click",()=>(this.hidden.has(e.idx)?this.hidden.delete(e.idx):this.hidden.add(e.idx),this.paint())),a}))}paintTable(){let t=this.config,i=this.series();this.sr.replaceChildren(Object.assign(c("caption"),{textContent:t.title??""}),c("thead","",{},c("tr","",{},c("th","",{},t.x),...i.map(e=>c("th","",{},e.label)))),c("tbody","",{},...this.rows.map(e=>c("tr","",{},c("td","",{},String(e[t.x]??"")),...i.map(a=>c("td","",{},this.fmt(Number(e[a.field])||0)))))))}activate(t){this.active=t;let i=this.geom,e=this.svg.querySelector(".op-chart__guide");if(this.svg.querySelectorAll(".op-chart__slice").forEach((r,g)=>r.classList.toggle("is-active",this.slices().filter(p=>!this.hidden.has(p.idx))[g]?.idx===t)),t<0||!this.rows[t])return this.tip.hidden=!0,void e?.classList.remove("is-on");let a=this.config,s=[],l=String(this.rows[t][a.x]??""),o;if(this.isPie()){let r=this.slices()[t],g=this.slices().filter(p=>!this.hidden.has(p.idx)).reduce((p,d)=>p+d.value,0)||1;s.push([r.color,this.fmt(r.value),A("chartPercent",{n:Math.round(r.value/g*100)})]),o=this.plot.clientWidth/2}else{for(let r of this.series().filter(g=>!this.hidden.has(g.idx)))s.push([r.color,r.label,this.fmt(Number(this.rows[t][r.field])||0)]);o=i?i.left+i.band*(t+.5):0,e&&i&&(e.setAttribute("x1",String(o)),e.setAttribute("x2",String(o)),e.classList.add("is-on"))}this.tip.replaceChildren(c("div","op-chart__tip-head",{},l),...s.map(([r,g,p])=>{let d=c("div","op-chart__tip-row",{},c("span","op-chart__swatch"),c("span","",{},g),c("b","",{},p));return d.style.setProperty("--op-chart-c",r),d})),this.tip.hidden=!1,this.tip.classList.toggle("is-left",o>this.plot.clientWidth/2),this.tip.style.left=`${o}px`,this.emit("point",this.rows[t],t)}onKey(t){let i=this.rows.length,e=t.key==="ArrowRight"||t.key==="ArrowDown"?this.active+1:t.key==="ArrowLeft"||t.key==="ArrowUp"?this.active-1:t.key==="Home"?0:t.key==="End"?i-1:t.key==="Escape"?-1:void 0;e!==void 0&&(t.preventDefault(),this.activate(Math.max(-1,Math.min(i-1,e))))}};V("chart",F);export{F as a};
2
+ //# sourceMappingURL=chunk-ALNUVKDT.js.map
@@ -1,2 +1,2 @@
1
- import{a as v}from"./chunk-5BMG5ZBY.js";import{a as m}from"./chunk-MNSDGJKA.js";import{a as w}from"./chunk-HLS5FI55.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-UDXO3KM3.js";import{b as u}from"./chunk-PZSHOSOS.js";import{e as d,f as n}from"./chunk-S4QD5NID.js";d("en",{views:"Views",viewsName:"Name for this view",viewsSave:"Save view",viewsSaveAs:"Save as new view\u2026",viewsDefault:"Open with this view",viewsDelete:"Delete view",viewsConfirmDelete:'Delete the view "{n}"?',viewsReset:"Reset to initial"});d("pt-BR",{views:"Vis\xF5es",viewsName:"Nome desta vis\xE3o",viewsSave:"Salvar vis\xE3o",viewsSaveAs:"Salvar como nova vis\xE3o\u2026",viewsDefault:"Abrir com esta vis\xE3o",viewsDelete:"Excluir vis\xE3o",viewsConfirmDelete:'Excluir a vis\xE3o "{n}"?',viewsReset:"Voltar ao inicial"});var g=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`;function M(a,e=localStorage){let t=()=>{try{let s=JSON.parse(e.getItem(a)??"[]");return Array.isArray(s)?s:[]}catch{return[]}},i=s=>e.setItem(a,JSON.stringify(s));return{list:t,save(s){let r={...s,id:s.id??g()},o=t(),h=o.findIndex(p=>p.id===r.id);return h<0?o.push(r):o[h]=r,i(o),r},remove(s){i(t().filter(r=>r.id!==s.id))}}}function P(a){let e=async(t,i="",s)=>{let r=await(a.fetch??fetch)(a.url+i,{method:t,headers:{"Content-Type":"application/json",...a.headers},body:s===void 0?void 0:JSON.stringify(s)});if(!r.ok)throw new Error(`Optikos views: ${t} ${a.url+i} \u2192 ${r.status}`);return r.status===204?void 0:r.json().catch(()=>{})};return{list:()=>e("GET"),save:t=>t.id?e("PUT",`/${encodeURIComponent(t.id)}`,t):e("POST","",t),remove:t=>e("DELETE",`/${encodeURIComponent(t.id)}`).then(()=>{})}}var l=class extends f{baseCls="op-viewmanager";btn;menu;views=[];current;initial={};build(){return this.btn=new w({text:n("views"),icon:"menu",variant:"ghost",handler:()=>this.openMenu()}),this.btn.el.setAttribute("aria-haspopup","menu"),this.own(()=>(this.btn.destroy(),this.menu?.destroy())),u("span",this.baseCls,{},this.btn.el)}onRender(){this.config.grid.render(),this.config.filters?.render(),this.initial=this.getState(),this.config.autoLoad!==!1&&this.reload()}notifyMount(){super.notifyMount(),this.btn.notifyMount()}getState(){let{grid:e,filters:t,extra:i}=this.config,s={columns:e.getColumnState(),filter:t?.getFilter()??null,sorters:[...e.getStore().getSorters()]};return i&&(s.extra=Object.fromEntries(Object.entries(i).map(([r,o])=>[r,o.get()]))),s}setState(e){let{grid:t,filters:i,extra:s}=this.config;e.columns&&t.setColumnState(e.columns);let r=e.sorters?.[0];t.getStore().sort(r?.field??null,r?.dir),i&&(i.setFilter(e.filter??null),i.apply());for(let o in e.extra)s?.[o]?.set(e.extra[o])}getViews(){return this.views}getCurrent(){return this.current}async reload(){await this.run(async()=>{this.views=await this.config.storage.list()??[],this.current=this.current&&this.views.find(t=>t.id===this.current.id);let e=this.views.find(t=>t.default);!this.current&&e&&this.config.autoLoad!==!1&&this.apply(e),this.paint()}),this.emit("load",this.views)}apply(e){let t=typeof e=="string"?this.views.find(i=>i.id===e):e;!t||this.emit("before-apply",t)===!1||(this.current=t,this.setState(t.state),this.paint(),this.emit("apply",t))}async save(){if(!this.current)return this.saveAs();await this.store({...this.current,state:this.getState()})}async saveAs(e){if(e??=await v.prompt(n("viewsName"),{title:n("viewsSaveAs")})??"",e=e.trim(),!e)return;let t=this.views.find(i=>i.name.toLowerCase()===e.toLowerCase());await this.store({...t,name:e,state:this.getState()})}async setDefault(e=!0){if(this.current){for(let t of this.views)t!==this.current&&t.default&&await this.store({...t,default:!1},!1);await this.store({...this.current,default:e})}}async remove(e=this.current){!e||!await v.confirm(n("viewsConfirmDelete",{n:e.name}),{danger:!0,okText:n("viewsDelete")})||await this.run(async()=>{await this.config.storage.remove(e),this.views=this.views.filter(t=>t!==e&&t.id!==e.id),this.current?.id===e.id&&(this.current=void 0),this.paint(),this.emit("remove",e)})}reset(){this.current=void 0,this.setState(this.initial),this.paint(),this.emit("reset")}async store(e,t=!0){await this.run(async()=>{let i=await this.config.storage.save(e)||e,s=this.views.findIndex(r=>i.id&&r.id===i.id||r===e);s<0?this.views.push(i):this.views[s]=i,t&&(this.current=i),this.paint(),this.emit("save",i)})}async run(e){try{await e()}catch(t){this.emit("error",t)}}paint(){this.btn.setText(this.current?.name??n("views"))}openMenu(){let e=this.current,t=[...this.views.map(i=>({text:i.default?`${i.name} \u2605`:i.name,checked:i===e||!!e?.id&&i.id===e.id,handler:()=>this.apply(i)})),...this.views.length?["-"]:[],{text:n("viewsSave"),handler:()=>{this.save()}},{text:n("viewsSaveAs"),handler:()=>{this.saveAs()}},...e?[{text:n("viewsDefault"),checked:!!e.default,handler:()=>{this.setDefault(!e.default)}},{text:n("viewsDelete"),handler:()=>{this.remove()}}]:[],"-",{text:n("viewsReset"),handler:()=>this.reset()}];this.menu??=new m({}),this.menu.setItems(t),this.menu.showBy(this.btn.el)}};c("viewmanager",l);export{M as a,P as b,l as c};
2
- //# sourceMappingURL=chunk-NQV4THNE.js.map
1
+ import{a as v}from"./chunk-IE7KRNFJ.js";import{a as m}from"./chunk-BPCD37A2.js";import{a as w}from"./chunk-KVUELLYF.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-KMBTJ5AG.js";import{b as u}from"./chunk-PZSHOSOS.js";import{e as d,f as n}from"./chunk-S4QD5NID.js";d("en",{views:"Views",viewsName:"Name for this view",viewsSave:"Save view",viewsSaveAs:"Save as new view\u2026",viewsDefault:"Open with this view",viewsDelete:"Delete view",viewsConfirmDelete:'Delete the view "{n}"?',viewsReset:"Reset to initial"});d("pt-BR",{views:"Vis\xF5es",viewsName:"Nome desta vis\xE3o",viewsSave:"Salvar vis\xE3o",viewsSaveAs:"Salvar como nova vis\xE3o\u2026",viewsDefault:"Abrir com esta vis\xE3o",viewsDelete:"Excluir vis\xE3o",viewsConfirmDelete:'Excluir a vis\xE3o "{n}"?',viewsReset:"Voltar ao inicial"});var g=()=>globalThis.crypto?.randomUUID?.()??`${Date.now()}-${Math.random().toString(36).slice(2)}`;function M(a,e=localStorage){let t=()=>{try{let s=JSON.parse(e.getItem(a)??"[]");return Array.isArray(s)?s:[]}catch{return[]}},i=s=>e.setItem(a,JSON.stringify(s));return{list:t,save(s){let r={...s,id:s.id??g()},o=t(),h=o.findIndex(p=>p.id===r.id);return h<0?o.push(r):o[h]=r,i(o),r},remove(s){i(t().filter(r=>r.id!==s.id))}}}function P(a){let e=async(t,i="",s)=>{let r=await(a.fetch??fetch)(a.url+i,{method:t,headers:{"Content-Type":"application/json",...a.headers},body:s===void 0?void 0:JSON.stringify(s)});if(!r.ok)throw new Error(`Optikos views: ${t} ${a.url+i} \u2192 ${r.status}`);return r.status===204?void 0:r.json().catch(()=>{})};return{list:()=>e("GET"),save:t=>t.id?e("PUT",`/${encodeURIComponent(t.id)}`,t):e("POST","",t),remove:t=>e("DELETE",`/${encodeURIComponent(t.id)}`).then(()=>{})}}var l=class extends f{baseCls="op-viewmanager";btn;menu;views=[];current;initial={};build(){return this.btn=new w({text:n("views"),icon:"menu",variant:"ghost",handler:()=>this.openMenu()}),this.btn.el.setAttribute("aria-haspopup","menu"),this.own(()=>(this.btn.destroy(),this.menu?.destroy())),u("span",this.baseCls,{},this.btn.el)}onRender(){this.config.grid.render(),this.config.filters?.render(),this.initial=this.getState(),this.config.autoLoad!==!1&&this.reload()}notifyMount(){super.notifyMount(),this.btn.notifyMount()}getState(){let{grid:e,filters:t,extra:i}=this.config,s={columns:e.getColumnState(),filter:t?.getFilter()??null,sorters:[...e.getStore().getSorters()]};return i&&(s.extra=Object.fromEntries(Object.entries(i).map(([r,o])=>[r,o.get()]))),s}setState(e){let{grid:t,filters:i,extra:s}=this.config;e.columns&&t.setColumnState(e.columns);let r=e.sorters?.[0];t.getStore().sort(r?.field??null,r?.dir),i&&(i.setFilter(e.filter??null),i.apply());for(let o in e.extra)s?.[o]?.set(e.extra[o])}getViews(){return this.views}getCurrent(){return this.current}async reload(){await this.run(async()=>{this.views=await this.config.storage.list()??[],this.current=this.current&&this.views.find(t=>t.id===this.current.id);let e=this.views.find(t=>t.default);!this.current&&e&&this.config.autoLoad!==!1&&this.apply(e),this.paint()}),this.emit("load",this.views)}apply(e){let t=typeof e=="string"?this.views.find(i=>i.id===e):e;!t||this.emit("before-apply",t)===!1||(this.current=t,this.setState(t.state),this.paint(),this.emit("apply",t))}async save(){if(!this.current)return this.saveAs();await this.store({...this.current,state:this.getState()})}async saveAs(e){if(e??=await v.prompt(n("viewsName"),{title:n("viewsSaveAs")})??"",e=e.trim(),!e)return;let t=this.views.find(i=>i.name.toLowerCase()===e.toLowerCase());await this.store({...t,name:e,state:this.getState()})}async setDefault(e=!0){if(this.current){for(let t of this.views)t!==this.current&&t.default&&await this.store({...t,default:!1},!1);await this.store({...this.current,default:e})}}async remove(e=this.current){!e||!await v.confirm(n("viewsConfirmDelete",{n:e.name}),{danger:!0,okText:n("viewsDelete")})||await this.run(async()=>{await this.config.storage.remove(e),this.views=this.views.filter(t=>t!==e&&t.id!==e.id),this.current?.id===e.id&&(this.current=void 0),this.paint(),this.emit("remove",e)})}reset(){this.current=void 0,this.setState(this.initial),this.paint(),this.emit("reset")}async store(e,t=!0){await this.run(async()=>{let i=await this.config.storage.save(e)||e,s=this.views.findIndex(r=>i.id&&r.id===i.id||r===e);s<0?this.views.push(i):this.views[s]=i,t&&(this.current=i),this.paint(),this.emit("save",i)})}async run(e){try{await e()}catch(t){this.emit("error",t)}}paint(){this.btn.setText(this.current?.name??n("views"))}openMenu(){let e=this.current,t=[...this.views.map(i=>({text:i.default?`${i.name} \u2605`:i.name,checked:i===e||!!e?.id&&i.id===e.id,handler:()=>this.apply(i)})),...this.views.length?["-"]:[],{text:n("viewsSave"),handler:()=>{this.save()}},{text:n("viewsSaveAs"),handler:()=>{this.saveAs()}},...e?[{text:n("viewsDefault"),checked:!!e.default,handler:()=>{this.setDefault(!e.default)}},{text:n("viewsDelete"),handler:()=>{this.remove()}}]:[],"-",{text:n("viewsReset"),handler:()=>this.reset()}];this.menu??=new m({}),this.menu.setItems(t),this.menu.showBy(this.btn.el)}};c("viewmanager",l);export{M as a,P as b,l as c};
2
+ //# sourceMappingURL=chunk-ANR27GED.js.map
@@ -1,2 +1,2 @@
1
- import{a as g}from"./chunk-JE56CJX2.js";import{a as h}from"./chunk-2QMI2RRB.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as d,f as l}from"./chunk-S4QD5NID.js";d("en",{shortcuts:"Keyboard shortcuts",shortcutsGlobal:"Everywhere",shortcutsEmpty:"No shortcuts registered"});d("pt-BR",{shortcuts:"Atalhos de teclado",shortcutsGlobal:"Em qualquer tela",shortcutsEmpty:"Nenhum atalho registrado"});var y=()=>/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent),f=t=>{let s=t.toLowerCase().split("+").map(e=>e.trim()),o=s.pop();return[...s.sort(),o].join("+")};function w(t,s){let o=s.toLowerCase().split("+"),e=o.pop(),r=v=>o.includes(v),c=y(),b=e.length===1&&!/[a-z0-9]/.test(e);return t.key.toLowerCase()===e&&t.ctrlKey===(r("ctrl")||r("mod")&&!c)&&t.metaKey===(r("meta")||r("mod")&&c)&&t.altKey===r("alt")&&(b||t.shiftKey===r("shift"))}function E(t){let s=y(),o=s?{mod:"\u2318",ctrl:"\u2303",alt:"\u2325",shift:"\u21E7",meta:"\u2318"}:{mod:"Ctrl",ctrl:"Ctrl",alt:"Alt",shift:"Shift",meta:"Meta"};return t.split("+").map(e=>o[e.toLowerCase()]??(e.length===1?e.toUpperCase():e[0].toUpperCase()+e.slice(1))).join(s?"":"+")}var n=[],a,m=!1,p,k=t=>t instanceof HTMLElement&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName));function K(t){if(t.defaultPrevented||t.isComposing)return;let s=t.ctrlKey||t.metaKey||t.altKey,o=[...n].sort((e,r)=>+((r.scope??"global")===a)-+((e.scope??"global")===a)).find(e=>((e.scope??"global")==="global"||e.scope===a)&&w(t,e.keys)&&(s||e.inInputs||!k(t.target))&&(e.when?.()??!0));o&&o.handler(t)!==!1&&t.preventDefault()}var u={register(t){let s=Array.isArray(t)?t:[t];!m&&typeof document<"u"&&(m=!0,document.addEventListener("keydown",K),u.register({keys:"shift+?",title:l("shortcuts"),handler:()=>u.help()}));for(let o of s){let e=n.findIndex(r=>(r.scope??"global")===(o.scope??"global")&&f(r.keys)===f(o.keys));e>=0&&(h()&&console.warn(`Optikos: shortcut ${o.keys} is already taken in scope "${o.scope??"global"}" by "${n[e].title}"; "${o.title}" replaces it`),n.splice(e,1)),n.push(o)}return()=>{for(let o of s){let e=n.indexOf(o);e>=0&&n.splice(e,1)}}},setScope(t){a=t},getScope:()=>a,list:()=>n.filter(t=>(t.scope??"global")==="global"||t.scope===a),help(){if(p)return void p.close();let t=new Map;for(let e of u.list()){let r=e.group??((e.scope??"global")==="global"?l("shortcutsGlobal"):e.scope);t.set(r,[...t.get(r)??[],e])}let s=i("div","op-shortcuts");for(let[e,r]of t)s.append(i("h3","op-shortcuts__group",{},e),...r.map(c=>i("div","op-shortcuts__row",{},i("span","",{},c.title),i("kbd","op-shortcuts__kbd",{},E(c.keys)))));t.size||s.append(l("shortcutsEmpty"));let o=p=new g({title:l("shortcuts"),closable:!0,width:420});o.on("destroy",()=>p=void 0),o.show(),o.getBody().replaceChildren(s)}};export{E as a,u as b};
2
- //# sourceMappingURL=chunk-EXIADWI7.js.map
1
+ import{a as h}from"./chunk-2QMI2RRB.js";import{a as g}from"./chunk-EQ4IWYLW.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as d,f as l}from"./chunk-S4QD5NID.js";d("en",{shortcuts:"Keyboard shortcuts",shortcutsGlobal:"Everywhere",shortcutsEmpty:"No shortcuts registered"});d("pt-BR",{shortcuts:"Atalhos de teclado",shortcutsGlobal:"Em qualquer tela",shortcutsEmpty:"Nenhum atalho registrado"});var y=()=>/mac|iphone|ipad/i.test(navigator.platform||navigator.userAgent),f=t=>{let s=t.toLowerCase().split("+").map(e=>e.trim()),o=s.pop();return[...s.sort(),o].join("+")};function w(t,s){let o=s.toLowerCase().split("+"),e=o.pop(),r=v=>o.includes(v),c=y(),b=e.length===1&&!/[a-z0-9]/.test(e);return t.key.toLowerCase()===e&&t.ctrlKey===(r("ctrl")||r("mod")&&!c)&&t.metaKey===(r("meta")||r("mod")&&c)&&t.altKey===r("alt")&&(b||t.shiftKey===r("shift"))}function E(t){let s=y(),o=s?{mod:"\u2318",ctrl:"\u2303",alt:"\u2325",shift:"\u21E7",meta:"\u2318"}:{mod:"Ctrl",ctrl:"Ctrl",alt:"Alt",shift:"Shift",meta:"Meta"};return t.split("+").map(e=>o[e.toLowerCase()]??(e.length===1?e.toUpperCase():e[0].toUpperCase()+e.slice(1))).join(s?"":"+")}var n=[],a,m=!1,p,k=t=>t instanceof HTMLElement&&(t.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName));function K(t){if(t.defaultPrevented||t.isComposing)return;let s=t.ctrlKey||t.metaKey||t.altKey,o=[...n].sort((e,r)=>+((r.scope??"global")===a)-+((e.scope??"global")===a)).find(e=>((e.scope??"global")==="global"||e.scope===a)&&w(t,e.keys)&&(s||e.inInputs||!k(t.target))&&(e.when?.()??!0));o&&o.handler(t)!==!1&&t.preventDefault()}var u={register(t){let s=Array.isArray(t)?t:[t];!m&&typeof document<"u"&&(m=!0,document.addEventListener("keydown",K),u.register({keys:"shift+?",title:l("shortcuts"),handler:()=>u.help()}));for(let o of s){let e=n.findIndex(r=>(r.scope??"global")===(o.scope??"global")&&f(r.keys)===f(o.keys));e>=0&&(h()&&console.warn(`Optikos: shortcut ${o.keys} is already taken in scope "${o.scope??"global"}" by "${n[e].title}"; "${o.title}" replaces it`),n.splice(e,1)),n.push(o)}return()=>{for(let o of s){let e=n.indexOf(o);e>=0&&n.splice(e,1)}}},setScope(t){a=t},getScope:()=>a,list:()=>n.filter(t=>(t.scope??"global")==="global"||t.scope===a),help(){if(p)return void p.close();let t=new Map;for(let e of u.list()){let r=e.group??((e.scope??"global")==="global"?l("shortcutsGlobal"):e.scope);t.set(r,[...t.get(r)??[],e])}let s=i("div","op-shortcuts");for(let[e,r]of t)s.append(i("h3","op-shortcuts__group",{},e),...r.map(c=>i("div","op-shortcuts__row",{},i("span","",{},c.title),i("kbd","op-shortcuts__kbd",{},E(c.keys)))));t.size||s.append(l("shortcutsEmpty"));let o=p=new g({title:l("shortcuts"),closable:!0,width:420});o.on("destroy",()=>p=void 0),o.show(),o.getBody().replaceChildren(s)}};export{E as a,u as b};
2
+ //# sourceMappingURL=chunk-AZUWS2C5.js.map
@@ -1,2 +1,2 @@
1
- import{c as r}from"./chunk-DIOJGTUN.js";import{a as s}from"./chunk-XR677UYD.js";import{a as o}from"./chunk-TIPK3SCJ.js";import{b as i}from"./chunk-PZSHOSOS.js";var n=class extends s{baseCls="op-field op-checkbox";textEl;emptyValue(){return!1}isEmpty(e){return!e}createControl(){let e=this.inputEl=i("input","op-checkbox__input",{type:"checkbox"});this.textEl=i("span","op-checkbox__text");let t=i("span","op-checkbox__box",{},r("check"),i("span","op-checkbox__dash")),c=i("label","op-checkbox__label",{},e,t,this.textEl);return this.listen(e,"change",()=>{if(this.config.readonly)return void(e.checked=this.value);this.config.indeterminate=!1,this.paint(),this.commit(e.checked)}),c}onRender(){super.onRender(),this.setBoxLabel(this.config.boxLabel??""),this.setIndeterminate(!!this.config.indeterminate)}applyValue(e){this.inputEl.checked=!!e,this.paint()}paint(){let e=this.inputEl,t=!!this.config.indeterminate;e.indeterminate=t,e.setAttribute("aria-checked",t?"mixed":String(e.checked)),this.el.classList.toggle("is-checked",e.checked&&!t),this.el.classList.toggle("is-indeterminate",t)}onDisabled(e){this.inputEl.disabled=e}setBoxLabel(e){this.config.boxLabel=e,this.rendered&&(this.textEl.textContent=e,this.textEl.hidden=!e)}setIndeterminate(e){this.config.indeterminate=e,this.rendered&&this.paint()}toggle(){this.setIndeterminate(!1),this.setValue(!this.value)}};o("checkbox",n);export{n as a};
2
- //# sourceMappingURL=chunk-Z6L55FTN.js.map
1
+ import{c as r}from"./chunk-QT5JRZZJ.js";import{a as s}from"./chunk-RI62AESU.js";import{a as o}from"./chunk-TIPK3SCJ.js";import{b as i}from"./chunk-PZSHOSOS.js";var n=class extends s{baseCls="op-field op-checkbox";textEl;emptyValue(){return!1}isEmpty(e){return!e}createControl(){let e=this.inputEl=i("input","op-checkbox__input",{type:"checkbox"});this.textEl=i("span","op-checkbox__text");let t=i("span","op-checkbox__box",{},r("check"),i("span","op-checkbox__dash")),c=i("label","op-checkbox__label",{},e,t,this.textEl);return this.listen(e,"change",()=>{if(this.config.readonly)return void(e.checked=this.value);this.config.indeterminate=!1,this.paint(),this.commit(e.checked)}),c}onRender(){super.onRender(),this.setBoxLabel(this.config.boxLabel??""),this.setIndeterminate(!!this.config.indeterminate)}applyValue(e){this.inputEl.checked=!!e,this.paint()}paint(){let e=this.inputEl,t=!!this.config.indeterminate;e.indeterminate=t,e.setAttribute("aria-checked",t?"mixed":String(e.checked)),this.el.classList.toggle("is-checked",e.checked&&!t),this.el.classList.toggle("is-indeterminate",t)}onDisabled(e){this.inputEl.disabled=e}setBoxLabel(e){this.config.boxLabel=e,this.rendered&&(this.textEl.textContent=e,this.textEl.hidden=!e)}setIndeterminate(e){this.config.indeterminate=e,this.rendered&&this.paint()}toggle(){this.setIndeterminate(!1),this.setValue(!this.value)}};o("checkbox",n);export{n as a};
2
+ //# sourceMappingURL=chunk-BHKI2SU3.js.map
@@ -1,2 +1,2 @@
1
- import{c as G}from"./chunk-DIOJGTUN.js";import{b as M}from"./chunk-PZSHOSOS.js";import{e as S,f as C}from"./chunk-S4QD5NID.js";S("en",{treeExpand:"Expand",treeCollapse:"Collapse",treeLoading:"Loading"});S("pt-BR",{treeExpand:"Expandir",treeCollapse:"Recolher",treeLoading:"Carregando"});function I(c,t={},w=null){let E=t.children??"children",a=t.parentField??"parentId";return c.flatMap(({[E]:u,...p})=>[{...p,[a]:w},...I(u??[],t,p.id)])}function B(c={}){let t,w=c.parentField??"parentId",E=c.leafField??"leaf",a=new Set,u=new Set,p=new Set,m=new Map,b=!!c.expanded,A=e=>(m.get(e.id)?.length??0)>0||!!c.load&&e.get(E)!==!0&&!u.has(e.id);function g(){let e=t.getStore().getRange(),r=new Set(e.map(i=>i.id));m=new Map;let l=[];for(let i of e){let s=i.get(w);s==null||!r.has(s)?l.push(i):m.set(s,[...m.get(s)??[],i])}b&&(e.forEach(i=>a.add(i.id)),b=!1);let y=[],x=(i,s)=>{for(let n of i){let d=A(n),o=d&&a.has(n.id);y.push({rec:n,level:s+1,expanded:d?o:void 0,paint(h,f){let T=t.getColumns(),F=Math.max(0,T.findIndex(v=>v.field===(c.treeColumn??T[0]?.field))),k=h.filter(v=>!v.classList.contains("op-grid__selcell")&&!v.classList.contains("op-grid__actcell"))[F];if(!k)return;k.style.setProperty("--_depth",String(s));let P=d?M("span",`op-grid__expander${p.has(n.id)?" is-loading":""}`,{"data-id":String(n.id),role:"img","aria-label":C(p.has(n.id)?"treeLoading":o?"treeCollapse":"treeExpand")},G(p.has(n.id)?"clock":"chevron-down")):M("span","op-grid__expander is-leaf",{"aria-hidden":"true"});k.prepend(P),f.dataset.node=String(n.id)}}),d&&o&&x(m.get(n.id)??[],s+1)}};x(l,0),t.setRowLayout(y)}let _=e=>t.getStore().getById(e);async function R(e){let r=_(e);if(!(!r||!A(r)||a.has(e))){if(a.add(e),c.load&&!u.has(e)&&!m.get(e)?.length){p.add(e),g();try{let l=await c.load(r);u.add(e),p.delete(e),t.getStore().add(l.map(y=>({...y,[w]:e})))}catch(l){return p.delete(e),a.delete(e),g(),void t.emit("load-error",r,l)}}u.add(e),g(),t.emit("expand-node",r)}}function L(e){let r=_(e);!r||!a.delete(e)||(g(),t.emit("collapse-node",r))}return{init(e){t=e;let r=e.el,l=r.querySelector("[role=grid]");l.setAttribute("role","treegrid"),r.classList.add("op-grid--tree");let y=n=>{let d=n.closest("[data-node]")?.dataset.node;return t.getStore().getFiltered().find(o=>String(o.id)===d)?.id},x=n=>{let d=n.target.closest(".op-grid__expander:not(.is-leaf)"),o=d&&y(d);o!=null&&(n.stopPropagation(),a.has(o)?L(o):R(o))},i=n=>{if(n.target!==l||n.key!=="ArrowRight"&&n.key!=="ArrowLeft")return;let d=t.getActive(),o=t.getRowEntry(d);if(!o?.rec)return;let h=o.rec.id;if(n.key==="ArrowRight")if(o.expanded===!1)R(h);else if(o.expanded&&t.getRowEntry(d+1))t.focusRow(d+1);else return;else if(o.expanded)L(h);else{let f=d-1;for(;f>=0&&(t.getRowEntry(f)?.level??0)>=(o.level??1);)f--;if(f<0)return;t.focusRow(f)}n.preventDefault(),n.stopPropagation()};r.addEventListener("click",x,!0),r.addEventListener("keydown",i,!0);let s=e.getStore().subscribe(()=>queueMicrotask(()=>!e.destroyed&&g()));return g(),()=>{s(),r.removeEventListener("click",x,!0),r.removeEventListener("keydown",i,!0),r.classList.remove("op-grid--tree"),l.setAttribute("role","grid"),t.setRowLayout(void 0)}},expand:e=>{R(e)},collapse:L,expandAll(){b=!0,g()},collapseAll(){a.clear(),g()}}}export{I as a,B as b};
2
- //# sourceMappingURL=chunk-GZIDE5K2.js.map
1
+ import{c as G}from"./chunk-QT5JRZZJ.js";import{b as M}from"./chunk-PZSHOSOS.js";import{e as S,f as C}from"./chunk-S4QD5NID.js";S("en",{treeExpand:"Expand",treeCollapse:"Collapse",treeLoading:"Loading"});S("pt-BR",{treeExpand:"Expandir",treeCollapse:"Recolher",treeLoading:"Carregando"});function I(c,t={},w=null){let E=t.children??"children",a=t.parentField??"parentId";return c.flatMap(({[E]:u,...p})=>[{...p,[a]:w},...I(u??[],t,p.id)])}function B(c={}){let t,w=c.parentField??"parentId",E=c.leafField??"leaf",a=new Set,u=new Set,p=new Set,m=new Map,b=!!c.expanded,A=e=>(m.get(e.id)?.length??0)>0||!!c.load&&e.get(E)!==!0&&!u.has(e.id);function g(){let e=t.getStore().getRange(),r=new Set(e.map(i=>i.id));m=new Map;let l=[];for(let i of e){let s=i.get(w);s==null||!r.has(s)?l.push(i):m.set(s,[...m.get(s)??[],i])}b&&(e.forEach(i=>a.add(i.id)),b=!1);let y=[],x=(i,s)=>{for(let n of i){let d=A(n),o=d&&a.has(n.id);y.push({rec:n,level:s+1,expanded:d?o:void 0,paint(h,f){let T=t.getColumns(),F=Math.max(0,T.findIndex(v=>v.field===(c.treeColumn??T[0]?.field))),k=h.filter(v=>!v.classList.contains("op-grid__selcell")&&!v.classList.contains("op-grid__actcell"))[F];if(!k)return;k.style.setProperty("--_depth",String(s));let P=d?M("span",`op-grid__expander${p.has(n.id)?" is-loading":""}`,{"data-id":String(n.id),role:"img","aria-label":C(p.has(n.id)?"treeLoading":o?"treeCollapse":"treeExpand")},G(p.has(n.id)?"clock":"chevron-down")):M("span","op-grid__expander is-leaf",{"aria-hidden":"true"});k.prepend(P),f.dataset.node=String(n.id)}}),d&&o&&x(m.get(n.id)??[],s+1)}};x(l,0),t.setRowLayout(y)}let _=e=>t.getStore().getById(e);async function R(e){let r=_(e);if(!(!r||!A(r)||a.has(e))){if(a.add(e),c.load&&!u.has(e)&&!m.get(e)?.length){p.add(e),g();try{let l=await c.load(r);u.add(e),p.delete(e),t.getStore().add(l.map(y=>({...y,[w]:e})))}catch(l){return p.delete(e),a.delete(e),g(),void t.emit("load-error",r,l)}}u.add(e),g(),t.emit("expand-node",r)}}function L(e){let r=_(e);!r||!a.delete(e)||(g(),t.emit("collapse-node",r))}return{init(e){t=e;let r=e.el,l=r.querySelector("[role=grid]");l.setAttribute("role","treegrid"),r.classList.add("op-grid--tree");let y=n=>{let d=n.closest("[data-node]")?.dataset.node;return t.getStore().getFiltered().find(o=>String(o.id)===d)?.id},x=n=>{let d=n.target.closest(".op-grid__expander:not(.is-leaf)"),o=d&&y(d);o!=null&&(n.stopPropagation(),a.has(o)?L(o):R(o))},i=n=>{if(n.target!==l||n.key!=="ArrowRight"&&n.key!=="ArrowLeft")return;let d=t.getActive(),o=t.getRowEntry(d);if(!o?.rec)return;let h=o.rec.id;if(n.key==="ArrowRight")if(o.expanded===!1)R(h);else if(o.expanded&&t.getRowEntry(d+1))t.focusRow(d+1);else return;else if(o.expanded)L(h);else{let f=d-1;for(;f>=0&&(t.getRowEntry(f)?.level??0)>=(o.level??1);)f--;if(f<0)return;t.focusRow(f)}n.preventDefault(),n.stopPropagation()};r.addEventListener("click",x,!0),r.addEventListener("keydown",i,!0);let s=e.getStore().subscribe(()=>queueMicrotask(()=>!e.destroyed&&g()));return g(),()=>{s(),r.removeEventListener("click",x,!0),r.removeEventListener("keydown",i,!0),r.classList.remove("op-grid--tree"),l.setAttribute("role","grid"),t.setRowLayout(void 0)}},expand:e=>{R(e)},collapse:L,expandAll(){b=!0,g()},collapseAll(){a.clear(),g()}}}export{I as a,B as b};
2
+ //# sourceMappingURL=chunk-BIQX75P2.js.map
@@ -1,3 +1,3 @@
1
- import{a as E}from"./chunk-RG6SHPHF.js";import{c as u}from"./chunk-DIOJGTUN.js";import{c as b}from"./chunk-VV7CFMPZ.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{e as v}from"./chunk-4AA4FQEM.js";import{e as d,f as m}from"./chunk-UDXO3KM3.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";var n=".op-menu__item",p=class y extends m{baseCls="op-menu";parentMenu;dd;sub;subOwner;opener=null;hoverCancel;list;searchEl;emptyEl;build(){return s("div","op-menu")}shell(){let t=!!this.config.search;t&&!this.searchEl&&(this.searchEl=s("input","op-menu__search",{type:"search",placeholder:`${h("search")}\u2026`,"aria-label":h("search"),autocomplete:"off"}),this.emptyEl=s("div","op-menu__empty",{},h("noResults")),this.listen(this.searchEl,"input",()=>this.filter()),this.listen(this.searchEl,"keydown",e=>{let i=this.first();i&&(e.key==="ArrowDown"||e.key==="Enter")&&(e.preventDefault(),e.key==="Enter"?this.activate(i):i.focus())})),this.list=t?this.list!==this.el&&this.list||s("div","op-menu__list",{role:"menu"}):this.el,this.el.setAttribute("role",t?"none":"menu"),t&&this.el.replaceChildren(this.searchEl,this.list,this.emptyEl)}first(){return this.list.querySelector(`${n}:not([hidden]):not([aria-disabled=true])`)}filter(){let t=(this.searchEl?.value??"").trim().toLowerCase();this.el.classList.toggle("is-searching",!!t);for(let e of Array.from(this.list.querySelectorAll(n))){let i=e.parentElement.getAttribute("aria-label")??"";e.hidden=!!t&&!`${i}
1
+ import{a as E}from"./chunk-NBR5IRZT.js";import{c as u}from"./chunk-QT5JRZZJ.js";import{c as b}from"./chunk-VV7CFMPZ.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{e as d,f as m}from"./chunk-KMBTJ5AG.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";import{e as v}from"./chunk-4AA4FQEM.js";var n=".op-menu__item",p=class y extends m{baseCls="op-menu";parentMenu;dd;sub;subOwner;opener=null;hoverCancel;list;searchEl;emptyEl;build(){return s("div","op-menu")}shell(){let t=!!this.config.search;t&&!this.searchEl&&(this.searchEl=s("input","op-menu__search",{type:"search",placeholder:`${h("search")}\u2026`,"aria-label":h("search"),autocomplete:"off"}),this.emptyEl=s("div","op-menu__empty",{},h("noResults")),this.listen(this.searchEl,"input",()=>this.filter()),this.listen(this.searchEl,"keydown",e=>{let i=this.first();i&&(e.key==="ArrowDown"||e.key==="Enter")&&(e.preventDefault(),e.key==="Enter"?this.activate(i):i.focus())})),this.list=t?this.list!==this.el&&this.list||s("div","op-menu__list",{role:"menu"}):this.el,this.el.setAttribute("role",t?"none":"menu"),t&&this.el.replaceChildren(this.searchEl,this.list,this.emptyEl)}first(){return this.list.querySelector(`${n}:not([hidden]):not([aria-disabled=true])`)}filter(){let t=(this.searchEl?.value??"").trim().toLowerCase();this.el.classList.toggle("is-searching",!!t);for(let e of Array.from(this.list.querySelectorAll(n))){let i=e.parentElement.getAttribute("aria-label")??"";e.hidden=!!t&&!`${i}
2
2
  ${e.textContent}`.toLowerCase().includes(t)}this.emptyEl&&(this.emptyEl.hidden=!!this.first()||!this.list.querySelector(n))}onRender(){this.shell(),this.renderItems();let t=b(this.el,{selector:n,orientation:"vertical"});this.own(()=>t.destroy()),this.listen(this.el,"click",e=>{let i=e.target.closest(n);i&&this.activate(i)}),this.listen(this.el,"keydown",e=>{let i=e.target.closest(n);if(e.target!==this.searchEl){if(e.key==="Tab")return this.closeAll();if(this.searchEl&&e.key.length===1&&e.key!==" "&&!e.ctrlKey&&!e.metaKey&&!e.altKey)return e.preventDefault(),this.searchEl.focus(),this.searchEl.value+=e.key,this.filter();i&&(e.key==="Enter"||e.key===" "?(e.preventDefault(),this.activate(i)):e.key==="ArrowRight"&&i.getAttribute("aria-haspopup")?(e.preventDefault(),this.openSub(i,!0)):e.key==="ArrowLeft"&&this.parentMenu&&(e.preventDefault(),this.hide()))}}),this.listen(this.el,"pointerover",e=>{let i=e.target.closest(n);!i||i.getAttribute("aria-disabled")==="true"||(this.hoverCancel?.(),i.focus(),i.getAttribute("aria-haspopup")?this.hoverCancel=this.later(()=>this.openSub(i,!1),150):this.sub?.hide())})}entries(){return(this.config.items??[]).flatMap(t=>typeof t=="string"?["-"]:d([t])??[])}renderItems(){let t=this.entries(),e=t.map((r,o)=>{if(r==="-")return s("div","op-menu__sep",{role:"separator"});let a=r.checked!==void 0,l=s("div","op-menu__item",{role:a?"menuitemcheckbox":"menuitem",tabindex:-1,"data-i":o,"aria-disabled":r.disabled?"true":null,"aria-checked":a?String(!!r.checked):null,"aria-haspopup":r.items?"menu":null,"aria-expanded":r.items?"false":null});return l.append(s("span","op-menu__icon",{},r.icon?u(r.icon):a&&r.checked?u("check"):null),s("span","op-menu__text",{},r.text??"")),r.badge!=null&&r.badge!==""&&l.append(s("span","op-menu__badge",{},String(r.badge))),r.items&&l.append(s("span","op-menu__arrow",{},u("chevron-right"))),l}),i=r=>t[r]==="-"?"":t[r].group??"",c=[...new Set(t.map((r,o)=>i(o)).filter(Boolean))];if(!c.length)return this.list.replaceChildren(...e),this.filter();this.list.replaceChildren(...e.filter((r,o)=>!i(o)),...c.map(r=>s("div","op-menu__group",{role:"group","aria-label":r},s("div","op-menu__group-label",{"aria-hidden":"true"},r),...e.filter((o,a)=>i(a)===r)))),this.filter()}setItems(t){this.config.items=t,this.rendered&&this.renderItems()}setSearch(t){this.config.search=t,this.rendered&&(this.shell(),this.renderItems())}activate(t){let e=this.entries()[Number(t.dataset.i)];if(!(!e||e.disabled)){if(e.items)return this.openSub(t,!0);e.checked!==void 0&&(e.checked=!e.checked),e.handler?.(e),this.root().emit("click",e),this.root().hide()}}root(){return this.parentMenu?this.parentMenu.root():this}openSub(t,e){let i=this.entries()[Number(t.dataset.i)];if(this.sub&&this.subOwner===t&&this.sub.isOpen())return e?this.sub.focusFirst():void 0;this.sub?.destroy(),this.sub=new y({items:i.items}),this.sub.parentMenu=this,this.subOwner=t,this.sub.on("hide",()=>t.setAttribute("aria-expanded","false")),t.setAttribute("aria-expanded","true"),this.sub.showBy(t,"right-start",e)}isOpen(){return!!this.dd?.isOpen()}focusFirst(){this.first()?.focus()}showBy(t,e="bottom-start",i=!0){this.open({anchor:t,placement:e},i)}showAt(t,e){this.open({anchor:{x:t,y:e},placement:"bottom-start"},!0)}open(t,e){this.opener=document.activeElement,this.dd?(this.dd.setAnchor(t.anchor),this.dd.setPlacement(t.placement)):(this.dd=new E({...t,content:this.el,role:"presentation",flip:!0}),this.dd.on("close",()=>{this.sub?.hide(),this.emit("hide")})),this.searchEl&&this.config.search&&(this.searchEl.value="",this.filter()),this.dd.open(),v(Array.from(this.el.querySelectorAll(n)),{dy:4}),e&&this.focusFirst(),this.emit("show")}hide(){if(!this.dd?.isOpen())return;this.dd.close();let t=this.parentMenu?this.parentMenu.subOwner:this.opener;t instanceof HTMLElement&&t.isConnected&&t.focus()}closeAll(){this.root().hide()}onDestroy(){this.sub?.destroy(),this.dd?.destroy()}};f("menu",p);export{p as a};
3
- //# sourceMappingURL=chunk-MNSDGJKA.js.map
3
+ //# sourceMappingURL=chunk-BPCD37A2.js.map
@@ -0,0 +1,2 @@
1
+ import{c as v}from"./chunk-QT5JRZZJ.js";import{a as C}from"./chunk-TIPK3SCJ.js";import{f as L}from"./chunk-KMBTJ5AG.js";import{b as s}from"./chunk-PZSHOSOS.js";import{d as b,e as T,f as u}from"./chunk-S4QD5NID.js";T("en",{timeline:"Timeline",tlNow:"Now",tlFromTo:"{from} to {to}"});T("pt-BR",{timeline:"Linha do tempo",tlNow:"Agora",tlFromTo:"{from} at\xE9 {to}"});var F=/^\d{1,2}:\d{2}$/,c=a=>String(a).padStart(2,"0"),w=864e5,$=(a,e)=>/^\d{4}-\d{2}/.test(a)&&!isNaN(+new Date(a))?new Intl.DateTimeFormat(b()._lang,e).format(new Date(/^\d{4}-\d{2}-\d{2}$/.test(a)?`${a}T00:00`:a)):a,k=class extends L{baseCls="op-timeline";items=[];scale;build(){return s("div",this.baseCls)}onRender(){this.el.classList.add(`op-timeline--${this.config.mode??"list"}`),this.config.mode==="range"&&this.config.direction==="vertical"&&this.el.classList.add("op-timeline--vertical");let e=this.config.store;e&&this.own(e.subscribe(()=>this.setItems(e.getFiltered().map(n=>n.data)))),this.setItems(e?e.getFiltered().map(n=>n.data):this.config.items??[]);for(let n of this.config.plugins??[]){let l=n.init(this);l&&this.own(l)}this.listen(this.el,"click",n=>this.pick(n.target)),this.listen(this.el,"keydown",n=>n.key==="Enter"&&this.pick(n.target))}pick(e){let n=Number(e.closest("[data-i]")?.dataset.i);this.items[n]&&this.emit("select",this.items[n])}getItems(){return this.items}getScale(){return this.scale}setItems(e){this.items=e,this.rendered&&this.paint()}paint(){this.el.setAttribute("role","list"),this.el.setAttribute("aria-label",this.config.ariaLabel??u("timeline")),this.el.replaceChildren(...this.config.mode==="range"?this.range():this.list()),this.emit("paint")}list(){return this.items.map((e,n)=>s("div",`op-timeline__item${e.tone&&e.tone!=="default"?` is-${e.tone}`:""}`,{role:"listitem","data-i":n,tabindex:0},s("div","op-timeline__when",{},e.time?$(e.time,/T/.test(e.time)?{dateStyle:"medium",timeStyle:"short"}:{dateStyle:"medium"}):""),s("div","op-timeline__marker",{"aria-hidden":"true"},e.icon?v(e.icon):null),s("div","op-timeline__body",{},s("div","op-timeline__title",{},e.title),e.text?s("div","op-timeline__text",{},e.text):null)))}range(){let e=this.config,n=F.test(e.from??this.items.find(t=>t.start)?.start??""),l=t=>n?(Number(t.slice(0,-3))*60+Number(t.slice(-2)))*6e4:+new Date(/^\d{4}-\d{2}-\d{2}$/.test(t)?`${t}T00:00`:t),p=this.items.filter(t=>t.start).map(t=>({x:t,a:l(t.start),b:l(t.end??t.start)+(!n&&t.end&&/^\d{4}-\d{2}-\d{2}$/.test(t.end)?w:0)}));if(!p.length&&!(e.from&&e.to))return[];let r=e.from?l(e.from):Math.min(...p.map(t=>t.a)),m=e.to?l(e.to)+(/^\d{4}-\d{2}-\d{2}$/.test(e.to)?w:0):Math.max(...p.map(t=>t.b),r+1),d=e.direction==="vertical",h=t=>`${(Math.min(Math.max((t-r)/(m-r),0),1)*100).toFixed(3)}%`,S=[...e.lanes??[],...p.map(t=>t.x.lane??"").filter((t,o,i)=>i.indexOf(t)===o&&!(e.lanes??[]).includes(t))];this.scale={lo:r,hi:m,clock:n,vertical:d,parse:l,format:t=>n?`${c(Math.floor(t/36e5))}:${c(Math.round(t/6e4)%60)}`:(o=>`${o.getFullYear()}-${c(o.getMonth()+1)}-${c(o.getDate())}T${c(o.getHours())}:${c(o.getMinutes())}`)(new Date(t))};let y=!n&&m-r>62*w,M=[],I=(t,o)=>{let i=s("span","op-timeline__tick",{},o);i.style[d?"insetBlockStart":"insetInlineStart"]=h(t),M.push(i)};if(n)for(let t=Math.ceil(r/36e5)*36e5,o=(m-r)/36e5>14?72e5:36e5;t<m;t+=o)I(t,this.scale.format(t));else for(let t=new Date(r);+t<m;y?t.setMonth(t.getMonth()+1,1):t.setDate(t.getDate()+1))t.setHours(0,0,0,0),!(+t<r)&&I(+t,new Intl.DateTimeFormat(b()._lang,y?{month:"short"}:{day:"numeric",month:"short"}).format(t));let f=[s("div","op-timeline__axis",{},s("span","op-timeline__lane-name"),s("div","op-timeline__track",{"aria-hidden":"true"},...M))];for(let t of S){let o=p.filter(i=>(i.x.lane??"")===t).map(({x:i,a:E,b:D})=>{let g=s("div",`op-timeline__bar${i.tone&&i.tone!=="default"?` is-${i.tone}`:""}`,{role:"listitem",tabindex:0,"data-i":this.items.indexOf(i),"aria-label":`${i.title}, ${u("tlFromTo",{from:$(i.start,{dateStyle:"medium",timeStyle:/T/.test(i.start)?"short":void 0}),to:$(i.end??i.start,{dateStyle:"medium",timeStyle:/T/.test(i.end??"")?"short":void 0})})}`},i.icon?v(i.icon):null,s("span","op-timeline__bar-text",{},i.title));return g.title=i.text??i.title,g.style[d?"insetBlockStart":"insetInlineStart"]=h(E),g.style[d?"insetBlockEnd":"insetInlineEnd"]=`calc(100% - ${h(Math.max(D,E+(m-r)/200))})`,g});f.push(s("div","op-timeline__lane",{role:"group","aria-label":t},s("span","op-timeline__lane-name",{},t),s("div","op-timeline__track",{},...o)))}this.el.style.gridTemplateColumns=d?`var(--op-timeline-axis-width) repeat(${S.length}, minmax(0, 1fr))`:"";let _=Date.now();if(e.now!==!1&&!n&&_>=r&&_<=m){let t=()=>{let o=s("div","op-timeline__now",{"aria-hidden":"true",title:u("tlNow")});return o.style[d?"insetBlockStart":"insetInlineStart"]=h(_),o};if(d)for(let o of f.slice(1).map(i=>i.querySelector(".op-timeline__track")))o.append(t());else f.push(s("div","op-timeline__nowrow",{"aria-hidden":"true"},s("span","op-timeline__lane-name"),s("div","op-timeline__track",{},t())))}return f}};C("timeline",k);export{k as a};
2
+ //# sourceMappingURL=chunk-CGSCBLG2.js.map