optikos 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/build.js +2 -0
  3. package/dist/build.js.map +7 -0
  4. package/dist/chunk-2CVMT3IW.js +3 -0
  5. package/dist/chunk-2CVMT3IW.js.map +7 -0
  6. package/dist/{chunk-JSEI44A7.js → chunk-2I4Y7I7C.js} +2 -2
  7. package/dist/{chunk-U5L76VVB.js → chunk-2I7HDIOU.js} +2 -2
  8. package/dist/{chunk-FCJI2JF7.js → chunk-34KVSA2V.js} +2 -2
  9. package/dist/{chunk-NQV4THNE.js → chunk-37PYJAA2.js} +2 -2
  10. package/dist/{chunk-JJLOUMCJ.js → chunk-3OA3P37P.js} +2 -2
  11. package/dist/chunk-5G5PHOZJ.js +2 -0
  12. package/dist/chunk-5G5PHOZJ.js.map +7 -0
  13. package/dist/{chunk-S2CMWKVB.js → chunk-5GCTM37D.js} +2 -2
  14. package/dist/chunk-632LUU52.js +2 -0
  15. package/dist/chunk-632LUU52.js.map +7 -0
  16. package/dist/{chunk-RG6SHPHF.js → chunk-6NP4AEV4.js} +2 -2
  17. package/dist/{chunk-6LJK4QWF.js → chunk-6PPRYSLN.js} +2 -2
  18. package/dist/{chunk-NNR2FNHG.js → chunk-6TZJO2G2.js} +2 -2
  19. package/dist/{chunk-DWTDNKXX.js → chunk-A36JFIA3.js} +2 -2
  20. package/dist/{chunk-CFGCB37K.js → chunk-ADHKL2GM.js} +2 -2
  21. package/dist/{chunk-CMV3F6HR.js → chunk-AJN66F32.js} +2 -2
  22. package/dist/{chunk-DWA45BWR.js → chunk-BRGT4O6Q.js} +2 -2
  23. package/dist/{chunk-643FOYQB.js → chunk-BTGJ3MP4.js} +2 -2
  24. package/dist/{chunk-AT7VFZRB.js → chunk-CXZKCBQE.js} +2 -2
  25. package/dist/{chunk-PMOXLQ72.js → chunk-DLRGB5NY.js} +2 -2
  26. package/dist/chunk-DY3ZYMXD.js +2 -0
  27. package/dist/chunk-DY3ZYMXD.js.map +7 -0
  28. package/dist/{chunk-M7FNPRV4.js → chunk-EO777UIN.js} +2 -2
  29. package/dist/{chunk-HLS5FI55.js → chunk-ESRS5ZQV.js} +2 -2
  30. package/dist/{chunk-YDX2PCVL.js → chunk-FNZI6MFG.js} +2 -2
  31. package/dist/{chunk-6PZPBPAD.js → chunk-FSR6BDVO.js} +2 -2
  32. package/dist/{chunk-ZSPJZ3ZH.js → chunk-G26R2F3W.js} +2 -2
  33. package/dist/chunk-GLAY4RJF.js +2 -0
  34. package/dist/chunk-GLAY4RJF.js.map +7 -0
  35. package/dist/{chunk-SWCB2GMN.js → chunk-GNKVLJ5H.js} +2 -2
  36. package/dist/chunk-IODSL7KU.js +2 -0
  37. package/dist/chunk-IODSL7KU.js.map +7 -0
  38. package/dist/{chunk-EXIADWI7.js → chunk-J2TCHWYD.js} +2 -2
  39. package/dist/{chunk-IUOEPAWG.js → chunk-J5BZAKC6.js} +2 -2
  40. package/dist/{chunk-5BMG5ZBY.js → chunk-JBOKM5YA.js} +2 -2
  41. package/dist/{chunk-N2LS4JD6.js → chunk-L6DOWGBO.js} +2 -2
  42. package/dist/{chunk-2YRQULDC.js → chunk-LHWY6G6Q.js} +2 -2
  43. package/dist/chunk-LLHDEUIA.js +2 -0
  44. package/dist/chunk-LLHDEUIA.js.map +7 -0
  45. package/dist/chunk-LXWCTCZV.js +2 -0
  46. package/dist/chunk-LXWCTCZV.js.map +7 -0
  47. package/dist/{chunk-FPU53CCV.js → chunk-M7HLHGQV.js} +2 -2
  48. package/dist/{chunk-J5QPFJ7M.js → chunk-MGSCSS7X.js} +2 -2
  49. package/dist/{chunk-NJ5IFOPR.js → chunk-MM2OC66E.js} +2 -2
  50. package/dist/{chunk-MNSDGJKA.js → chunk-MQEALOU3.js} +2 -2
  51. package/dist/{chunk-TQPQ4UEA.js → chunk-NAUSRVB6.js} +2 -2
  52. package/dist/{chunk-JLKIHXZP.js → chunk-NEVDHDJ4.js} +2 -2
  53. package/dist/{chunk-F4HZUAKM.js → chunk-NWHH3CYH.js} +2 -2
  54. package/dist/{chunk-3FCIZKIN.js → chunk-OADWLPSF.js} +2 -2
  55. package/dist/{chunk-4AZ44KV4.js → chunk-OB3VIRQR.js} +2 -2
  56. package/dist/{chunk-4CWYF4O7.js → chunk-QOSTS5I3.js} +2 -2
  57. package/dist/{chunk-XR677UYD.js → chunk-QVBDBGS4.js} +2 -2
  58. package/dist/{chunk-GEBAYD6N.js → chunk-RMATRKXV.js} +2 -2
  59. package/dist/{chunk-Z6L55FTN.js → chunk-S3ILIWSW.js} +2 -2
  60. package/dist/{chunk-P4O57S6N.js → chunk-SEUIIPHS.js} +2 -2
  61. package/dist/{chunk-R32HPK7R.js → chunk-T5OGUCY2.js} +2 -2
  62. package/dist/chunk-TMBGEZSD.js +2 -0
  63. package/dist/chunk-TMBGEZSD.js.map +7 -0
  64. package/dist/{chunk-5PWPAN62.js → chunk-TVO3Z2BM.js} +2 -2
  65. package/dist/{chunk-UQRQH2JW.js → chunk-U25QSLAH.js} +2 -2
  66. package/dist/chunk-UCWICDYG.js +2 -0
  67. package/dist/{chunk-YXOKWCYS.js.map → chunk-UCWICDYG.js.map} +4 -4
  68. package/dist/{chunk-C3MWS7P2.js → chunk-UL364TLO.js} +2 -2
  69. package/dist/chunk-UUAGMZD2.js +2 -0
  70. package/dist/chunk-UUAGMZD2.js.map +7 -0
  71. package/dist/chunk-XFDNXSU5.js +2 -0
  72. package/dist/{chunk-XQHATUKN.js.map → chunk-XFDNXSU5.js.map} +3 -3
  73. package/dist/{chunk-XFIREDWO.js → chunk-XNRZJP4E.js} +2 -2
  74. package/dist/{chunk-JE56CJX2.js → chunk-Z6HZY2YG.js} +2 -2
  75. package/dist/{chunk-3QRA3XOA.js → chunk-ZEIE2OCQ.js} +2 -2
  76. package/dist/{chunk-4S3HRFQB.js → chunk-ZLYZFHEN.js} +2 -2
  77. package/dist/components/breadcrumb.js +1 -1
  78. package/dist/components/button.js +1 -1
  79. package/dist/components/chart.js +1 -1
  80. package/dist/components/chat.js +1 -1
  81. package/dist/components/checkbox.js +1 -1
  82. package/dist/components/checkboxgroup.js +1 -1
  83. package/dist/components/codeviewer.js +1 -1
  84. package/dist/components/columntotals.js +2 -0
  85. package/dist/components/columntotals.js.map +7 -0
  86. package/dist/components/combobox.js +1 -1
  87. package/dist/components/dataview.js +1 -1
  88. package/dist/components/datefield.js +1 -1
  89. package/dist/components/daterangefield.js +1 -1
  90. package/dist/components/datetimefield.js +1 -1
  91. package/dist/components/dial.js +1 -1
  92. package/dist/components/dropdown.js +1 -1
  93. package/dist/components/exportbar.js +2 -0
  94. package/dist/components/exportbar.js.map +7 -0
  95. package/dist/components/fieldgroup.js +1 -1
  96. package/dist/components/fieldlist.js +1 -1
  97. package/dist/components/filterbuilder.js +1 -1
  98. package/dist/components/form.js +1 -1
  99. package/dist/components/formactions.js +1 -1
  100. package/dist/components/grid.js +1 -1
  101. package/dist/components/gridexport.js +1 -1
  102. package/dist/components/grouping.js +1 -1
  103. package/dist/components/imagefield.js +1 -1
  104. package/dist/components/inputgroup.js +1 -1
  105. package/dist/components/lookupfield.js +1 -1
  106. package/dist/components/maskfield.js +1 -1
  107. package/dist/components/menu.js +1 -1
  108. package/dist/components/messagebox.js +1 -1
  109. package/dist/components/navmenu.js +1 -1
  110. package/dist/components/numberfield.js +1 -1
  111. package/dist/components/panel.js +1 -1
  112. package/dist/components/pickerfield.js +1 -1
  113. package/dist/components/radiogroup.js +1 -1
  114. package/dist/components/searchgrid.js +1 -1
  115. package/dist/components/secretfield.js +1 -1
  116. package/dist/components/select.js +1 -1
  117. package/dist/components/shortcuts.js +1 -1
  118. package/dist/components/slider.js +1 -1
  119. package/dist/components/stat.js +1 -1
  120. package/dist/components/stepform.js +1 -1
  121. package/dist/components/suggestfield.js +1 -1
  122. package/dist/components/table.js +1 -1
  123. package/dist/components/textarea.js +1 -1
  124. package/dist/components/textfield.js +1 -1
  125. package/dist/components/timeentry.js +2 -0
  126. package/dist/components/timeentry.js.map +7 -0
  127. package/dist/components/timefield.js +1 -1
  128. package/dist/components/timeline.js +1 -1
  129. package/dist/components/toast.js +1 -1
  130. package/dist/components/toggle.js +1 -1
  131. package/dist/components/viewmanager.js +1 -1
  132. package/dist/components/widget.js +1 -1
  133. package/dist/components/window.js +1 -1
  134. package/dist/core.js +1 -1
  135. package/dist/css/columntotals.css +56 -0
  136. package/dist/css/exportbar.css +9 -0
  137. package/dist/css/grid.css +12 -0
  138. package/dist/css/grouping.css +7 -0
  139. package/dist/css/timeentry.css +116 -0
  140. package/dist/css/timeline.css +45 -0
  141. package/dist/data.js +1 -1
  142. package/dist/dev.js +1 -1
  143. package/dist/dev.js.map +2 -2
  144. package/dist/index.js +4 -4
  145. package/dist/index.js.map +1 -1
  146. package/dist/optikos.css +248 -0
  147. package/dist/types/build/build.d.ts +49 -0
  148. package/dist/types/build/index.d.ts +1 -0
  149. package/dist/types/components/columntotals.d.ts +1 -0
  150. package/dist/types/components/data/columntotals/columntotals.d.ts +24 -0
  151. package/dist/types/components/data/exportbar/exportbar.d.ts +24 -0
  152. package/dist/types/components/data/grid/footer.d.ts +6 -0
  153. package/dist/types/components/data/grouping/controls.d.ts +27 -0
  154. package/dist/types/components/data/grouping/grouping.d.ts +15 -3
  155. package/dist/types/components/data/timeentry/timeentry.d.ts +37 -0
  156. package/dist/types/components/data/timeline/timeline.d.ts +3 -0
  157. package/dist/types/components/exportbar.d.ts +1 -0
  158. package/dist/types/components/timeentry.d.ts +1 -0
  159. package/dist/types/data/column.d.ts +4 -2
  160. package/dist/types/index.d.ts +4 -0
  161. package/dist/ui.js +1 -1
  162. package/package.json +5 -1
  163. package/dist/chunk-2HNQ2XRY.js +0 -2
  164. package/dist/chunk-2HNQ2XRY.js.map +0 -7
  165. package/dist/chunk-BJWREA76.js +0 -2
  166. package/dist/chunk-BJWREA76.js.map +0 -7
  167. package/dist/chunk-GFFZTFQH.js +0 -2
  168. package/dist/chunk-GFFZTFQH.js.map +0 -7
  169. package/dist/chunk-SB4ICXBV.js +0 -2
  170. package/dist/chunk-SB4ICXBV.js.map +0 -7
  171. package/dist/chunk-XQHATUKN.js +0 -2
  172. package/dist/chunk-YXOKWCYS.js +0 -2
  173. /package/dist/{chunk-JSEI44A7.js.map → chunk-2I4Y7I7C.js.map} +0 -0
  174. /package/dist/{chunk-U5L76VVB.js.map → chunk-2I7HDIOU.js.map} +0 -0
  175. /package/dist/{chunk-FCJI2JF7.js.map → chunk-34KVSA2V.js.map} +0 -0
  176. /package/dist/{chunk-NQV4THNE.js.map → chunk-37PYJAA2.js.map} +0 -0
  177. /package/dist/{chunk-JJLOUMCJ.js.map → chunk-3OA3P37P.js.map} +0 -0
  178. /package/dist/{chunk-S2CMWKVB.js.map → chunk-5GCTM37D.js.map} +0 -0
  179. /package/dist/{chunk-RG6SHPHF.js.map → chunk-6NP4AEV4.js.map} +0 -0
  180. /package/dist/{chunk-6LJK4QWF.js.map → chunk-6PPRYSLN.js.map} +0 -0
  181. /package/dist/{chunk-NNR2FNHG.js.map → chunk-6TZJO2G2.js.map} +0 -0
  182. /package/dist/{chunk-DWTDNKXX.js.map → chunk-A36JFIA3.js.map} +0 -0
  183. /package/dist/{chunk-CFGCB37K.js.map → chunk-ADHKL2GM.js.map} +0 -0
  184. /package/dist/{chunk-CMV3F6HR.js.map → chunk-AJN66F32.js.map} +0 -0
  185. /package/dist/{chunk-DWA45BWR.js.map → chunk-BRGT4O6Q.js.map} +0 -0
  186. /package/dist/{chunk-643FOYQB.js.map → chunk-BTGJ3MP4.js.map} +0 -0
  187. /package/dist/{chunk-AT7VFZRB.js.map → chunk-CXZKCBQE.js.map} +0 -0
  188. /package/dist/{chunk-PMOXLQ72.js.map → chunk-DLRGB5NY.js.map} +0 -0
  189. /package/dist/{chunk-M7FNPRV4.js.map → chunk-EO777UIN.js.map} +0 -0
  190. /package/dist/{chunk-HLS5FI55.js.map → chunk-ESRS5ZQV.js.map} +0 -0
  191. /package/dist/{chunk-YDX2PCVL.js.map → chunk-FNZI6MFG.js.map} +0 -0
  192. /package/dist/{chunk-6PZPBPAD.js.map → chunk-FSR6BDVO.js.map} +0 -0
  193. /package/dist/{chunk-ZSPJZ3ZH.js.map → chunk-G26R2F3W.js.map} +0 -0
  194. /package/dist/{chunk-SWCB2GMN.js.map → chunk-GNKVLJ5H.js.map} +0 -0
  195. /package/dist/{chunk-EXIADWI7.js.map → chunk-J2TCHWYD.js.map} +0 -0
  196. /package/dist/{chunk-IUOEPAWG.js.map → chunk-J5BZAKC6.js.map} +0 -0
  197. /package/dist/{chunk-5BMG5ZBY.js.map → chunk-JBOKM5YA.js.map} +0 -0
  198. /package/dist/{chunk-N2LS4JD6.js.map → chunk-L6DOWGBO.js.map} +0 -0
  199. /package/dist/{chunk-2YRQULDC.js.map → chunk-LHWY6G6Q.js.map} +0 -0
  200. /package/dist/{chunk-FPU53CCV.js.map → chunk-M7HLHGQV.js.map} +0 -0
  201. /package/dist/{chunk-J5QPFJ7M.js.map → chunk-MGSCSS7X.js.map} +0 -0
  202. /package/dist/{chunk-NJ5IFOPR.js.map → chunk-MM2OC66E.js.map} +0 -0
  203. /package/dist/{chunk-MNSDGJKA.js.map → chunk-MQEALOU3.js.map} +0 -0
  204. /package/dist/{chunk-TQPQ4UEA.js.map → chunk-NAUSRVB6.js.map} +0 -0
  205. /package/dist/{chunk-JLKIHXZP.js.map → chunk-NEVDHDJ4.js.map} +0 -0
  206. /package/dist/{chunk-F4HZUAKM.js.map → chunk-NWHH3CYH.js.map} +0 -0
  207. /package/dist/{chunk-3FCIZKIN.js.map → chunk-OADWLPSF.js.map} +0 -0
  208. /package/dist/{chunk-4AZ44KV4.js.map → chunk-OB3VIRQR.js.map} +0 -0
  209. /package/dist/{chunk-4CWYF4O7.js.map → chunk-QOSTS5I3.js.map} +0 -0
  210. /package/dist/{chunk-XR677UYD.js.map → chunk-QVBDBGS4.js.map} +0 -0
  211. /package/dist/{chunk-GEBAYD6N.js.map → chunk-RMATRKXV.js.map} +0 -0
  212. /package/dist/{chunk-Z6L55FTN.js.map → chunk-S3ILIWSW.js.map} +0 -0
  213. /package/dist/{chunk-P4O57S6N.js.map → chunk-SEUIIPHS.js.map} +0 -0
  214. /package/dist/{chunk-R32HPK7R.js.map → chunk-T5OGUCY2.js.map} +0 -0
  215. /package/dist/{chunk-5PWPAN62.js.map → chunk-TVO3Z2BM.js.map} +0 -0
  216. /package/dist/{chunk-UQRQH2JW.js.map → chunk-U25QSLAH.js.map} +0 -0
  217. /package/dist/{chunk-C3MWS7P2.js.map → chunk-UL364TLO.js.map} +0 -0
  218. /package/dist/{chunk-XFIREDWO.js.map → chunk-XNRZJP4E.js.map} +0 -0
  219. /package/dist/{chunk-JE56CJX2.js.map → chunk-Z6HZY2YG.js.map} +0 -0
  220. /package/dist/{chunk-3QRA3XOA.js.map → chunk-ZEIE2OCQ.js.map} +0 -0
  221. /package/dist/{chunk-4S3HRFQB.js.map → chunk-ZLYZFHEN.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/components/data/timeentry/timeentry.ts"],
4
+ "sourcesContent": ["import { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport type { Model } from '../../../data/model';\nimport type { Timeline, TimelineItem, TimelinePlugin } from '../timeline/timeline';\n\naddMessages('en', {\n teNew: 'New entry', teHours: '{h}h{m}', teHoursOnly: '{h}h', teMinutes: '{m}m', teTotal: 'Total', teAt: 'at {time}',\n teCreated: '{title} created, {range}, {lane}', teMoved: '{title} moved to {range}, {lane}', teResized: '{title} now {range}, {lane}', teRemoved: '{title} removed',\n teRefused: 'That overlaps another entry', teCursor: '{lane}: Enter adds an entry at {time}',\n});\naddMessages('pt-BR', {\n teNew: 'Novo apontamento', teHours: '{h}h{m}', teHoursOnly: '{h}h', teMinutes: '{m}min', teTotal: 'Total', teAt: '\u00E0s {time}',\n teCreated: '{title} criado, {range}, {lane}', teMoved: '{title} movido para {range}, {lane}', teResized: '{title} agora {range}, {lane}', teRemoved: '{title} removido',\n teRefused: 'Isso se sobrep\u00F5e a outro apontamento', teCursor: '{lane}: Enter cria um apontamento \u00E0s {time}',\n});\n\nexport interface TimeEntryOptions {\n /** Minutes everything snaps to. Default 15. */\n step?: number;\n /** Shortest entry, in minutes. Default `step`. */\n minDuration?: number;\n /** Length of an entry created with the keyboard, in minutes. Default 60. */\n duration?: number;\n /** `false` keeps two entries of one lane from overlapping: a drag stops at the neighbour, a move is refused. Default `true`. */\n overlap?: boolean;\n /** Let an entry change lane (drag up/down, \u2191/\u2193). Default `false`. */\n moveAcrossLanes?: boolean;\n /** Minutes a lane should add up to: its total is `is-under`, `is-met` or `is-over` that. */\n target?: number;\n /** Return `false` to lock an entry (approved, invoiced): it cannot be moved, resized, edited or removed. */\n editable?: (item: TimelineItem) => boolean;\n /** Fields of a new entry besides `lane`, `start` and `end`. */\n defaults?: Partial<TimelineItem>;\n /**\n * Opens your own dialog to fill a new entry (`'create'`, after the drag or Enter) or to edit one (`'edit'`, double click\n * or Enter on a block). Resolve with the fields to set (`title`, `text`, ...), or with `false` to cancel.\n */\n form?: (item: TimelineItem, mode: 'create' | 'edit') => Promise<Partial<TimelineItem> | false | void> | Partial<TimelineItem> | false | void;\n}\n\ntype Span = { lane: string; start: number; end: number };\ninterface Drag {\n kind: 'create' | 'move' | 'start' | 'end';\n item?: TimelineItem;\n bar?: HTMLElement;\n from: Span;\n anchor: number;\n last: Span;\n ghost?: HTMLElement;\n holder: HTMLElement;\n id: number;\n invalid: boolean;\n}\n\nconst MIN = 60000;\nconst LONG_PRESS = 450;\n\n/** A duration in minutes as people write it: `7h30`, `8h`, `45m`. */\nexport function formatDuration(minutes: number): string {\n const m = Math.round(minutes);\n const [hh, mm] = [Math.floor(m / 60), m % 60];\n if (!hh) return t('teMinutes', { m: mm });\n return mm ? t('teHours', { h: hh, m: String(mm).padStart(2, '0') }) : t('teHoursOnly', { h: hh });\n}\n\n/**\n * Creates, moves, resizes and removes entries on a `range` Timeline: drag an empty lane to create, drag a block to move,\n * its ends to resize; the same with the keyboard (see the ficha). Snaps to `step`, keeps to `from`/`to`, can forbid\n * overlap and lock entries. Shows each lane's total (and a grand total) against `target`.\n *\n * Events on the timeline: `before-create({ lane, start, end })` \u2192 `create(item)`, `before-change(item, next, old)` \u2192\n * `change(item, next, old)`, `before-remove(item)` \u2192 `remove(item)`, `edit(item)` (double click, Enter). With a `store`\n * the records are updated here (the app saves); without, the `items` are.\n * Touch: a block drags at once; an empty lane needs a long press (about half a second) so a swipe still scrolls.\n */\nexport function timeEntry(options: TimeEntryOptions = {}): TimelinePlugin {\n const step = options.step ?? 15;\n const min = options.minDuration ?? step;\n const stepMs = step * MIN;\n const minMs = min * MIN;\n const open = options.overlap !== false;\n\n return {\n init(tl: Timeline) {\n const el = tl.el;\n let drag: Drag | undefined;\n let press: ReturnType<typeof setTimeout> | undefined;\n let refocus: TimelineItem | undefined;\n const cursors = new Map<string, number>();\n const live = h('div', 'op-sr-only', { 'aria-live': 'polite' });\n let off: Array<() => void> = [];\n\n const sc = () => tl.getScale()!;\n /** Time runs along \u2190/\u2192 (horizontal) or \u2191/\u2193 (vertical); lanes change along the other pair. */\n const keys = () => (sc().vertical ? { earlier: 'ArrowUp', later: 'ArrowDown', prev: 'ArrowLeft', next: 'ArrowRight' } : { earlier: 'ArrowLeft', later: 'ArrowRight', prev: 'ArrowUp', next: 'ArrowDown' });\n const lock = (it: TimelineItem) => options.editable?.(it) === false;\n const lanes = () => Array.from(el.querySelectorAll<HTMLElement>('.op-timeline__lane'));\n const laneName = (lane: HTMLElement) => lane.getAttribute('aria-label') ?? '';\n const inLane = (name: string, skip?: TimelineItem) => tl.getItems().filter((x) => x !== skip && x.start && (x.lane ?? '') === name);\n const span = (it: TimelineItem): Span => ({ lane: it.lane ?? '', start: sc().parse(it.start!), end: sc().parse(it.end ?? it.start!) });\n const snap = (v: number) => sc().lo + Math.round((v - sc().lo) / stepMs) * stepMs;\n const pct = (v: number) => `${(((v - sc().lo) / (sc().hi - sc().lo)) * 100).toFixed(3)}%`;\n const place = (node: HTMLElement, s: Span) => {\n node.style[sc().vertical ? 'insetBlockStart' : 'insetInlineStart'] = pct(s.start);\n node.style[sc().vertical ? 'insetBlockEnd' : 'insetInlineEnd'] = `calc(100% - ${pct(s.end)})`;\n };\n const range = (s: Span) => `${sc().format(s.start)}\u2013${sc().format(s.end)}`.replace(/\\d{4}-\\d{2}-\\d{2}T/g, '');\n const say = (key: string, it: Partial<TimelineItem>, s: Span) => (live.textContent = t(key, { title: it.title ?? t('teNew'), range: range(s), lane: s.lane }));\n const store = () => tl.config.store;\n const recOf = (it: TimelineItem): Model | undefined => store()?.getFiltered().find((r) => r.data === it);\n\n const msAt = (track: HTMLElement, x: number, y: number) => {\n const r = track.getBoundingClientRect();\n const [at, from, size] = sc().vertical ? [y, r.top, r.height] : [x, r.left, r.width];\n const f = size ? Math.min(1, Math.max(0, (at - from) / size)) : 0;\n return sc().lo + f * (sc().hi - sc().lo);\n };\n const laneAt = (x: number, y: number, fallback: HTMLElement) =>\n lanes().find((l) => {\n const r = l.getBoundingClientRect();\n return sc().vertical ? x >= r.left && x < r.right : y >= r.top && y < r.bottom;\n }) ?? fallback;\n const trackOf = (lane: HTMLElement) => lane.querySelector<HTMLElement>('.op-timeline__track')!;\n\n const fits = (s: Span, skip?: TimelineItem) => open || !inLane(s.lane, skip).some((x) => { const o = span(x); return s.start < o.end && o.start < s.end; });\n const limit = (s: Span, around: Span, skip?: TimelineItem): Span => {\n if (open) return s;\n const others = inLane(s.lane, skip).map(span);\n const before = Math.max(sc().lo, ...others.filter((o) => o.end <= around.start).map((o) => o.end));\n const after = Math.min(sc().hi, ...others.filter((o) => o.start >= around.end).map((o) => o.start));\n return { ...s, start: Math.max(s.start, before), end: Math.min(s.end, after) };\n };\n\n function candidate(d: Drag, x: number, y: number): Span {\n const own = d.holder.closest<HTMLElement>('.op-timeline__lane')!;\n const track = trackOf(laneAt(x, y, own));\n const at = snap(msAt(trackOf(own), x, y));\n const { from } = d;\n if (d.kind === 'create') return limit({ lane: from.lane, start: Math.min(d.anchor, at), end: Math.max(d.anchor + minMs, at) }, { ...from, start: d.anchor, end: d.anchor });\n if (d.kind === 'start') return limit({ ...from, start: Math.max(sc().lo, Math.min(at, from.end - minMs)) }, from, d.item);\n if (d.kind === 'end') return limit({ ...from, end: Math.min(sc().hi, Math.max(at, from.start + minMs)) }, from, d.item);\n const len = from.end - from.start;\n const start = Math.min(sc().hi - len, Math.max(sc().lo, from.start + at - d.anchor));\n const lane = options.moveAcrossLanes ? laneName(track.closest<HTMLElement>('.op-timeline__lane')!) : from.lane;\n return { lane, start, end: start + len };\n }\n\n function show(d: Drag, s: Span) {\n const ok = fits(s, d.item) && s.end - s.start >= minMs;\n d.invalid = !ok;\n if (d.bar) d.bar.classList.toggle('is-invalid', !ok);\n d.ghost?.classList.toggle('is-invalid', !ok);\n if (!ok) return;\n d.last = s;\n const node = d.bar ?? d.ghost!;\n const lane = lanes().find((l) => laneName(l) === s.lane);\n if (lane && node.parentElement !== trackOf(lane)) trackOf(lane).append(node);\n place(node, s);\n }\n\n function finish(d: Drag, commit: boolean) {\n drag = undefined;\n d.holder.releasePointerCapture?.(d.id);\n d.holder.classList.remove('is-dragging', 'is-resizing');\n el.classList.remove('is-time-dragging');\n d.ghost?.remove();\n d.bar?.classList.remove('is-dragging', 'is-resizing', 'is-invalid');\n const s = d.last;\n const unchanged = d.kind !== 'create' && s.lane === d.from.lane && s.start === d.from.start && s.end === d.from.end;\n if (!commit || unchanged || (d.kind === 'create' && s.end - s.start < stepMs) || s.end - s.start < minMs) return void tl.setItems(tl.getItems());\n apply(d.kind, d.item, s, d.from);\n }\n\n async function apply(kind: Drag['kind'] | 'key', item: TimelineItem | undefined, s: Span, from?: Span) {\n const values = { lane: s.lane, start: sc().format(s.start), end: sc().format(s.end) };\n if (!item) {\n if (tl.emit('before-create', values) === false) return void tl.setItems(tl.getItems());\n const made = { title: t('teNew'), ...options.defaults, ...values } as TimelineItem;\n if (options.form) {\n const filled = await options.form(made, 'create');\n if (!filled) return void tl.setItems(tl.getItems());\n Object.assign(made, filled);\n }\n const item = store() ? store()!.add(made)[0].data : made;\n refocus = item;\n tl.setItems(store() ? tl.getItems() : [...tl.getItems(), item]);\n say('teCreated', item, s);\n return void tl.emit('create', item);\n }\n const old = { lane: from!.lane, start: sc().format(from!.start), end: sc().format(from!.end) };\n if (tl.emit('before-change', item, values, old) === false) return void tl.setItems(tl.getItems());\n refocus = item;\n const rec = recOf(item);\n if (rec) for (const k of ['lane', 'start', 'end'] as const) rec.set(k, values[k]);\n else {\n Object.assign(item, values);\n tl.setItems([...tl.getItems()]);\n }\n say(kind === 'move' || kind === 'key' ? 'teMoved' : 'teResized', item, s);\n tl.emit('change', item, values, old);\n }\n\n /** The dialog's answer to an edit: the fields land on the entry (or its record) like any change. */\n async function edit(item: TimelineItem) {\n tl.emit('edit', item);\n if (!options.form) return;\n const patch = await options.form({ ...item }, 'edit');\n if (!patch) return;\n const old = { ...item };\n if (tl.emit('before-change', item, patch, old) === false) return;\n refocus = item;\n const rec = recOf(item);\n if (rec) for (const [k, v] of Object.entries(patch)) rec.set(k, v);\n else {\n Object.assign(item, patch);\n tl.setItems([...tl.getItems()]);\n }\n tl.emit('change', item, patch, old);\n }\n\n function remove(item: TimelineItem) {\n if (lock(item) || tl.emit('before-remove', item) === false) return;\n const rec = recOf(item);\n if (rec) store()!.remove(rec);\n else tl.setItems(tl.getItems().filter((x) => x !== item));\n say('teRemoved', item, span(item));\n tl.emit('remove', item);\n }\n\n const itemOf = (bar: Element | null) => (bar ? tl.getItems()[Number((bar as HTMLElement).dataset.i)] : undefined);\n\n function begin(e: PointerEvent, d: Omit<Drag, 'id' | 'last' | 'invalid'>) {\n drag = { ...d, last: d.from, id: e.pointerId, invalid: false };\n d.holder.setPointerCapture?.(e.pointerId);\n el.classList.add('is-time-dragging');\n d.holder.classList.add(d.kind === 'move' || d.kind === 'create' ? 'is-dragging' : 'is-resizing');\n d.bar?.classList.add(d.kind === 'move' ? 'is-dragging' : 'is-resizing');\n if (d.kind === 'create') {\n drag.ghost = h('div', 'op-timeentry__ghost', { 'aria-hidden': 'true' });\n d.holder.append(drag.ghost);\n place(drag.ghost, { ...d.from, start: d.anchor, end: d.anchor + minMs });\n }\n }\n\n const onDown = (e: PointerEvent) => {\n if (e.button || drag) return;\n const target = e.target as HTMLElement;\n const bar = target.closest<HTMLElement>('.op-timeline__bar');\n const lane = target.closest<HTMLElement>('.op-timeline__lane');\n if (!lane) return;\n const track = trackOf(lane);\n if (bar) {\n const item = itemOf(bar);\n if (!item || lock(item)) return;\n const kind = target.closest('.op-timeentry__handle--start') ? 'start' : target.closest('.op-timeentry__handle--end') ? 'end' : 'move';\n e.preventDefault();\n return begin(e, { kind, item, bar, holder: track, from: span(item), anchor: snap(msAt(track, e.clientX, e.clientY)) });\n }\n if (!target.closest('.op-timeline__track')) return;\n const go = () => begin(e, { kind: 'create', holder: track, from: { lane: laneName(lane), start: 0, end: 0 }, anchor: snap(msAt(track, e.clientX, e.clientY)) });\n if (e.pointerType === 'touch') {\n press = setTimeout(() => ((press = undefined), go()), LONG_PRESS);\n return;\n }\n e.preventDefault();\n go();\n };\n const onMove = (e: PointerEvent) => {\n if (press && e.pointerType === 'touch') {\n clearTimeout(press);\n press = undefined;\n }\n if (!drag || e.pointerId !== drag.id) return;\n show(drag, candidate(drag, e.clientX, e.clientY));\n };\n const onUp = (e: PointerEvent) => {\n clearTimeout(press);\n press = undefined;\n if (drag && e.pointerId === drag.id) finish(drag, e.type === 'pointerup');\n };\n const onTouchMove = (e: TouchEvent) => drag && e.cancelable && e.preventDefault();\n const onDouble = (e: Event) => {\n const item = itemOf((e.target as HTMLElement).closest('.op-timeline__bar'));\n if (item && !lock(item)) void edit(item);\n };\n\n const move = (item: TimelineItem, key: string, e: KeyboardEvent) => {\n const s = span(item);\n const dir = key === keys().later ? 1 : -1;\n const len = s.end - s.start;\n let next: Span;\n if (e.altKey && e.shiftKey) next = { ...s, start: Math.min(s.end - minMs, Math.max(sc().lo, s.start + dir * stepMs)) };\n else if (e.shiftKey) next = { ...s, end: Math.max(s.start + minMs, Math.min(sc().hi, s.end + dir * stepMs)) };\n else {\n const start = Math.min(sc().hi - len, Math.max(sc().lo, s.start + dir * stepMs));\n next = { ...s, start, end: start + len };\n }\n const bounded = e.shiftKey ? limit(next, s, item) : next;\n if (bounded.end - bounded.start < minMs || !fits(bounded, item)) return void (live.textContent = t('teRefused'));\n if (bounded.start !== s.start || bounded.end !== s.end) apply('key', item, bounded, s);\n };\n const hop = (item: TimelineItem, dir: number) => {\n const names = lanes().map(laneName);\n const to = names[names.indexOf(item.lane ?? '') + dir];\n const s = span(item);\n if (to === undefined || !fits({ ...s, lane: to }, item)) return;\n apply('key', item, { ...s, lane: to }, s);\n };\n\n const onKey = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if (e.key === 'Escape' && drag) {\n e.stopPropagation();\n return finish(drag, false);\n }\n const bar = target.closest<HTMLElement>('.op-timeline__bar');\n const item = itemOf(bar);\n if (item && bar === target) {\n if (lock(item)) return;\n const k = keys();\n if (e.key === k.earlier || e.key === k.later) move(item, e.key, e);\n else if ((e.key === k.prev || e.key === k.next) && options.moveAcrossLanes) hop(item, e.key === k.prev ? -1 : 1);\n else if (e.key === 'Enter') void edit(item);\n else if (e.key === 'Delete' || e.key === 'Backspace') remove(item);\n else return;\n } else if (target.classList.contains('op-timeline__lane')) {\n const name = laneName(target);\n const at = cursors.get(name) ?? sc().lo;\n const k = keys();\n if (e.key === k.earlier || e.key === k.later) cursors.set(name, Math.min(sc().hi - stepMs, Math.max(sc().lo, at + (e.key === k.later ? stepMs : -stepMs))));\n else if (e.key === 'Enter') {\n const end = Math.min(sc().hi, at + (options.duration ?? 60) * MIN);\n const s = limit({ lane: name, start: at, end }, { lane: name, start: at, end: at });\n if (s.end - s.start >= minMs && fits(s)) apply('create', undefined, s);\n else return void (live.textContent = t('teRefused'));\n } else return;\n } else return;\n e.preventDefault();\n e.stopPropagation();\n decorate();\n };\n\n function decorate() {\n if (!tl.getScale()) return;\n const items = tl.getItems();\n let all = 0;\n for (const lane of lanes()) {\n const name = laneName(lane);\n lane.tabIndex = 0;\n lane.classList.add('op-timeentry__lane');\n lane.setAttribute('aria-description', t('teCursor', { lane: name, time: sc().format(cursors.get(name) ?? sc().lo).replace(/^\\d{4}-\\d{2}-\\d{2}T/, '') }));\n const total = inLane(name).reduce((n, x) => n + (span(x).end - span(x).start) / MIN, 0);\n all += total;\n const label = lane.querySelector('.op-timeline__lane-name')!;\n label.textContent = `${name || '\u2014'} \u00B7 ${formatDuration(total)}`;\n for (const k of ['under', 'met', 'over']) lane.classList.remove(`is-${k}`);\n if (options.target) lane.classList.add(total < options.target ? 'is-under' : total === options.target ? 'is-met' : 'is-over');\n const cur = cursors.get(name);\n lane.querySelector('.op-timeentry__cursor')?.remove();\n if (cur !== undefined) {\n const c = h('div', 'op-timeentry__cursor', { 'aria-hidden': 'true' });\n c.style[sc().vertical ? 'insetBlockStart' : 'insetInlineStart'] = pct(cur);\n trackOf(lane).append(c);\n }\n }\n for (const bar of Array.from(el.querySelectorAll<HTMLElement>('.op-timeline__bar'))) {\n const item = items[Number(bar.dataset.i)];\n if (!item) continue;\n const s = span(item);\n const locked = lock(item);\n bar.classList.toggle('is-locked', locked);\n bar.setAttribute('aria-label', `${item.title}, ${range(s)}, ${s.lane}`);\n if (locked) bar.setAttribute('aria-disabled', 'true');\n else if (!bar.querySelector('.op-timeentry__handle')) bar.append(h('span', 'op-timeentry__handle op-timeentry__handle--start', { 'aria-hidden': 'true' }), h('span', 'op-timeentry__handle op-timeentry__handle--end', { 'aria-hidden': 'true' }));\n if (item === refocus) bar.focus();\n }\n refocus = undefined;\n el.querySelector('.op-timeentry__grand')?.remove();\n const grand = h('div', 'op-timeentry__grand', {}, h('span', '', {}, t('teTotal')), h('strong', '', {}, formatDuration(all)));\n el.append(grand, live);\n }\n\n const on = <E extends Event>(type: string, fn: (e: E) => void, opts?: AddEventListenerOptions | boolean) => {\n el.addEventListener(type, fn as EventListener, opts);\n off.push(() => el.removeEventListener(type, fn as EventListener, opts));\n };\n on('pointerdown', onDown);\n on('pointermove', onMove);\n on('pointerup', onUp);\n on('pointercancel', onUp);\n on('dblclick', onDouble);\n on('keydown', onKey, true);\n on('touchmove', onTouchMove, { passive: false });\n off.push(tl.on('paint', decorate));\n el.classList.add('op-timeline--entry');\n decorate();\n return () => {\n clearTimeout(press);\n off.forEach((f) => f());\n off = [];\n el.classList.remove('op-timeline--entry');\n live.remove();\n if (drag) finish(drag, false);\n };\n },\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "MIN", "LONG_PRESS", "formatDuration", "minutes", "m", "hh", "mm", "t", "timeEntry", "options", "step", "min", "stepMs", "minMs", "open", "tl", "el", "drag", "press", "refocus", "cursors", "live", "h", "off", "sc", "keys", "lock", "it", "lanes", "laneName", "lane", "inLane", "name", "skip", "x", "span", "snap", "v", "pct", "place", "node", "s", "range", "say", "key", "store", "recOf", "r", "msAt", "track", "y", "at", "from", "size", "f", "laneAt", "fallback", "l", "trackOf", "fits", "o", "limit", "around", "others", "before", "after", "candidate", "d", "own", "len", "start", "show", "ok", "finish", "commit", "unchanged", "apply", "kind", "item", "values", "made", "filled", "old", "rec", "k", "edit", "patch", "remove", "itemOf", "bar", "begin", "onDown", "target", "go", "onMove", "onUp", "onTouchMove", "onDouble", "move", "e", "dir", "next", "bounded", "hop", "names", "to", "onKey", "end", "decorate", "items", "all", "total", "n", "label", "cur", "locked", "grand", "on", "type", "fn", "opts"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as g}from"./chunk-2YRQULDC.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{e as h,f as m}from"./chunk-S4QD5NID.js";h("en",{maskIncomplete:"Complete the format {mask}"});h("pt-BR",{maskIncomplete:"Complete o formato {mask}"});var f={0:/\d/,A:/\p{L}/u,"*":/./su};function u(l){let t=[];for(let e=0;e<l.length;e++){let i=l[e];i==="\\"&&e+1<l.length?t.push({lit:l[++e]}):t.push(i in f?{kind:i}:{lit:i})}return t}var c=l=>l.filter(t=>"kind"in t).length,p=class extends g{baseCls="op-field op-textfield op-maskfield";masks=[];compiled(){let t=this.config.mask;return this.masks=(Array.isArray(t)?t:[t]).map(u).sort((e,i)=>c(e)-c(i))}extract(t){let e=this.masks.length?this.masks:this.compiled(),i=new Set(e.flatMap(r=>r.flatMap(o=>"lit"in o?[o.lit]:[]))),s=e.some(r=>r.some(o=>"kind"in o&&o.kind==="*")),n="";for(let r of t)i.has(r)&&(!s||!/[\p{L}\d]/u.test(r))||(n+=r);return n}pick(t){let e=this.masks.length?this.masks:this.compiled();return e.find(i=>c(i)>=t.length)??e[e.length-1]}format(t,e=this.pick(t)){let i="",s=0;for(let n of e){if(s>=t.length)break;if("lit"in n){i+=n.lit;continue}for(;s<t.length&&!f[n.kind].test(t[s]);)s++;s<t.length&&(i+=t[s++])}return i}norm(t){let e=this.format(this.extract(t??""));return this.config.raw?this.extract(e):e}display(t){return this.format(this.extract(t??""))}setValue(t,e=!1){super.setValue(this.norm(t),e)}createControl(){let t=super.createControl(),e=this.compiled()[0];return this.config.placeholder||(this.input.placeholder=e.map(i=>"lit"in i?i.lit:"_").join("")),this.masks.every(i=>i.every(s=>"lit"in s||s.kind==="0"))&&this.input.setAttribute("inputmode","numeric"),t}onInput(){let t=this.input,e=t.selectionStart??t.value.length,i=this.extract(t.value.slice(0,e)).length,s=this.extract(t.value),n=this.format(s),r=e>=t.value.length;if(t.value=n,!r&&document.activeElement===t){let o=0,a=0;for(;a<n.length&&o<i;)this.extract(n[a++]).length&&o++;t.setSelectionRange(a,a)}this.el.classList.toggle("has-value",!!n),this.commit(this.config.raw?this.extract(n):n),this.error&&this.validate()}check(){let t=super.check(),e=this.extract(this.value??"");if(t||!e)return t;let i=this.pick(e);return e.length<c(i)?m("maskIncomplete",{mask:i.map(s=>"lit"in s?s.lit:"_").join("")}):""}setMask(t){this.config.mask=t,this.compiled(),this.rendered&&this.setValue(this.value,!0)}};d("maskfield",p);export{p as a};
2
- //# sourceMappingURL=chunk-5PWPAN62.js.map
1
+ import{a as g}from"./chunk-LHWY6G6Q.js";import{a as d}from"./chunk-TIPK3SCJ.js";import{e as h,f as m}from"./chunk-S4QD5NID.js";h("en",{maskIncomplete:"Complete the format {mask}"});h("pt-BR",{maskIncomplete:"Complete o formato {mask}"});var f={0:/\d/,A:/\p{L}/u,"*":/./su};function u(l){let t=[];for(let e=0;e<l.length;e++){let i=l[e];i==="\\"&&e+1<l.length?t.push({lit:l[++e]}):t.push(i in f?{kind:i}:{lit:i})}return t}var c=l=>l.filter(t=>"kind"in t).length,p=class extends g{baseCls="op-field op-textfield op-maskfield";masks=[];compiled(){let t=this.config.mask;return this.masks=(Array.isArray(t)?t:[t]).map(u).sort((e,i)=>c(e)-c(i))}extract(t){let e=this.masks.length?this.masks:this.compiled(),i=new Set(e.flatMap(r=>r.flatMap(o=>"lit"in o?[o.lit]:[]))),s=e.some(r=>r.some(o=>"kind"in o&&o.kind==="*")),n="";for(let r of t)i.has(r)&&(!s||!/[\p{L}\d]/u.test(r))||(n+=r);return n}pick(t){let e=this.masks.length?this.masks:this.compiled();return e.find(i=>c(i)>=t.length)??e[e.length-1]}format(t,e=this.pick(t)){let i="",s=0;for(let n of e){if(s>=t.length)break;if("lit"in n){i+=n.lit;continue}for(;s<t.length&&!f[n.kind].test(t[s]);)s++;s<t.length&&(i+=t[s++])}return i}norm(t){let e=this.format(this.extract(t??""));return this.config.raw?this.extract(e):e}display(t){return this.format(this.extract(t??""))}setValue(t,e=!1){super.setValue(this.norm(t),e)}createControl(){let t=super.createControl(),e=this.compiled()[0];return this.config.placeholder||(this.input.placeholder=e.map(i=>"lit"in i?i.lit:"_").join("")),this.masks.every(i=>i.every(s=>"lit"in s||s.kind==="0"))&&this.input.setAttribute("inputmode","numeric"),t}onInput(){let t=this.input,e=t.selectionStart??t.value.length,i=this.extract(t.value.slice(0,e)).length,s=this.extract(t.value),n=this.format(s),r=e>=t.value.length;if(t.value=n,!r&&document.activeElement===t){let o=0,a=0;for(;a<n.length&&o<i;)this.extract(n[a++]).length&&o++;t.setSelectionRange(a,a)}this.el.classList.toggle("has-value",!!n),this.commit(this.config.raw?this.extract(n):n),this.error&&this.validate()}check(){let t=super.check(),e=this.extract(this.value??"");if(t||!e)return t;let i=this.pick(e);return e.length<c(i)?m("maskIncomplete",{mask:i.map(s=>"lit"in s?s.lit:"_").join("")}):""}setMask(t){this.config.mask=t,this.compiled(),this.rendered&&this.setValue(this.value,!0)}};d("maskfield",p);export{p as a};
2
+ //# sourceMappingURL=chunk-TVO3Z2BM.js.map
@@ -1,2 +1,2 @@
1
- import{a as c}from"./chunk-3F4MN2BU.js";import{a as b}from"./chunk-HLS5FI55.js";import{c as a}from"./chunk-DIOJGTUN.js";import{c as h}from"./chunk-BQEFLPDA.js";import{a as p}from"./chunk-TIPK3SCJ.js";import{b as i,c as r}from"./chunk-PZSHOSOS.js";import{f as l}from"./chunk-S4QD5NID.js";var d=class extends h{baseCls="op-panel";headerEl;titleEl;bodyEl;toolsEl;iconHost;toggleBtn;bars=[];bodyId=r("op-body");titleId=r("op-title");getBody(){return this.bodyEl}build(){let e=this.config,t=i("div",this.baseCls,{role:"region","aria-labelledby":this.titleId});this.iconHost=i("span","op-panel__icon"),this.titleEl=i("span","op-panel__title",{id:this.titleId}),this.toolsEl=i("div","op-panel__tools"),this.headerEl=i("div","op-panel__header",{},this.iconHost,this.titleEl,this.toolsEl),this.bodyEl=i("div",`op-panel__body ${e.bodyCls??""}`,{id:this.bodyId}),t.append(this.headerEl);let o=(s,f)=>{let n=new c({items:s,cls:f});return n.parent=this,this.bars.push(n),n.el};return e.tbar&&t.append(o(e.tbar,"op-panel__tbar")),t.append(this.bodyEl),e.bbar&&t.append(o(e.bbar,"op-panel__bbar")),e.buttons&&t.append(o(["->",...e.buttons.map(s=>new b(s))],"op-panel__footer")),t}onRender(){super.onRender();let e=this.config;this.setTitle(e.title??""),this.setIcon(e.icon??"");for(let t of e.tools??[])this.addTool(t.icon,t.label,o=>t.handler?.(this,o));e.reloadable&&this.addTool("refresh",l("reload"),()=>{this.reload()}),e.collapsible&&(this.toggleBtn=this.addTool("chevron-up",l("collapse"),()=>this.toggle()),this.toggleBtn.setAttribute("aria-controls",this.bodyId),this.el.classList.add("op-panel--collapsible"),this.listen(this.titleEl,"click",()=>this.toggle())),e.closable&&this.addTool("x",l("close"),()=>this.close()),this.setCollapsed(!!e.collapsed),this.updateHeader()}addTool(e,t,o){let s=i("button","op-panel__tool",{type:"button","aria-label":t,"data-op-tip":t},a(e));return this.listen(s,"click",o),this.toolsEl.append(s),s}updateHeader(){let e=this.config;this.headerEl.hidden=!e.title&&!e.icon&&!e.collapsible&&!e.closable&&!e.reloadable&&!e.tools?.length}async reload(){let e=this.el;return e.classList.contains("is-reloading")||this.emit("before-reload")===!1?!1:(e.classList.add("is-reloading"),this.setLoading(!0),await Promise.resolve(this.config.onReload?.(this)).catch(()=>0),this.setLoading(!1),e.classList.remove("is-reloading"),this.emit("reload"),!0)}setTitle(e){this.config.title=e,this.rendered&&(this.titleEl.textContent=e,this.updateHeader())}setIcon(e){this.config.icon=e,this.rendered&&(this.iconHost.replaceChildren(...e?[a(e)]:[]),this.iconHost.hidden=!e,this.updateHeader())}setCollapsed(e){if(this.config.collapsed=e,!!this.rendered){this.el.classList.toggle("is-collapsed",e);for(let t of[this.bodyEl,...this.bars.map(o=>o.el)])t.hidden=e;this.toggleBtn&&(this.toggleBtn.setAttribute("aria-expanded",String(!e)),this.toggleBtn.setAttribute("aria-label",l(e?"expand":"collapse")))}}collapse(){this.config.collapsed||this.emit("before-collapse")===!1||(this.setCollapsed(!0),this.emit("collapse"))}expand(){!this.config.collapsed||this.emit("before-expand")===!1||(this.setCollapsed(!1),this.emit("expand"))}toggle(){this.config.collapsed?this.expand():this.collapse()}close(){this.emit("before-close")!==!1&&(this.emit("close"),this.config.closeAction==="hide"?this.hide():this.destroy())}onDestroy(){super.onDestroy(),this.bars.forEach(e=>e.destroy())}};p("panel",d);export{d as a};
2
- //# sourceMappingURL=chunk-UQRQH2JW.js.map
1
+ import{a as c}from"./chunk-3F4MN2BU.js";import{a as b}from"./chunk-ESRS5ZQV.js";import{c as a}from"./chunk-DIOJGTUN.js";import{c as h}from"./chunk-BQEFLPDA.js";import{a as p}from"./chunk-TIPK3SCJ.js";import{b as i,c as r}from"./chunk-PZSHOSOS.js";import{f as l}from"./chunk-S4QD5NID.js";var d=class extends h{baseCls="op-panel";headerEl;titleEl;bodyEl;toolsEl;iconHost;toggleBtn;bars=[];bodyId=r("op-body");titleId=r("op-title");getBody(){return this.bodyEl}build(){let e=this.config,t=i("div",this.baseCls,{role:"region","aria-labelledby":this.titleId});this.iconHost=i("span","op-panel__icon"),this.titleEl=i("span","op-panel__title",{id:this.titleId}),this.toolsEl=i("div","op-panel__tools"),this.headerEl=i("div","op-panel__header",{},this.iconHost,this.titleEl,this.toolsEl),this.bodyEl=i("div",`op-panel__body ${e.bodyCls??""}`,{id:this.bodyId}),t.append(this.headerEl);let o=(s,f)=>{let n=new c({items:s,cls:f});return n.parent=this,this.bars.push(n),n.el};return e.tbar&&t.append(o(e.tbar,"op-panel__tbar")),t.append(this.bodyEl),e.bbar&&t.append(o(e.bbar,"op-panel__bbar")),e.buttons&&t.append(o(["->",...e.buttons.map(s=>new b(s))],"op-panel__footer")),t}onRender(){super.onRender();let e=this.config;this.setTitle(e.title??""),this.setIcon(e.icon??"");for(let t of e.tools??[])this.addTool(t.icon,t.label,o=>t.handler?.(this,o));e.reloadable&&this.addTool("refresh",l("reload"),()=>{this.reload()}),e.collapsible&&(this.toggleBtn=this.addTool("chevron-up",l("collapse"),()=>this.toggle()),this.toggleBtn.setAttribute("aria-controls",this.bodyId),this.el.classList.add("op-panel--collapsible"),this.listen(this.titleEl,"click",()=>this.toggle())),e.closable&&this.addTool("x",l("close"),()=>this.close()),this.setCollapsed(!!e.collapsed),this.updateHeader()}addTool(e,t,o){let s=i("button","op-panel__tool",{type:"button","aria-label":t,"data-op-tip":t},a(e));return this.listen(s,"click",o),this.toolsEl.append(s),s}updateHeader(){let e=this.config;this.headerEl.hidden=!e.title&&!e.icon&&!e.collapsible&&!e.closable&&!e.reloadable&&!e.tools?.length}async reload(){let e=this.el;return e.classList.contains("is-reloading")||this.emit("before-reload")===!1?!1:(e.classList.add("is-reloading"),this.setLoading(!0),await Promise.resolve(this.config.onReload?.(this)).catch(()=>0),this.setLoading(!1),e.classList.remove("is-reloading"),this.emit("reload"),!0)}setTitle(e){this.config.title=e,this.rendered&&(this.titleEl.textContent=e,this.updateHeader())}setIcon(e){this.config.icon=e,this.rendered&&(this.iconHost.replaceChildren(...e?[a(e)]:[]),this.iconHost.hidden=!e,this.updateHeader())}setCollapsed(e){if(this.config.collapsed=e,!!this.rendered){this.el.classList.toggle("is-collapsed",e);for(let t of[this.bodyEl,...this.bars.map(o=>o.el)])t.hidden=e;this.toggleBtn&&(this.toggleBtn.setAttribute("aria-expanded",String(!e)),this.toggleBtn.setAttribute("aria-label",l(e?"expand":"collapse")))}}collapse(){this.config.collapsed||this.emit("before-collapse")===!1||(this.setCollapsed(!0),this.emit("collapse"))}expand(){!this.config.collapsed||this.emit("before-expand")===!1||(this.setCollapsed(!1),this.emit("expand"))}toggle(){this.config.collapsed?this.expand():this.collapse()}close(){this.emit("before-close")!==!1&&(this.emit("close"),this.config.closeAction==="hide"?this.hide():this.destroy())}onDestroy(){super.onDestroy(),this.bars.forEach(e=>e.destroy())}};p("panel",d);export{d as a};
2
+ //# sourceMappingURL=chunk-U25QSLAH.js.map
@@ -0,0 +1,2 @@
1
+ import{a as h}from"./chunk-OADWLPSF.js";import{a as w}from"./chunk-ADHKL2GM.js";import{a as R}from"./chunk-2I7HDIOU.js";import{a as m}from"./chunk-SEUIIPHS.js";import{a as y}from"./chunk-BRGT4O6Q.js";import{a as v}from"./chunk-3OA3P37P.js";import{a as F}from"./chunk-QOSTS5I3.js";import{a}from"./chunk-TVO3Z2BM.js";import{a as c}from"./chunk-G26R2F3W.js";import{a as I}from"./chunk-6TZJO2G2.js";import{a as u}from"./chunk-S3ILIWSW.js";import{a as b}from"./chunk-BTGJ3MP4.js";import{a as k}from"./chunk-AJN66F32.js";import{a as l}from"./chunk-5GCTM37D.js";import{a as d}from"./chunk-NAUSRVB6.js";import{a as p}from"./chunk-EO777UIN.js";import{a as O}from"./chunk-FSR6BDVO.js";import{a as f}from"./chunk-T5OGUCY2.js";import{a as C}from"./chunk-OB3VIRQR.js";import{a as x}from"./chunk-U25QSLAH.js";import{a as T}from"./chunk-3F4MN2BU.js";import{a as g}from"./chunk-LHWY6G6Q.js";import{a as s}from"./chunk-ESRS5ZQV.js";import{c as e}from"./chunk-BQEFLPDA.js";var n=(t,r,i,o={})=>new t({name:r,label:i,...o}),$={text:(t,r,i)=>n(g,t,r,i),email:(t,r,i)=>n(g,t,r,{inputType:"email",...i}),password:(t,r,i)=>n(g,t,r,{inputType:"password",...i}),area:(t,r,i)=>n(m,t,r,i),number:(t,r,i)=>n(f,t,r,i),mask:(t,r,i,o)=>n(a,t,r,{mask:i,...o}),time:(t,r,i)=>n(p,t,r,i),date:(t,r,i)=>n(C,t,r,i),datetime:(t,r,i)=>n(d,t,r,i),dateRange:(t,r,i)=>n(l,t,r,i),secret:(t,r,i)=>n(I,t,r,i),slider:(t,r,i)=>n(R,t,r,i),dial:(t,r,i)=>n(O,t,r,i),check:(t,r,i)=>n(u,t,void 0,{boxLabel:r,...i}),toggle:(t,r,i)=>n(y,t,void 0,{boxLabel:r,...i}),radio:(t,r,i,o)=>n(c,t,r,{options:i,...o}),checkGroup:(t,r,i,o)=>n(b,t,r,{options:i,...o}),select:(t,r,i,o)=>n(w,t,r,{options:i,...o}),combo:(t,r,i,o)=>n(k,t,r,{options:i,...o}),suggest:(t,r,i,o)=>n(F,t,r,{query:i,...o}),lookup:(t,r,i,o)=>n(v,t,r,{lookup:i,...o}),button:(t,r,i)=>new s({text:t,handler:r,...i}),primary:(t,r,i)=>new s({text:t,handler:r,variant:"primary",...i}),danger:(t,r,i)=>new s({text:t,handler:r,variant:"danger",...i}),row:(...t)=>new e({layout:"hbox",items:t}),col:(...t)=>new e({layout:"vbox",items:t}),grid:(t,...r)=>new e({layout:{type:"grid",columns:t},items:r}),panel:(t,r,i)=>new x({title:t,items:r,...i}),toolbar:(...t)=>new T({items:t}),form:(t,r)=>new h({items:t,...r})};export{$ as a};
2
+ //# sourceMappingURL=chunk-UCWICDYG.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/ui/ui.ts", "../src/ui/enums.ts"],
4
- "sourcesContent": ["// Short constructors for the things you write most. They return real component instances (the classes), so they can be\n// used anywhere a config goes: `items: [ui.text('name', 'Name', { required: true }), ui.select('plan', 'Plan', ['Free', 'Pro'])]`.\n// The last argument is always a config object that overrides or adds anything (`{ required: true, help: '\u2026' }`).\nimport { TextField, type TextFieldConfig } from '../components/fields/textfield/textfield';\nimport { TextArea } from '../components/fields/textarea/textarea';\nimport { NumberField } from '../components/fields/numberfield/numberfield';\nimport { MaskField } from '../components/fields/maskfield/maskfield';\nimport { TimeField } from '../components/fields/timefield/timefield';\nimport { DateTimeField } from '../components/fields/datetimefield/datetimefield';\nimport { DateField } from '../components/fields/datefield/datefield';\nimport { DateRangeField } from '../components/fields/daterangefield/daterangefield';\nimport { Checkbox } from '../components/fields/checkbox/checkbox';\nimport { Toggle } from '../components/fields/toggle/toggle';\nimport { CheckboxGroup } from '../components/fields/checkboxgroup/checkboxgroup';\nimport { RadioGroup, type RadioOption } from '../components/fields/radiogroup/radiogroup';\nimport { Select } from '../components/fields/select/select';\nimport { ComboBox } from '../components/fields/combobox/combobox';\nimport { SuggestField } from '../components/fields/suggestfield/suggestfield';\nimport { LookupField } from '../components/fields/lookupfield/lookupfield';\nimport { SecretField } from '../components/fields/secretfield/secretfield';\nimport { Slider } from '../components/fields/slider/slider';\nimport { Dial } from '../components/fields/dial/dial';\nimport { Button } from '../components/base/button/button';\nimport { Panel } from '../components/layout/panel/panel';\nimport { Toolbar } from '../components/layout/toolbar/toolbar';\nimport { Container } from '../core/container';\nimport { Form } from '../components/form/form/form';\nimport type { Component } from '../core/component';\nimport type { AnyConfig } from '../core/registry';\nimport type { Variant } from './enums';\n\ntype Cfg = Record<string, any>;\n// anything a container takes: an instance, a declarative config ({ type: 'fieldset', ... }) or a toolbar string ('->', '-')\ntype Item = Component | AnyConfig | string;\ntype Options = (string | number | { value: unknown; label: string; disabled?: boolean })[];\n\nconst field = <T>(Cls: new (c: any) => T, name: string, label: string | undefined, c: Cfg = {}): T => new Cls({ name, label, ...c });\n\nexport const ui = {\n // ---- fields: (name, label, config?) ----\n text: (name: string, label?: string, c?: Cfg) => field(TextField, name, label, c),\n email: (name: string, label?: string, c?: Cfg) => field(TextField, name, label, { inputType: 'email', ...c } satisfies TextFieldConfig),\n password: (name: string, label?: string, c?: Cfg) => field(TextField, name, label, { inputType: 'password', ...c }),\n area: (name: string, label?: string, c?: Cfg) => field(TextArea, name, label, c),\n number: (name: string, label?: string, c?: Cfg) => field(NumberField, name, label, c),\n mask: (name: string, label: string | undefined, mask: string | string[], c?: Cfg) => field(MaskField, name, label, { mask, ...c }),\n time: (name: string, label?: string, c?: Cfg) => field(TimeField, name, label, c),\n date: (name: string, label?: string, c?: Cfg) => field(DateField, name, label, c),\n datetime: (name: string, label?: string, c?: Cfg) => field(DateTimeField, name, label, c),\n dateRange: (name: string, label?: string, c?: Cfg) => field(DateRangeField, name, label, c),\n secret: (name: string, label?: string, c?: Cfg) => field(SecretField, name, label, c),\n slider: (name: string, label?: string, c?: Cfg) => field(Slider, name, label, c),\n dial: (name: string, label?: string, c?: Cfg) => field(Dial, name, label, c),\n /** `boxLabel` is the text beside the box. */\n check: (name: string, boxLabel?: string, c?: Cfg) => field(Checkbox, name, undefined, { boxLabel, ...c }),\n /** An on/off switch; `boxLabel` is the text beside it. */\n toggle: (name: string, boxLabel?: string, c?: Cfg) => field(Toggle, name, undefined, { boxLabel, ...c }),\n radio: (name: string, label: string, options: RadioOption[], c?: Cfg) => field(RadioGroup, name, label, { options, ...c }),\n /** Several choices; the value is the list of checked values. */\n checkGroup: (name: string, label: string, options: RadioOption[], c?: Cfg) => field(CheckboxGroup, name, label, { options, ...c }),\n select: (name: string, label: string, options: Options, c?: Cfg) => field(Select, name, label, { options, ...c }),\n combo: (name: string, label: string, options: Options, c?: Cfg) => field(ComboBox, name, label, { options, ...c }),\n suggest: (name: string, label: string, query: (text: string, o: { signal: AbortSignal }) => unknown, c?: Cfg) => field(SuggestField, name, label, { query, ...c }),\n /** `lookup` is a LookupDef or the name given to `registerLookup`. */\n lookup: (name: string, label: string, lookup: Cfg | string, c?: Cfg) => field(LookupField, name, label, { lookup, ...c }),\n\n // ---- actions ----\n button: (text: string, handler?: (b: Button, ev: MouseEvent) => unknown, c?: Cfg) => new Button({ text, handler, ...c }),\n primary: (text: string, handler?: (b: Button, ev: MouseEvent) => unknown, c?: Cfg) => new Button({ text, handler, variant: 'primary' satisfies Variant, ...c }),\n danger: (text: string, handler?: (b: Button, ev: MouseEvent) => unknown, c?: Cfg) => new Button({ text, handler, variant: 'danger' satisfies Variant, ...c }),\n\n // ---- structure ----\n row: (...items: Item[]) => new Container({ layout: 'hbox', items } as Cfg),\n col: (...items: Item[]) => new Container({ layout: 'vbox', items } as Cfg),\n /** `columns`: a number (equal columns, one column on narrow containers) or a CSS `grid-template-columns`. */\n grid: (columns: number | string, ...items: Item[]) => new Container({ layout: { type: 'grid', columns }, items } as Cfg),\n panel: (title: string, items: Item[], c?: Cfg) => new Panel({ title, items, ...c } as Cfg),\n toolbar: (...items: Item[]) => new Toolbar({ items } as Cfg),\n form: (items: Item[], c?: Cfg) => new Form({ items, ...c } as Cfg),\n};\n", "// Named values for the options that are plain strings in configs. Each is a const object plus a type of the same name,\n// so `Variant.Primary` and `'primary'` are interchangeable: use whichever you like, the editor completes both.\nconst e = <T extends Record<string, string>>(o: T) => o;\n\nexport const Variant = e({ Default: 'default', Primary: 'primary', Danger: 'danger', Ghost: 'ghost' } as const);\nexport type Variant = (typeof Variant)[keyof typeof Variant];\n\nexport const LabelPos = e({ Top: 'top', Left: 'left' } as const);\nexport type LabelPos = (typeof LabelPos)[keyof typeof LabelPos];\n\nexport const Direction = e({ Vertical: 'vertical', Horizontal: 'horizontal' } as const);\nexport type Direction = (typeof Direction)[keyof typeof Direction];\n\n/** Layout `border` regions. */\nexport const Region = e({ North: 'north', South: 'south', West: 'west', East: 'east', Center: 'center' } as const);\nexport type Region = (typeof Region)[keyof typeof Region];\n\n/** Widget sides. */\nexport const Side = e({ Right: 'right', Left: 'left', Top: 'top', Bottom: 'bottom' } as const);\nexport type Side = (typeof Side)[keyof typeof Side];\n\nexport const LayoutKind = e({ Fit: 'fit', HBox: 'hbox', VBox: 'vbox', Border: 'border', Grid: 'grid', Card: 'card' } as const);\nexport type LayoutKind = (typeof LayoutKind)[keyof typeof LayoutKind];\n\nexport const Selection = e({ None: 'none', Single: 'single', Multi: 'multi' } as const);\nexport type Selection = (typeof Selection)[keyof typeof Selection];\n\nexport const ToastType = e({ Info: 'info', Success: 'success', Warning: 'warning', Error: 'error' } as const);\nexport type ToastType = (typeof ToastType)[keyof typeof ToastType];\n\n/** Filter operators (Store.filter, FilterBuilder, lookup filters). */\nexport const Op = e({\n Eq: 'eq', Ne: 'ne', Contains: 'contains', NotContains: 'notContains', StartsWith: 'startsWith', EndsWith: 'endsWith',\n Gt: 'gt', Ge: 'ge', Lt: 'lt', Le: 'le', Between: 'between', NotBetween: 'notBetween', In: 'in', Nin: 'nin', Empty: 'empty', NotEmpty: 'notEmpty',\n} as const);\nexport type Op = (typeof Op)[keyof typeof Op];\n\n/** The shipped themes (`setTheme(ThemeName.Dark)`; add `' compact'` for the dense variant). */\nexport const ThemeName = e({ Light: 'light', Dark: 'dark' } as const);\nexport type ThemeName = (typeof ThemeName)[keyof typeof ThemeName];\n"],
5
- "mappings": "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",
6
- "names": ["field", "Cls", "name", "label", "c", "ui", "TextField", "TextArea", "NumberField", "mask", "MaskField", "TimeField", "DateField", "DateTimeField", "DateRangeField", "SecretField", "Slider", "Dial", "boxLabel", "Checkbox", "Toggle", "options", "RadioGroup", "CheckboxGroup", "Select", "ComboBox", "query", "SuggestField", "lookup", "LookupField", "text", "handler", "Button", "items", "Container", "columns", "title", "Panel", "Toolbar", "Form", "e", "o", "Variant", "LabelPos", "Direction", "Region", "Side", "LayoutKind", "Selection", "ToastType", "Op", "ThemeName"]
3
+ "sources": ["../src/ui/ui.ts"],
4
+ "sourcesContent": ["// Short constructors for the things you write most. They return real component instances (the classes), so they can be\n// used anywhere a config goes: `items: [ui.text('name', 'Name', { required: true }), ui.select('plan', 'Plan', ['Free', 'Pro'])]`.\n// The last argument is always a config object that overrides or adds anything (`{ required: true, help: '\u2026' }`).\nimport { TextField, type TextFieldConfig } from '../components/fields/textfield/textfield';\nimport { TextArea } from '../components/fields/textarea/textarea';\nimport { NumberField } from '../components/fields/numberfield/numberfield';\nimport { MaskField } from '../components/fields/maskfield/maskfield';\nimport { TimeField } from '../components/fields/timefield/timefield';\nimport { DateTimeField } from '../components/fields/datetimefield/datetimefield';\nimport { DateField } from '../components/fields/datefield/datefield';\nimport { DateRangeField } from '../components/fields/daterangefield/daterangefield';\nimport { Checkbox } from '../components/fields/checkbox/checkbox';\nimport { Toggle } from '../components/fields/toggle/toggle';\nimport { CheckboxGroup } from '../components/fields/checkboxgroup/checkboxgroup';\nimport { RadioGroup, type RadioOption } from '../components/fields/radiogroup/radiogroup';\nimport { Select } from '../components/fields/select/select';\nimport { ComboBox } from '../components/fields/combobox/combobox';\nimport { SuggestField } from '../components/fields/suggestfield/suggestfield';\nimport { LookupField } from '../components/fields/lookupfield/lookupfield';\nimport { SecretField } from '../components/fields/secretfield/secretfield';\nimport { Slider } from '../components/fields/slider/slider';\nimport { Dial } from '../components/fields/dial/dial';\nimport { Button } from '../components/base/button/button';\nimport { Panel } from '../components/layout/panel/panel';\nimport { Toolbar } from '../components/layout/toolbar/toolbar';\nimport { Container } from '../core/container';\nimport { Form } from '../components/form/form/form';\nimport type { Component } from '../core/component';\nimport type { AnyConfig } from '../core/registry';\nimport type { Variant } from './enums';\n\ntype Cfg = Record<string, any>;\n// anything a container takes: an instance, a declarative config ({ type: 'fieldset', ... }) or a toolbar string ('->', '-')\ntype Item = Component | AnyConfig | string;\ntype Options = (string | number | { value: unknown; label: string; disabled?: boolean })[];\n\nconst field = <T>(Cls: new (c: any) => T, name: string, label: string | undefined, c: Cfg = {}): T => new Cls({ name, label, ...c });\n\nexport const ui = {\n // ---- fields: (name, label, config?) ----\n text: (name: string, label?: string, c?: Cfg) => field(TextField, name, label, c),\n email: (name: string, label?: string, c?: Cfg) => field(TextField, name, label, { inputType: 'email', ...c } satisfies TextFieldConfig),\n password: (name: string, label?: string, c?: Cfg) => field(TextField, name, label, { inputType: 'password', ...c }),\n area: (name: string, label?: string, c?: Cfg) => field(TextArea, name, label, c),\n number: (name: string, label?: string, c?: Cfg) => field(NumberField, name, label, c),\n mask: (name: string, label: string | undefined, mask: string | string[], c?: Cfg) => field(MaskField, name, label, { mask, ...c }),\n time: (name: string, label?: string, c?: Cfg) => field(TimeField, name, label, c),\n date: (name: string, label?: string, c?: Cfg) => field(DateField, name, label, c),\n datetime: (name: string, label?: string, c?: Cfg) => field(DateTimeField, name, label, c),\n dateRange: (name: string, label?: string, c?: Cfg) => field(DateRangeField, name, label, c),\n secret: (name: string, label?: string, c?: Cfg) => field(SecretField, name, label, c),\n slider: (name: string, label?: string, c?: Cfg) => field(Slider, name, label, c),\n dial: (name: string, label?: string, c?: Cfg) => field(Dial, name, label, c),\n /** `boxLabel` is the text beside the box. */\n check: (name: string, boxLabel?: string, c?: Cfg) => field(Checkbox, name, undefined, { boxLabel, ...c }),\n /** An on/off switch; `boxLabel` is the text beside it. */\n toggle: (name: string, boxLabel?: string, c?: Cfg) => field(Toggle, name, undefined, { boxLabel, ...c }),\n radio: (name: string, label: string, options: RadioOption[], c?: Cfg) => field(RadioGroup, name, label, { options, ...c }),\n /** Several choices; the value is the list of checked values. */\n checkGroup: (name: string, label: string, options: RadioOption[], c?: Cfg) => field(CheckboxGroup, name, label, { options, ...c }),\n select: (name: string, label: string, options: Options, c?: Cfg) => field(Select, name, label, { options, ...c }),\n combo: (name: string, label: string, options: Options, c?: Cfg) => field(ComboBox, name, label, { options, ...c }),\n suggest: (name: string, label: string, query: (text: string, o: { signal: AbortSignal }) => unknown, c?: Cfg) => field(SuggestField, name, label, { query, ...c }),\n /** `lookup` is a LookupDef or the name given to `registerLookup`. */\n lookup: (name: string, label: string, lookup: Cfg | string, c?: Cfg) => field(LookupField, name, label, { lookup, ...c }),\n\n // ---- actions ----\n button: (text: string, handler?: (b: Button, ev: MouseEvent) => unknown, c?: Cfg) => new Button({ text, handler, ...c }),\n primary: (text: string, handler?: (b: Button, ev: MouseEvent) => unknown, c?: Cfg) => new Button({ text, handler, variant: 'primary' satisfies Variant, ...c }),\n danger: (text: string, handler?: (b: Button, ev: MouseEvent) => unknown, c?: Cfg) => new Button({ text, handler, variant: 'danger' satisfies Variant, ...c }),\n\n // ---- structure ----\n row: (...items: Item[]) => new Container({ layout: 'hbox', items } as Cfg),\n col: (...items: Item[]) => new Container({ layout: 'vbox', items } as Cfg),\n /** `columns`: a number (equal columns, one column on narrow containers) or a CSS `grid-template-columns`. */\n grid: (columns: number | string, ...items: Item[]) => new Container({ layout: { type: 'grid', columns }, items } as Cfg),\n panel: (title: string, items: Item[], c?: Cfg) => new Panel({ title, items, ...c } as Cfg),\n toolbar: (...items: Item[]) => new Toolbar({ items } as Cfg),\n form: (items: Item[], c?: Cfg) => new Form({ items, ...c } as Cfg),\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["field", "Cls", "name", "label", "c", "ui", "TextField", "TextArea", "NumberField", "mask", "MaskField", "TimeField", "DateField", "DateTimeField", "DateRangeField", "SecretField", "Slider", "Dial", "boxLabel", "Checkbox", "Toggle", "options", "RadioGroup", "CheckboxGroup", "Select", "ComboBox", "query", "SuggestField", "lookup", "LookupField", "text", "handler", "Button", "items", "Container", "columns", "title", "Panel", "Toolbar", "Form"]
7
7
  }
@@ -1,3 +1,3 @@
1
- import{a as b}from"./chunk-HLS5FI55.js";import{c as m}from"./chunk-DIOJGTUN.js";import{a as E}from"./chunk-TIPK3SCJ.js";import{f as v}from"./chunk-UDXO3KM3.js";import{b as n}from"./chunk-PZSHOSOS.js";import{d as y,e as p,f as a}from"./chunk-S4QD5NID.js";p("en",{chatPlaceholder:"Type a message",chatSend:"Send",chatTyping:"{n} is typing\u2026",chatToday:"Today",chatYesterday:"Yesterday",chatEmpty:"No messages yet",chatLog:"Conversation",chatSuggestions:"Suggestions",chatReply:"Reply"});p("pt-BR",{chatPlaceholder:"Digite uma mensagem",chatSend:"Enviar",chatTyping:"{n} est\xE1 digitando\u2026",chatToday:"Hoje",chatYesterday:"Ontem",chatEmpty:"Nenhuma mensagem ainda",chatLog:"Conversa",chatSuggestions:"Sugest\xF5es",chatReply:"Responder"});var _=/(\*\*[^*\n]+\*\*|\*[^*\n]+\*|`[^`\n]+`)/;function L(d){let t=[];return d.split(`
1
+ import{a as b}from"./chunk-ESRS5ZQV.js";import{c as m}from"./chunk-DIOJGTUN.js";import{a as E}from"./chunk-TIPK3SCJ.js";import{f as v}from"./chunk-UDXO3KM3.js";import{b as n}from"./chunk-PZSHOSOS.js";import{d as y,e as p,f as a}from"./chunk-S4QD5NID.js";p("en",{chatPlaceholder:"Type a message",chatSend:"Send",chatTyping:"{n} is typing\u2026",chatToday:"Today",chatYesterday:"Yesterday",chatEmpty:"No messages yet",chatLog:"Conversation",chatSuggestions:"Suggestions",chatReply:"Reply"});p("pt-BR",{chatPlaceholder:"Digite uma mensagem",chatSend:"Enviar",chatTyping:"{n} est\xE1 digitando\u2026",chatToday:"Hoje",chatYesterday:"Ontem",chatEmpty:"Nenhuma mensagem ainda",chatLog:"Conversa",chatSuggestions:"Sugest\xF5es",chatReply:"Responder"});var _=/(\*\*[^*\n]+\*\*|\*[^*\n]+\*|`[^`\n]+`)/;function L(d){let t=[];return d.split(`
2
2
  `).forEach((e,s)=>{s&&t.push(document.createElement("br"));for(let i of e.split(_))i&&(i.startsWith("**")&&i.endsWith("**")&&i.length>4?t.push(n("strong","",{},i.slice(2,-2))):i.startsWith("`")&&i.endsWith("`")&&i.length>2?t.push(n("code","op-chat__code",{},i.slice(1,-1))):i.startsWith("*")&&i.endsWith("*")&&i.length>2?t.push(n("em","",{},i.slice(1,-1))):t.push(document.createTextNode(i)))}),t}var l=d=>new Date(d).toDateString(),M=()=>y()._lang,u=class extends v{baseCls="op-chat";msgs=[];seq=0;logEl;emptyEl;typingEl;chipsEl;input;sendBtn;busy=!1;build(){let t=this.config;return this.logEl=n("div","op-chat__log",{role:"log","aria-live":"polite","aria-relevant":"additions","aria-label":a("chatLog"),tabindex:0}),this.emptyEl=n("div","op-chat__empty",{},a("chatEmpty")),this.typingEl=n("div","op-chat__typing",{"aria-hidden":"true"},n("span","op-chat__dots",{},n("i"),n("i"),n("i")),n("span","op-chat__typing-text")),this.typingEl.hidden=!0,this.chipsEl=n("div","op-chat__suggestions",{role:"group","aria-label":a("chatSuggestions")}),this.input=n("textarea","op-chat__input",{rows:1,placeholder:t.placeholder??a("chatPlaceholder"),"aria-label":t.placeholder??a("chatPlaceholder"),maxlength:t.maxLength??null}),this.sendBtn=new b({icon:"send",variant:"primary",ariaLabel:a("chatSend"),handler:()=>this.submit()}),this.own(()=>this.sendBtn.destroy()),n("div",this.baseCls,{},this.logEl,this.chipsEl,n("div","op-chat__composer",{},this.input,this.sendBtn.el))}onRender(){let t=this.config;this.listen(this.input,"input",()=>this.grow()),this.listen(this.input,"keydown",e=>{e.key!=="Enter"||e.shiftKey||e.isComposing||t.sendOnEnter===!1||(e.preventDefault(),this.submit())}),this.listen(this.chipsEl,"click",e=>{let s=e.target.closest("[data-s]");s&&(this.emit("suggestion",s.dataset.s),this.send(s.dataset.s))}),this.listen(this.logEl,"click",e=>{let s=e.target.closest(".op-chat__msg"),i=s&&this.msgs.find(o=>String(o.id)===s.dataset.id);i&&this.emit("message-click",i)}),this.setReadonly(!!t.readonly),this.msgs=(t.messages??[]).map(e=>this.norm(e)),this.setSuggestions(t.suggestions??[]),this.renderAll()}notifyMount(){super.notifyMount(),this.rendered&&(this.sendBtn.notifyMount(),this.scrollToBottom())}norm(t){let e=t.time==null?Date.now():new Date(t.time).getTime();return{...t,id:t.id??`m${++this.seq}`,at:e}}getMessages(){return this.msgs}addMessage(t){let e=this.norm(t);if(this.msgs.push(e),!this.rendered)return this.config.messages=this.msgs,e;let s=this.nearBottom()||e.from===this.config.me;return this.mountMsg(e,this.msgs.length-1),this.syncEmpty(),s&&this.scrollToBottom(),e}setMessages(t){this.msgs=t.map(e=>this.norm(e)),this.config.messages=this.msgs,this.rendered&&(this.renderAll(),this.scrollToBottom())}updateMessage(t,e){let s=this.msgs.findIndex(g=>g.id===t);if(s<0)return;let i=this.nearBottom();if(this.msgs[s]={...this.msgs[s],...e,at:e.time!=null?new Date(e.time).getTime():this.msgs[s].at},!this.rendered)return;let o=this.msgEl(t),r=this.buildMsg(this.msgs[s],s);o?o.replaceWith(r):this.logEl.insertBefore(r,this.typingEl),this.decorate(s),i&&this.scrollToBottom()}appendToMessage(t,e){let s=this.msgs.find(r=>r.id===t);if(!s)return;s.text+=e;let i=this.msgEl(t)?.querySelector(".op-chat__text");if(!i)return;let o=this.nearBottom();this.fill(i,s),o&&this.scrollToBottom()}removeMessage(t){this.msgs=this.msgs.filter(e=>e.id!==t),this.rendered&&this.renderAll()}msgEl(t){return this.logEl.querySelector(`[data-id="${CSS.escape(String(t))}"]`)}renderAll(){this.logEl.replaceChildren(this.emptyEl,...this.msgs.flatMap((t,e)=>this.nodesFor(t,e)),this.typingEl),this.syncEmpty()}nodesFor(t,e){let s=this.msgs[e-1],i=[];return(!s||l(s.at)!==l(t.at))&&i.push(n("div","op-chat__day",{role:"separator"},n("span","",{},this.dayLabel(t.at)))),i.push(this.buildMsg(t,e)),i}mountMsg(t,e){for(let s of this.nodesFor(t,e))this.logEl.insertBefore(s,this.typingEl);this.decorate(e-1),this.decorate(e)}dayLabel(t){let e=l(t),s=Date.now();return e===l(s)?a("chatToday"):e===l(s-864e5)?a("chatYesterday"):new Intl.DateTimeFormat(M(),{dateStyle:"medium"}).format(t)}fill(t,e){let s=this.config.renderer?this.config.renderer(e):L(e.text);t.replaceChildren(...Array.isArray(s)?s:[s])}buildMsg(t,e){let s=this.config,i=t.from===s.me,o=s.users?.[t.from],r=n("article",`op-chat__msg ${i?"is-me":"is-them"}`,{"data-id":String(t.id)}),g=n("div","op-chat__bubble");if(!i&&s.showAuthors!==!1&&o){let c=n("div","op-chat__author",{},o.name);o.color&&(c.style.color=o.color),g.append(c)}let h=t.replyTo!=null?this.msgs.find(c=>c.id===t.replyTo):void 0;h&&g.append(n("div","op-chat__reply",{"aria-label":a("chatReply")},n("strong","",{},h.from===s.me?"":s.users?.[h.from]?.name??h.from),h.text.length>80?`${h.text.slice(0,80)}\u2026`:h.text));let f=n("div","op-chat__text");this.fill(f,t);let T=new Intl.DateTimeFormat(M(),{hour:"2-digit",minute:"2-digit"}).format(t.at);return g.append(f,n("span","op-chat__meta",{},n("time","",{datetime:new Date(t.at).toISOString()},T),i&&t.status?this.statusEl(t.status):"")),r.append(g),this.group(r,e),r}statusEl(t){let e=n("span",`op-chat__status is-${t}`,{role:"img","aria-label":t});return t==="error"?e.append(m("alert")):t!=="sending"&&e.append(m("check"),...t==="sent"?[]:[m("check")]),e}group(t,e){let s=this.msgs[e],i=(o,r)=>!!o&&!!r&&o.from===r.from&&l(o.at)===l(r.at);t.classList.toggle("is-first",!i(this.msgs[e-1],s)),t.classList.toggle("is-last",!i(s,this.msgs[e+1])),t.querySelector(".op-chat__author")?.toggleAttribute("hidden",i(this.msgs[e-1],s))}decorate(t){let e=this.msgs[t],s=e&&this.msgEl(e.id);s&&this.group(s,t)}syncEmpty(){this.emptyEl.hidden=this.msgs.length>0,this.el.classList.toggle("is-empty",!this.msgs.length)}nearBottom(){let t=this.logEl;return t.scrollHeight-t.scrollTop-t.clientHeight<48}scrollToBottom(){this.render(),this.logEl.scrollTop=this.logEl.scrollHeight}setTyping(t){let e=this.nearBottom();this.typingEl.hidden=!t,this.typingEl.querySelector(".op-chat__typing-text").textContent=typeof t=="string"?a("chatTyping",{n:t}):"",t&&e&&this.scrollToBottom()}setSuggestions(t){this.config.suggestions=t,this.rendered&&(this.chipsEl.hidden=!t.length,this.chipsEl.replaceChildren(...t.map(e=>n("button","op-chat__chip",{type:"button","data-s":e},e))))}setBusy(t){this.busy=t,this.el.classList.toggle("is-busy",t),this.logEl.setAttribute("aria-busy",String(t)),this.sendBtn.setDisabled(t||!!this.config.readonly);for(let e of Array.from(this.chipsEl.children))e.disabled=t||!!this.config.readonly}setReadonly(t){this.config.readonly=t,this.rendered&&(this.input.readOnly=t,this.el.classList.toggle("is-readonly",t),this.setBusy(this.busy))}setPlaceholder(t){this.config.placeholder=t,this.rendered&&(this.input.placeholder=t)}focus(){this.render(),this.input.focus()}grow(){this.input.style.height="auto",this.input.style.height=`${this.input.scrollHeight}px`}submit(){let t=this.input.value;this.send(t)&&(this.input.value="",this.grow())}send(t){if(t=t.trim(),!t||this.busy||this.config.readonly||this.emit("before-send",t)===!1)return!1;let e=this.addMessage({from:this.config.me,text:t,time:Date.now(),status:"sending"});return this.emit("send",t,e),!0}};E("chat",u);export{u as a};
3
- //# sourceMappingURL=chunk-C3MWS7P2.js.map
3
+ //# sourceMappingURL=chunk-UL364TLO.js.map
@@ -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-ESRS5ZQV.js";import{a as g}from"./chunk-DIOJGTUN.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-UUAGMZD2.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
+ }
@@ -0,0 +1,2 @@
1
+ import{d as a}from"./chunk-S4QD5NID.js";var e=()=>a()._lang,m=(t,n)=>{if(t==null||t==="")return"";let r=t instanceof Date?t:typeof t=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(t)?new Date(+t.slice(0,4),+t.slice(5,7)-1,+t.slice(8,10)):new Date(t);return isNaN(+r)?String(t):new Intl.DateTimeFormat(e(),n).format(r)},u={number:(t,n)=>t==null||t===""?"":new Intl.NumberFormat(e(),n).format(t),money:(t,n)=>t==null||t===""?"":new Intl.NumberFormat(e(),{style:"currency",currency:a()._currency,...n}).format(t),percent:(t,n)=>t==null||t===""?"":new Intl.NumberFormat(e(),{style:"percent",maximumFractionDigits:1,...n}).format(t),date:(t,n)=>m(t,{dateStyle:"medium",...n}),datetime:(t,n)=>m(t,{dateStyle:"medium",timeStyle:"short",...n}),bool:t=>t?"\u2713":"",duration:t=>{if(t==null||t===""||isNaN(Number(t)))return t==null?"":String(t);let n=Math.round(Number(t)),r=(l,s)=>new Intl.NumberFormat(e(),{style:"unit",unit:s,unitDisplay:"narrow"}).format(l),[o,i]=[Math.floor(Math.abs(n)/60),Math.abs(n)%60];return`${n<0?"-":""}${[o&&r(o,"hour"),(i||!o)&&r(i,"minute")].filter(Boolean).join(" ")}`}};function f(t,n){u[t]=n}function y(t,n){let r=typeof t=="function"?t:u[t];if(!r)throw new Error(`Optikos: unknown format "${t}"`);return r(n)}export{f as a,y as b};
2
+ //# sourceMappingURL=chunk-XFDNXSU5.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/data/format.ts"],
4
- "sourcesContent": ["import { getLocale } from '../core/i18n';\n\nexport type Formatter = (value: any, options?: Record<string, any>) => string;\n\nconst lang = () => getLocale()._lang;\nconst date = (v: any, opts: Intl.DateTimeFormatOptions) => {\n if (v == null || v === '') return '';\n // ISO dates without time are local dates, not UTC.\n const d = v instanceof Date ? v : typeof v === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(v) ? new Date(+v.slice(0, 4), +v.slice(5, 7) - 1, +v.slice(8, 10)) : new Date(v);\n return isNaN(+d) ? String(v) : new Intl.DateTimeFormat(lang(), opts).format(d);\n};\n\nconst formats: Record<string, Formatter> = {\n number: (v, o) => (v == null || v === '' ? '' : new Intl.NumberFormat(lang(), o).format(v)),\n money: (v, o) => (v == null || v === '' ? '' : new Intl.NumberFormat(lang(), { style: 'currency', currency: getLocale()._currency, ...o }).format(v)),\n percent: (v, o) => (v == null || v === '' ? '' : new Intl.NumberFormat(lang(), { style: 'percent', maximumFractionDigits: 1, ...o }).format(v)),\n date: (v, o) => date(v, { dateStyle: 'medium', ...o }),\n datetime: (v, o) => date(v, { dateStyle: 'medium', timeStyle: 'short', ...o }),\n bool: (v) => (v ? '\u2713' : ''),\n};\n\n/** Registers a named formatter, usable as `format: 'name'` in columns. */\nexport function registerFormat(name: string, fn: Formatter): void {\n formats[name] = fn;\n}\n\nexport function format(fmt: string | Formatter, value: unknown): string {\n const fn = typeof fmt === 'function' ? fmt : formats[fmt];\n if (!fn) throw new Error(`Optikos: unknown format \"${fmt}\"`);\n return fn(value);\n}\n"],
5
- "mappings": "wCAIA,IAAMA,EAAO,IAAMC,EAAU,EAAE,MACzBC,EAAO,CAACC,EAAQC,IAAqC,CACzD,GAAID,GAAK,MAAQA,IAAM,GAAI,MAAO,GAElC,IAAME,EAAIF,aAAa,KAAOA,EAAI,OAAOA,GAAM,UAAY,sBAAsB,KAAKA,CAAC,EAAI,IAAI,KAAK,CAACA,EAAE,MAAM,EAAG,CAAC,EAAG,CAACA,EAAE,MAAM,EAAG,CAAC,EAAI,EAAG,CAACA,EAAE,MAAM,EAAG,EAAE,CAAC,EAAI,IAAI,KAAKA,CAAC,EACrK,OAAO,MAAM,CAACE,CAAC,EAAI,OAAOF,CAAC,EAAI,IAAI,KAAK,eAAeH,EAAK,EAAGI,CAAI,EAAE,OAAOC,CAAC,CAC/E,EAEMC,EAAqC,CACzC,OAAQ,CAACH,EAAGI,IAAOJ,GAAK,MAAQA,IAAM,GAAK,GAAK,IAAI,KAAK,aAAaH,EAAK,EAAGO,CAAC,EAAE,OAAOJ,CAAC,EACzF,MAAO,CAACA,EAAGI,IAAOJ,GAAK,MAAQA,IAAM,GAAK,GAAK,IAAI,KAAK,aAAaH,EAAK,EAAG,CAAE,MAAO,WAAY,SAAUC,EAAU,EAAE,UAAW,GAAGM,CAAE,CAAC,EAAE,OAAOJ,CAAC,EACnJ,QAAS,CAACA,EAAGI,IAAOJ,GAAK,MAAQA,IAAM,GAAK,GAAK,IAAI,KAAK,aAAaH,EAAK,EAAG,CAAE,MAAO,UAAW,sBAAuB,EAAG,GAAGO,CAAE,CAAC,EAAE,OAAOJ,CAAC,EAC7I,KAAM,CAACA,EAAGI,IAAML,EAAKC,EAAG,CAAE,UAAW,SAAU,GAAGI,CAAE,CAAC,EACrD,SAAU,CAACJ,EAAGI,IAAML,EAAKC,EAAG,CAAE,UAAW,SAAU,UAAW,QAAS,GAAGI,CAAE,CAAC,EAC7E,KAAOJ,GAAOA,EAAI,SAAM,EAC1B,EAGO,SAASK,EAAeC,EAAcC,EAAqB,CAChEJ,EAAQG,CAAI,EAAIC,CAClB,CAEO,SAASC,EAAOC,EAAyBC,EAAwB,CACtE,IAAMH,EAAK,OAAOE,GAAQ,WAAaA,EAAMN,EAAQM,CAAG,EACxD,GAAI,CAACF,EAAI,MAAM,IAAI,MAAM,4BAA4BE,CAAG,GAAG,EAC3D,OAAOF,EAAGG,CAAK,CACjB",
6
- "names": ["lang", "getLocale", "date", "v", "opts", "d", "formats", "o", "registerFormat", "name", "fn", "format", "fmt", "value"]
4
+ "sourcesContent": ["import { getLocale } from '../core/i18n';\n\nexport type Formatter = (value: any, options?: Record<string, any>) => string;\n\nconst lang = () => getLocale()._lang;\nconst date = (v: any, opts: Intl.DateTimeFormatOptions) => {\n if (v == null || v === '') return '';\n // ISO dates without time are local dates, not UTC.\n const d = v instanceof Date ? v : typeof v === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(v) ? new Date(+v.slice(0, 4), +v.slice(5, 7) - 1, +v.slice(8, 10)) : new Date(v);\n return isNaN(+d) ? String(v) : new Intl.DateTimeFormat(lang(), opts).format(d);\n};\n\nconst formats: Record<string, Formatter> = {\n number: (v, o) => (v == null || v === '' ? '' : new Intl.NumberFormat(lang(), o).format(v)),\n money: (v, o) => (v == null || v === '' ? '' : new Intl.NumberFormat(lang(), { style: 'currency', currency: getLocale()._currency, ...o }).format(v)),\n percent: (v, o) => (v == null || v === '' ? '' : new Intl.NumberFormat(lang(), { style: 'percent', maximumFractionDigits: 1, ...o }).format(v)),\n date: (v, o) => date(v, { dateStyle: 'medium', ...o }),\n datetime: (v, o) => date(v, { dateStyle: 'medium', timeStyle: 'short', ...o }),\n bool: (v) => (v ? '\u2713' : ''),\n duration: (v) => {\n if (v == null || v === '' || isNaN(Number(v))) return v == null ? '' : String(v);\n const total = Math.round(Number(v));\n const unit = (n: number, u: string) => new Intl.NumberFormat(lang(), { style: 'unit', unit: u, unitDisplay: 'narrow' }).format(n);\n const [h, m] = [Math.floor(Math.abs(total) / 60), Math.abs(total) % 60];\n return `${total < 0 ? '-' : ''}${[h && unit(h, 'hour'), (m || !h) && unit(m, 'minute')].filter(Boolean).join(' ')}`;\n },\n};\n\n/** Registers a named formatter, usable as `format: 'name'` in columns. */\nexport function registerFormat(name: string, fn: Formatter): void {\n formats[name] = fn;\n}\n\nexport function format(fmt: string | Formatter, value: unknown): string {\n const fn = typeof fmt === 'function' ? fmt : formats[fmt];\n if (!fn) throw new Error(`Optikos: unknown format \"${fmt}\"`);\n return fn(value);\n}\n"],
5
+ "mappings": "wCAIA,IAAMA,EAAO,IAAMC,EAAU,EAAE,MACzBC,EAAO,CAACC,EAAQC,IAAqC,CACzD,GAAID,GAAK,MAAQA,IAAM,GAAI,MAAO,GAElC,IAAME,EAAIF,aAAa,KAAOA,EAAI,OAAOA,GAAM,UAAY,sBAAsB,KAAKA,CAAC,EAAI,IAAI,KAAK,CAACA,EAAE,MAAM,EAAG,CAAC,EAAG,CAACA,EAAE,MAAM,EAAG,CAAC,EAAI,EAAG,CAACA,EAAE,MAAM,EAAG,EAAE,CAAC,EAAI,IAAI,KAAKA,CAAC,EACrK,OAAO,MAAM,CAACE,CAAC,EAAI,OAAOF,CAAC,EAAI,IAAI,KAAK,eAAeH,EAAK,EAAGI,CAAI,EAAE,OAAOC,CAAC,CAC/E,EAEMC,EAAqC,CACzC,OAAQ,CAACH,EAAGI,IAAOJ,GAAK,MAAQA,IAAM,GAAK,GAAK,IAAI,KAAK,aAAaH,EAAK,EAAGO,CAAC,EAAE,OAAOJ,CAAC,EACzF,MAAO,CAACA,EAAGI,IAAOJ,GAAK,MAAQA,IAAM,GAAK,GAAK,IAAI,KAAK,aAAaH,EAAK,EAAG,CAAE,MAAO,WAAY,SAAUC,EAAU,EAAE,UAAW,GAAGM,CAAE,CAAC,EAAE,OAAOJ,CAAC,EACnJ,QAAS,CAACA,EAAGI,IAAOJ,GAAK,MAAQA,IAAM,GAAK,GAAK,IAAI,KAAK,aAAaH,EAAK,EAAG,CAAE,MAAO,UAAW,sBAAuB,EAAG,GAAGO,CAAE,CAAC,EAAE,OAAOJ,CAAC,EAC7I,KAAM,CAACA,EAAGI,IAAML,EAAKC,EAAG,CAAE,UAAW,SAAU,GAAGI,CAAE,CAAC,EACrD,SAAU,CAACJ,EAAGI,IAAML,EAAKC,EAAG,CAAE,UAAW,SAAU,UAAW,QAAS,GAAGI,CAAE,CAAC,EAC7E,KAAOJ,GAAOA,EAAI,SAAM,GACxB,SAAWA,GAAM,CACf,GAAIA,GAAK,MAAQA,IAAM,IAAM,MAAM,OAAOA,CAAC,CAAC,EAAG,OAAOA,GAAK,KAAO,GAAK,OAAOA,CAAC,EAC/E,IAAMK,EAAQ,KAAK,MAAM,OAAOL,CAAC,CAAC,EAC5BM,EAAO,CAACC,EAAWC,IAAc,IAAI,KAAK,aAAaX,EAAK,EAAG,CAAE,MAAO,OAAQ,KAAMW,EAAG,YAAa,QAAS,CAAC,EAAE,OAAOD,CAAC,EAC1H,CAACE,EAAGC,CAAC,EAAI,CAAC,KAAK,MAAM,KAAK,IAAIL,CAAK,EAAI,EAAE,EAAG,KAAK,IAAIA,CAAK,EAAI,EAAE,EACtE,MAAO,GAAGA,EAAQ,EAAI,IAAM,EAAE,GAAG,CAACI,GAAKH,EAAKG,EAAG,MAAM,GAAIC,GAAK,CAACD,IAAMH,EAAKI,EAAG,QAAQ,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,EACnH,CACF,EAGO,SAASC,EAAeC,EAAcC,EAAqB,CAChEV,EAAQS,CAAI,EAAIC,CAClB,CAEO,SAASC,EAAOC,EAAyBC,EAAwB,CACtE,IAAMH,EAAK,OAAOE,GAAQ,WAAaA,EAAMZ,EAAQY,CAAG,EACxD,GAAI,CAACF,EAAI,MAAM,IAAI,MAAM,4BAA4BE,CAAG,GAAG,EAC3D,OAAOF,EAAGG,CAAK,CACjB",
6
+ "names": ["lang", "getLocale", "date", "v", "opts", "d", "formats", "o", "total", "unit", "n", "u", "h", "m", "registerFormat", "name", "fn", "format", "fmt", "value"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{a as c}from"./chunk-TIPK3SCJ.js";import{a as h}from"./chunk-2HNQ2XRY.js";import{c as d}from"./chunk-L5SQQFO7.js";import{f as l}from"./chunk-UDXO3KM3.js";import{b as e}from"./chunk-PZSHOSOS.js";import{f as p}from"./chunk-S4QD5NID.js";var r=class extends l{baseCls="op-table";tag="table";store;unsub;onRender(){let t=this.config;this.el.classList.toggle("op-table--striped",!!t.striped),this.bind(t.store??new d({data:t.data??[]})),this.own(()=>this.unsub?.())}bind(t){this.unsub?.(),this.store=t,this.unsub=t.subscribe(()=>this.paint()),this.paint()}cols(){return(this.config.columns??Object.keys(this.store.getAt(0)?.data??{}).map(o=>({field:o}))).filter(o=>!o.hidden)}paint(){let t=this.config,n=this.cols(),o=e("tr","",{},...n.map(i=>e("th",i.align?`op-table__cell--${i.align}`:"",{scope:"col"},i.header??i.field))),a=this.store.getRange().map(i=>e("tr","",{},...n.map(s=>e("td",`${s.align?`op-table__cell--${s.align}`:""} ${s.cls??""}`.trim(),{},h(s,i))))),m=a.length?a:[e("tr","op-table__empty",{},e("td","",{colspan:n.length||1},t.emptyText??p("empty")))];this.el.replaceChildren(...t.caption?[e("caption","",{},t.caption)]:[],e("thead","",{},o),e("tbody","",{},...m))}setData(t){this.config.data=t,this.rendered&&this.store.loadData(t)}setStore(t){this.config.store=t,this.rendered&&this.bind(t)}setColumns(t){this.config.columns=t,this.rendered&&this.paint()}setCaption(t){this.config.caption=t,this.rendered&&this.paint()}};c("table",r);export{r as a};
2
- //# sourceMappingURL=chunk-XFIREDWO.js.map
1
+ import{a as c}from"./chunk-TIPK3SCJ.js";import{f as l}from"./chunk-UDXO3KM3.js";import{b as e}from"./chunk-PZSHOSOS.js";import{a as h}from"./chunk-IODSL7KU.js";import{c as d}from"./chunk-L5SQQFO7.js";import{f as p}from"./chunk-S4QD5NID.js";var r=class extends l{baseCls="op-table";tag="table";store;unsub;onRender(){let t=this.config;this.el.classList.toggle("op-table--striped",!!t.striped),this.bind(t.store??new d({data:t.data??[]})),this.own(()=>this.unsub?.())}bind(t){this.unsub?.(),this.store=t,this.unsub=t.subscribe(()=>this.paint()),this.paint()}cols(){return(this.config.columns??Object.keys(this.store.getAt(0)?.data??{}).map(o=>({field:o}))).filter(o=>!o.hidden)}paint(){let t=this.config,n=this.cols(),o=e("tr","",{},...n.map(i=>e("th",i.align?`op-table__cell--${i.align}`:"",{scope:"col"},i.header??i.field))),a=this.store.getRange().map(i=>e("tr","",{},...n.map(s=>e("td",`${s.align?`op-table__cell--${s.align}`:""} ${s.cls??""}`.trim(),{},h(s,i))))),m=a.length?a:[e("tr","op-table__empty",{},e("td","",{colspan:n.length||1},t.emptyText??p("empty")))];this.el.replaceChildren(...t.caption?[e("caption","",{},t.caption)]:[],e("thead","",{},o),e("tbody","",{},...m))}setData(t){this.config.data=t,this.rendered&&this.store.loadData(t)}setStore(t){this.config.store=t,this.rendered&&this.bind(t)}setColumns(t){this.config.columns=t,this.rendered&&this.paint()}setCaption(t){this.config.caption=t,this.rendered&&this.paint()}};c("table",r);export{r as a};
2
+ //# sourceMappingURL=chunk-XNRZJP4E.js.map
@@ -1,2 +1,2 @@
1
- import{a as k}from"./chunk-UQRQH2JW.js";import{b as d,c as u}from"./chunk-676AKAGF.js";import{a as c,b as g}from"./chunk-VV7CFMPZ.js";import{a as v}from"./chunk-TIPK3SCJ.js";import{b,c as y}from"./chunk-4AA4FQEM.js";import{c as r}from"./chunk-2UPUC4RK.js";import{b as m}from"./chunk-PZSHOSOS.js";import{e as l,f as a}from"./chunk-S4QD5NID.js";l("en",{discardText:"Discard your unsaved changes?",discard:"Discard",keepEditing:"Keep editing"});l("pt-BR",{discardText:"Descartar as altera\xE7\xF5es n\xE3o salvas?",discard:"Descartar",keepEditing:"Continuar editando"});var p=class h extends k{baseCls="op-panel op-window";backdrop;visible=!1;cleanup=[];opener=null;moved=!1;leaving=0;constructor(e={}){super({closable:!0,...e})}onRender(){super.onRender();let e=this.config;this.el.setAttribute("role","dialog"),this.el.tabIndex=-1,e.modal!==!1&&this.el.setAttribute("aria-modal","true"),e.draggable!==!1&&this.initDrag()}initDrag(){this.headerEl.classList.add("op-window__handle"),this.listen(this.headerEl,"pointerdown",e=>{if(e.target.closest(".op-panel__tool")||e.button)return;let t=this.el.getBoundingClientRect(),i=e.clientX-t.left,n=e.clientY-t.top;this.el.classList.add("is-dragging");let o=f=>{this.el.style.left=`${Math.max(0,Math.min(f.clientX-i,innerWidth-40))}px`,this.el.style.top=`${Math.max(0,Math.min(f.clientY-n,innerHeight-40))}px`,this.moved=!0},s=()=>{this.el.classList.remove("is-dragging"),document.removeEventListener("pointermove",o),document.removeEventListener("pointerup",s)};document.addEventListener("pointermove",o),document.addEventListener("pointerup",s),this.cleanup.push(s)})}setMask(e){this.config.mask=e,this.backdrop?.classList.toggle("is-clear",!e)}isVisible(){return this.visible}center(){let e=this.el;e.style.left=`${Math.max(0,(innerWidth-e.offsetWidth)/2)}px`,e.style.top=`${Math.max(0,(innerHeight-e.offsetHeight)/3)}px`}keepInView(){if(!this.moved)return this.center();let e=this.el;e.style.top=`${Math.max(0,Math.min(parseFloat(e.style.top)||0,innerHeight-e.offsetHeight))}px`}show(){if(this.visible||this.destroyed||this.emit("before-show")===!1)return;let e=this.config,t=this.el;this.opener=document.activeElement,e.modal!==!1?(this.backdrop=m("div",`op-window-backdrop${e.mask===!1?" is-clear":""}`,{},t),d(this.backdrop,this.opener),this.cleanup.push(u(this.backdrop)),this.listen(this.backdrop,"pointerdown",s=>{s.target===this.backdrop&&(e.closeOnBackdrop?this.close():t.focus())})):d(t,this.opener),this.visible=!0,this.leaving++,t.getAnimations?.().forEach(s=>s.cancel()),this.notifyMount(),this.center(),b(t,this.opener??void 0,"modal"),this.backdrop?.animate?.([{opacity:0},{opacity:1}],{duration:r.ms("modal"),easing:r.easing("enter")}),this.cleanup.push(g(t));let i=s=>{s.key==="Escape"&&e.closeOnEsc!==!1&&!s.defaultPrevented&&(s.stopPropagation(),this.close())};t.addEventListener("keydown",i);let n=()=>this.keepInView();window.addEventListener("resize",n);let o=typeof ResizeObserver=="function"?new ResizeObserver(n):null;o?.observe(t),this.cleanup.push(()=>t.removeEventListener("keydown",i),()=>window.removeEventListener("resize",n),()=>o?.disconnect()),e.autoFocus?this.focusFirst():t.focus(),this.emit("show")}focusFirst(){let e=c(this.bodyEl)[0],t=this.el.querySelector(".op-panel__footer .op-button--primary");(e??t??c(this.el).find(i=>!i.classList.contains("op-panel__tool"))??this.el).focus()}static ask;close(){let e=this.config.confirmDiscard;if(!e||!this.query(i=>i.isDirty?.()===!0).length)return super.close();let t=typeof e=="string"?e:a("discardText");(h.ask?h.ask(t,{okText:a("discard"),cancelText:a("keepEditing")}):Promise.resolve(confirm(t))).then(i=>{!i||this.destroyed||(this.config.confirmDiscard=!1,super.close(),this.config.confirmDiscard=e)})}hide(){!this.visible||this.emit("before-hide")===!1||(this.release(),this.emit("hide"))}release(e=!0){this.visible=!1,this.cleanup.splice(0).reverse().forEach(o=>o());let t=this.backdrop;this.backdrop=void 0;let i=t??this.el,n=e?y(this.el,this.opener??void 0,"modal"):null;if(n){let o=++this.leaving;t?.animate?.([{opacity:1},{opacity:0}],{duration:r.ms("modal","exit"),easing:r.easing("exit"),fill:"forwards"}),n.then(()=>o===this.leaving&&!this.visible&&(i.remove(),t?.remove()))}else i.remove(),t?.remove();this.opener instanceof HTMLElement&&this.opener.isConnected&&this.opener.focus()}onDestroy(){this.visible?this.release(!1):this.leaving&&(this.el.closest(".op-window-backdrop")??this.el).remove(),super.onDestroy()}};v("window",p);export{p as a};
2
- //# sourceMappingURL=chunk-JE56CJX2.js.map
1
+ import{a as k}from"./chunk-U25QSLAH.js";import{b as d,c as u}from"./chunk-676AKAGF.js";import{a as c,b as g}from"./chunk-VV7CFMPZ.js";import{a as v}from"./chunk-TIPK3SCJ.js";import{b as m}from"./chunk-PZSHOSOS.js";import{e as l,f as a}from"./chunk-S4QD5NID.js";import{b,c as y}from"./chunk-4AA4FQEM.js";import{c as r}from"./chunk-2UPUC4RK.js";l("en",{discardText:"Discard your unsaved changes?",discard:"Discard",keepEditing:"Keep editing"});l("pt-BR",{discardText:"Descartar as altera\xE7\xF5es n\xE3o salvas?",discard:"Descartar",keepEditing:"Continuar editando"});var p=class h extends k{baseCls="op-panel op-window";backdrop;visible=!1;cleanup=[];opener=null;moved=!1;leaving=0;constructor(e={}){super({closable:!0,...e})}onRender(){super.onRender();let e=this.config;this.el.setAttribute("role","dialog"),this.el.tabIndex=-1,e.modal!==!1&&this.el.setAttribute("aria-modal","true"),e.draggable!==!1&&this.initDrag()}initDrag(){this.headerEl.classList.add("op-window__handle"),this.listen(this.headerEl,"pointerdown",e=>{if(e.target.closest(".op-panel__tool")||e.button)return;let t=this.el.getBoundingClientRect(),i=e.clientX-t.left,n=e.clientY-t.top;this.el.classList.add("is-dragging");let o=f=>{this.el.style.left=`${Math.max(0,Math.min(f.clientX-i,innerWidth-40))}px`,this.el.style.top=`${Math.max(0,Math.min(f.clientY-n,innerHeight-40))}px`,this.moved=!0},s=()=>{this.el.classList.remove("is-dragging"),document.removeEventListener("pointermove",o),document.removeEventListener("pointerup",s)};document.addEventListener("pointermove",o),document.addEventListener("pointerup",s),this.cleanup.push(s)})}setMask(e){this.config.mask=e,this.backdrop?.classList.toggle("is-clear",!e)}isVisible(){return this.visible}center(){let e=this.el;e.style.left=`${Math.max(0,(innerWidth-e.offsetWidth)/2)}px`,e.style.top=`${Math.max(0,(innerHeight-e.offsetHeight)/3)}px`}keepInView(){if(!this.moved)return this.center();let e=this.el;e.style.top=`${Math.max(0,Math.min(parseFloat(e.style.top)||0,innerHeight-e.offsetHeight))}px`}show(){if(this.visible||this.destroyed||this.emit("before-show")===!1)return;let e=this.config,t=this.el;this.opener=document.activeElement,e.modal!==!1?(this.backdrop=m("div",`op-window-backdrop${e.mask===!1?" is-clear":""}`,{},t),d(this.backdrop,this.opener),this.cleanup.push(u(this.backdrop)),this.listen(this.backdrop,"pointerdown",s=>{s.target===this.backdrop&&(e.closeOnBackdrop?this.close():t.focus())})):d(t,this.opener),this.visible=!0,this.leaving++,t.getAnimations?.().forEach(s=>s.cancel()),this.notifyMount(),this.center(),b(t,this.opener??void 0,"modal"),this.backdrop?.animate?.([{opacity:0},{opacity:1}],{duration:r.ms("modal"),easing:r.easing("enter")}),this.cleanup.push(g(t));let i=s=>{s.key==="Escape"&&e.closeOnEsc!==!1&&!s.defaultPrevented&&(s.stopPropagation(),this.close())};t.addEventListener("keydown",i);let n=()=>this.keepInView();window.addEventListener("resize",n);let o=typeof ResizeObserver=="function"?new ResizeObserver(n):null;o?.observe(t),this.cleanup.push(()=>t.removeEventListener("keydown",i),()=>window.removeEventListener("resize",n),()=>o?.disconnect()),e.autoFocus?this.focusFirst():t.focus(),this.emit("show")}focusFirst(){let e=c(this.bodyEl)[0],t=this.el.querySelector(".op-panel__footer .op-button--primary");(e??t??c(this.el).find(i=>!i.classList.contains("op-panel__tool"))??this.el).focus()}static ask;close(){let e=this.config.confirmDiscard;if(!e||!this.query(i=>i.isDirty?.()===!0).length)return super.close();let t=typeof e=="string"?e:a("discardText");(h.ask?h.ask(t,{okText:a("discard"),cancelText:a("keepEditing")}):Promise.resolve(confirm(t))).then(i=>{!i||this.destroyed||(this.config.confirmDiscard=!1,super.close(),this.config.confirmDiscard=e)})}hide(){!this.visible||this.emit("before-hide")===!1||(this.release(),this.emit("hide"))}release(e=!0){this.visible=!1,this.cleanup.splice(0).reverse().forEach(o=>o());let t=this.backdrop;this.backdrop=void 0;let i=t??this.el,n=e?y(this.el,this.opener??void 0,"modal"):null;if(n){let o=++this.leaving;t?.animate?.([{opacity:1},{opacity:0}],{duration:r.ms("modal","exit"),easing:r.easing("exit"),fill:"forwards"}),n.then(()=>o===this.leaving&&!this.visible&&(i.remove(),t?.remove()))}else i.remove(),t?.remove();this.opener instanceof HTMLElement&&this.opener.isConnected&&this.opener.focus()}onDestroy(){this.visible?this.release(!1):this.leaving&&(this.el.closest(".op-window-backdrop")??this.el).remove(),super.onDestroy()}};v("window",p);export{p as a};
2
+ //# sourceMappingURL=chunk-Z6HZY2YG.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-UDXO3KM3.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-ZEIE2OCQ.js.map
@@ -1,2 +1,2 @@
1
- import{a as k}from"./chunk-R32HPK7R.js";import{a as S}from"./chunk-4AZ44KV4.js";import{a as _}from"./chunk-MNSDGJKA.js";import{a as F}from"./chunk-2YRQULDC.js";import{a as x}from"./chunk-HLS5FI55.js";import{c as M}from"./chunk-DIOJGTUN.js";import{a as L}from"./chunk-TIPK3SCJ.js";import{f as N}from"./chunk-UDXO3KM3.js";import{b as p}from"./chunk-PZSHOSOS.js";import{e as y,f as s}from"./chunk-S4QD5NID.js";y("en",{fbEq:"equals",fbNe:"does not equal",fbContains:"contains",fbNotContains:"does not contain",fbStarts:"starts with",fbEnds:"ends with",fbGt:"greater than",fbGe:"greater than or equal",fbLt:"less than",fbLe:"less than or equal",fbBetween:"is between",fbNotBetween:"is not between",fbIn:"is any of",fbNin:"is none of",fbEmpty:"is empty",fbNotEmpty:"is not empty",fbAnd:"Match all (AND)",fbOr:"Match any (OR)",fbAddFilter:"Add filter",fbAddGroup:"Add group",fbRemove:"Remove",fbClear:"Clear all",fbApply:"Apply",fbField:"Field",fbOperator:"Operator",fbValue:"Value",fbTo:"and",fbList:"a, b, c",fbNone:"No filters",fbLabel:"Filters"});y("pt-BR",{fbEq:"igual a",fbNe:"diferente de",fbContains:"cont\xE9m",fbNotContains:"n\xE3o cont\xE9m",fbStarts:"come\xE7a com",fbEnds:"termina com",fbGt:"maior que",fbGe:"maior ou igual a",fbLt:"menor que",fbLe:"menor ou igual a",fbBetween:"entre",fbNotBetween:"fora do intervalo",fbIn:"\xE9 um de",fbNin:"n\xE3o \xE9 nenhum de",fbEmpty:"est\xE1 vazio",fbNotEmpty:"n\xE3o est\xE1 vazio",fbAnd:"Todas (E)",fbOr:"Qualquer uma (OU)",fbAddFilter:"Adicionar filtro",fbAddGroup:"Adicionar grupo",fbRemove:"Remover",fbClear:"Limpar tudo",fbApply:"Aplicar",fbField:"Campo",fbOperator:"Operador",fbValue:"Valor",fbTo:"e",fbList:"a, b, c",fbNone:"Sem filtros",fbLabel:"Filtros"});var w={text:["contains","notContains","eq","ne","startsWith","endsWith","in","nin","empty","notEmpty"],number:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],date:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],select:["eq","ne","in","nin","empty","notEmpty"]},C={eq:"fbEq",ne:"fbNe",contains:"fbContains",notContains:"fbNotContains",startsWith:"fbStarts",endsWith:"fbEnds",gt:"fbGt",ge:"fbGe",lt:"fbLt",le:"fbLe",between:"fbBetween",notBetween:"fbNotBetween",in:"fbIn",nin:"fbNin",empty:"fbEmpty",notEmpty:"fbNotEmpty"},v=h=>h==="empty"||h==="notEmpty"?0:h==="between"||h==="notBetween"?2:1,m=h=>h==="in"||h==="nin",E=class extends N{baseCls="op-filterbuilder";root={kind:"group",op:"and",items:[]};parts=[];nextId=1;cancelApply;pickMenu;onRender(){this.el.setAttribute("role","group"),this.el.setAttribute("aria-label",s("fbLabel")),this.config.value&&(this.root=this.fromNode(this.config.value)),this.own(()=>(this.parts.forEach(e=>e.destroy()),this.pickMenu?.destroy())),this.paint(),this.config.value&&this.config.store&&this.apply()}fromNode(e){if("filters"in e)return{kind:"group",op:e.op,items:e.filters.map(n=>this.fromNode(n))};let[i,t]=Array.isArray(e.value)&&!m(e.op??"eq")?e.value:[e.value,void 0];return{kind:"rule",id:this.nextId++,field:e.field,op:e.op??"eq",value:m(e.op??"eq")?e.value:i,value2:t}}field(e){return this.config.fields.find(i=>i.name===e)??this.config.fields[0]}complete(e){let i=v(e.op),t=n=>n!=null&&n!==""&&!(Array.isArray(n)&&!n.length);return i===0||(i===1?t(e.value):t(e.value)&&t(e.value2))}toNode(e){let i=e.items.flatMap(t=>{if(t.kind==="group")return this.toNode(t)?[this.toNode(t)]:[];if(!this.complete(t))return[];let n=v(t.op);return[{field:t.field,op:t.op,...n===1?{value:t.value}:n===2?{value:[t.value,t.value2]}:{}}]});return i.length?{op:e.op,filters:i}:null}getFilter(){return this.toNode(this.root)}setFilter(e){this.root=e?this.fromNode(e):{kind:"group",op:"and",items:[]},this.rendered&&this.paint(),this.changed()}clear(){this.setFilter(null),this.apply()}apply(){this.cancelApply?.();let e=this.getFilter();if(this.emit("before-apply",e)===!1)return;let i=this.config.store;i&&(e?i.filter(e):i.clearFilter()),this.emit("apply",e)}addRule(e){this.root.items.push(this.newRule(e)),this.rendered&&this.paint()}setFields(e){this.config.fields=e,this.rendered&&this.paint()}setStore(e){this.config.store=e}newRule(e){let i=this.field(e??"");return{kind:"rule",id:this.nextId++,field:i.name,op:w[i.type??"text"][0]}}changed(){this.emit("change",this.getFilter()),this.config.live!==!1&&(this.cancelApply?.(),this.cancelApply=this.later(()=>this.apply(),250))}paint(){let e=document.activeElement?.closest("[data-fb]")?.dataset.fb;this.parts.splice(0).forEach(n=>n.destroy());let i=[this.group(this.root,0,null)];this.config.live===!1&&i.push(p("div","op-filterbuilder__foot",{},this.button(s("fbApply"),"primary",()=>this.apply()))),this.el.replaceChildren(...i),this.mounted&&this.parts.forEach(n=>n.notifyMount());let t=e&&this.el.querySelector(`[data-fb="${e}"]`);t&&(t.matches("select,button,input")?t:t.querySelector("input"))?.focus()}button(e,i,t,n){let f=new x({text:e,variant:i,icon:n,handler:t});return this.parts.push(f),f.el}select(e,i,t,n,f){let r=p("select","op-filterbuilder__select",{"aria-label":t,"data-fb":n}),d=new Map;for(let[u,l,o]of e){let a=p("option","",{value:u},l);o?(d.has(o)||d.set(o,p("optgroup","",{label:o})),d.get(o).append(a)):r.append(a)}return r.append(...d.values()),r.value=i,this.listen(r,"change",()=>f(r.value)),r}group(e,i,t){let n=p("div",`op-filterbuilder__group${i?" is-nested":""}`,{role:"group","aria-label":s("fbLabel")}),f=this.select([["and",s("fbAnd")],["or",s("fbOr")]],e.op,s("fbLabel"),`g${i}:logic`,l=>{e.op=l,this.changed()}),r=p("div","op-filterbuilder__head",{},f),d=l=>{let o=this.newRule(l);e.items.push(o),this.paint(),this.el.querySelector(`[data-fb="r${o.id}:v1"] input, select[data-fb="r${o.id}:v1"]`)?.focus()},u=this.button(s("fbAddFilter"),"ghost",()=>this.config.addMode==="pick"?this.pick(u,d):d(),"plus");r.append(u),i<(this.config.maxDepth??3)&&r.append(this.button(s("fbAddGroup"),"ghost",()=>{e.items.push({kind:"group",op:"or",items:[this.newRule()]}),this.paint()},"plus")),t?r.append(this.removeBtn(()=>(t.items.splice(t.items.indexOf(e),1),this.paint(),this.changed()))):e.items.length&&r.append(this.button(s("fbClear"),"ghost",()=>this.clear())),n.append(r),!e.items.length&&!t&&n.append(p("div","op-filterbuilder__none",{},s("fbNone")));for(let l of e.items)n.append(l.kind==="group"?this.group(l,i+1,e):this.rule(l,e));return n}pick(e,i){let t=this.config.fields;this.pickMenu??=new _({}),this.pickMenu.setSearch(t.length>6),this.pickMenu.setItems(t.map(n=>({text:n.label??n.name,group:n.group,handler:()=>i(n.name)}))),this.pickMenu.showBy(e)}removeBtn(e){let i=p("button","op-filterbuilder__remove",{type:"button","aria-label":s("fbRemove"),title:s("fbRemove")},M("x"));return this.listen(i,"click",e),i}rule(e,i){let t=this.field(e.field),n=t.type??"text",f=`r${e.id}`,r=this.select(this.config.fields.map(o=>[o.name,o.label??o.name,o.group]),e.field,s("fbField"),`${f}:field`,o=>{e.field=o;let a=w[this.field(o).type??"text"];(!a.includes(e.op)||(this.field(o).type??"text")!==n)&&(e.op=a[0]),e.value=e.value2=void 0,this.paint(),this.changed()}),d=this.select(w[n].map(o=>[o,s(C[o])]),e.op,s("fbOperator"),`${f}:op`,o=>{let a=e.op;e.op=o,(v(a)!==v(e.op)||m(a)!==m(e.op))&&(e.value=e.value2=void 0),this.paint(),this.changed()}),u=p("div","op-filterbuilder__row",{},r,d),l=v(e.op);return l>=1&&u.append(this.editor(e,t,"value",`${f}:v1`)),l===2&&u.append(p("span","op-filterbuilder__to",{},s("fbTo")),this.editor(e,t,"value2",`${f}:v2`)),u.append(this.removeBtn(()=>(i.items.splice(i.items.indexOf(e),1),this.paint(),this.changed()))),u}editor(e,i,t,n){let f=i.type??"text",r=s("fbValue"),d=l=>{e[t]=l,this.changed()};if(f==="select"){let l=(i.options??[]).map(b=>typeof b=="object"?[String(b.value),b.label]:[String(b),String(b)]),o=b=>(i.options??[]).map(c=>typeof c=="object"?c.value:c).find(c=>String(c)===b)??b;if(m(e.op)){let b=new Set((Array.isArray(e.value)?e.value:[]).map(String)),c=p("div","op-filterbuilder__chips",{role:"group","aria-label":r,"data-fb":n});for(let[g,G]of l){let A=p("input","op-filterbuilder__chipbox",{type:"checkbox",value:g});A.checked=b.has(g),c.append(p("label","op-filterbuilder__chip",{},A,p("span","",{},G)))}return this.listen(c,"change",()=>d(Array.from(c.querySelectorAll("input:checked")).map(g=>o(g.value)))),c}let a=p("select","op-filterbuilder__select",{"aria-label":r,"data-fb":n});a.append(p("option","",{value:""},""));for(let[b,c]of l)a.append(p("option","",{value:b},c));return a.value=e.value!=null?String(e.value):"",this.listen(a,"change",()=>d(a.value===""?void 0:o(a.value))),a}if(m(e.op)){let l=new F({stableSize:!1,placeholder:s("fbList"),value:(e.value??[]).join(", ")});return l.on("change",o=>d(o.split(",").map(a=>a.trim()).filter(Boolean))),this.own1(l,r,n)}let u=f==="number"?new k({value:e[t]??null,stableSize:!1}):f==="date"?new S({value:e[t]??null,stableSize:!1}):new F({value:e[t]??"",stableSize:!1});return u.on("change",l=>d(l===""?void 0:l)),this.own1(u,r,n)}own1(e,i,t){this.parts.push(e),e.on("enter",()=>this.apply());let n=e.el;return n.classList.add("op-filterbuilder__value"),n.dataset.fb=t,e.getInput().setAttribute("aria-label",i),n}};L("filterbuilder",E);export{E as a};
2
- //# sourceMappingURL=chunk-4S3HRFQB.js.map
1
+ import{a as k}from"./chunk-T5OGUCY2.js";import{a as S}from"./chunk-OB3VIRQR.js";import{a as F}from"./chunk-LHWY6G6Q.js";import{a as _}from"./chunk-MQEALOU3.js";import{a as x}from"./chunk-ESRS5ZQV.js";import{c as M}from"./chunk-DIOJGTUN.js";import{a as L}from"./chunk-TIPK3SCJ.js";import{f as N}from"./chunk-UDXO3KM3.js";import{b as p}from"./chunk-PZSHOSOS.js";import{e as y,f as s}from"./chunk-S4QD5NID.js";y("en",{fbEq:"equals",fbNe:"does not equal",fbContains:"contains",fbNotContains:"does not contain",fbStarts:"starts with",fbEnds:"ends with",fbGt:"greater than",fbGe:"greater than or equal",fbLt:"less than",fbLe:"less than or equal",fbBetween:"is between",fbNotBetween:"is not between",fbIn:"is any of",fbNin:"is none of",fbEmpty:"is empty",fbNotEmpty:"is not empty",fbAnd:"Match all (AND)",fbOr:"Match any (OR)",fbAddFilter:"Add filter",fbAddGroup:"Add group",fbRemove:"Remove",fbClear:"Clear all",fbApply:"Apply",fbField:"Field",fbOperator:"Operator",fbValue:"Value",fbTo:"and",fbList:"a, b, c",fbNone:"No filters",fbLabel:"Filters"});y("pt-BR",{fbEq:"igual a",fbNe:"diferente de",fbContains:"cont\xE9m",fbNotContains:"n\xE3o cont\xE9m",fbStarts:"come\xE7a com",fbEnds:"termina com",fbGt:"maior que",fbGe:"maior ou igual a",fbLt:"menor que",fbLe:"menor ou igual a",fbBetween:"entre",fbNotBetween:"fora do intervalo",fbIn:"\xE9 um de",fbNin:"n\xE3o \xE9 nenhum de",fbEmpty:"est\xE1 vazio",fbNotEmpty:"n\xE3o est\xE1 vazio",fbAnd:"Todas (E)",fbOr:"Qualquer uma (OU)",fbAddFilter:"Adicionar filtro",fbAddGroup:"Adicionar grupo",fbRemove:"Remover",fbClear:"Limpar tudo",fbApply:"Aplicar",fbField:"Campo",fbOperator:"Operador",fbValue:"Valor",fbTo:"e",fbList:"a, b, c",fbNone:"Sem filtros",fbLabel:"Filtros"});var w={text:["contains","notContains","eq","ne","startsWith","endsWith","in","nin","empty","notEmpty"],number:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],date:["eq","ne","gt","ge","lt","le","between","notBetween","empty","notEmpty"],select:["eq","ne","in","nin","empty","notEmpty"]},C={eq:"fbEq",ne:"fbNe",contains:"fbContains",notContains:"fbNotContains",startsWith:"fbStarts",endsWith:"fbEnds",gt:"fbGt",ge:"fbGe",lt:"fbLt",le:"fbLe",between:"fbBetween",notBetween:"fbNotBetween",in:"fbIn",nin:"fbNin",empty:"fbEmpty",notEmpty:"fbNotEmpty"},v=h=>h==="empty"||h==="notEmpty"?0:h==="between"||h==="notBetween"?2:1,m=h=>h==="in"||h==="nin",E=class extends N{baseCls="op-filterbuilder";root={kind:"group",op:"and",items:[]};parts=[];nextId=1;cancelApply;pickMenu;onRender(){this.el.setAttribute("role","group"),this.el.setAttribute("aria-label",s("fbLabel")),this.config.value&&(this.root=this.fromNode(this.config.value)),this.own(()=>(this.parts.forEach(e=>e.destroy()),this.pickMenu?.destroy())),this.paint(),this.config.value&&this.config.store&&this.apply()}fromNode(e){if("filters"in e)return{kind:"group",op:e.op,items:e.filters.map(n=>this.fromNode(n))};let[i,t]=Array.isArray(e.value)&&!m(e.op??"eq")?e.value:[e.value,void 0];return{kind:"rule",id:this.nextId++,field:e.field,op:e.op??"eq",value:m(e.op??"eq")?e.value:i,value2:t}}field(e){return this.config.fields.find(i=>i.name===e)??this.config.fields[0]}complete(e){let i=v(e.op),t=n=>n!=null&&n!==""&&!(Array.isArray(n)&&!n.length);return i===0||(i===1?t(e.value):t(e.value)&&t(e.value2))}toNode(e){let i=e.items.flatMap(t=>{if(t.kind==="group")return this.toNode(t)?[this.toNode(t)]:[];if(!this.complete(t))return[];let n=v(t.op);return[{field:t.field,op:t.op,...n===1?{value:t.value}:n===2?{value:[t.value,t.value2]}:{}}]});return i.length?{op:e.op,filters:i}:null}getFilter(){return this.toNode(this.root)}setFilter(e){this.root=e?this.fromNode(e):{kind:"group",op:"and",items:[]},this.rendered&&this.paint(),this.changed()}clear(){this.setFilter(null),this.apply()}apply(){this.cancelApply?.();let e=this.getFilter();if(this.emit("before-apply",e)===!1)return;let i=this.config.store;i&&(e?i.filter(e):i.clearFilter()),this.emit("apply",e)}addRule(e){this.root.items.push(this.newRule(e)),this.rendered&&this.paint()}setFields(e){this.config.fields=e,this.rendered&&this.paint()}setStore(e){this.config.store=e}newRule(e){let i=this.field(e??"");return{kind:"rule",id:this.nextId++,field:i.name,op:w[i.type??"text"][0]}}changed(){this.emit("change",this.getFilter()),this.config.live!==!1&&(this.cancelApply?.(),this.cancelApply=this.later(()=>this.apply(),250))}paint(){let e=document.activeElement?.closest("[data-fb]")?.dataset.fb;this.parts.splice(0).forEach(n=>n.destroy());let i=[this.group(this.root,0,null)];this.config.live===!1&&i.push(p("div","op-filterbuilder__foot",{},this.button(s("fbApply"),"primary",()=>this.apply()))),this.el.replaceChildren(...i),this.mounted&&this.parts.forEach(n=>n.notifyMount());let t=e&&this.el.querySelector(`[data-fb="${e}"]`);t&&(t.matches("select,button,input")?t:t.querySelector("input"))?.focus()}button(e,i,t,n){let f=new x({text:e,variant:i,icon:n,handler:t});return this.parts.push(f),f.el}select(e,i,t,n,f){let r=p("select","op-filterbuilder__select",{"aria-label":t,"data-fb":n}),d=new Map;for(let[u,l,o]of e){let a=p("option","",{value:u},l);o?(d.has(o)||d.set(o,p("optgroup","",{label:o})),d.get(o).append(a)):r.append(a)}return r.append(...d.values()),r.value=i,this.listen(r,"change",()=>f(r.value)),r}group(e,i,t){let n=p("div",`op-filterbuilder__group${i?" is-nested":""}`,{role:"group","aria-label":s("fbLabel")}),f=this.select([["and",s("fbAnd")],["or",s("fbOr")]],e.op,s("fbLabel"),`g${i}:logic`,l=>{e.op=l,this.changed()}),r=p("div","op-filterbuilder__head",{},f),d=l=>{let o=this.newRule(l);e.items.push(o),this.paint(),this.el.querySelector(`[data-fb="r${o.id}:v1"] input, select[data-fb="r${o.id}:v1"]`)?.focus()},u=this.button(s("fbAddFilter"),"ghost",()=>this.config.addMode==="pick"?this.pick(u,d):d(),"plus");r.append(u),i<(this.config.maxDepth??3)&&r.append(this.button(s("fbAddGroup"),"ghost",()=>{e.items.push({kind:"group",op:"or",items:[this.newRule()]}),this.paint()},"plus")),t?r.append(this.removeBtn(()=>(t.items.splice(t.items.indexOf(e),1),this.paint(),this.changed()))):e.items.length&&r.append(this.button(s("fbClear"),"ghost",()=>this.clear())),n.append(r),!e.items.length&&!t&&n.append(p("div","op-filterbuilder__none",{},s("fbNone")));for(let l of e.items)n.append(l.kind==="group"?this.group(l,i+1,e):this.rule(l,e));return n}pick(e,i){let t=this.config.fields;this.pickMenu??=new _({}),this.pickMenu.setSearch(t.length>6),this.pickMenu.setItems(t.map(n=>({text:n.label??n.name,group:n.group,handler:()=>i(n.name)}))),this.pickMenu.showBy(e)}removeBtn(e){let i=p("button","op-filterbuilder__remove",{type:"button","aria-label":s("fbRemove"),title:s("fbRemove")},M("x"));return this.listen(i,"click",e),i}rule(e,i){let t=this.field(e.field),n=t.type??"text",f=`r${e.id}`,r=this.select(this.config.fields.map(o=>[o.name,o.label??o.name,o.group]),e.field,s("fbField"),`${f}:field`,o=>{e.field=o;let a=w[this.field(o).type??"text"];(!a.includes(e.op)||(this.field(o).type??"text")!==n)&&(e.op=a[0]),e.value=e.value2=void 0,this.paint(),this.changed()}),d=this.select(w[n].map(o=>[o,s(C[o])]),e.op,s("fbOperator"),`${f}:op`,o=>{let a=e.op;e.op=o,(v(a)!==v(e.op)||m(a)!==m(e.op))&&(e.value=e.value2=void 0),this.paint(),this.changed()}),u=p("div","op-filterbuilder__row",{},r,d),l=v(e.op);return l>=1&&u.append(this.editor(e,t,"value",`${f}:v1`)),l===2&&u.append(p("span","op-filterbuilder__to",{},s("fbTo")),this.editor(e,t,"value2",`${f}:v2`)),u.append(this.removeBtn(()=>(i.items.splice(i.items.indexOf(e),1),this.paint(),this.changed()))),u}editor(e,i,t,n){let f=i.type??"text",r=s("fbValue"),d=l=>{e[t]=l,this.changed()};if(f==="select"){let l=(i.options??[]).map(b=>typeof b=="object"?[String(b.value),b.label]:[String(b),String(b)]),o=b=>(i.options??[]).map(c=>typeof c=="object"?c.value:c).find(c=>String(c)===b)??b;if(m(e.op)){let b=new Set((Array.isArray(e.value)?e.value:[]).map(String)),c=p("div","op-filterbuilder__chips",{role:"group","aria-label":r,"data-fb":n});for(let[g,G]of l){let A=p("input","op-filterbuilder__chipbox",{type:"checkbox",value:g});A.checked=b.has(g),c.append(p("label","op-filterbuilder__chip",{},A,p("span","",{},G)))}return this.listen(c,"change",()=>d(Array.from(c.querySelectorAll("input:checked")).map(g=>o(g.value)))),c}let a=p("select","op-filterbuilder__select",{"aria-label":r,"data-fb":n});a.append(p("option","",{value:""},""));for(let[b,c]of l)a.append(p("option","",{value:b},c));return a.value=e.value!=null?String(e.value):"",this.listen(a,"change",()=>d(a.value===""?void 0:o(a.value))),a}if(m(e.op)){let l=new F({stableSize:!1,placeholder:s("fbList"),value:(e.value??[]).join(", ")});return l.on("change",o=>d(o.split(",").map(a=>a.trim()).filter(Boolean))),this.own1(l,r,n)}let u=f==="number"?new k({value:e[t]??null,stableSize:!1}):f==="date"?new S({value:e[t]??null,stableSize:!1}):new F({value:e[t]??"",stableSize:!1});return u.on("change",l=>d(l===""?void 0:l)),this.own1(u,r,n)}own1(e,i,t){this.parts.push(e),e.on("enter",()=>this.apply());let n=e.el;return n.classList.add("op-filterbuilder__value"),n.dataset.fb=t,e.getInput().setAttribute("aria-label",i),n}};L("filterbuilder",E);export{E as a};
2
+ //# sourceMappingURL=chunk-ZLYZFHEN.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-FPU53CCV.js";import"../chunk-MNSDGJKA.js";import"../chunk-RG6SHPHF.js";import"../chunk-DIOJGTUN.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as Breadcrumb};
1
+ import{a}from"../chunk-M7HLHGQV.js";import"../chunk-MQEALOU3.js";import"../chunk-6NP4AEV4.js";import"../chunk-DIOJGTUN.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4C666HHU.js";export{a as Breadcrumb};
2
2
  //# sourceMappingURL=breadcrumb.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-HLS5FI55.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as Button};
1
+ import{a}from"../chunk-ESRS5ZQV.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4C666HHU.js";export{a as Button};
2
2
  //# sourceMappingURL=button.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-3QRA3XOA.js";import"../chunk-TIPK3SCJ.js";import"../chunk-XQHATUKN.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as Chart};
1
+ import{a}from"../chunk-ZEIE2OCQ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-XFDNXSU5.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as Chart};
2
2
  //# sourceMappingURL=chart.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-C3MWS7P2.js";import"../chunk-HLS5FI55.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as Chat};
1
+ import{a}from"../chunk-UL364TLO.js";import"../chunk-ESRS5ZQV.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4C666HHU.js";export{a as Chat};
2
2
  //# sourceMappingURL=chat.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-Z6L55FTN.js";import"../chunk-DIOJGTUN.js";import"../chunk-XR677UYD.js";import"../chunk-TIPK3SCJ.js";import"../chunk-V5G5JECN.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as Checkbox};
1
+ import{a}from"../chunk-S3ILIWSW.js";import"../chunk-DIOJGTUN.js";import"../chunk-QVBDBGS4.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-V5G5JECN.js";import"../chunk-4C666HHU.js";export{a as Checkbox};
2
2
  //# sourceMappingURL=checkbox.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-643FOYQB.js";import"../chunk-DIOJGTUN.js";import"../chunk-XR677UYD.js";import"../chunk-TIPK3SCJ.js";import"../chunk-V5G5JECN.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as CheckboxGroup};
1
+ import{a}from"../chunk-BTGJ3MP4.js";import"../chunk-DIOJGTUN.js";import"../chunk-QVBDBGS4.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-V5G5JECN.js";import"../chunk-4C666HHU.js";export{a as CheckboxGroup};
2
2
  //# sourceMappingURL=checkboxgroup.js.map
@@ -1,2 +1,2 @@
1
- import{a,b}from"../chunk-NJ5IFOPR.js";import"../chunk-HLS5FI55.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{b as CodeViewer,a as tokenize};
1
+ import{a,b}from"../chunk-MM2OC66E.js";import"../chunk-ESRS5ZQV.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4C666HHU.js";export{b as CodeViewer,a as tokenize};
2
2
  //# sourceMappingURL=codeviewer.js.map
@@ -0,0 +1,2 @@
1
+ import{a}from"../chunk-2CVMT3IW.js";import"../chunk-MGSCSS7X.js";import"../chunk-JBOKM5YA.js";import"../chunk-Z6HZY2YG.js";import"../chunk-U25QSLAH.js";import"../chunk-HRW25TMU.js";import"../chunk-3F4MN2BU.js";import"../chunk-SEW5OCQF.js";import"../chunk-LHWY6G6Q.js";import"../chunk-MQEALOU3.js";import"../chunk-6NP4AEV4.js";import"../chunk-AQ3RTHG5.js";import"../chunk-ESRS5ZQV.js";import"../chunk-DIOJGTUN.js";import"../chunk-BQEFLPDA.js";import"../chunk-QVBDBGS4.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-IODSL7KU.js";import"../chunk-XFDNXSU5.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-V5G5JECN.js";import"../chunk-4C666HHU.js";export{a as columnTotals};
2
+ //# sourceMappingURL=columntotals.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-CMV3F6HR.js";import"../chunk-N2LS4JD6.js";import"../chunk-H25XXQVH.js";import"../chunk-RG6SHPHF.js";import"../chunk-2YRQULDC.js";import"../chunk-DIOJGTUN.js";import"../chunk-OWEQT2HN.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-XR677UYD.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-V5G5JECN.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as ComboBox};
1
+ import{a}from"../chunk-AJN66F32.js";import"../chunk-L6DOWGBO.js";import"../chunk-H25XXQVH.js";import"../chunk-LHWY6G6Q.js";import"../chunk-6NP4AEV4.js";import"../chunk-DIOJGTUN.js";import"../chunk-OWEQT2HN.js";import"../chunk-QVBDBGS4.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-V5G5JECN.js";import"../chunk-4C666HHU.js";export{a as ComboBox};
2
2
  //# sourceMappingURL=combobox.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-AT7VFZRB.js";import"../chunk-BCVOUMJJ.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-L5SQQFO7.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as DataView};
1
+ import{a}from"../chunk-CXZKCBQE.js";import"../chunk-BCVOUMJJ.js";import"../chunk-DIOJGTUN.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-L5SQQFO7.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-4C666HHU.js";export{a as DataView};
2
2
  //# sourceMappingURL=dataview.js.map
@@ -1,2 +1,2 @@
1
- import{a}from"../chunk-4AZ44KV4.js";import"../chunk-GEJKFE4X.js";import"../chunk-RG6SHPHF.js";import"../chunk-2YRQULDC.js";import"../chunk-DIOJGTUN.js";import"../chunk-2GKIF7A6.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-XR677UYD.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-V5G5JECN.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4C666HHU.js";export{a as DateField};
1
+ import{a}from"../chunk-OB3VIRQR.js";import"../chunk-GEJKFE4X.js";import"../chunk-LHWY6G6Q.js";import"../chunk-6NP4AEV4.js";import"../chunk-DIOJGTUN.js";import"../chunk-2GKIF7A6.js";import"../chunk-QVBDBGS4.js";import"../chunk-E4VNLYO2.js";import"../chunk-676AKAGF.js";import"../chunk-VV7CFMPZ.js";import"../chunk-TIPK3SCJ.js";import"../chunk-UDXO3KM3.js";import"../chunk-PZSHOSOS.js";import"../chunk-3VDLX7ET.js";import"../chunk-S4QD5NID.js";import"../chunk-4AA4FQEM.js";import"../chunk-2UPUC4RK.js";import"../chunk-V5G5JECN.js";import"../chunk-4C666HHU.js";export{a as DateField};
2
2
  //# sourceMappingURL=datefield.js.map