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/grid/grid.ts"],
4
+ "sourcesContent": ["import { Component, type ComponentConfig } from '../../../core/component';\nimport { register } from '../../../core/registry';\nimport { h } from '../../../core/dom';\nimport { t, addMessages } from '../../../core/i18n';\nimport { virtualize, measure } from '../../../core/virtual';\nimport { Store } from '../../../data/store';\nimport type { Model } from '../../../data/model';\nimport { cellContent, type Column } from '../../../data/column';\nimport { allowed, gate } from '../../../core/permission';\nimport { iconEl } from '../../base/icon/icon';\nimport { Pagination } from '../pagination/pagination';\nimport { Button } from '../../base/button/button';\nimport { TextField } from '../../fields/textfield/textfield';\nimport { Dropdown } from '../../overlays/dropdown/dropdown';\nimport { Menu } from '../../overlays/menu/menu';\n\naddMessages('en', {\n gridSelected: '{n} selected',\n gridSelectAll: 'Select all {n}',\n gridClearSel: 'Clear selection',\n gridSelectRow: 'Select row',\n gridSelectPage: 'Select all rows',\n gridRowActions: 'Row actions',\n gridColumns: 'Columns',\n gridResize: 'Resize column',\n gridGroupAll: 'All',\n gridOtherCols: 'Other',\n gridGroups: 'Column groups',\n gridColumnSearch: 'Search columns',\n gridNoColumns: 'No matching columns',\n});\naddMessages('pt-BR', {\n gridSelected: '{n} selecionado(s)',\n gridSelectAll: 'Selecionar todos os {n}',\n gridClearSel: 'Limpar sele\u00E7\u00E3o',\n gridSelectRow: 'Selecionar linha',\n gridSelectPage: 'Selecionar todas as linhas',\n gridRowActions: 'A\u00E7\u00F5es da linha',\n gridColumns: 'Colunas',\n gridResize: 'Redimensionar coluna',\n gridGroupAll: 'Todas',\n gridOtherCols: 'Outras',\n gridGroups: 'Grupos de colunas',\n gridColumnSearch: 'Buscar colunas',\n gridNoColumns: 'Nenhuma coluna encontrada',\n});\n\nexport interface GridConfig<T extends Record<string, any> = any> extends ComponentConfig {\n store?: Store<T>;\n /** Used when no `store` is given. */\n data?: Partial<T>[];\n columns: Column<T>[];\n selection?: 'none' | 'single' | 'multi';\n /** Row height in px. Default: measured from the `--op-grid-row-height` / `--op-row-height` tokens. */\n rowHeight?: number;\n /** Adds a Pagination bar bound to the store (give the store a `pageSize`, or set it here). */\n paging?: boolean;\n pageSize?: number;\n emptyText?: string;\n striped?: boolean;\n /** Adds a leading checkbox column with a select-all in the header. Implies multi selection; a row click toggles. */\n checkboxSelection?: boolean;\n /** Keep selected records when the page or the filters change. Default false. */\n keepSelection?: boolean;\n /** Buttons shown in a bar above the header while records are selected. */\n bulkActions?: GridAction<T>[];\n /** Actions at the end of every row (see `rowActionsMode`). */\n rowActions?: GridRowAction<T>[];\n /** Optional features (`cellEditing()`...). See `GridPlugin`. */\n plugins?: GridPlugin<T>[];\n /** `'menu'` (default): one \"\u22EF\" button opens a menu. `'visible'`: every action is an icon button, always shown (dimmed until the row is hovered, active or selected). */\n rowActionsMode?: 'menu' | 'visible';\n /** A \"Columns\" button in the bar: toggle columns on and off, with search. */\n columnMenu?: boolean;\n /** Drag a header to a new place (or Alt+\u2190/\u2192 on a focused header). `column-move` and `columns-change` fire; ViewManager saves the order. */\n reorderableColumns?: boolean;\n /** A handle on each header's edge: drag to resize (double-click resets), Alt+Shift+\u2190/\u2192 on a focused header. Widths are part of `getColumnState`. */\n resizableColumns?: boolean;\n /** Show the group labels (`Column.group`) as a band over the header. Default true when any column has a group. */\n groupHeaders?: boolean;\n}\n\n/** Extends a Grid without growing its base: `init` runs once the grid is rendered and may return a cleanup. */\nexport interface GridPlugin<T extends Record<string, any> = any> {\n init(grid: Grid<T>): void | (() => void);\n destroy?(): void;\n}\n\n/**\n * One displayed row. Without a row layout every store record is a row; a plugin (grouping, tree) replaces the list with\n * its own, mixing records with rows that are not records (a group header, a total).\n */\nexport interface RowEntry<T extends Record<string, any> = any> {\n /** The record this row shows; absent on a header or total row (which cannot be selected). */\n rec?: Model<T>;\n /** `aria-level` and, with `expanded`, `aria-expanded`: for rows that open and close (a group, a tree node). */\n level?: number;\n expanded?: boolean;\n /** Extra classes on the row (`op-grid__row--group`...). */\n cls?: string;\n /** Fills the row's cells after the grid did (or, on a row without a record, instead of it). */\n paint?(cells: HTMLElement[], row: HTMLElement): void;\n}\n\n/** What `cellAt` finds under a DOM node: the row index, its record, the column and the cell element. */\nexport interface GridCell<T extends Record<string, any> = any> {\n index: number;\n record: Model<T>;\n column: Column<T>;\n el: HTMLElement;\n}\n\nexport interface GridAction<T extends Record<string, any> = any> {\n text: string;\n icon?: string;\n variant?: 'default' | 'danger';\n /** Left out (or disabled) while `setPermissionResolver` denies it. */\n permission?: string;\n handler: (records: Model<T>[], grid: Grid<T>) => void;\n}\nexport interface GridRowAction<T extends Record<string, any> = any> {\n text: string;\n icon?: string;\n variant?: 'default' | 'danger';\n /** Left out (or disabled) while `setPermissionResolver` denies it. */\n permission?: string;\n /** Disabled for the records where this returns true. */\n disabled?: (record: Model<T>) => boolean;\n handler: (record: Model<T>, grid: Grid<T>) => void;\n}\nexport interface ColumnState {\n field: string;\n hidden: boolean;\n width?: number;\n locked?: 'start' | 'end';\n}\n\nconst SEL = '__select';\nconst ACT = '__actions';\nconst SEL_COL: Column = { field: SEL, width: 44, align: 'center', cls: 'op-grid__selcell', locked: 'start' };\nconst ACT_COL: Column = { field: ACT, width: 44, align: 'center', cls: 'op-grid__actcell', locked: 'end' };\n\nconst ROW = 'var(--op-grid-row-height, var(--op-row-height))';\n\n/** Data grid with a virtualized body: only the visible rows (plus a small overscan) exist in the DOM. */\n/** `T` is the record shape; `new Grid({ store })` infers it from a typed `Store<T>`. */\nexport class Grid<T extends Record<string, any> = any> extends Component<GridConfig<T>> {\n protected override baseCls = 'op-grid';\n private store!: Store<T>;\n private offStore?: () => void;\n private headEl!: HTMLElement;\n private headRow!: HTMLElement;\n private viewport!: HTMLElement;\n private emptyEl!: HTMLElement;\n /** The focusable `role=grid` part (header + rows); the root also holds the bulk bar and the pager, which a grid may not contain. */\n private table!: HTMLElement;\n private pager?: Pagination;\n private v!: ReturnType<typeof virtualize>;\n private entries?: RowEntry<T>[];\n private lockEdge = [-1, -1];\n private selected = new Set<Model<T>>();\n private active = -1;\n private anchor = -1;\n private justDragged = false;\n private cv = 0; // bumps when the columns change, so pooled rows rebuild their cells\n private selAll?: HTMLInputElement;\n private barEl?: HTMLElement;\n private bulkEl?: HTMLElement;\n private bulkCount?: HTMLElement;\n private bulkBtns: Button[] = [];\n private selectAllBtn?: Button;\n private rowMenu?: Menu;\n private colDd?: Dropdown;\n private colList?: HTMLElement;\n private colSearch?: TextField;\n private colChips?: HTMLElement;\n private colGroup = '';\n\n private cols(): Column[] {\n const c = this.config;\n return [...(c.checkboxSelection ? [SEL_COL] : []), ...this.userCols(), ...(c.rowActions?.length ? [ACT_COL] : [])];\n }\n /** Visible columns; the locked ones are kept together at their edge, whatever the order they were given or dragged to. */\n private userCols(): Column[] {\n const vis = (this.config.columns ?? []).filter((c) => !c.hidden);\n return [...vis.filter((c) => c.locked === 'start'), ...vis.filter((c) => !c.locked), ...vis.filter((c) => c.locked === 'end')];\n }\n private visibleActions(): boolean {\n return this.config.rowActionsMode === 'visible' && !!this.config.rowActions?.length;\n }\n private mode(): 'none' | 'single' | 'multi' {\n return this.config.checkboxSelection ? 'multi' : (this.config.selection ?? 'single');\n }\n\n protected override build() {\n const c = this.config;\n c.rowActions = gate(c.rowActions);\n c.bulkActions = gate(c.bulkActions);\n c.columns = c.columns.filter((col) => allowed(col.permission));\n const el = h('div', this.baseCls);\n this.headRow = h('div', 'op-grid__row op-grid__header-row', { role: 'row' });\n this.headEl = h('div', 'op-grid__header', {}, this.headRow);\n this.viewport = h('div', 'op-grid__viewport');\n this.emptyEl = h('div', 'op-grid__empty');\n if (c.columnMenu || c.bulkActions?.length) {\n this.bulkEl = h('div', 'op-grid__bulk');\n this.bulkEl.hidden = true;\n this.barEl = h('div', 'op-grid__bar', {}, this.bulkEl);\n el.append(this.barEl);\n }\n this.table = h('div', 'op-grid__table', { role: 'grid', tabindex: 0, 'aria-multiselectable': c.selection === 'multi' || c.checkboxSelection ? 'true' : null }, this.headEl, this.viewport, this.emptyEl);\n el.append(this.table);\n el.classList.toggle('op-grid--striped', !!c.striped);\n if (c.paging) {\n this.pager = new Pagination({ cls: 'op-grid__pager' });\n el.append(this.pager.el);\n }\n return el;\n }\n\n protected override onRender() {\n const c = this.config;\n this.bindStore(c.store ?? new Store<T>({ data: c.data ?? [] }));\n this.buildHeader();\n this.buildBar();\n this.v = virtualize({\n scroller: this.viewport,\n count: this.count(),\n rowHeight: c.rowHeight ?? (measure(this.el, ROW) || 36),\n render: (row, i) => this.renderRow(row, i),\n rowCls: 'op-grid__row op-grid__body-row',\n });\n this.own(() => this.v.destroy());\n this.sync();\n\n this.listen(this.viewport, 'scroll', () => this.onScrollX(), { passive: true });\n this.listen(this.viewport, 'click', (e: MouseEvent) => this.onRowEvent(e, 'row-click'));\n this.listen(this.viewport, 'dblclick', (e: MouseEvent) => this.onRowEvent(e, 'row-dblclick'));\n this.listen(this.el, 'keydown', (e: KeyboardEvent) => this.onKey(e));\n this.listen(this.headRow, 'change', (e: Event) => {\n if (e.target !== this.selAll) return;\n if (this.selAll!.checked) this.store.each((r) => this.selected.add(r));\n else if (this.config.keepSelection) this.store.each((r) => this.selected.delete(r));\n else this.selected.clear();\n this.changed();\n });\n if (c.reorderableColumns) this.initColumnDrag();\n if (c.resizableColumns) this.initColumnResize();\n this.listen(this.headRow, 'click', (e: Event) => {\n if (this.justDragged || (e.target as HTMLElement).closest('.op-grid__resizer')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('[data-field]');\n const col = cell && this.userCols().find((x) => x.field === cell.dataset.field);\n if (!col) return;\n this.emit('column-click', col);\n if (col.sortable) this.sortBy(col);\n });\n if (typeof ResizeObserver !== 'undefined') {\n const ro = new ResizeObserver(() => this.layout());\n ro.observe(this.viewport);\n this.own(() => ro.disconnect());\n }\n if (this.pager) {\n this.pager.setStore(this.store);\n if (!this.store.pageSize) this.store.setPageSize(c.pageSize ?? 20);\n }\n this.own(() => this.pager?.destroy());\n for (const p of c.plugins ?? []) {\n const off = p.init(this);\n if (off) this.own(off);\n if (p.destroy) this.own(() => p.destroy!());\n }\n }\n\n /** The row, record, column and cell element under a node (e.g. an event target), if it is a body cell. */\n cellAt(node: EventTarget | null): GridCell<T> | undefined {\n const cell = (node as HTMLElement | null)?.closest?.<HTMLElement>('.op-grid__body-row .op-grid__cell');\n const index = Number(cell?.parentElement?.dataset.i);\n const column = cell && this.cols()[Number(cell.getAttribute('aria-colindex')) - 1];\n const record = cell && this.recAt(index);\n return column && record && ![SEL, ACT].includes(column.field) ? { index, record, column, el: cell } : undefined;\n }\n\n /** The body cell of row `index` and column `field`, when that row is in the DOM (rows are virtualized). */\n getCell(index: number, field: string): HTMLElement | undefined {\n const n = this.cols().findIndex((c) => c.field === field);\n return document.getElementById(`${this.id}-r${index}`)?.querySelector<HTMLElement>(`[aria-colindex=\"${n + 1}\"]`) ?? undefined;\n }\n\n /** The visible data columns, in order (no checkbox/action columns). */\n getColumns(): Column<T>[] {\n return this.userCols();\n }\n\n /** The active row index (keyboard cursor), or -1. */\n getActive(): number {\n return this.active;\n }\n\n override notifyMount() {\n super.notifyMount();\n this.layout();\n this.pager?.notifyMount();\n }\n\n /** The header follows the body sideways; its locked cells hold still, and the edges say when there is more to scroll. */\n private onScrollX() {\n const v = this.viewport;\n const end = Math.max(0, v.scrollWidth - v.clientWidth - v.scrollLeft);\n this.headEl.scrollLeft = v.scrollLeft;\n this.el.style.setProperty('--op-grid-scroll-x', `${v.scrollLeft}px`);\n this.el.style.setProperty('--op-grid-scroll-end', `${end}px`);\n this.el.classList.toggle('is-scrolled-start', v.scrollLeft > 0);\n this.el.classList.toggle('is-scrolled-end', end > 0);\n }\n\n /** Re-measures row height and scrollbar (needed after the grid becomes visible or resizes). */\n private layout() {\n if (!this.rendered) return;\n if (!this.config.rowHeight) {\n const hgt = measure(this.el, ROW);\n if (hgt) this.v.setRowHeight(hgt);\n }\n this.headEl.style.paddingInlineEnd = `${this.viewport.offsetWidth - this.viewport.clientWidth}px`;\n this.v.refresh();\n this.onScrollX();\n }\n\n // ---- store ---------------------------------------------------------------------------------\n\n private bindStore(store: Store<T>) {\n this.offStore?.();\n this.store = store;\n const offChange = store.subscribe((c) => {\n if (!this.rendered) return;\n this.sync();\n if (c.type === 'sort') this.paintSort();\n });\n const offLoading = store.on('loading', (on: boolean) => this.setLoading(on));\n this.offStore = () => (offChange(), offLoading());\n this.own(() => this.offStore?.());\n }\n\n /** Brings count, selection and the empty state in line with the store. */\n private sync() {\n const before = this.selected.size;\n if (!this.config.keepSelection) for (const r of this.selected) if (this.store.indexOf(r) < 0) this.selected.delete(r);\n this.active = Math.min(this.active, this.count() - 1);\n this.v.setCount(this.count());\n this.table.setAttribute('aria-rowcount', String(this.store.totalCount + 1));\n this.emptyEl.textContent = this.config.emptyText ?? t('empty');\n this.emptyEl.hidden = this.count() > 0 || !!this.config.loading;\n this.el.classList.toggle('is-empty', this.count() === 0);\n this.updateActiveDescendant();\n this.paintSelection();\n if (this.selected.size !== before) this.emit('select', this.getSelection());\n }\n\n setStore(store: Store<T>) {\n this.config.store = store;\n this.selected.clear();\n this.active = this.anchor = -1;\n if (!this.rendered) return;\n this.bindStore(store);\n this.pager?.setStore(store);\n this.paintSort();\n this.sync();\n }\n getStore(): Store<T> {\n this.render();\n return this.store;\n }\n\n private count(): number {\n return this.entries ? this.entries.length : this.store.count;\n }\n private recAt(i: number): Model<T> | undefined {\n return this.entries ? this.entries[i]?.rec : this.store.getAt(i);\n }\n\n /** For plugins: replaces the displayed rows (`undefined` goes back to one row per store record) and repaints. */\n setRowLayout(rows: RowEntry<T>[] | undefined): void {\n this.entries = rows;\n if (this.rendered) this.sync();\n }\n /** The displayed row `i`: its record, or the header/total a plugin put there. */\n getRowEntry(i: number): RowEntry<T> | undefined {\n return this.entries ? this.entries[i] : ((rec) => rec && { rec })(this.store.getAt(i));\n }\n /** How many rows are displayed (records plus whatever a plugin added). */\n getRowCount(): number {\n return this.count();\n }\n\n // ---- header / columns ----------------------------------------------------------------------\n\n /** Column widths \u2192 the CSS grid template shared by the header and every row. */\n private layoutColumns() {\n const cols = this.cols();\n const n = this.visibleActions() ? this.config.rowActions!.length : 1;\n const wide = (c: Column) => (c.field === ACT ? `calc(${n} * var(--op-grid-action-size) + ${n + 1} * var(--op-grid-action-gap))` : `${c.width}px`);\n const px = (c: Column) => (c.field === ACT ? wide(c) : `${c.width ?? 140}px`);\n const tpl = cols.map((c) => (c.locked ? px(c) : c.width ? `${c.width}px` : `minmax(${c.minWidth ?? 96}px, ${c.flex ?? 1}fr)`)).join(' ');\n // a locked cell sticks at the sum of the locked widths before it (or, for the end, after it)\n const sums = (list: Array<[number, Column]>) => list.reduce<string[]>((acc, [n, c]) => (this.el.style.setProperty(`--op-grid-lock-${n}`, acc.length ? `calc(${acc.join(' + ')})` : '0px'), [...acc, px(c)]), []);\n const at = cols.map((c, n): [number, Column] => [n, c]);\n sums(at.filter(([, c]) => c.locked === 'start'));\n sums(at.filter(([, c]) => c.locked === 'end').reverse());\n this.lockEdge = [cols.map((c) => c.locked).lastIndexOf('start'), cols.findIndex((c) => c.locked === 'end')];\n this.el.style.setProperty('--op-grid-cols', tpl);\n this.el.style.setProperty('--op-grid-min-width', `${cols.reduce((sum, c) => sum + (c.field === ACT ? n * 36 : (c.width ?? (c.locked ? 140 : (c.minWidth ?? 96)))), 0)}px`);\n }\n\n /** Classes and offset of a locked cell (header or body); `n` is the column's place. */\n private lock(cell: HTMLElement, c: Column, n: number) {\n if (!c.locked) return;\n cell.classList.add('is-locked', `is-locked-${c.locked}`);\n cell.classList.toggle('is-lock-edge', this.lockEdge[c.locked === 'start' ? 0 : 1] === n);\n cell.style.setProperty('--_lock', `var(--op-grid-lock-${n})`);\n }\n\n private buildHeader() {\n const cols = this.cols();\n this.layoutColumns();\n this.el.classList.toggle('op-grid--actions-visible', this.visibleActions());\n this.el.classList.toggle('op-grid--reorderable', !!this.config.reorderableColumns);\n this.el.classList.toggle('op-grid--resizable', !!this.config.resizableColumns);\n this.table.setAttribute('aria-colcount', String(cols.length));\n this.selAll = undefined;\n this.headRow.replaceChildren(\n ...cols.map((c, i) => {\n const label = c.header ?? c.field;\n const cell = h('div', `op-grid__cell op-grid__hcell${c.align ? ` op-grid__cell--${c.align}` : ''}${c.sortable ? ' is-sortable' : ''}`, { role: 'columnheader', 'aria-colindex': i + 1, 'data-field': c.field });\n this.lock(cell, c, i);\n if (c.field === SEL) cell.append((this.selAll = h('input', 'op-grid__check', { type: 'checkbox', 'aria-label': t('gridSelectPage') })));\n else if (c.field === ACT) cell.append(h('span', 'op-sr-only', {}, t('gridRowActions')));\n else if (c.sortable) cell.append(h('button', 'op-grid__sort', { type: 'button' }, h('span', 'op-grid__label', {}, label), h('span', 'op-grid__arrow', { 'aria-hidden': 'true' }, iconEl('arrow-up'))));\n else cell.append(h('span', 'op-grid__label', {}, label));\n const user = c.field !== SEL && c.field !== ACT;\n if (this.config.reorderableColumns && user) cell.classList.add('is-reorderable');\n if (this.canResize(c)) {\n cell.append(h('span', 'op-grid__resizer', { role: 'separator', 'aria-orientation': 'vertical', 'aria-label': `${t('gridResize')} ${label}` }));\n }\n // a sortable header already has its button to focus; the others need a tab stop to be moved/resized by keyboard\n if (user && !c.sortable && (this.config.reorderableColumns || this.canResize(c))) cell.tabIndex = 0;\n return cell;\n }),\n );\n const band = this.groupBand(cols);\n this.headEl.replaceChildren(...(band ? [band] : []), this.headRow);\n this.paintSort();\n this.emit('header-paint');\n }\n\n /** Labels over runs of neighbouring columns that share a group (a dragged column can split a group: it shows twice). */\n private groupBand(cols: Column[]): HTMLElement | null {\n if (this.config.groupHeaders === false || !cols.some((c) => c.group)) return null;\n const cells: HTMLElement[] = [];\n let i = 0;\n while (i < cols.length) {\n const g = cols[i].group ?? '';\n let n = 1;\n while (i + n < cols.length && (cols[i + n].group ?? '') === g) n++;\n const cell = h('div', `op-grid__gcell${g ? '' : ' is-empty'}`, { role: 'columnheader', 'aria-colindex': i + 1, 'aria-colspan': n }, g);\n cell.style.gridColumn = `span ${n}`;\n cells.push(cell);\n i += n;\n }\n return h('div', 'op-grid__row op-grid__group-row', { role: 'row' }, ...cells);\n }\n\n /** The group labels in the order they first appear. */\n getColumnGroups(): string[] {\n return [...new Set(this.config.columns.map((c) => c.group).filter((g): g is string => !!g))];\n }\n\n /** Shows or hides every column of a group at once (at least one column always stays visible). */\n setColumnGroupVisible(group: string, visible: boolean): void {\n const cols = this.config.columns.filter((c) => (c.group ?? '') === group);\n if (!cols.length) return;\n for (const c of cols) c.hidden = !visible;\n if (!this.config.columns.some((c) => !c.hidden)) cols[0].hidden = false;\n this.setColumns(this.config.columns);\n this.emit('columns-change', this.getColumnState());\n }\n\n /** Pins a column to the start or the end while the body scrolls sideways (`null` releases it). A locked column needs a `width` (default 140). */\n setColumnLocked(field: string, locked: 'start' | 'end' | null): void {\n const col = this.config.columns.find((c) => c.field === field);\n if (!col || col.locked === (locked ?? undefined)) return;\n this.setColumns(this.config.columns.map((c) => (c === col ? { ...c, locked: locked ?? undefined } : c)));\n this.emit('columns-change', this.getColumnState());\n }\n\n setColumns(columns: Column[]) {\n this.config.columns = columns;\n if (!this.rendered) return;\n this.cv++;\n this.buildHeader();\n this.paintSelection();\n this.v.refresh();\n }\n\n /** Order, visibility and width of every column; save it and give it back to `setColumnState`. */\n getColumnState(): ColumnState[] {\n return this.config.columns.map((c) => ({ field: c.field, hidden: !!c.hidden, width: c.width, locked: c.locked }));\n }\n /** Restores a saved state: columns follow its order (unknown ones keep their place at the end). */\n setColumnState(state: ColumnState[]): void {\n const by = new Map(this.config.columns.map((c) => [c.field, c]));\n const ordered = state.flatMap((s) => {\n const c = by.get(s.field);\n by.delete(s.field);\n return c ? [{ ...c, hidden: s.hidden, width: s.width ?? c.width, locked: 'locked' in s ? s.locked : c.locked }] : [];\n });\n this.setColumns([...ordered, ...by.values()]);\n this.emit('columns-change', this.getColumnState());\n }\n\n // ---- column drag ---------------------------------------------------------------------------\n\n // ---- column resize -------------------------------------------------------------------------\n\n private canResize(c: Column): boolean {\n return !!this.config.resizableColumns && c.field !== SEL && c.field !== ACT && c.resizable !== false;\n }\n\n /** Sets a column's width in px (clamped to `minWidth`/`maxWidth`); `undefined` gives it back its flexible width. */\n setColumnWidth(field: string, width: number | undefined): void {\n const col = this.config.columns.find((x) => x.field === field);\n if (!col) return;\n col.width = width == null ? undefined : Math.round(Math.max(col.minWidth ?? 48, Math.min(width, col.maxWidth ?? Infinity)));\n this.layoutColumns();\n this.emit('column-resize', field, col.width);\n this.emit('columns-change', this.getColumnState());\n }\n\n private initColumnResize(): void {\n const head = this.headRow;\n this.listen(head, 'pointerdown', (e: PointerEvent) => {\n const grip = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__resizer');\n if (!grip || e.button) return;\n e.preventDefault();\n const cell = grip.parentElement!;\n const field = cell.dataset.field!;\n const col = this.config.columns.find((x) => x.field === field)!;\n const x0 = e.clientX;\n const w0 = cell.getBoundingClientRect().width || col.width || 96; // a flexible column starts from what it shows now\n this.el.classList.add('is-resizing');\n let last = col.width;\n const move = (m: PointerEvent) => {\n // set without events while dragging; one event when it ends\n const w = Math.round(Math.max(col.minWidth ?? 48, Math.min(w0 + (m.clientX - x0) * (this.dir() === 'rtl' ? -1 : 1), col.maxWidth ?? Infinity)));\n col.width = last = w;\n this.layoutColumns();\n };\n const up = () => {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n this.el.classList.remove('is-resizing');\n this.justDragged = true;\n setTimeout(() => (this.justDragged = false));\n if (last !== undefined) {\n this.emit('column-resize', field, last);\n this.emit('columns-change', this.getColumnState());\n }\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.own(() => (document.removeEventListener('pointermove', move), document.removeEventListener('pointerup', up)));\n });\n // double-click on the handle: back to the flexible width\n this.listen(head, 'dblclick', (e: Event) => {\n const grip = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__resizer');\n if (grip) this.setColumnWidth(grip.parentElement!.dataset.field!, undefined);\n });\n // keyboard: Alt+Shift+\u2190/\u2192 on a focused header\n this.listen(head, 'keydown', (e: KeyboardEvent) => {\n if (!(e.altKey && e.shiftKey) || (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__hcell');\n const col = cell && this.config.columns.find((x) => x.field === cell.dataset.field);\n if (!cell || !col || !this.canResize(col)) return;\n e.preventDefault();\n const w = cell.getBoundingClientRect().width || col.width || 96;\n this.setColumnWidth(col.field, w + (e.key === 'ArrowRight' ? 16 : -16));\n });\n }\n\n private dir(): string {\n return getComputedStyle(this.el).direction;\n }\n\n /** Moves a (user) column in front of `before` (or to the end when null). Hidden columns keep their places. */\n moveColumn(field: string, before: string | null): void {\n const cols = this.config.columns;\n const col = cols.find((x) => x.field === field);\n if (!col || field === before) return;\n const vis = this.userCols();\n const from = vis.indexOf(col);\n const next = [...cols.filter((x) => x !== col)];\n const target = before == null ? undefined : next.find((x) => x.field === before);\n const lastVis = vis.filter((x) => x !== col).pop();\n const at = target ? next.indexOf(target) : lastVis ? next.indexOf(lastVis) + 1 : next.length;\n next.splice(at, 0, col);\n if (next.every((x, i) => x === cols[i])) return;\n this.setColumns(next);\n this.emit('column-move', field, from, this.userCols().indexOf(col));\n this.emit('columns-change', this.getColumnState());\n }\n\n private initColumnDrag(): void {\n const head = this.headRow;\n const cellsOf = () => Array.from(head.querySelectorAll<HTMLElement>('.is-reorderable'));\n this.listen(head, 'pointerdown', (e: PointerEvent) => {\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.is-reorderable');\n if (!cell || e.button || (e.target as HTMLElement).closest('.op-grid__resizer')) return;\n const field = cell.dataset.field!;\n const x0 = e.clientX;\n let ghost: HTMLElement | undefined;\n let mark: HTMLElement | undefined;\n let before: string | null = null;\n const move = (m: PointerEvent) => {\n if (!ghost) {\n if (Math.abs(m.clientX - x0) < 6) return; // a click, not a drag\n ghost = h('div', 'op-grid__ghost', {}, cell.textContent ?? '');\n mark = h('div', 'op-grid__drop');\n this.el.append(ghost);\n this.headEl.append(mark);\n cell.classList.add('is-dragging-col');\n }\n ghost.style.left = `${m.clientX}px`;\n ghost.style.top = `${m.clientY}px`;\n // the drop boundary is the nearest cell edge: before the first cell whose middle is right of the pointer\n const cells = cellsOf();\n const hit = cells.find((c) => {\n const r = c.getBoundingClientRect();\n return m.clientX < r.left + r.width / 2;\n });\n before = hit ? hit.dataset.field! : null;\n const edge = hit ?? cells[cells.length - 1];\n const r = edge?.getBoundingClientRect();\n const hr = this.headEl.getBoundingClientRect();\n if (r && mark) mark.style.left = `${(hit ? r.left : r.right) - hr.left + this.headEl.scrollLeft}px`;\n };\n const up = () => {\n document.removeEventListener('pointermove', move);\n document.removeEventListener('pointerup', up);\n if (!ghost) return;\n ghost.remove();\n mark?.remove();\n cell.classList.remove('is-dragging-col');\n this.justDragged = true;\n setTimeout(() => (this.justDragged = false));\n this.moveColumn(field, before);\n };\n document.addEventListener('pointermove', move);\n document.addEventListener('pointerup', up);\n this.own(() => (document.removeEventListener('pointermove', move), document.removeEventListener('pointerup', up)));\n });\n // keyboard: Alt+\u2190 / Alt+\u2192 on a focused header moves its column one step\n this.listen(head, 'keydown', (e: KeyboardEvent) => {\n if (!e.altKey || e.shiftKey || (e.key !== 'ArrowLeft' && e.key !== 'ArrowRight')) return;\n const cell = (e.target as HTMLElement).closest<HTMLElement>('.is-reorderable');\n if (!cell) return;\n e.preventDefault();\n const vis = this.userCols();\n const i = vis.findIndex((x) => x.field === cell.dataset.field);\n const j = e.key === 'ArrowLeft' ? i - 1 : i + 1;\n if (j < 0 || j >= vis.length) return;\n this.moveColumn(vis[i].field, e.key === 'ArrowLeft' ? vis[j].field : (vis[j + 1]?.field ?? null));\n const again = head.querySelector<HTMLElement>(`[data-field=\"${CSS.escape(vis[i].field)}\"]`);\n (again?.querySelector<HTMLElement>('button') ?? again)?.focus();\n });\n }\n\n private paintSort() {\n const s = this.store.getSorters()[0];\n for (const cell of Array.from(this.headRow.children) as HTMLElement[]) {\n const on = !!s && cell.dataset.field === s.field;\n cell.classList.toggle('is-sorted-asc', on && s.dir === 'asc');\n cell.classList.toggle('is-sorted-desc', on && s.dir === 'desc');\n if (cell.classList.contains('is-sortable')) cell.setAttribute('aria-sort', on ? (s.dir === 'asc' ? 'ascending' : 'descending') : 'none');\n }\n }\n\n /** asc \u2192 desc \u2192 unsorted. */\n private sortBy(col: Column) {\n const s = this.store.getSorters()[0];\n const dir = s?.field === col.field ? (s.dir === 'asc' ? 'desc' : null) : 'asc';\n if (this.emit('before-sort', col.field, dir) === false) return;\n this.store.sort(dir ? col.field : null, dir ?? undefined);\n this.emit('sort', col.field, dir);\n }\n\n // ---- rows ----------------------------------------------------------------------------------\n\n private rowIndexOffset(): number {\n return this.store.pageSize ? (this.store.page - 1) * this.store.pageSize : 0;\n }\n\n private renderRow(row: HTMLElement, i: number) {\n const entry = this.getRowEntry(i);\n if (!entry) return;\n const rec = entry.rec;\n const cols = this.cols();\n row.id = `${this.id}-r${i}`;\n row.dataset.i = String(i);\n row.setAttribute('role', 'row');\n row.setAttribute('aria-rowindex', String(this.rowIndexOffset() + i + 2));\n const sel = !!rec && this.selected.has(rec);\n if (row.dataset.ec) row.classList.remove(...row.dataset.ec.split(' '));\n row.dataset.ec = entry.cls ?? '';\n if (entry.cls) row.classList.add(...entry.cls.split(' '));\n for (const [a, v] of [['aria-level', entry.level], ['aria-expanded', entry.expanded]] as const) {\n if (v == null) row.removeAttribute(a);\n else row.setAttribute(a, String(v));\n }\n row.setAttribute('aria-selected', this.mode() === 'none' || !rec ? 'false' : String(sel));\n row.classList.toggle('is-selected', sel);\n row.classList.toggle('is-active', i === this.active);\n row.classList.toggle('is-odd', i % 2 === 1);\n if (row.dataset.cv !== String(this.cv) || row.dataset.cn !== String(cols.length)) {\n row.dataset.cv = String(this.cv);\n row.dataset.cn = String(cols.length);\n row.replaceChildren(\n ...cols.map((c, n) => {\n const cell = h('div', `op-grid__cell${c.align ? ` op-grid__cell--${c.align}` : ''}${c.cls ? ` ${c.cls}` : ''}`, { role: 'gridcell', 'aria-colindex': n + 1 });\n this.lock(cell, c, n);\n return cell;\n }),\n );\n }\n const cells = (Array.from(row.children) as HTMLElement[]).filter((c) => c.classList.contains('op-grid__cell')); // a plugin may add its own child (an edit bar)\n if (!rec) {\n for (const cell of cells) cell.replaceChildren();\n return entry.paint?.(cells, row);\n }\n cols.forEach((c, n) => {\n const cell = row.children[n] as HTMLElement;\n if (cell.classList.contains('is-editing')) return; // an editor plugin owns this cell until it finishes\n if (c.field === SEL) {\n const box = (cell.firstElementChild as HTMLInputElement | null) ?? cell.appendChild(h('input', 'op-grid__check', { type: 'checkbox', tabindex: -1, 'aria-label': t('gridSelectRow') }));\n box.checked = sel;\n return;\n }\n if (c.field === ACT) {\n const acts = this.config.rowActions ?? [];\n if (!this.visibleActions()) {\n if (!cell.firstChild) cell.append(h('button', 'op-grid__actbtn', { type: 'button', tabindex: -1, 'aria-label': t('gridRowActions'), 'aria-haspopup': 'menu' }, iconEl('more')));\n return;\n }\n if (cell.children.length !== acts.length || (cell.firstElementChild as HTMLElement | null)?.dataset.a == null) {\n cell.replaceChildren(...acts.map((a, k) => h('button', `op-grid__actbtn${a.variant === 'danger' ? ' is-danger' : ''}`, { type: 'button', tabindex: -1, 'data-a': k, 'aria-label': a.text, title: a.text }, a.icon ? iconEl(a.icon) : a.text)));\n }\n acts.forEach((a, k) => ((cell.children[k] as HTMLButtonElement).disabled = !!a.disabled?.(rec)));\n return;\n }\n const content = cellContent(c, rec);\n if (typeof content === 'string') cell.textContent = content;\n else cell.replaceChildren(content);\n });\n entry.paint?.(cells, row);\n }\n\n private indexOfEvent(e: Event): number {\n const row = (e.target as HTMLElement).closest<HTMLElement>('.op-grid__body-row');\n return row ? Number(row.dataset.i) : -1;\n }\n\n private onRowEvent(e: MouseEvent, name: string) {\n const i = this.indexOfEvent(e);\n const rec = this.recAt(i);\n if (!rec) return;\n if (name === 'row-click') {\n const btn = (e.target as HTMLElement).closest<HTMLButtonElement>('.op-grid__actbtn');\n if (btn) {\n if (btn.dataset.a == null) return this.openRowMenu(rec, btn);\n if (!btn.disabled) this.config.rowActions![Number(btn.dataset.a)].handler(rec, this);\n return;\n }\n this.setActive(i, false);\n this.pick(i, e);\n }\n this.emit(name, rec, i, e);\n }\n\n // ---- selection / keyboard ------------------------------------------------------------------\n\n getSelection(): Model<T>[] {\n return [...this.selected];\n }\n\n /** Selects a record or row index. `add` keeps the current selection (multi mode). */\n select(target: Model<T> | number, opts: { add?: boolean } = {}): void {\n const rec = typeof target === 'number' ? this.recAt(target) : target;\n const mode = this.mode();\n if (!rec || mode === 'none') return;\n if (mode === 'single' || !opts.add) this.selected.clear();\n this.selected.add(rec);\n this.changed();\n }\n\n deselectAll(): void {\n if (!this.selected.size) return;\n this.selected.clear();\n this.changed();\n }\n\n private changed() {\n this.v?.refresh();\n this.paintSelection();\n this.emit('select', this.getSelection());\n }\n\n /** Selects every record that matches the filters, across pages (a remote store: the loaded page). */\n selectAllFiltered(): void {\n if (this.mode() !== 'multi') return;\n for (const r of this.store.getFiltered()) this.selected.add(r);\n this.changed();\n }\n\n /** Click semantics: plain = replace, ctrl/meta = toggle, shift = range from the anchor (multi only). */\n private pick(i: number, e: { ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean }) {\n const mode = this.mode();\n const rec = this.recAt(i);\n if (!rec || mode === 'none') return;\n if (mode === 'multi' && e.shiftKey && this.anchor >= 0) {\n if (!this.config.checkboxSelection) this.selected.clear();\n for (let k = Math.min(this.anchor, i); k <= Math.max(this.anchor, i); k++) {\n const r = this.recAt(k);\n if (r) this.selected.add(r);\n }\n } else if (mode === 'multi' && (e.ctrlKey || e.metaKey || this.config.checkboxSelection)) {\n if (!this.selected.delete(rec)) this.selected.add(rec);\n this.anchor = i;\n } else {\n this.selected.clear();\n this.selected.add(rec);\n this.anchor = i;\n }\n this.changed();\n }\n\n private setActive(i: number, scroll = true) {\n this.active = i;\n if (scroll && i >= 0) this.v.scrollTo(i);\n this.v.refresh();\n this.updateActiveDescendant();\n }\n\n private updateActiveDescendant() {\n if (this.active >= 0 && this.active < this.count()) this.table.setAttribute('aria-activedescendant', `${this.id}-r${this.active}`);\n else this.table.removeAttribute('aria-activedescendant');\n }\n\n focusRow(i: number) {\n this.render();\n this.setActive(Math.max(0, Math.min(i, this.count() - 1)));\n this.table.focus();\n }\n\n protected override focusEl(): HTMLElement {\n return this.table;\n }\n\n scrollToRow(i: number) {\n this.v?.scrollTo(i);\n }\n\n private onKey(e: KeyboardEvent) {\n const target = e.target as HTMLElement;\n if (target.closest('.op-grid__header')) return; // header buttons keep their own keys\n if (target !== this.table && target.matches('input:not([type=checkbox]),textarea,select,[contenteditable]')) return; // an editor in a cell keeps its keys\n const n = this.count();\n if (!n) return;\n if ((e.key === 'ContextMenu' || (e.shiftKey && e.key === 'F10')) && this.active >= 0 && this.config.rowActions?.length) {\n e.preventDefault();\n const arec = this.recAt(this.active);\n if (!arec) return;\n return this.openRowMenu(arec, document.getElementById(`${this.id}-r${this.active}`) ?? this.el);\n }\n const page = Math.max(1, Math.floor((this.viewport.clientHeight || 400) / this.config.rowHeight! || 10));\n const cur = this.active < 0 ? 0 : this.active;\n const mode = this.mode();\n const targets: Record<string, number> = {\n ArrowDown: Math.min(n - 1, this.active < 0 ? 0 : cur + 1),\n ArrowUp: Math.max(0, cur - 1),\n Home: 0,\n End: n - 1,\n PageDown: Math.min(n - 1, cur + page),\n PageUp: Math.max(0, cur - page),\n };\n if (e.key in targets) {\n e.preventDefault();\n const to = targets[e.key];\n this.setActive(to);\n if (mode === 'single' || (mode === 'multi' && !e.ctrlKey && !e.metaKey && !this.config.checkboxSelection)) this.pick(to, e);\n } else if (e.key === ' ' && this.active >= 0) {\n e.preventDefault();\n if (mode === 'multi') this.pick(this.active, { ctrlKey: true });\n else this.pick(this.active, e);\n } else if (e.key === 'Enter' && this.active >= 0) {\n this.emit('row-activate', this.recAt(this.active), this.active);\n } else if ((e.key === 'a' || e.key === 'A') && (e.ctrlKey || e.metaKey) && mode === 'multi') {\n e.preventDefault();\n this.store.each((r) => this.selected.add(r));\n this.changed();\n }\n }\n\n refresh() {\n this.v?.refresh();\n }\n\n // ---- bar: bulk actions and the column menu ------------------------------------------------\n\n private buildBar() {\n const c = this.config;\n if (!this.barEl) return;\n this.bulkCount = h('span', 'op-grid__count', { 'aria-live': 'polite' });\n this.selectAllBtn = new Button({ text: '', variant: 'ghost', handler: () => this.selectAllFiltered() });\n this.bulkBtns = (c.bulkActions ?? []).map((a) => new Button({ text: a.text, icon: a.icon, variant: a.variant === 'danger' ? 'danger' : 'default', handler: () => a.handler(this.getSelection(), this) }));\n const clear = new Button({ text: t('gridClearSel'), variant: 'ghost', handler: () => this.deselectAll() });\n this.bulkEl!.append(this.bulkCount, this.selectAllBtn.el, ...this.bulkBtns.map((b) => b.el), clear.el);\n this.own(() => [this.selectAllBtn, ...this.bulkBtns, clear].forEach((b) => b?.destroy()));\n if (c.columnMenu) this.buildColumnMenu();\n this.paintSelection();\n }\n\n /** Header checkbox state and the bulk bar, from the current selection. */\n private paintSelection() {\n if (!this.rendered) return;\n const n = this.store.count;\n let k = 0;\n this.store.each((r) => this.selected.has(r) && k++);\n if (this.selAll) {\n this.selAll.checked = n > 0 && k === n;\n this.selAll.indeterminate = k > 0 && k < n;\n }\n if (!this.bulkEl) return;\n const size = this.selected.size;\n this.bulkEl.hidden = !size || !this.config.bulkActions?.length;\n if (this.bulkEl.hidden) return;\n this.bulkCount!.textContent = t('gridSelected', { n: size });\n const more = this.store.getFiltered().length;\n this.selectAllBtn!.el.hidden = !(this.mode() === 'multi' && k === n && more > n && size < more);\n this.selectAllBtn!.setText(t('gridSelectAll', { n: more }));\n }\n\n private openRowMenu(rec: Model<T>, btn: HTMLElement) {\n this.rowMenu ??= new Menu({});\n this.rowMenu.setItems((this.config.rowActions ?? []).map((a) => ({ text: a.text, icon: a.icon, disabled: !!a.disabled?.(rec), handler: () => a.handler(rec, this) })));\n this.rowMenu.showBy(btn);\n }\n private buildColumnMenu() {\n const btn = new Button({ text: t('gridColumns'), icon: 'columns', variant: 'ghost' });\n this.colSearch = new TextField({ placeholder: t('gridColumnSearch'), clearable: true });\n this.colChips = h('div', 'op-grid__colchips', { role: 'group', 'aria-label': t('gridGroups') });\n this.colList = h('div', 'op-grid__collist', { role: 'group', 'aria-label': t('gridColumns') });\n const none = h('div', 'op-grid__colempty', {}, t('gridNoColumns'));\n none.hidden = true;\n const panel = h('div', 'op-grid__colmenu', {}, this.colSearch.el, this.colChips, this.colList, none);\n this.colDd = new Dropdown({ anchor: btn.el, content: panel, placement: 'bottom-end', role: 'dialog', autoFocus: false });\n this.barEl!.append(btn.el);\n this.own(() => btn.destroy());\n /** Search text and the group chip decide what is listed; a search that names a group shows the whole group. */\n const filter = () => {\n const q = (this.colSearch!.getValue() ?? '').toLowerCase();\n let shown = 0;\n let head: HTMLElement | undefined;\n let rowsInGroup = 0;\n const closeGroup = () => head && (head.hidden = rowsInGroup === 0);\n for (const el of Array.from(this.colList!.children) as HTMLElement[]) {\n if (el.classList.contains('op-grid__colgroup')) {\n closeGroup();\n head = el;\n rowsInGroup = 0;\n continue;\n }\n const g = el.dataset.group ?? '';\n const byChip = !this.colGroup || g === this.colGroup;\n const byText = !q || g.toLowerCase().includes(q) || el.textContent!.toLowerCase().includes(q);\n el.hidden = !(byChip && byText);\n if (!el.hidden) (shown++, rowsInGroup++);\n }\n closeGroup();\n none.hidden = shown > 0;\n };\n this.colSearch.on('change', filter);\n this.listen(this.colChips, 'click', (e: Event) => {\n const b = (e.target as HTMLElement).closest<HTMLElement>('[data-g]');\n if (!b) return;\n this.colGroup = b.dataset.g!;\n this.paintColumnList();\n filter();\n });\n btn.on('click', () => {\n if (this.colDd!.isOpen()) return this.colDd!.close();\n this.colSearch!.setValue('');\n this.colGroup = '';\n this.paintColumnList();\n this.colDd!.open();\n this.colList!.querySelector<HTMLElement>('input')?.focus(); // not the search field: a phone keyboard would cover the list\n });\n this.listen(this.colList, 'change', (e: Event) => {\n const input = e.target as HTMLInputElement;\n if (input.dataset.groupToggle != null) this.setColumnGroupVisible(input.dataset.groupToggle, input.checked);\n else {\n const col = this.config.columns.find((x) => x.field === input.value);\n if (!col) return;\n col.hidden = !input.checked;\n this.setColumns(this.config.columns);\n this.emit('columns-change', this.getColumnState());\n }\n this.paintColumnList();\n filter();\n });\n }\n\n private paintColumnList() {\n const cols = this.config.columns;\n const groups = this.getColumnGroups();\n const last = this.userCols().length === 1 ? this.userCols()[0] : null; // at least one column stays visible\n const row = (c: Column) => {\n const box = h('input', 'op-grid__check', { type: 'checkbox', value: c.field });\n box.checked = !c.hidden;\n box.disabled = c === last;\n return h('label', 'op-grid__colitem', { 'data-group': c.group ?? '' }, box, h('span', '', {}, c.header ?? c.field));\n };\n this.colChips!.hidden = groups.length < 2;\n this.colChips!.replaceChildren(...[['', t('gridGroupAll')], ...groups.map((g) => [g, g])].map(([g, label]) => h('button', `op-grid__colchip${this.colGroup === g ? ' is-on' : ''}`, { type: 'button', 'data-g': g, 'aria-pressed': String(this.colGroup === g) }, label)));\n if (!groups.length) return this.colList!.replaceChildren(...cols.map(row));\n const out: HTMLElement[] = [];\n for (const g of [...groups, '']) {\n const items = cols.filter((c) => (c.group ?? '') === g);\n if (!items.length) continue;\n const on = items.filter((c) => !c.hidden).length;\n const toggle = h('input', 'op-grid__check', { type: 'checkbox', 'data-group-toggle': g, 'aria-label': g || t('gridOtherCols') });\n toggle.checked = on === items.length;\n toggle.indeterminate = on > 0 && on < items.length;\n out.push(h('div', 'op-grid__colgroup', { 'data-group': g }, h('label', '', {}, toggle, h('span', '', {}, g || t('gridOtherCols'))), h('span', 'op-grid__colcount', {}, `${on}/${items.length}`)), ...items.map(row));\n }\n this.colList!.replaceChildren(...out);\n }\n\n protected override onDestroy() {\n this.pager?.destroy();\n this.rowMenu?.destroy();\n this.colDd?.destroy();\n this.colSearch?.destroy();\n }\n}\nregister('grid', Grid);\n"],
5
+ "mappings": "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",
6
+ "names": ["addMessages", "SEL", "ACT", "SEL_COL", "ACT_COL", "ROW", "Grid", "Component", "c", "vis", "gate", "col", "allowed", "el", "h", "Pagination", "Store", "virtualize", "measure", "row", "e", "r", "cell", "x", "ro", "p", "off", "node", "index", "column", "record", "field", "n", "v", "end", "hgt", "store", "offChange", "offLoading", "on", "before", "t", "i", "rows", "rec", "cols", "wide", "px", "tpl", "sums", "list", "acc", "at", "sum", "label", "iconEl", "user", "band", "cells", "g", "group", "visible", "locked", "columns", "state", "by", "ordered", "width", "head", "grip", "x0", "w0", "last", "move", "m", "w", "up", "from", "next", "target", "lastVis", "cellsOf", "ghost", "mark", "hit", "hr", "j", "again", "s", "dir", "entry", "sel", "a", "box", "acts", "k", "content", "cellContent", "name", "btn", "opts", "mode", "scroll", "arec", "page", "cur", "targets", "to", "Button", "clear", "b", "size", "more", "Menu", "TextField", "none", "panel", "Dropdown", "filter", "q", "shown", "rowsInGroup", "closeGroup", "byChip", "byText", "input", "groups", "out", "items", "toggle", "register"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{a as u}from"./chunk-MNSDGJKA.js";import{c as p}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{f as d}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as m,f as h}from"./chunk-S4QD5NID.js";m("en",{breadcrumb:"Breadcrumb",breadcrumbMore:"Show more"});m("pt-BR",{breadcrumb:"Trilha de navega\xE7\xE3o",breadcrumbMore:"Mostrar mais"});var c=class extends d{baseCls="op-breadcrumb";tag="nav";list;menu;onRender(){this.list=i("ol","op-breadcrumb__list"),this.el.append(this.list),this.config.ariaLabel||this.el.setAttribute("aria-label",h("breadcrumb")),this.config.separator!=null&&this.setSeparator(this.config.separator),this.listen(this.list,"click",e=>{let r=e.target;if(r.closest(".op-breadcrumb__more"))return this.showHidden(r.closest("button"));let t=r.closest("[data-i]");t&&this.go(Number(t.dataset.i),e)}),this.own(()=>this.menu?.destroy()),this.paint()}items(){return this.config.items??[]}collapsed(){let e=this.items().length,r=Math.max(3,this.config.maxItems??4);return e<=r?[]:Array.from({length:e-(r-1)},(t,s)=>s+1)}paint(){let e=this.items(),r=this.collapsed(),t=e.length-1,s=[];e.forEach((a,n)=>{if(r.includes(n)){n===r[0]&&s.push(i("li","",{},i("button","op-breadcrumb__more",{type:"button","aria-label":h("breadcrumbMore"),"aria-haspopup":"menu","aria-expanded":"false"},"\u2026")));return}let o=[a.icon?p(a.icon):null,a.text],b=n===t?i("span","op-breadcrumb__current",{"aria-current":"page"},...o):a.href?i("a","op-breadcrumb__item",{href:a.href,"data-i":n},...o):i("button","op-breadcrumb__item",{type:"button","data-i":n},...o);s.push(i("li","",{},b))}),this.list.replaceChildren(...s)}go(e,r){let t=this.items()[e];return!t||e===this.items().length-1?!1:this.emit("before-navigate",t,e)===!1?(r?.preventDefault(),!1):(t.handler?.(t),this.emit("navigate",t,e),!0)}showHidden(e){let r=this.items();this.menu??=new u({}),this.menu.setItems(this.collapsed().map(t=>({text:r[t].text,icon:r[t].icon,handler:()=>{this.go(t)&&r[t].href&&(location.href=r[t].href)}}))),this.menu.on("show",()=>e.setAttribute("aria-expanded","true")),this.menu.on("hide",()=>e.setAttribute("aria-expanded","false")),this.menu.showBy(e)}setItems(e){this.config.items=e,this.rendered&&this.paint()}setMaxItems(e){this.config.maxItems=e,this.rendered&&this.paint()}setSeparator(e){this.config.separator=e,this.rendered&&this.el.style.setProperty("--op-breadcrumb-separator",JSON.stringify(e))}};l("breadcrumb",c);export{c as a};
2
- //# sourceMappingURL=chunk-FPU53CCV.js.map
1
+ import{a as u}from"./chunk-MQEALOU3.js";import{c as p}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{f as d}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as m,f as h}from"./chunk-S4QD5NID.js";m("en",{breadcrumb:"Breadcrumb",breadcrumbMore:"Show more"});m("pt-BR",{breadcrumb:"Trilha de navega\xE7\xE3o",breadcrumbMore:"Mostrar mais"});var c=class extends d{baseCls="op-breadcrumb";tag="nav";list;menu;onRender(){this.list=i("ol","op-breadcrumb__list"),this.el.append(this.list),this.config.ariaLabel||this.el.setAttribute("aria-label",h("breadcrumb")),this.config.separator!=null&&this.setSeparator(this.config.separator),this.listen(this.list,"click",e=>{let r=e.target;if(r.closest(".op-breadcrumb__more"))return this.showHidden(r.closest("button"));let t=r.closest("[data-i]");t&&this.go(Number(t.dataset.i),e)}),this.own(()=>this.menu?.destroy()),this.paint()}items(){return this.config.items??[]}collapsed(){let e=this.items().length,r=Math.max(3,this.config.maxItems??4);return e<=r?[]:Array.from({length:e-(r-1)},(t,s)=>s+1)}paint(){let e=this.items(),r=this.collapsed(),t=e.length-1,s=[];e.forEach((a,n)=>{if(r.includes(n)){n===r[0]&&s.push(i("li","",{},i("button","op-breadcrumb__more",{type:"button","aria-label":h("breadcrumbMore"),"aria-haspopup":"menu","aria-expanded":"false"},"\u2026")));return}let o=[a.icon?p(a.icon):null,a.text],b=n===t?i("span","op-breadcrumb__current",{"aria-current":"page"},...o):a.href?i("a","op-breadcrumb__item",{href:a.href,"data-i":n},...o):i("button","op-breadcrumb__item",{type:"button","data-i":n},...o);s.push(i("li","",{},b))}),this.list.replaceChildren(...s)}go(e,r){let t=this.items()[e];return!t||e===this.items().length-1?!1:this.emit("before-navigate",t,e)===!1?(r?.preventDefault(),!1):(t.handler?.(t),this.emit("navigate",t,e),!0)}showHidden(e){let r=this.items();this.menu??=new u({}),this.menu.setItems(this.collapsed().map(t=>({text:r[t].text,icon:r[t].icon,handler:()=>{this.go(t)&&r[t].href&&(location.href=r[t].href)}}))),this.menu.on("show",()=>e.setAttribute("aria-expanded","true")),this.menu.on("hide",()=>e.setAttribute("aria-expanded","false")),this.menu.showBy(e)}setItems(e){this.config.items=e,this.rendered&&this.paint()}setMaxItems(e){this.config.maxItems=e,this.rendered&&this.paint()}setSeparator(e){this.config.separator=e,this.rendered&&this.el.style.setProperty("--op-breadcrumb-separator",JSON.stringify(e))}};l("breadcrumb",c);export{c as a};
2
+ //# sourceMappingURL=chunk-M7HLHGQV.js.map
@@ -1,2 +1,2 @@
1
- import{c as p}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-676AKAGF.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{g as f,h as u}from"./chunk-4AA4FQEM.js";import{f as d}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";var n={duration:4e3,position:"top-right",max:5},g={info:"info",success:"success",warning:"alert",error:"error"};function v(e){let t=l().querySelector(`.op-toast-region[data-pos="${e}"]`);return t||(t=i("div","op-toast-region",{"data-pos":e}),l().appendChild(t)),t}var r=class extends d{baseCls="op-toast";cancelTimer;remaining=0;started=0;build(){let t=this.config,s=t.type??"info",o=i("div",`op-toast op-toast--${s}`,{role:s==="error"?"alert":"status"}),a=i("div","op-toast__body",{},t.title?i("div","op-toast__title",{},t.title):null,i("div","op-toast__text",{},t.text??""));if(o.append(i("span","op-toast__icon",{},p(g[s])),a),t.closable!==!1){let c=i("button","op-toast__close",{type:"button","aria-label":h("close")},p("x"));this.listen(c,"click",()=>this.close()),o.append(c)}return this.listen(o,"pointerenter",()=>this.pause()),this.listen(o,"pointerleave",()=>this.resume()),this.listen(o,"focusin",()=>this.pause()),this.listen(o,"focusout",()=>this.resume()),o}show(){let t=this.config.position??n.position,s=v(t);t.startsWith("bottom")?s.append(this.el):s.prepend(this.el);for(let o of Array.from(s.children).filter(a=>a!==this.el).slice(n.max-1))o.dispatchEvent(new Event("op-dismiss"));this.listen(this.el,"op-dismiss",()=>this.close()),this.remaining=this.config.duration??n.duration,this.resume(),u(this.el,{dy:10}),this.config.type==="success"&&f(this.el.querySelector(".op-toast__icon")??this.el),this.emit("show")}pause(){this.cancelTimer&&(this.cancelTimer(),this.cancelTimer=void 0,this.remaining-=Date.now()-this.started)}resume(){this.cancelTimer||this.remaining<=0||this.destroyed||(this.started=Date.now(),this.cancelTimer=this.later(()=>this.close(),this.remaining))}close(){this.destroyed||(this.emit("close"),this.destroy())}};m("toast",r);function y(e){let t=new r(typeof e=="string"?{text:e}:e);return t.show(),{close:()=>t.close()}}y.configure=e=>Object.assign(n,e);export{r as a,y as b};
2
- //# sourceMappingURL=chunk-J5QPFJ7M.js.map
1
+ import{c as p}from"./chunk-DIOJGTUN.js";import{a as l}from"./chunk-676AKAGF.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f as d}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";import{g as f,h as u}from"./chunk-4AA4FQEM.js";var n={duration:4e3,position:"top-right",max:5},g={info:"info",success:"success",warning:"alert",error:"error"};function v(e){let t=l().querySelector(`.op-toast-region[data-pos="${e}"]`);return t||(t=i("div","op-toast-region",{"data-pos":e}),l().appendChild(t)),t}var r=class extends d{baseCls="op-toast";cancelTimer;remaining=0;started=0;build(){let t=this.config,s=t.type??"info",o=i("div",`op-toast op-toast--${s}`,{role:s==="error"?"alert":"status"}),a=i("div","op-toast__body",{},t.title?i("div","op-toast__title",{},t.title):null,i("div","op-toast__text",{},t.text??""));if(o.append(i("span","op-toast__icon",{},p(g[s])),a),t.closable!==!1){let c=i("button","op-toast__close",{type:"button","aria-label":h("close")},p("x"));this.listen(c,"click",()=>this.close()),o.append(c)}return this.listen(o,"pointerenter",()=>this.pause()),this.listen(o,"pointerleave",()=>this.resume()),this.listen(o,"focusin",()=>this.pause()),this.listen(o,"focusout",()=>this.resume()),o}show(){let t=this.config.position??n.position,s=v(t);t.startsWith("bottom")?s.append(this.el):s.prepend(this.el);for(let o of Array.from(s.children).filter(a=>a!==this.el).slice(n.max-1))o.dispatchEvent(new Event("op-dismiss"));this.listen(this.el,"op-dismiss",()=>this.close()),this.remaining=this.config.duration??n.duration,this.resume(),u(this.el,{dy:10}),this.config.type==="success"&&f(this.el.querySelector(".op-toast__icon")??this.el),this.emit("show")}pause(){this.cancelTimer&&(this.cancelTimer(),this.cancelTimer=void 0,this.remaining-=Date.now()-this.started)}resume(){this.cancelTimer||this.remaining<=0||this.destroyed||(this.started=Date.now(),this.cancelTimer=this.later(()=>this.close(),this.remaining))}close(){this.destroyed||(this.emit("close"),this.destroy())}};m("toast",r);function y(e){let t=new r(typeof e=="string"?{text:e}:e);return t.show(),{close:()=>t.close()}}y.configure=e=>Object.assign(n,e);export{r as a,y as b};
2
+ //# sourceMappingURL=chunk-MGSCSS7X.js.map
@@ -1,4 +1,4 @@
1
- import{a as b}from"./chunk-HLS5FI55.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-UDXO3KM3.js";import{b as r}from"./chunk-PZSHOSOS.js";import{e as g,f as p}from"./chunk-S4QD5NID.js";g("en",{codeCopy:"Copy",codeCopied:"Copied"});g("pt-BR",{codeCopy:"Copiar",codeCopied:"Copiado"});var w={ts:"TypeScript",js:"JavaScript",json:"JSON",css:"CSS",html:"HTML",sh:"Shell",text:"Text"},y="import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined",c=`'(?:[^'\\\\\\n]|\\\\.)*'|"(?:[^"\\\\\\n]|\\\\.)*"`,l={ts:[new RegExp(`(\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?\\*\\/)|(${c}|\`(?:[^\`\\\\]|\\\\.)*\`)|\\b(${y})\\b|\\b(\\d+(?:\\.\\d+)?)\\b`,"g"),["comment","string","keyword","number"]],js:[/./g,[]],json:[new RegExp(`("(?:[^"\\\\\\n]|\\\\.)*")(?=\\s*:)|(${c})|\\b(true|false|null)\\b|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)`,"g"),["property","string","keyword","number"]],css:[new RegExp(`(\\/\\*[\\s\\S]*?\\*\\/)|(${c})|(@[\\w-]+)|([\\w-]+)(?=\\s*:[^:{;]*[;}\\n])|(#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:%|[a-z]+)?)`,"g"),["comment","string","keyword","property","number"]],html:[new RegExp(`(<!--[\\s\\S]*?-->)|(<\\/?[\\w-]+|\\/?>)|([\\w:-]+)(?==)|(${c})`,"g"),["comment","tag","attr","string"]],sh:[new RegExp(`(#[^\\n]*)|(${c})|\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\b|(\\$\\{?[\\w]+\\}?|--?[\\w-]+)`,"g"),["comment","string","keyword","attr"]]};l.js=l.ts;function x(s,e="ts"){if(e==="text"||!l[e])return[["",s]];let[t,a]=l[e],i=[],n=0;for(let o of s.matchAll(t))o.index>n&&i.push(["",s.slice(n,o.index)]),i.push([a[o.slice(1).findIndex(d=>d!==void 0)]??"",o[0]]),n=o.index+o[0].length;return n<s.length&&i.push(["",s.slice(n)]),i}var v=s=>{if(Array.isArray(s))return new Set(s);let e=new Set;for(let t of(s??"").split(",")){let[a,i]=t.split("-").map(n=>Number(n.trim()));if(Number.isFinite(a))for(let n=a;n<=(Number.isFinite(i)?i:a);n++)e.add(n)}return e},u=class extends f{baseCls="op-codeviewer";titleEl;bar;pre;codeEl;status;copyBtn;build(){return this.titleEl=r("span","op-codeviewer__title"),this.copyBtn=new b({text:p("codeCopy"),icon:"file",variant:"ghost",handler:()=>{this.copy()}}),this.status=r("span","op-sr-only op-codeviewer__status",{"aria-live":"polite"}),this.bar=r("div","op-codeviewer__bar",{},this.titleEl,this.copyBtn.el,this.status),this.codeEl=r("code","op-codeviewer__code"),this.pre=r("pre","op-codeviewer__pre",{tabindex:0},this.codeEl),r("div","op-codeviewer",{},this.bar,this.pre)}onRender(){this.own(()=>this.copyBtn.destroy()),this.paintBar(),this.paintCode(),this.setWrap(!!this.config.wrap),this.setMaxHeight(this.config.maxHeight)}get language(){return this.config.language??"ts"}paintBar(){let e=this.config,t=e.title??w[this.language]??this.language;this.titleEl.textContent=t,this.pre.setAttribute("aria-label",t),this.bar.hidden=e.bar===!1,this.copyBtn.el.hidden=e.copyable===!1}paintCode(){let e=this.config,t=e.startLine??1,a=v(e.highlight),i=[r("span","op-codeviewer__line")];for(let[o,d]of x(e.code??"",this.language))d.split(`
1
+ import{a as b}from"./chunk-ESRS5ZQV.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f}from"./chunk-UDXO3KM3.js";import{b as r}from"./chunk-PZSHOSOS.js";import{e as g,f as p}from"./chunk-S4QD5NID.js";g("en",{codeCopy:"Copy",codeCopied:"Copied"});g("pt-BR",{codeCopy:"Copiar",codeCopied:"Copiado"});var w={ts:"TypeScript",js:"JavaScript",json:"JSON",css:"CSS",html:"HTML",sh:"Shell",text:"Text"},y="import|from|export|default|function|return|const|let|var|new|await|async|if|else|for|of|in|while|do|switch|case|break|continue|throw|try|catch|finally|class|extends|implements|interface|type|enum|as|typeof|instanceof|keyof|readonly|public|private|protected|static|this|void|true|false|null|undefined",c=`'(?:[^'\\\\\\n]|\\\\.)*'|"(?:[^"\\\\\\n]|\\\\.)*"`,l={ts:[new RegExp(`(\\/\\/[^\\n]*|\\/\\*[\\s\\S]*?\\*\\/)|(${c}|\`(?:[^\`\\\\]|\\\\.)*\`)|\\b(${y})\\b|\\b(\\d+(?:\\.\\d+)?)\\b`,"g"),["comment","string","keyword","number"]],js:[/./g,[]],json:[new RegExp(`("(?:[^"\\\\\\n]|\\\\.)*")(?=\\s*:)|(${c})|\\b(true|false|null)\\b|(-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)`,"g"),["property","string","keyword","number"]],css:[new RegExp(`(\\/\\*[\\s\\S]*?\\*\\/)|(${c})|(@[\\w-]+)|([\\w-]+)(?=\\s*:[^:{;]*[;}\\n])|(#[0-9a-fA-F]{3,8}\\b|-?\\d*\\.?\\d+(?:%|[a-z]+)?)`,"g"),["comment","string","keyword","property","number"]],html:[new RegExp(`(<!--[\\s\\S]*?-->)|(<\\/?[\\w-]+|\\/?>)|([\\w:-]+)(?==)|(${c})`,"g"),["comment","tag","attr","string"]],sh:[new RegExp(`(#[^\\n]*)|(${c})|\\b(if|then|else|fi|for|in|do|done|case|esac|while|function|export|return|sudo)\\b|(\\$\\{?[\\w]+\\}?|--?[\\w-]+)`,"g"),["comment","string","keyword","attr"]]};l.js=l.ts;function x(s,e="ts"){if(e==="text"||!l[e])return[["",s]];let[t,a]=l[e],i=[],n=0;for(let o of s.matchAll(t))o.index>n&&i.push(["",s.slice(n,o.index)]),i.push([a[o.slice(1).findIndex(d=>d!==void 0)]??"",o[0]]),n=o.index+o[0].length;return n<s.length&&i.push(["",s.slice(n)]),i}var v=s=>{if(Array.isArray(s))return new Set(s);let e=new Set;for(let t of(s??"").split(",")){let[a,i]=t.split("-").map(n=>Number(n.trim()));if(Number.isFinite(a))for(let n=a;n<=(Number.isFinite(i)?i:a);n++)e.add(n)}return e},u=class extends f{baseCls="op-codeviewer";titleEl;bar;pre;codeEl;status;copyBtn;build(){return this.titleEl=r("span","op-codeviewer__title"),this.copyBtn=new b({text:p("codeCopy"),icon:"file",variant:"ghost",handler:()=>{this.copy()}}),this.status=r("span","op-sr-only op-codeviewer__status",{"aria-live":"polite"}),this.bar=r("div","op-codeviewer__bar",{},this.titleEl,this.copyBtn.el,this.status),this.codeEl=r("code","op-codeviewer__code"),this.pre=r("pre","op-codeviewer__pre",{tabindex:0},this.codeEl),r("div","op-codeviewer",{},this.bar,this.pre)}onRender(){this.own(()=>this.copyBtn.destroy()),this.paintBar(),this.paintCode(),this.setWrap(!!this.config.wrap),this.setMaxHeight(this.config.maxHeight)}get language(){return this.config.language??"ts"}paintBar(){let e=this.config,t=e.title??w[this.language]??this.language;this.titleEl.textContent=t,this.pre.setAttribute("aria-label",t),this.bar.hidden=e.bar===!1,this.copyBtn.el.hidden=e.copyable===!1}paintCode(){let e=this.config,t=e.startLine??1,a=v(e.highlight),i=[r("span","op-codeviewer__line")];for(let[o,d]of x(e.code??"",this.language))d.split(`
2
2
  `).forEach((h,C)=>{C&&i.push(r("span","op-codeviewer__line")),h&&i[i.length-1].append(o?r("span",`op-codeviewer__tok--${o}`,{},h):h)});i.forEach((o,d)=>{a.has(t+d)&&o.classList.add("is-marked"),d<i.length-1&&o.append(`
3
3
  `)}),this.codeEl.replaceChildren(...i);let n=e.lineNumbers!==!1;this.el.classList.toggle("has-numbers",n),this.codeEl.style.counterReset=`op-codeline ${t-1}`,this.codeEl.style.setProperty("--op-codeviewer-gutter",`${String(t+i.length-1).length}ch`)}getCode(){return this.config.code??""}async copy(){let e=this.getCode();try{await navigator.clipboard.writeText(e)}catch{let t=document.createRange();return t.selectNodeContents(this.codeEl),getSelection()?.removeAllRanges(),getSelection()?.addRange(t),!1}return this.copyBtn.setText(p("codeCopied")),this.copyBtn.setIcon("check"),this.status.textContent=p("codeCopied"),this.later(()=>{this.copyBtn.setText(p("codeCopy")),this.copyBtn.setIcon("file"),this.status.textContent=""},1600),this.emit("copy",e),!0}update(e,t=!1){Object.assign(this.config,e),this.rendered&&(t&&this.paintBar(),this.paintCode())}setCode(e){this.update({code:e})}setLanguage(e){this.update({language:e},!0)}setTitle(e){this.update({title:e},!0)}setLineNumbers(e){this.update({lineNumbers:e})}setStartLine(e){this.update({startLine:e})}setHighlight(e){this.update({highlight:e})}setWrap(e){this.config.wrap=e,this.rendered&&this.el.classList.toggle("is-wrapped",e)}setMaxHeight(e){this.config.maxHeight=e,this.rendered&&(this.pre.style.maxBlockSize=e==null?"":typeof e=="number"?`${e}px`:e)}};m("codeviewer",u);export{x as a,u as b};
4
- //# sourceMappingURL=chunk-NJ5IFOPR.js.map
4
+ //# sourceMappingURL=chunk-MM2OC66E.js.map
@@ -1,3 +1,3 @@
1
- import{a as E}from"./chunk-RG6SHPHF.js";import{c as u}from"./chunk-DIOJGTUN.js";import{c as b}from"./chunk-VV7CFMPZ.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{e as v}from"./chunk-4AA4FQEM.js";import{e as d,f as m}from"./chunk-UDXO3KM3.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";var n=".op-menu__item",p=class y extends m{baseCls="op-menu";parentMenu;dd;sub;subOwner;opener=null;hoverCancel;list;searchEl;emptyEl;build(){return s("div","op-menu")}shell(){let t=!!this.config.search;t&&!this.searchEl&&(this.searchEl=s("input","op-menu__search",{type:"search",placeholder:`${h("search")}\u2026`,"aria-label":h("search"),autocomplete:"off"}),this.emptyEl=s("div","op-menu__empty",{},h("noResults")),this.listen(this.searchEl,"input",()=>this.filter()),this.listen(this.searchEl,"keydown",e=>{let i=this.first();i&&(e.key==="ArrowDown"||e.key==="Enter")&&(e.preventDefault(),e.key==="Enter"?this.activate(i):i.focus())})),this.list=t?this.list!==this.el&&this.list||s("div","op-menu__list",{role:"menu"}):this.el,this.el.setAttribute("role",t?"none":"menu"),t&&this.el.replaceChildren(this.searchEl,this.list,this.emptyEl)}first(){return this.list.querySelector(`${n}:not([hidden]):not([aria-disabled=true])`)}filter(){let t=(this.searchEl?.value??"").trim().toLowerCase();this.el.classList.toggle("is-searching",!!t);for(let e of Array.from(this.list.querySelectorAll(n))){let i=e.parentElement.getAttribute("aria-label")??"";e.hidden=!!t&&!`${i}
1
+ import{a as E}from"./chunk-6NP4AEV4.js";import{c as u}from"./chunk-DIOJGTUN.js";import{c as b}from"./chunk-VV7CFMPZ.js";import{a as f}from"./chunk-TIPK3SCJ.js";import{e as d,f as m}from"./chunk-UDXO3KM3.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as h}from"./chunk-S4QD5NID.js";import{e as v}from"./chunk-4AA4FQEM.js";var n=".op-menu__item",p=class y extends m{baseCls="op-menu";parentMenu;dd;sub;subOwner;opener=null;hoverCancel;list;searchEl;emptyEl;build(){return s("div","op-menu")}shell(){let t=!!this.config.search;t&&!this.searchEl&&(this.searchEl=s("input","op-menu__search",{type:"search",placeholder:`${h("search")}\u2026`,"aria-label":h("search"),autocomplete:"off"}),this.emptyEl=s("div","op-menu__empty",{},h("noResults")),this.listen(this.searchEl,"input",()=>this.filter()),this.listen(this.searchEl,"keydown",e=>{let i=this.first();i&&(e.key==="ArrowDown"||e.key==="Enter")&&(e.preventDefault(),e.key==="Enter"?this.activate(i):i.focus())})),this.list=t?this.list!==this.el&&this.list||s("div","op-menu__list",{role:"menu"}):this.el,this.el.setAttribute("role",t?"none":"menu"),t&&this.el.replaceChildren(this.searchEl,this.list,this.emptyEl)}first(){return this.list.querySelector(`${n}:not([hidden]):not([aria-disabled=true])`)}filter(){let t=(this.searchEl?.value??"").trim().toLowerCase();this.el.classList.toggle("is-searching",!!t);for(let e of Array.from(this.list.querySelectorAll(n))){let i=e.parentElement.getAttribute("aria-label")??"";e.hidden=!!t&&!`${i}
2
2
  ${e.textContent}`.toLowerCase().includes(t)}this.emptyEl&&(this.emptyEl.hidden=!!this.first()||!this.list.querySelector(n))}onRender(){this.shell(),this.renderItems();let t=b(this.el,{selector:n,orientation:"vertical"});this.own(()=>t.destroy()),this.listen(this.el,"click",e=>{let i=e.target.closest(n);i&&this.activate(i)}),this.listen(this.el,"keydown",e=>{let i=e.target.closest(n);if(e.target!==this.searchEl){if(e.key==="Tab")return this.closeAll();if(this.searchEl&&e.key.length===1&&e.key!==" "&&!e.ctrlKey&&!e.metaKey&&!e.altKey)return e.preventDefault(),this.searchEl.focus(),this.searchEl.value+=e.key,this.filter();i&&(e.key==="Enter"||e.key===" "?(e.preventDefault(),this.activate(i)):e.key==="ArrowRight"&&i.getAttribute("aria-haspopup")?(e.preventDefault(),this.openSub(i,!0)):e.key==="ArrowLeft"&&this.parentMenu&&(e.preventDefault(),this.hide()))}}),this.listen(this.el,"pointerover",e=>{let i=e.target.closest(n);!i||i.getAttribute("aria-disabled")==="true"||(this.hoverCancel?.(),i.focus(),i.getAttribute("aria-haspopup")?this.hoverCancel=this.later(()=>this.openSub(i,!1),150):this.sub?.hide())})}entries(){return(this.config.items??[]).flatMap(t=>typeof t=="string"?["-"]:d([t])??[])}renderItems(){let t=this.entries(),e=t.map((r,o)=>{if(r==="-")return s("div","op-menu__sep",{role:"separator"});let a=r.checked!==void 0,l=s("div","op-menu__item",{role:a?"menuitemcheckbox":"menuitem",tabindex:-1,"data-i":o,"aria-disabled":r.disabled?"true":null,"aria-checked":a?String(!!r.checked):null,"aria-haspopup":r.items?"menu":null,"aria-expanded":r.items?"false":null});return l.append(s("span","op-menu__icon",{},r.icon?u(r.icon):a&&r.checked?u("check"):null),s("span","op-menu__text",{},r.text??"")),r.badge!=null&&r.badge!==""&&l.append(s("span","op-menu__badge",{},String(r.badge))),r.items&&l.append(s("span","op-menu__arrow",{},u("chevron-right"))),l}),i=r=>t[r]==="-"?"":t[r].group??"",c=[...new Set(t.map((r,o)=>i(o)).filter(Boolean))];if(!c.length)return this.list.replaceChildren(...e),this.filter();this.list.replaceChildren(...e.filter((r,o)=>!i(o)),...c.map(r=>s("div","op-menu__group",{role:"group","aria-label":r},s("div","op-menu__group-label",{"aria-hidden":"true"},r),...e.filter((o,a)=>i(a)===r)))),this.filter()}setItems(t){this.config.items=t,this.rendered&&this.renderItems()}setSearch(t){this.config.search=t,this.rendered&&(this.shell(),this.renderItems())}activate(t){let e=this.entries()[Number(t.dataset.i)];if(!(!e||e.disabled)){if(e.items)return this.openSub(t,!0);e.checked!==void 0&&(e.checked=!e.checked),e.handler?.(e),this.root().emit("click",e),this.root().hide()}}root(){return this.parentMenu?this.parentMenu.root():this}openSub(t,e){let i=this.entries()[Number(t.dataset.i)];if(this.sub&&this.subOwner===t&&this.sub.isOpen())return e?this.sub.focusFirst():void 0;this.sub?.destroy(),this.sub=new y({items:i.items}),this.sub.parentMenu=this,this.subOwner=t,this.sub.on("hide",()=>t.setAttribute("aria-expanded","false")),t.setAttribute("aria-expanded","true"),this.sub.showBy(t,"right-start",e)}isOpen(){return!!this.dd?.isOpen()}focusFirst(){this.first()?.focus()}showBy(t,e="bottom-start",i=!0){this.open({anchor:t,placement:e},i)}showAt(t,e){this.open({anchor:{x:t,y:e},placement:"bottom-start"},!0)}open(t,e){this.opener=document.activeElement,this.dd?(this.dd.setAnchor(t.anchor),this.dd.setPlacement(t.placement)):(this.dd=new E({...t,content:this.el,role:"presentation",flip:!0}),this.dd.on("close",()=>{this.sub?.hide(),this.emit("hide")})),this.searchEl&&this.config.search&&(this.searchEl.value="",this.filter()),this.dd.open(),v(Array.from(this.el.querySelectorAll(n)),{dy:4}),e&&this.focusFirst(),this.emit("show")}hide(){if(!this.dd?.isOpen())return;this.dd.close();let t=this.parentMenu?this.parentMenu.subOwner:this.opener;t instanceof HTMLElement&&t.isConnected&&t.focus()}closeAll(){this.root().hide()}onDestroy(){this.sub?.destroy(),this.dd?.destroy()}};f("menu",p);export{p as a};
3
- //# sourceMappingURL=chunk-MNSDGJKA.js.map
3
+ //# sourceMappingURL=chunk-MQEALOU3.js.map
@@ -1,2 +1,2 @@
1
- import{a as c}from"./chunk-M7FNPRV4.js";import{a as h}from"./chunk-4AZ44KV4.js";import{a as p}from"./chunk-XR677UYD.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as m}from"./chunk-PZSHOSOS.js";import{e as n,f as a}from"./chunk-S4QD5NID.js";n("en",{dtDate:"Date",dtTime:"Time",datetime:"Enter a date and a time"});n("pt-BR",{dtDate:"Data",dtTime:"Hora",datetime:"Informe a data e a hora"});var r=o=>String(o).padStart(2,"0"),d=class extends p{baseCls="op-field op-datetimefield";date;time;emptyValue(){return null}isEmpty(e){return!e}createControl(){let{min:e,max:t,step:s}=this.config;this.date=new h({min:e,max:t,ariaLabel:a("dtDate")}),this.time=new c({step:s,ariaLabel:a("dtTime")});for(let i of[this.date,this.time])i.on("change",()=>this.compose());return this.own(()=>(this.date.destroy(),this.time.destroy())),this.inputEl=this.date.el.querySelector("input"),m("div","op-datetimefield__parts",{role:"group"},this.date.el,this.time.el)}compose(){let e=this.date.getValue(),t=this.time.getValue(),s=null;e&&t&&(s=this.config.utc?new Date(+e.slice(0,4),+e.slice(5,7)-1,+e.slice(8),+t.slice(0,2),+t.slice(3)).toISOString():`${e}T${t}`),this.commit(s)}applyValue(e){let t=null,s=null;if(e){let i=this.config.utc?new Date(e):void 0;[t,s]=i?[`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`,`${r(i.getHours())}:${r(i.getMinutes())}`]:e.split("T").map(l=>l.slice(0,l.includes(":")?5:10))}this.date.setValue(t,!0),this.time.setValue(s,!0)}getDisplayText(){return this.value?[this.date.getDisplayText(),this.time.getDisplayText()].join(" "):""}check(){let[e,t]=[this.date.getValue(),this.time.getValue()];return!this.date.isValid()||!this.time.isValid()||!!e!=!!t?a("datetime"):super.check()}onDisabled(e){this.date.setDisabled(e),this.time.setDisabled(e)}onReadonly(e){this.date.setReadonly(e),this.time.setReadonly(e)}setMin(e){this.config.min=e,this.date.setMin(e)}setMax(e){this.config.max=e,this.date.setMax(e)}};u("datetimefield",d);export{d as a};
2
- //# sourceMappingURL=chunk-TQPQ4UEA.js.map
1
+ import{a as c}from"./chunk-EO777UIN.js";import{a as h}from"./chunk-OB3VIRQR.js";import{a as p}from"./chunk-QVBDBGS4.js";import{a as u}from"./chunk-TIPK3SCJ.js";import{b as m}from"./chunk-PZSHOSOS.js";import{e as n,f as a}from"./chunk-S4QD5NID.js";n("en",{dtDate:"Date",dtTime:"Time",datetime:"Enter a date and a time"});n("pt-BR",{dtDate:"Data",dtTime:"Hora",datetime:"Informe a data e a hora"});var r=o=>String(o).padStart(2,"0"),d=class extends p{baseCls="op-field op-datetimefield";date;time;emptyValue(){return null}isEmpty(e){return!e}createControl(){let{min:e,max:t,step:s}=this.config;this.date=new h({min:e,max:t,ariaLabel:a("dtDate")}),this.time=new c({step:s,ariaLabel:a("dtTime")});for(let i of[this.date,this.time])i.on("change",()=>this.compose());return this.own(()=>(this.date.destroy(),this.time.destroy())),this.inputEl=this.date.el.querySelector("input"),m("div","op-datetimefield__parts",{role:"group"},this.date.el,this.time.el)}compose(){let e=this.date.getValue(),t=this.time.getValue(),s=null;e&&t&&(s=this.config.utc?new Date(+e.slice(0,4),+e.slice(5,7)-1,+e.slice(8),+t.slice(0,2),+t.slice(3)).toISOString():`${e}T${t}`),this.commit(s)}applyValue(e){let t=null,s=null;if(e){let i=this.config.utc?new Date(e):void 0;[t,s]=i?[`${i.getFullYear()}-${r(i.getMonth()+1)}-${r(i.getDate())}`,`${r(i.getHours())}:${r(i.getMinutes())}`]:e.split("T").map(l=>l.slice(0,l.includes(":")?5:10))}this.date.setValue(t,!0),this.time.setValue(s,!0)}getDisplayText(){return this.value?[this.date.getDisplayText(),this.time.getDisplayText()].join(" "):""}check(){let[e,t]=[this.date.getValue(),this.time.getValue()];return!this.date.isValid()||!this.time.isValid()||!!e!=!!t?a("datetime"):super.check()}onDisabled(e){this.date.setDisabled(e),this.time.setDisabled(e)}onReadonly(e){this.date.setReadonly(e),this.time.setReadonly(e)}setMin(e){this.config.min=e,this.date.setMin(e)}setMax(e){this.config.max=e,this.date.setMax(e)}};u("datetimefield",d);export{d as a};
2
+ //# sourceMappingURL=chunk-NAUSRVB6.js.map
@@ -1,3 +1,3 @@
1
- import{a as S}from"./chunk-6BOM5KZR.js";import{a as F}from"./chunk-3FCIZKIN.js";import{a as w}from"./chunk-3F4MN2BU.js";import{a as f}from"./chunk-HLS5FI55.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as x}from"./chunk-XR677UYD.js";import{a as y}from"./chunk-TIPK3SCJ.js";import{f as b}from"./chunk-UDXO3KM3.js";import{b as h}from"./chunk-PZSHOSOS.js";import{e as c,f as l}from"./chunk-S4QD5NID.js";c("en",{stepBack:"Back",stepNext:"Next",stepFinish:"Finish",stepReview:"Review"});c("pt-BR",{stepBack:"Voltar",stepNext:"Pr\xF3ximo",stepFinish:"Concluir",stepReview:"Revis\xE3o"});var u=class extends b{baseCls="op-stepform__review";setContent(e){this.el.replaceChildren(...e)}},m=class extends F{baseCls="op-form op-stepform";stepper;body;pane;backBtn;nextBtn;finishBtn;index=0;pending;notes=[];noteEl;constructor(e){let n,t=e.steps??[],i=e.review?new u:void 0,s=new S({steps:[...t.map(({title:a,description:_,icon:k,optional:R})=>({title:a,description:_,icon:k,optional:R})),...i?[{title:e.reviewTitle??l("stepReview")}]:[]]}),r=[...t.map(a=>({type:"container",title:a.title,cls:"op-stepform__step",layout:a.layout??{type:"grid",columns:2,gap:12},items:a.items})),...i?[{type:"container",title:e.reviewTitle??l("stepReview"),cls:"op-stepform__step",items:[i]}]:[]],o=new d({cls:"op-stepform__body",flex:1,layout:{type:"card"},items:r}),p=new f({text:e.backText??l("stepBack"),handler:()=>n.back()}),g=new f({text:e.nextText??l("stepNext"),variant:"primary",handler:()=>n.next()}),v=new f({text:e.finishText??l("stepFinish"),variant:"primary",htmlType:"submit"}),B=e.cancelText?[new f({text:e.cancelText,variant:"ghost",handler:()=>n.emit("cancel")})]:[],T=new w({cls:"op-stepform__footer",items:[...B,"->",p,g,v]});super({...e,layout:{type:"vbox"},items:[s,o,T]}),n=this,Object.assign(this,{stepper:s,body:o,pane:i,backBtn:p,nextBtn:g,finishBtn:v}),s.on("before-select",a=>(n.goTo(a),!1)),o.on("activate",()=>n.onActivate()),this.own(()=>this.stop())}cfg(){return this.config}count(){return this.body.items.length}real(){return this.count()-(this.pane?1:0)}getStep(){return this.index}getStepCount(){return this.count()}getStepper(){return this.stepper}stepFields(e){let n=this.body.items[e];return n instanceof d?n.query(t=>t instanceof x):[]}validateStep(e){if(e>=this.real())return!0;let n=this.stepFields(e).filter(t=>!t.validate());return this.stepper.setStepState(e,n.length?"error":"done"),!n.length}note(e,n){this.notes[e]=n,e===this.index&&this.showNote()}showNote(){if(!this.rendered)return;let e=this.notes[this.index]??"";if(!this.noteEl){if(!e)return;this.body.el.before(this.noteEl=h("div","op-stepform__note",{role:"alert"}))}this.noteEl.textContent=e,this.noteEl.hidden=!e}busy(e){this.el.classList.toggle("is-validating",e),this.nextBtn.setLoading(e),this.finishBtn.setLoading(e)}stop(){this.pending&&(this.pending.abort(),this.pending=void 0,this.busy(!1))}async check(e){let n=this.cfg().steps[e]?.validate;if(!n)return!0;this.stop();let t=this.pending=new AbortController;this.busy(!0);let i;try{i=await n(this.getValues(),this,t.signal)}catch(r){i=String(r?.message??r)}if(t.signal.aborted)return!1;this.pending=void 0,this.busy(!1);let s=i===!0||i==null;if(this.note(e,typeof i=="string"?i:""),!s&&typeof i=="object")for(let[r,o]of Object.entries(i))this.getField(r)?.setError(o);return s||this.stepper.setStepState(e,"error"),s}goTo(e){if(e<0||e>=this.count()||e===this.index||this.pending&&e>this.index||(this.stop(),this.emit("before-step-change",this.index,e)===!1))return Promise.resolve(!1);let n=this.index,t=s=>this.index!==n?!1:(s!==this.index&&this.body.setActiveItem(s),s!==e&&this.stepFields(s).find(r=>r.getError())?.focus(),s===e);if(this.cfg().linear===!1||e<n)return Promise.resolve(t(e));let i=s=>{for(;s<e;s++){if(!this.validateStep(s))return t(s);if(this.cfg().steps[s]?.validate)return this.check(s).then(r=>r?i(s+1):t(s))}return t(e)};return Promise.resolve(i(n))}next(){return this.goTo(this.index+1)}back(){return this.goTo(this.index-1)}onActivate(){let e=this.body.items.indexOf(this.body.getActiveItem());if(e<0)return;let n=this.index;this.index=e,this.stepper.setActive(e);let t=this.count()-1;this.backBtn.config.hidden=e===0,this.nextBtn.config.hidden=e===t,this.finishBtn.config.hidden=e!==t;for(let[i,s]of[[this.backBtn,e===0],[this.nextBtn,e===t],[this.finishBtn,e!==t]])i.rendered&&(i.el.hidden=s);if(this.pane&&e===t&&this.refreshReview(),this.showNote(),e!==n&&(this.emit("step-change",e,n),this.rendered&&this.el.isConnected&&!this.stepFields(e).some(i=>i.getError()))){let i=this.body.items[e]?.el;this.config.autoFocus?this.stepFields(e)[0]?.focus():i&&(i.tabIndex=-1,i.focus())}}refreshReview(){let e=this.getValues(),n=this.cfg().review;if(typeof n=="function")return this.pane.setContent([n(e,this)]);let t=[];for(let i=0;i<this.real();i++){let s=this.stepFields(i).filter(r=>r.name);s.length&&(t.push(h("h3","op-stepform__review-title",{},String(this.body.items[i].config.title??""))),t.push(h("dl","op-stepform__review-list",{},...s.flatMap(r=>[h("dt","",{},r.config.label??r.config.boxLabel??r.name),h("dd","",{},this.show_(r))]))))}this.pane.setContent(t)}show_(e){let n=e;if(n.getRows)return n.getRows().map((r,o)=>n.getRowFields(o).map(p=>this.show_(p)).filter(p=>p!=="\u2014").join(" \xB7 ")).join(`
1
+ import{a as S}from"./chunk-6BOM5KZR.js";import{a as F}from"./chunk-OADWLPSF.js";import{a as w}from"./chunk-3F4MN2BU.js";import{a as f}from"./chunk-ESRS5ZQV.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as x}from"./chunk-QVBDBGS4.js";import{a as y}from"./chunk-TIPK3SCJ.js";import{f as b}from"./chunk-UDXO3KM3.js";import{b as h}from"./chunk-PZSHOSOS.js";import{e as c,f as l}from"./chunk-S4QD5NID.js";c("en",{stepBack:"Back",stepNext:"Next",stepFinish:"Finish",stepReview:"Review"});c("pt-BR",{stepBack:"Voltar",stepNext:"Pr\xF3ximo",stepFinish:"Concluir",stepReview:"Revis\xE3o"});var u=class extends b{baseCls="op-stepform__review";setContent(e){this.el.replaceChildren(...e)}},m=class extends F{baseCls="op-form op-stepform";stepper;body;pane;backBtn;nextBtn;finishBtn;index=0;pending;notes=[];noteEl;constructor(e){let n,t=e.steps??[],i=e.review?new u:void 0,s=new S({steps:[...t.map(({title:a,description:_,icon:k,optional:R})=>({title:a,description:_,icon:k,optional:R})),...i?[{title:e.reviewTitle??l("stepReview")}]:[]]}),r=[...t.map(a=>({type:"container",title:a.title,cls:"op-stepform__step",layout:a.layout??{type:"grid",columns:2,gap:12},items:a.items})),...i?[{type:"container",title:e.reviewTitle??l("stepReview"),cls:"op-stepform__step",items:[i]}]:[]],o=new d({cls:"op-stepform__body",flex:1,layout:{type:"card"},items:r}),p=new f({text:e.backText??l("stepBack"),handler:()=>n.back()}),g=new f({text:e.nextText??l("stepNext"),variant:"primary",handler:()=>n.next()}),v=new f({text:e.finishText??l("stepFinish"),variant:"primary",htmlType:"submit"}),B=e.cancelText?[new f({text:e.cancelText,variant:"ghost",handler:()=>n.emit("cancel")})]:[],T=new w({cls:"op-stepform__footer",items:[...B,"->",p,g,v]});super({...e,layout:{type:"vbox"},items:[s,o,T]}),n=this,Object.assign(this,{stepper:s,body:o,pane:i,backBtn:p,nextBtn:g,finishBtn:v}),s.on("before-select",a=>(n.goTo(a),!1)),o.on("activate",()=>n.onActivate()),this.own(()=>this.stop())}cfg(){return this.config}count(){return this.body.items.length}real(){return this.count()-(this.pane?1:0)}getStep(){return this.index}getStepCount(){return this.count()}getStepper(){return this.stepper}stepFields(e){let n=this.body.items[e];return n instanceof d?n.query(t=>t instanceof x):[]}validateStep(e){if(e>=this.real())return!0;let n=this.stepFields(e).filter(t=>!t.validate());return this.stepper.setStepState(e,n.length?"error":"done"),!n.length}note(e,n){this.notes[e]=n,e===this.index&&this.showNote()}showNote(){if(!this.rendered)return;let e=this.notes[this.index]??"";if(!this.noteEl){if(!e)return;this.body.el.before(this.noteEl=h("div","op-stepform__note",{role:"alert"}))}this.noteEl.textContent=e,this.noteEl.hidden=!e}busy(e){this.el.classList.toggle("is-validating",e),this.nextBtn.setLoading(e),this.finishBtn.setLoading(e)}stop(){this.pending&&(this.pending.abort(),this.pending=void 0,this.busy(!1))}async check(e){let n=this.cfg().steps[e]?.validate;if(!n)return!0;this.stop();let t=this.pending=new AbortController;this.busy(!0);let i;try{i=await n(this.getValues(),this,t.signal)}catch(r){i=String(r?.message??r)}if(t.signal.aborted)return!1;this.pending=void 0,this.busy(!1);let s=i===!0||i==null;if(this.note(e,typeof i=="string"?i:""),!s&&typeof i=="object")for(let[r,o]of Object.entries(i))this.getField(r)?.setError(o);return s||this.stepper.setStepState(e,"error"),s}goTo(e){if(e<0||e>=this.count()||e===this.index||this.pending&&e>this.index||(this.stop(),this.emit("before-step-change",this.index,e)===!1))return Promise.resolve(!1);let n=this.index,t=s=>this.index!==n?!1:(s!==this.index&&this.body.setActiveItem(s),s!==e&&this.stepFields(s).find(r=>r.getError())?.focus(),s===e);if(this.cfg().linear===!1||e<n)return Promise.resolve(t(e));let i=s=>{for(;s<e;s++){if(!this.validateStep(s))return t(s);if(this.cfg().steps[s]?.validate)return this.check(s).then(r=>r?i(s+1):t(s))}return t(e)};return Promise.resolve(i(n))}next(){return this.goTo(this.index+1)}back(){return this.goTo(this.index-1)}onActivate(){let e=this.body.items.indexOf(this.body.getActiveItem());if(e<0)return;let n=this.index;this.index=e,this.stepper.setActive(e);let t=this.count()-1;this.backBtn.config.hidden=e===0,this.nextBtn.config.hidden=e===t,this.finishBtn.config.hidden=e!==t;for(let[i,s]of[[this.backBtn,e===0],[this.nextBtn,e===t],[this.finishBtn,e!==t]])i.rendered&&(i.el.hidden=s);if(this.pane&&e===t&&this.refreshReview(),this.showNote(),e!==n&&(this.emit("step-change",e,n),this.rendered&&this.el.isConnected&&!this.stepFields(e).some(i=>i.getError()))){let i=this.body.items[e]?.el;this.config.autoFocus?this.stepFields(e)[0]?.focus():i&&(i.tabIndex=-1,i.focus())}}refreshReview(){let e=this.getValues(),n=this.cfg().review;if(typeof n=="function")return this.pane.setContent([n(e,this)]);let t=[];for(let i=0;i<this.real();i++){let s=this.stepFields(i).filter(r=>r.name);s.length&&(t.push(h("h3","op-stepform__review-title",{},String(this.body.items[i].config.title??""))),t.push(h("dl","op-stepform__review-list",{},...s.flatMap(r=>[h("dt","",{},r.config.label??r.config.boxLabel??r.name),h("dd","",{},this.show_(r))]))))}this.pane.setContent(t)}show_(e){let n=e;if(n.getRows)return n.getRows().map((r,o)=>n.getRowFields(o).map(p=>this.show_(p)).filter(p=>p!=="\u2014").join(" \xB7 ")).join(`
2
2
  `)||"\u2014";let t=e.getValue();if(typeof t=="boolean")return t?"\u2713":"\u2014";if(e.config.inputType==="password")return t?"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022":"\u2014";let i=e.getDisplayText();if(i)return i;let s=r=>Array.isArray(r)?r.map(s).join(", "):r&&typeof r=="object"?Object.values(r).map(s).join(" \u2013 "):`${r??""}`;return s(t)||"\u2014"}submit(){if(this.index<this.count()-1)return this.next(),!1;let e=()=>{for(let t=0;t<this.real();t++)this.stepper.setStepState(t,this.stepFields(t).some(i=>i.getError())?"error":"done")};if(this.cfg().steps.some(t=>t.validate)){if(this.pending||this.emit("before-submit")===!1||!this.validate())return e(),!1;let t=this.index;return(async()=>{for(let s=0;s<this.real();s++)if(!await this.check(s)){if(this.index!==t||this.destroyed)return;s!==t&&this.body.setActiveItem(s),this.stepFields(s).find(r=>r.getError())?.focus();return}e();let i=this.getValues();this.emit("submit",i),this.emit("finish",i)})(),!1}let n=super.submit();return e(),n&&this.emit("finish",this.getValues()),n}reset(){this.stop(),this.notes=[],super.reset(),this.clearErrors();for(let e=0;e<this.count();e++)this.stepper.setStepState(e,"pending");this.index!==0&&this.body.setActiveItem(0),this.showNote()}};y("stepform",m);export{m as a};
3
- //# sourceMappingURL=chunk-JLKIHXZP.js.map
3
+ //# sourceMappingURL=chunk-NEVDHDJ4.js.map
@@ -1,2 +1,2 @@
1
- import{c as x}from"./chunk-DIOJGTUN.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as c}from"./chunk-XR677UYD.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as n}from"./chunk-PZSHOSOS.js";var a=class extends d{baseCls="op-inputgroup";affixes=[];getField(){return this.query(i=>i instanceof c)[0]}onRender(){super.onRender(),this.paint();for(let i of["invalid","valid"])this.getField()?.on(i,()=>this.describe())}describe(){let i=this.getField()?.el.querySelector("[aria-invalid]");if(!i)return;let t=[...(i.getAttribute("aria-describedby")??"").split(" ").filter(r=>r&&!r.startsWith(`${this.id}-`)),...this.affixes.filter(r=>r.tagName==="SPAN").map(r=>r.id)];t.length?i.setAttribute("aria-describedby",t.join(" ")):i.removeAttribute("aria-describedby")}paint(){let i=this.getField();if(!i)return;this.affixes.forEach(e=>e.remove()),this.affixes=[];let o=i.el.querySelector(".op-field__control"),t=o.querySelector(":scope > .op-inputgroup__row");t||(t=n("div","op-inputgroup__row"),t.append(...Array.from(o.childNodes)),o.append(t));let r=(e,p)=>{if(typeof e=="string")return n("span",`op-inputgroup__affix op-inputgroup__affix--${p}`,{id:`${this.id}-${p}`},e);let u=n("button",`op-inputgroup__affix op-inputgroup__btn op-inputgroup__affix--${p}`,{type:"button","aria-label":e.ariaLabel??null},e.icon?x(e.icon):"",e.text?n("span","",{},e.text):"");return this.listen(u,"click",()=>e.handler?.(i)),u},{prefix:f,suffix:s}=this.config;f!=null&&t.prepend(this.track(r(f,"prefix"))),s!=null&&t.append(this.track(r(s,"suffix"))),i.el.classList.toggle("has-prefix",f!=null),i.el.classList.toggle("has-suffix",s!=null),this.describe()}track(i){return this.affixes.push(i),i}setPrefix(i){this.config.prefix=i,this.rendered&&this.paint()}setSuffix(i){this.config.suffix=i,this.rendered&&this.paint()}};l("inputgroup",a);export{a};
2
- //# sourceMappingURL=chunk-F4HZUAKM.js.map
1
+ import{c as x}from"./chunk-DIOJGTUN.js";import{c as d}from"./chunk-BQEFLPDA.js";import{a as c}from"./chunk-QVBDBGS4.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as n}from"./chunk-PZSHOSOS.js";var a=class extends d{baseCls="op-inputgroup";affixes=[];getField(){return this.query(i=>i instanceof c)[0]}onRender(){super.onRender(),this.paint();for(let i of["invalid","valid"])this.getField()?.on(i,()=>this.describe())}describe(){let i=this.getField()?.el.querySelector("[aria-invalid]");if(!i)return;let t=[...(i.getAttribute("aria-describedby")??"").split(" ").filter(r=>r&&!r.startsWith(`${this.id}-`)),...this.affixes.filter(r=>r.tagName==="SPAN").map(r=>r.id)];t.length?i.setAttribute("aria-describedby",t.join(" ")):i.removeAttribute("aria-describedby")}paint(){let i=this.getField();if(!i)return;this.affixes.forEach(e=>e.remove()),this.affixes=[];let o=i.el.querySelector(".op-field__control"),t=o.querySelector(":scope > .op-inputgroup__row");t||(t=n("div","op-inputgroup__row"),t.append(...Array.from(o.childNodes)),o.append(t));let r=(e,p)=>{if(typeof e=="string")return n("span",`op-inputgroup__affix op-inputgroup__affix--${p}`,{id:`${this.id}-${p}`},e);let u=n("button",`op-inputgroup__affix op-inputgroup__btn op-inputgroup__affix--${p}`,{type:"button","aria-label":e.ariaLabel??null},e.icon?x(e.icon):"",e.text?n("span","",{},e.text):"");return this.listen(u,"click",()=>e.handler?.(i)),u},{prefix:f,suffix:s}=this.config;f!=null&&t.prepend(this.track(r(f,"prefix"))),s!=null&&t.append(this.track(r(s,"suffix"))),i.el.classList.toggle("has-prefix",f!=null),i.el.classList.toggle("has-suffix",s!=null),this.describe()}track(i){return this.affixes.push(i),i}setPrefix(i){this.config.prefix=i,this.rendered&&this.paint()}setSuffix(i){this.config.suffix=i,this.rendered&&this.paint()}};l("inputgroup",a);export{a};
2
+ //# sourceMappingURL=chunk-NWHH3CYH.js.map
@@ -1,2 +1,2 @@
1
- import{c as d}from"./chunk-BQEFLPDA.js";import{a as r}from"./chunk-XR677UYD.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{b as c}from"./chunk-V5G5JECN.js";import{e as u}from"./chunk-PZSHOSOS.js";var h=class extends d{baseCls="op-form";tag="form";ruledOut=new Set;dirty=!1;constructor(t={}){let e=[...t.items??[]];t.tabs&&e.push({type:"tabs",flex:1,items:t.tabs.map(i=>({type:"container",title:i.title,icon:i.icon,cls:"op-form__tab",layout:i.layout??{type:"grid",columns:2,gap:12},items:i.items}))}),super({...t,items:e})}build(){let t=super.build();return t.setAttribute("novalidate",""),t}onRender(){if(this.config.layout??=this.config.columns?{type:"grid",columns:this.config.columns}:{type:"vbox"},this.config.labelWidth!=null&&this.setLabelWidth(this.config.labelWidth),this.config.labelPos)for(let t of this.getFields())t.config.labelPos??=this.config.labelPos;super.onRender(),this.config.readonly&&this.setReadonly(!0);for(let t of this.getFields())for(let e of["invalid","valid","dirty-change","change"])t.on(e,()=>this.syncTabs());for(let t of this.getFields())t.on("change",()=>this.changed());for(let t of this.getFields())t.on("dirty-change",()=>this.changed());this.applyRules(),this.listen(this.el,"submit",t=>{t.preventDefault(),this.submit()}),this.listen(this.el,"keydown",t=>{let e=t.target;t.key==="Enter"&&e instanceof HTMLInputElement&&!t.defaultPrevented&&e.type!=="button"&&(t.preventDefault(),this.submit())})}getFields(){return this.query(t=>t instanceof r)}getField(t){return this.getFields().find(e=>e.name===t)}getValues(t={}){let e={};for(let i of this.counted())i.name&&(!t.dirtyOnly||i.isDirty())&&c(e,i.name,i.getValue());return e}counted(){return this.getFields().filter(t=>{for(let e=t;e&&e!==this;e=e.parent)if(this.ruledOut.has(e))return!1;return!0})}changed(){this.applyRules();let t=this.isDirty();t!==this.dirty&&this.emit("dirty-change",this.dirty=t)}applyRules(){let t={};for(let e of this.getFields())e.name&&c(t,e.name,e.getValue());for(let e of this.query(i=>!!(i.config.showIf||i.config.enableIf))){let{showIf:i,enableIf:s}=e.config;if(i){let a=!!i(t);if(a===this.ruledOut.has(e))if(a)this.ruledOut.delete(e),e.show();else{this.ruledOut.add(e),e.hide();for(let l of e instanceof r?[e]:e instanceof d?e.query(o=>o instanceof r):[])l.clearError()}}s&&e.setDisabled(!s(t))}}focusField(t){this.reveal(t),t.focus()}setValues(t){for(let e of this.getFields())e.fillFrom(t)}load(t){this.setValues("data"in t&&"get"in t?t.data:t),this.markClean(),this.clearErrors(),this.emit("load",t)}reveal(t){let e=t;for(;e.parent;){let i=e.parent;i.items?.includes(e)&&(typeof i.setActive=="function"?i.setActive(e):i.layout?.activate&&i.layout.activate(i,e)),e=i}}syncTabs(){for(let t of this.query(e=>typeof e.setTabState=="function"))for(let e of t.items){let i=e instanceof d?e.query(s=>s instanceof r):[];t.setTabState(e,{errors:i.filter(s=>s.getError()).length,dirty:i.some(s=>s.isDirty())})}}updateRecord(t){let e=this.getValues(),i=new Set(this.getFields().filter(s=>s.name&&s.isDirty()).map(s=>s.name.split(".")[0]));for(let s of i)t.set(s,e[s])}markClean(){this.getFields().forEach(t=>t.markClean()),this.syncTabs()}reset(){this.getFields().forEach(t=>t.reset()),this.syncTabs()}isDirty(){return this.getFields().some(t=>t.isDirty())}isValid(){return this.counted().every(t=>t.config.disabled||t.isValid())}clearErrors(){this.getFields().forEach(t=>t.clearError()),this.syncTabs()}validate(){let t=this.counted().filter(i=>!i.config.disabled);for(let i of this.getFields())t.includes(i)||i.clearError();let e=t.filter(i=>!i.validate());return this.syncTabs(),e.length&&(this.reveal(e[0]),e[0].focus(),this.emit("invalid",e)),this.el.classList.toggle("is-invalid",!!e.length),!e.length}setErrors(t){this.clearErrors();let e=[],i;for(let[s,a]of Object.entries(t)){let l=this.getFields().filter(n=>n.name),o=l.find(n=>n.name===s)??l.filter(n=>s.startsWith(n.name+".")).sort((n,g)=>g.name.length-n.name.length)[0];o&&o.render();let f=o?.name===s?o:o?.fieldAt?.(s.slice(o.name.length+1));f?(f.setError(a),i??={host:o,target:f}):e.push(s)}return this.syncTabs(),i&&(this.el.classList.add("is-invalid"),this.emit("invalid",this.getFields().filter(s=>s.getError())),this.reveal(i.host),i.target.focus()),e}submit(){return this.emit("before-submit")===!1||!this.validate()?!1:(this.emit("submit",this.getValues()),!0)}setLabelWidth(t){this.config.labelWidth=t,this.rendered&&this.el.style.setProperty("--op-field-label-width",u(t))}setReadonly(t){this.config.readonly=t,this.getFields().forEach(e=>e.setReadonly(t))}};m("form",h);export{h as a};
2
- //# sourceMappingURL=chunk-3FCIZKIN.js.map
1
+ import{c as d}from"./chunk-BQEFLPDA.js";import{a as r}from"./chunk-QVBDBGS4.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{e as u}from"./chunk-PZSHOSOS.js";import{b as c}from"./chunk-V5G5JECN.js";var h=class extends d{baseCls="op-form";tag="form";ruledOut=new Set;dirty=!1;constructor(t={}){let e=[...t.items??[]];t.tabs&&e.push({type:"tabs",flex:1,items:t.tabs.map(i=>({type:"container",title:i.title,icon:i.icon,cls:"op-form__tab",layout:i.layout??{type:"grid",columns:2,gap:12},items:i.items}))}),super({...t,items:e})}build(){let t=super.build();return t.setAttribute("novalidate",""),t}onRender(){if(this.config.layout??=this.config.columns?{type:"grid",columns:this.config.columns}:{type:"vbox"},this.config.labelWidth!=null&&this.setLabelWidth(this.config.labelWidth),this.config.labelPos)for(let t of this.getFields())t.config.labelPos??=this.config.labelPos;super.onRender(),this.config.readonly&&this.setReadonly(!0);for(let t of this.getFields())for(let e of["invalid","valid","dirty-change","change"])t.on(e,()=>this.syncTabs());for(let t of this.getFields())t.on("change",()=>this.changed());for(let t of this.getFields())t.on("dirty-change",()=>this.changed());this.applyRules(),this.listen(this.el,"submit",t=>{t.preventDefault(),this.submit()}),this.listen(this.el,"keydown",t=>{let e=t.target;t.key==="Enter"&&e instanceof HTMLInputElement&&!t.defaultPrevented&&e.type!=="button"&&(t.preventDefault(),this.submit())})}getFields(){return this.query(t=>t instanceof r)}getField(t){return this.getFields().find(e=>e.name===t)}getValues(t={}){let e={};for(let i of this.counted())i.name&&(!t.dirtyOnly||i.isDirty())&&c(e,i.name,i.getValue());return e}counted(){return this.getFields().filter(t=>{for(let e=t;e&&e!==this;e=e.parent)if(this.ruledOut.has(e))return!1;return!0})}changed(){this.applyRules();let t=this.isDirty();t!==this.dirty&&this.emit("dirty-change",this.dirty=t)}applyRules(){let t={};for(let e of this.getFields())e.name&&c(t,e.name,e.getValue());for(let e of this.query(i=>!!(i.config.showIf||i.config.enableIf))){let{showIf:i,enableIf:s}=e.config;if(i){let a=!!i(t);if(a===this.ruledOut.has(e))if(a)this.ruledOut.delete(e),e.show();else{this.ruledOut.add(e),e.hide();for(let l of e instanceof r?[e]:e instanceof d?e.query(o=>o instanceof r):[])l.clearError()}}s&&e.setDisabled(!s(t))}}focusField(t){this.reveal(t),t.focus()}setValues(t){for(let e of this.getFields())e.fillFrom(t)}load(t){this.setValues("data"in t&&"get"in t?t.data:t),this.markClean(),this.clearErrors(),this.emit("load",t)}reveal(t){let e=t;for(;e.parent;){let i=e.parent;i.items?.includes(e)&&(typeof i.setActive=="function"?i.setActive(e):i.layout?.activate&&i.layout.activate(i,e)),e=i}}syncTabs(){for(let t of this.query(e=>typeof e.setTabState=="function"))for(let e of t.items){let i=e instanceof d?e.query(s=>s instanceof r):[];t.setTabState(e,{errors:i.filter(s=>s.getError()).length,dirty:i.some(s=>s.isDirty())})}}updateRecord(t){let e=this.getValues(),i=new Set(this.getFields().filter(s=>s.name&&s.isDirty()).map(s=>s.name.split(".")[0]));for(let s of i)t.set(s,e[s])}markClean(){this.getFields().forEach(t=>t.markClean()),this.syncTabs()}reset(){this.getFields().forEach(t=>t.reset()),this.syncTabs()}isDirty(){return this.getFields().some(t=>t.isDirty())}isValid(){return this.counted().every(t=>t.config.disabled||t.isValid())}clearErrors(){this.getFields().forEach(t=>t.clearError()),this.syncTabs()}validate(){let t=this.counted().filter(i=>!i.config.disabled);for(let i of this.getFields())t.includes(i)||i.clearError();let e=t.filter(i=>!i.validate());return this.syncTabs(),e.length&&(this.reveal(e[0]),e[0].focus(),this.emit("invalid",e)),this.el.classList.toggle("is-invalid",!!e.length),!e.length}setErrors(t){this.clearErrors();let e=[],i;for(let[s,a]of Object.entries(t)){let l=this.getFields().filter(n=>n.name),o=l.find(n=>n.name===s)??l.filter(n=>s.startsWith(n.name+".")).sort((n,g)=>g.name.length-n.name.length)[0];o&&o.render();let f=o?.name===s?o:o?.fieldAt?.(s.slice(o.name.length+1));f?(f.setError(a),i??={host:o,target:f}):e.push(s)}return this.syncTabs(),i&&(this.el.classList.add("is-invalid"),this.emit("invalid",this.getFields().filter(s=>s.getError())),this.reveal(i.host),i.target.focus()),e}submit(){return this.emit("before-submit")===!1||!this.validate()?!1:(this.emit("submit",this.getValues()),!0)}setLabelWidth(t){this.config.labelWidth=t,this.rendered&&this.el.style.setProperty("--op-field-label-width",u(t))}setReadonly(t){this.config.readonly=t,this.getFields().forEach(e=>e.setReadonly(t))}};m("form",h);export{h as a};
2
+ //# sourceMappingURL=chunk-OADWLPSF.js.map
@@ -1,2 +1,2 @@
1
- import{a as f}from"./chunk-GEJKFE4X.js";import{a as u}from"./chunk-RG6SHPHF.js";import{a as h}from"./chunk-2YRQULDC.js";import{c}from"./chunk-DIOJGTUN.js";import{f as o,g as p}from"./chunk-2GKIF7A6.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{f as n}from"./chunk-S4QD5NID.js";var a=class extends h{baseCls="op-field op-textfield op-picker op-datefield";cal;dd;garbage=!1;emptyValue(){return null}isEmpty(e){return!e}parse(e){let t=p(e);return this.garbage=!!e.trim()&&!t,t}display(e){return e?o(e,{day:"2-digit",month:"2-digit",year:"numeric"}):""}createControl(){let e=super.createControl(),t=this.input;t.setAttribute("role","combobox"),t.setAttribute("aria-haspopup","dialog"),t.setAttribute("aria-expanded","false");let r=d("button","op-picker__trigger",{type:"button",tabindex:-1,"aria-label":n("calOpen")},c("calendar"));this.listen(r,"mousedown",s=>s.preventDefault()),this.listen(r,"click",()=>{!this.config.disabled&&!this.config.readonly&&this.toggle()}),e.append(r);let i=this.config;return this.cal=new f({value:i.value,min:i.min,max:i.max,firstDay:i.firstDay}),this.dd=new u({anchor:e,content:this.cal,role:"presentation"}),this.cal.on("select",s=>{this.dd.close(),this.setValue(s),t.focus()}),this.dd.on("open",()=>{t.setAttribute("aria-expanded","true"),this.el.classList.add("is-open"),this.cal.setValue(this.value),this.cal.focusDay(),this.emit("expand")}),this.dd.on("close",()=>{t.setAttribute("aria-expanded","false"),this.el.classList.remove("is-open"),this.emit("collapse")}),this.own(()=>this.dd.destroy()),this.on("blur",()=>this.later(()=>{let s=document.activeElement;!this.el.contains(s)&&!this.dd.el.contains(s)&&this.dd.close()},0)),e}onKey(e){e.key==="ArrowDown"&&!this.dd.isOpen()?(e.preventDefault(),this.open()):super.onKey(e)}onInput(){super.onInput(),this.garbage?this.setError(n("date")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-picker__trigger").disabled=e}check(){if(this.garbage)return n("date");let e=super.check(),t=this.value;if(e||!t)return e;let{min:r,max:i}=this.config;return r&&t<r?n("dateMin",{n:o(r)}):i&&t>i?n("dateMax",{n:o(i)}):""}open(){this.config.disabled||this.config.readonly||!this.rendered||this.dd.open()}close(){this.dd?.close()}toggle(){this.dd.isOpen()?this.close():this.open()}expand(){this.open()}collapse(){this.close()}setMin(e){this.config.min=e,this.cal?.setMin(e)}setMax(e){this.config.max=e,this.cal?.setMax(e)}};l("datefield",a);export{a};
2
- //# sourceMappingURL=chunk-4AZ44KV4.js.map
1
+ import{a as f}from"./chunk-GEJKFE4X.js";import{a as h}from"./chunk-LHWY6G6Q.js";import{a as u}from"./chunk-6NP4AEV4.js";import{c}from"./chunk-DIOJGTUN.js";import{f as o,g as p}from"./chunk-2GKIF7A6.js";import{a as l}from"./chunk-TIPK3SCJ.js";import{b as d}from"./chunk-PZSHOSOS.js";import{f as n}from"./chunk-S4QD5NID.js";var a=class extends h{baseCls="op-field op-textfield op-picker op-datefield";cal;dd;garbage=!1;emptyValue(){return null}isEmpty(e){return!e}parse(e){let t=p(e);return this.garbage=!!e.trim()&&!t,t}display(e){return e?o(e,{day:"2-digit",month:"2-digit",year:"numeric"}):""}createControl(){let e=super.createControl(),t=this.input;t.setAttribute("role","combobox"),t.setAttribute("aria-haspopup","dialog"),t.setAttribute("aria-expanded","false");let r=d("button","op-picker__trigger",{type:"button",tabindex:-1,"aria-label":n("calOpen")},c("calendar"));this.listen(r,"mousedown",s=>s.preventDefault()),this.listen(r,"click",()=>{!this.config.disabled&&!this.config.readonly&&this.toggle()}),e.append(r);let i=this.config;return this.cal=new f({value:i.value,min:i.min,max:i.max,firstDay:i.firstDay}),this.dd=new u({anchor:e,content:this.cal,role:"presentation"}),this.cal.on("select",s=>{this.dd.close(),this.setValue(s),t.focus()}),this.dd.on("open",()=>{t.setAttribute("aria-expanded","true"),this.el.classList.add("is-open"),this.cal.setValue(this.value),this.cal.focusDay(),this.emit("expand")}),this.dd.on("close",()=>{t.setAttribute("aria-expanded","false"),this.el.classList.remove("is-open"),this.emit("collapse")}),this.own(()=>this.dd.destroy()),this.on("blur",()=>this.later(()=>{let s=document.activeElement;!this.el.contains(s)&&!this.dd.el.contains(s)&&this.dd.close()},0)),e}onKey(e){e.key==="ArrowDown"&&!this.dd.isOpen()?(e.preventDefault(),this.open()):super.onKey(e)}onInput(){super.onInput(),this.garbage?this.setError(n("date")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1}onDisabled(e){super.onDisabled(e),this.el.querySelector(".op-picker__trigger").disabled=e}check(){if(this.garbage)return n("date");let e=super.check(),t=this.value;if(e||!t)return e;let{min:r,max:i}=this.config;return r&&t<r?n("dateMin",{n:o(r)}):i&&t>i?n("dateMax",{n:o(i)}):""}open(){this.config.disabled||this.config.readonly||!this.rendered||this.dd.open()}close(){this.dd?.close()}toggle(){this.dd.isOpen()?this.close():this.open()}expand(){this.open()}collapse(){this.close()}setMin(e){this.config.min=e,this.cal?.setMin(e)}setMax(e){this.config.max=e,this.cal?.setMax(e)}};l("datefield",a);export{a};
2
+ //# sourceMappingURL=chunk-OB3VIRQR.js.map
@@ -1,2 +1,2 @@
1
- import{a as l}from"./chunk-N2LS4JD6.js";import{c as a}from"./chunk-DIOJGTUN.js";import{a as h}from"./chunk-TIPK3SCJ.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as o}from"./chunk-S4QD5NID.js";var n=class extends l{baseCls="op-field op-textfield op-picker op-suggest";seq=0;abort;cancelWait;live;hasTrigger(){return!1}emptyValue(){return null}isEmpty(e){return e==null||e===""}createControl(){let e=super.createControl();return this.config.icon!==!1&&(e.classList.add("has-icon"),e.prepend(s("span","op-suggest__icon",{"aria-hidden":"true"},a(this.config.icon??"search")))),e.append(s("span","op-spinner op-picker__spinner",{"aria-hidden":"true"})),this.live=s("div","op-sr-only",{"aria-live":"polite"}),e.append(this.live),this.own(()=>this.abort?.abort()),e}onRender(){super.onRender(),this.config.store?.on("load",()=>this.showResults(this.items))}onType(e){if(this.cancelWait?.(),this.abort?.abort(),e.trim().length<(this.config.minChars??1))return this.items=[],this.refreshList(),this.setSearching(!1),this.close();this.cancelWait=this.later(()=>{this.search(e)},this.config.delay??250)}async search(e){if(this.emit("before-query",e)===!1)return;let i=++this.seq,c=this.abort=new AbortController;this.setSearching(!0),this.emit("query",e);try{let t=this.config,r;if(t.store?(await t.store.load({query:e}),r=t.store.getData()):r=await t.query?.(e,{signal:c.signal})??[],i!==this.seq)return;this.items=r.map(p=>this.toItem(p)),this.showResults(this.items,e),this.emit("load",this.items)}catch(t){if(i!==this.seq)return;this.setSearching(!1),this.close(),this.emit("error",t)}}showResults(e,i=this.input.value){this.setSearching(!1),this.typed=!0,this.refreshList(),this.list.setHighlight(this.config.highlight===!1?"":i),this.live.textContent=e.length?o("results",{n:e.length}):o("noResults"),document.activeElement===this.input&&this.open()}setSearching(e){this.el.classList.toggle("is-searching",e),this.input.setAttribute("aria-busy",String(e))}setQuery(e){this.config.query=e}clearSuggestions(){this.items=[],this.refreshList(),this.close()}pick(e){super.pick(e),this.list.setHighlight("")}};h("suggestfield",n);export{n as a};
2
- //# sourceMappingURL=chunk-4CWYF4O7.js.map
1
+ import{a as l}from"./chunk-L6DOWGBO.js";import{c as a}from"./chunk-DIOJGTUN.js";import{a as h}from"./chunk-TIPK3SCJ.js";import{b as s}from"./chunk-PZSHOSOS.js";import{f as o}from"./chunk-S4QD5NID.js";var n=class extends l{baseCls="op-field op-textfield op-picker op-suggest";seq=0;abort;cancelWait;live;hasTrigger(){return!1}emptyValue(){return null}isEmpty(e){return e==null||e===""}createControl(){let e=super.createControl();return this.config.icon!==!1&&(e.classList.add("has-icon"),e.prepend(s("span","op-suggest__icon",{"aria-hidden":"true"},a(this.config.icon??"search")))),e.append(s("span","op-spinner op-picker__spinner",{"aria-hidden":"true"})),this.live=s("div","op-sr-only",{"aria-live":"polite"}),e.append(this.live),this.own(()=>this.abort?.abort()),e}onRender(){super.onRender(),this.config.store?.on("load",()=>this.showResults(this.items))}onType(e){if(this.cancelWait?.(),this.abort?.abort(),e.trim().length<(this.config.minChars??1))return this.items=[],this.refreshList(),this.setSearching(!1),this.close();this.cancelWait=this.later(()=>{this.search(e)},this.config.delay??250)}async search(e){if(this.emit("before-query",e)===!1)return;let i=++this.seq,c=this.abort=new AbortController;this.setSearching(!0),this.emit("query",e);try{let t=this.config,r;if(t.store?(await t.store.load({query:e}),r=t.store.getData()):r=await t.query?.(e,{signal:c.signal})??[],i!==this.seq)return;this.items=r.map(p=>this.toItem(p)),this.showResults(this.items,e),this.emit("load",this.items)}catch(t){if(i!==this.seq)return;this.setSearching(!1),this.close(),this.emit("error",t)}}showResults(e,i=this.input.value){this.setSearching(!1),this.typed=!0,this.refreshList(),this.list.setHighlight(this.config.highlight===!1?"":i),this.live.textContent=e.length?o("results",{n:e.length}):o("noResults"),document.activeElement===this.input&&this.open()}setSearching(e){this.el.classList.toggle("is-searching",e),this.input.setAttribute("aria-busy",String(e))}setQuery(e){this.config.query=e}clearSuggestions(){this.items=[],this.refreshList(),this.close()}pick(e){super.pick(e),this.list.setHighlight("")}};h("suggestfield",n);export{n as a};
2
+ //# sourceMappingURL=chunk-QOSTS5I3.js.map
@@ -1,2 +1,2 @@
1
- import{a as n}from"./chunk-V5G5JECN.js";import{f as o}from"./chunk-UDXO3KM3.js";import{b as r,c as s}from"./chunk-PZSHOSOS.js";import{f as l}from"./chunk-S4QD5NID.js";var a=class extends o{baseCls="op-field";value;original;error="";inputEl;labelEl;helpEl;errorEl;dirty=!1;cancelSettle;constructor(e={}){super(e),this.value=this.original=e.value??this.emptyValue()}get name(){return this.config.name}emptyValue(){return""}isEmpty(e){return e==null||e===""||Array.isArray(e)&&!e.length}isEqual(e,t){return e===t||JSON.stringify(e)===JSON.stringify(t)}build(){let e=this.config,t=r("div",`${this.baseCls}${e.labelPos==="left"?" op-field--label-left":""}`);this.labelEl=r("label","op-field__label");let i=r("div","op-field__control",{},this.createControl());return this.helpEl=r("div","op-field__help",{id:`${this.id}-help`}),this.errorEl=r("div","op-field__error",{id:`${this.id}-error`,role:"alert"}),t.append(this.labelEl,i,this.helpEl,this.errorEl),t}onRender(){let e=this.config,t=this.inputEl;t.id||=s("op-input"),this.labelEl.htmlFor=t.id,e.ariaLabel&&t!==this.el&&(t.setAttribute("aria-label",e.ariaLabel),this.el.removeAttribute("aria-label")),this.setLabel(e.label??""),this.setHelp(e.help??""),this.setRequired(!!e.required),this.setReadonly(!!e.readonly),this.applyValue(this.value),this.paintError(),this.listen(this.el,"focusin",()=>{this.el.classList.add("is-focused"),this.emit("focus")}),this.listen(this.el,"focusout",i=>{this.el.contains(i.relatedTarget)||(this.flushSettled(),this.el.classList.remove("is-focused"),(e.validateOn??"blur")==="blur"&&this.validate(),this.emit("blur"))})}focusEl(){return this.render(),this.inputEl}getValue(){return this.value}setValue(e,t=!1){let i=this.value;this.value=e,this.rendered&&this.applyValue(e),this.isEqual(i,e)||this.changed(i,t)}fillFrom(e){let t=this.name?n(e,this.name):void 0;t!==void 0&&this.setValue(t,!0)}commit(e){let t=this.value;this.value=e,this.isEqual(t,e)||this.changed(t,!1)}changed(e,t){this.updateDirty(),!t&&((this.config.validateOn==="change"||this.error)&&this.validate(),this.emit("change",this.value,e),this.queueSettled())}queueSettled(){this.cancelSettle?.(),this.cancelSettle=void 0;let e=this.config.debounce;if(!e)return void this.emit("settled",this.value);this.cancelSettle=this.later(()=>{this.cancelSettle=void 0,this.emit("settled",this.value)},e)}flushSettled(){this.cancelSettle&&(this.cancelSettle(),this.cancelSettle=void 0,this.emit("settled",this.value))}updateDirty(){let e=this.isDirty();e!==this.dirty&&(this.dirty=e,this.rendered&&this.el.classList.toggle("is-dirty",e),this.emit("dirty-change",e))}getDisplayText(){let e=this.value;return this.isEmpty(e)?"":String(e)}clear(){this.setValue(this.emptyValue())}isDirty(){return!this.isEqual(this.value,this.original)}markClean(){this.original=this.value,this.updateDirty()}reset(){this.setValue(this.original,!0),this.clearError()}check(){let e=this.value;if(this.isEmpty(e))return this.config.required?l("required"):"";for(let t of this.config.validators??[]){let i=t(e,this);if(typeof i=="string")return i}return""}validate(){let e=this.check();return e?this.setError(e):this.clearError(),!e}isValid(){return!this.check()}getError(){return this.error}setError(e){let t=this.error;this.error=e,this.paintError(),e&&e!==t&&this.emit("invalid",e)}clearError(){this.error&&(this.error="",this.paintError(),this.emit("valid"))}paintError(){this.rendered&&(this.errorEl.textContent=this.error,this.el.classList.toggle("is-invalid",!!this.error),this.inputEl.setAttribute("aria-invalid",String(!!this.error)),this.describe())}describe(){let e=[this.error&&this.errorEl.id,this.config.help&&this.helpEl.id].filter(Boolean);e.length?this.inputEl.setAttribute("aria-describedby",e.join(" ")):this.inputEl.removeAttribute("aria-describedby")}setLabel(e){this.config.label=e,this.rendered&&(this.labelEl.textContent=e,this.labelEl.hidden=!e)}setHelp(e){this.config.help=e,this.rendered&&(this.helpEl.textContent=e,this.helpEl.hidden=!e,this.describe())}setRequired(e){this.config.required=e,this.rendered&&(this.el.classList.toggle("is-required",e),this.inputEl.setAttribute("aria-required",String(e)))}setReadonly(e){this.config.readonly=e,this.rendered&&(this.el.classList.toggle("is-readonly",e),this.onReadonly(e))}setValidators(e){this.config.validators=e}onReadonly(e){}};export{a};
2
- //# sourceMappingURL=chunk-XR677UYD.js.map
1
+ import{f as o}from"./chunk-UDXO3KM3.js";import{b as r,c as s}from"./chunk-PZSHOSOS.js";import{f as l}from"./chunk-S4QD5NID.js";import{a as n}from"./chunk-V5G5JECN.js";var a=class extends o{baseCls="op-field";value;original;error="";inputEl;labelEl;helpEl;errorEl;dirty=!1;cancelSettle;constructor(e={}){super(e),this.value=this.original=e.value??this.emptyValue()}get name(){return this.config.name}emptyValue(){return""}isEmpty(e){return e==null||e===""||Array.isArray(e)&&!e.length}isEqual(e,t){return e===t||JSON.stringify(e)===JSON.stringify(t)}build(){let e=this.config,t=r("div",`${this.baseCls}${e.labelPos==="left"?" op-field--label-left":""}`);this.labelEl=r("label","op-field__label");let i=r("div","op-field__control",{},this.createControl());return this.helpEl=r("div","op-field__help",{id:`${this.id}-help`}),this.errorEl=r("div","op-field__error",{id:`${this.id}-error`,role:"alert"}),t.append(this.labelEl,i,this.helpEl,this.errorEl),t}onRender(){let e=this.config,t=this.inputEl;t.id||=s("op-input"),this.labelEl.htmlFor=t.id,e.ariaLabel&&t!==this.el&&(t.setAttribute("aria-label",e.ariaLabel),this.el.removeAttribute("aria-label")),this.setLabel(e.label??""),this.setHelp(e.help??""),this.setRequired(!!e.required),this.setReadonly(!!e.readonly),this.applyValue(this.value),this.paintError(),this.listen(this.el,"focusin",()=>{this.el.classList.add("is-focused"),this.emit("focus")}),this.listen(this.el,"focusout",i=>{this.el.contains(i.relatedTarget)||(this.flushSettled(),this.el.classList.remove("is-focused"),(e.validateOn??"blur")==="blur"&&this.validate(),this.emit("blur"))})}focusEl(){return this.render(),this.inputEl}getValue(){return this.value}setValue(e,t=!1){let i=this.value;this.value=e,this.rendered&&this.applyValue(e),this.isEqual(i,e)||this.changed(i,t)}fillFrom(e){let t=this.name?n(e,this.name):void 0;t!==void 0&&this.setValue(t,!0)}commit(e){let t=this.value;this.value=e,this.isEqual(t,e)||this.changed(t,!1)}changed(e,t){this.updateDirty(),!t&&((this.config.validateOn==="change"||this.error)&&this.validate(),this.emit("change",this.value,e),this.queueSettled())}queueSettled(){this.cancelSettle?.(),this.cancelSettle=void 0;let e=this.config.debounce;if(!e)return void this.emit("settled",this.value);this.cancelSettle=this.later(()=>{this.cancelSettle=void 0,this.emit("settled",this.value)},e)}flushSettled(){this.cancelSettle&&(this.cancelSettle(),this.cancelSettle=void 0,this.emit("settled",this.value))}updateDirty(){let e=this.isDirty();e!==this.dirty&&(this.dirty=e,this.rendered&&this.el.classList.toggle("is-dirty",e),this.emit("dirty-change",e))}getDisplayText(){let e=this.value;return this.isEmpty(e)?"":String(e)}clear(){this.setValue(this.emptyValue())}isDirty(){return!this.isEqual(this.value,this.original)}markClean(){this.original=this.value,this.updateDirty()}reset(){this.setValue(this.original,!0),this.clearError()}check(){let e=this.value;if(this.isEmpty(e))return this.config.required?l("required"):"";for(let t of this.config.validators??[]){let i=t(e,this);if(typeof i=="string")return i}return""}validate(){let e=this.check();return e?this.setError(e):this.clearError(),!e}isValid(){return!this.check()}getError(){return this.error}setError(e){let t=this.error;this.error=e,this.paintError(),e&&e!==t&&this.emit("invalid",e)}clearError(){this.error&&(this.error="",this.paintError(),this.emit("valid"))}paintError(){this.rendered&&(this.errorEl.textContent=this.error,this.el.classList.toggle("is-invalid",!!this.error),this.inputEl.setAttribute("aria-invalid",String(!!this.error)),this.describe())}describe(){let e=[this.error&&this.errorEl.id,this.config.help&&this.helpEl.id].filter(Boolean);e.length?this.inputEl.setAttribute("aria-describedby",e.join(" ")):this.inputEl.removeAttribute("aria-describedby")}setLabel(e){this.config.label=e,this.rendered&&(this.labelEl.textContent=e,this.labelEl.hidden=!e)}setHelp(e){this.config.help=e,this.rendered&&(this.helpEl.textContent=e,this.helpEl.hidden=!e,this.describe())}setRequired(e){this.config.required=e,this.rendered&&(this.el.classList.toggle("is-required",e),this.inputEl.setAttribute("aria-required",String(e)))}setReadonly(e){this.config.readonly=e,this.rendered&&(this.el.classList.toggle("is-readonly",e),this.onReadonly(e))}setValidators(e){this.config.validators=e}onReadonly(e){}};export{a};
2
+ //# sourceMappingURL=chunk-QVBDBGS4.js.map
@@ -1,2 +1,2 @@
1
- import{a as o}from"./chunk-HLS5FI55.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{f as l}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as a,f as n}from"./chunk-S4QD5NID.js";a("en",{faSave:"Save",faDirty:"Unsaved changes"});a("pt-BR",{faSave:"Salvar",faDirty:"Altera\xE7\xF5es n\xE3o salvas"});var r=class extends l{baseCls="op-formactions";statusEl;buttonsEl;form;save;cancel;extra=[];build(){return this.statusEl=i("span","op-formactions__status",{"aria-live":"polite"}),this.buttonsEl=i("div","op-formactions__buttons"),i("div","op-formactions",{},this.statusEl,this.buttonsEl)}onRender(){let t=this.config,e=this.parent;for(;e&&!("focusField"in e&&"getFields"in e);)e=e.parent;this.form=e,this.extra=(t.buttons??[]).map(s=>new o(s)),this.save=new o({text:t.submitText??n("faSave"),variant:"primary",htmlType:"submit"}),this.buttonsEl.append(...this.extra.map(s=>s.el),this.save.el),this.setCancelText(t.cancelText??n("cancel")),this.setSticky(!!t.sticky),this.form?.on("dirty-change",()=>this.paint()),this.own(()=>[...this.extra,this.save,this.cancel].forEach(s=>s?.destroy())),this.paint()}paint(){let t=!!this.form?.isDirty();this.el.classList.toggle("is-dirty",t),this.statusEl.textContent=t&&this.config.status!==!1?n("faDirty"):"",this.save.setDisabled(!!this.config.requireChanges&&!t)}getForm(){return this.form}setSubmitText(t){this.config.submitText=t,this.save?.setText(t)}setCancelText(t){if(this.config.cancelText=t,!!this.rendered){if(t===!1)return this.cancel?.destroy(),void(this.cancel=void 0);if(this.cancel)return this.cancel.setText(t);this.cancel=new o({text:t,handler:()=>this.emit("cancel")!==!1&&this.form?.reset()}),this.buttonsEl.insertBefore(this.cancel.el,this.save.el)}}setSticky(t){this.config.sticky=t,this.rendered&&this.el.classList.toggle("is-sticky",t)}};c("formactions",r);export{r as a};
2
- //# sourceMappingURL=chunk-GEBAYD6N.js.map
1
+ import{a as o}from"./chunk-ESRS5ZQV.js";import{a as c}from"./chunk-TIPK3SCJ.js";import{f as l}from"./chunk-UDXO3KM3.js";import{b as i}from"./chunk-PZSHOSOS.js";import{e as a,f as n}from"./chunk-S4QD5NID.js";a("en",{faSave:"Save",faDirty:"Unsaved changes"});a("pt-BR",{faSave:"Salvar",faDirty:"Altera\xE7\xF5es n\xE3o salvas"});var r=class extends l{baseCls="op-formactions";statusEl;buttonsEl;form;save;cancel;extra=[];build(){return this.statusEl=i("span","op-formactions__status",{"aria-live":"polite"}),this.buttonsEl=i("div","op-formactions__buttons"),i("div","op-formactions",{},this.statusEl,this.buttonsEl)}onRender(){let t=this.config,e=this.parent;for(;e&&!("focusField"in e&&"getFields"in e);)e=e.parent;this.form=e,this.extra=(t.buttons??[]).map(s=>new o(s)),this.save=new o({text:t.submitText??n("faSave"),variant:"primary",htmlType:"submit"}),this.buttonsEl.append(...this.extra.map(s=>s.el),this.save.el),this.setCancelText(t.cancelText??n("cancel")),this.setSticky(!!t.sticky),this.form?.on("dirty-change",()=>this.paint()),this.own(()=>[...this.extra,this.save,this.cancel].forEach(s=>s?.destroy())),this.paint()}paint(){let t=!!this.form?.isDirty();this.el.classList.toggle("is-dirty",t),this.statusEl.textContent=t&&this.config.status!==!1?n("faDirty"):"",this.save.setDisabled(!!this.config.requireChanges&&!t)}getForm(){return this.form}setSubmitText(t){this.config.submitText=t,this.save?.setText(t)}setCancelText(t){if(this.config.cancelText=t,!!this.rendered){if(t===!1)return this.cancel?.destroy(),void(this.cancel=void 0);if(this.cancel)return this.cancel.setText(t);this.cancel=new o({text:t,handler:()=>this.emit("cancel")!==!1&&this.form?.reset()}),this.buttonsEl.insertBefore(this.cancel.el,this.save.el)}}setSticky(t){this.config.sticky=t,this.rendered&&this.el.classList.toggle("is-sticky",t)}};c("formactions",r);export{r as a};
2
+ //# sourceMappingURL=chunk-RMATRKXV.js.map
@@ -1,2 +1,2 @@
1
- import{c as r}from"./chunk-DIOJGTUN.js";import{a as s}from"./chunk-XR677UYD.js";import{a as o}from"./chunk-TIPK3SCJ.js";import{b as i}from"./chunk-PZSHOSOS.js";var n=class extends s{baseCls="op-field op-checkbox";textEl;emptyValue(){return!1}isEmpty(e){return!e}createControl(){let e=this.inputEl=i("input","op-checkbox__input",{type:"checkbox"});this.textEl=i("span","op-checkbox__text");let t=i("span","op-checkbox__box",{},r("check"),i("span","op-checkbox__dash")),c=i("label","op-checkbox__label",{},e,t,this.textEl);return this.listen(e,"change",()=>{if(this.config.readonly)return void(e.checked=this.value);this.config.indeterminate=!1,this.paint(),this.commit(e.checked)}),c}onRender(){super.onRender(),this.setBoxLabel(this.config.boxLabel??""),this.setIndeterminate(!!this.config.indeterminate)}applyValue(e){this.inputEl.checked=!!e,this.paint()}paint(){let e=this.inputEl,t=!!this.config.indeterminate;e.indeterminate=t,e.setAttribute("aria-checked",t?"mixed":String(e.checked)),this.el.classList.toggle("is-checked",e.checked&&!t),this.el.classList.toggle("is-indeterminate",t)}onDisabled(e){this.inputEl.disabled=e}setBoxLabel(e){this.config.boxLabel=e,this.rendered&&(this.textEl.textContent=e,this.textEl.hidden=!e)}setIndeterminate(e){this.config.indeterminate=e,this.rendered&&this.paint()}toggle(){this.setIndeterminate(!1),this.setValue(!this.value)}};o("checkbox",n);export{n as a};
2
- //# sourceMappingURL=chunk-Z6L55FTN.js.map
1
+ import{c as r}from"./chunk-DIOJGTUN.js";import{a as s}from"./chunk-QVBDBGS4.js";import{a as o}from"./chunk-TIPK3SCJ.js";import{b as i}from"./chunk-PZSHOSOS.js";var n=class extends s{baseCls="op-field op-checkbox";textEl;emptyValue(){return!1}isEmpty(e){return!e}createControl(){let e=this.inputEl=i("input","op-checkbox__input",{type:"checkbox"});this.textEl=i("span","op-checkbox__text");let t=i("span","op-checkbox__box",{},r("check"),i("span","op-checkbox__dash")),c=i("label","op-checkbox__label",{},e,t,this.textEl);return this.listen(e,"change",()=>{if(this.config.readonly)return void(e.checked=this.value);this.config.indeterminate=!1,this.paint(),this.commit(e.checked)}),c}onRender(){super.onRender(),this.setBoxLabel(this.config.boxLabel??""),this.setIndeterminate(!!this.config.indeterminate)}applyValue(e){this.inputEl.checked=!!e,this.paint()}paint(){let e=this.inputEl,t=!!this.config.indeterminate;e.indeterminate=t,e.setAttribute("aria-checked",t?"mixed":String(e.checked)),this.el.classList.toggle("is-checked",e.checked&&!t),this.el.classList.toggle("is-indeterminate",t)}onDisabled(e){this.inputEl.disabled=e}setBoxLabel(e){this.config.boxLabel=e,this.rendered&&(this.textEl.textContent=e,this.textEl.hidden=!e)}setIndeterminate(e){this.config.indeterminate=e,this.rendered&&this.paint()}toggle(){this.setIndeterminate(!1),this.setValue(!this.value)}};o("checkbox",n);export{n as a};
2
+ //# sourceMappingURL=chunk-S3ILIWSW.js.map
@@ -1,2 +1,2 @@
1
- import{a as p}from"./chunk-2YRQULDC.js";import{b as a}from"./chunk-OWEQT2HN.js";import{a as s}from"./chunk-TIPK3SCJ.js";import{b as i,f as n}from"./chunk-PZSHOSOS.js";var o=class extends p{baseCls="op-field op-textfield op-textarea";createInput(){return i("textarea","op-textfield__input op-textarea__input",{rows:this.config.rows??3})}onKey(e){if(e.key==="Enter"){(e.ctrlKey||e.metaKey)&&this.emit("enter",this.getValue());return}super.onKey(e)}onInput(){super.onInput(),this.grow()}applyValue(e){super.applyValue(e),this.grow()}notifyMount(){super.notifyMount(),this.grow()}grow(){let e=this.config;if(!e.autoGrow||!this.rendered)return;let t=this.input;t.style.height="auto";let r=t.scrollHeight;if(e.maxRows){let l=a(t,"1lh")||t.scrollHeight/(t.rows||1);r=Math.min(r,l*e.maxRows)}r&&(t.style.height=`${n(r,0,1/0)}px`)}setRows(e){this.config.rows=e,this.rendered&&(this.input.rows=e)}};s("textarea",o);export{o as a};
2
- //# sourceMappingURL=chunk-P4O57S6N.js.map
1
+ import{a as p}from"./chunk-LHWY6G6Q.js";import{b as a}from"./chunk-OWEQT2HN.js";import{a as s}from"./chunk-TIPK3SCJ.js";import{b as i,f as n}from"./chunk-PZSHOSOS.js";var o=class extends p{baseCls="op-field op-textfield op-textarea";createInput(){return i("textarea","op-textfield__input op-textarea__input",{rows:this.config.rows??3})}onKey(e){if(e.key==="Enter"){(e.ctrlKey||e.metaKey)&&this.emit("enter",this.getValue());return}super.onKey(e)}onInput(){super.onInput(),this.grow()}applyValue(e){super.applyValue(e),this.grow()}notifyMount(){super.notifyMount(),this.grow()}grow(){let e=this.config;if(!e.autoGrow||!this.rendered)return;let t=this.input;t.style.height="auto";let r=t.scrollHeight;if(e.maxRows){let l=a(t,"1lh")||t.scrollHeight/(t.rows||1);r=Math.min(r,l*e.maxRows)}r&&(t.style.height=`${n(r,0,1/0)}px`)}setRows(e){this.config.rows=e,this.rendered&&(this.input.rows=e)}};s("textarea",o);export{o as a};
2
+ //# sourceMappingURL=chunk-SEUIIPHS.js.map
@@ -1,2 +1,2 @@
1
- import{a as p}from"./chunk-2YRQULDC.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f as c}from"./chunk-PZSHOSOS.js";import{d as u,f as s}from"./chunk-S4QD5NID.js";var o=class extends p{baseCls="op-field op-textfield op-numberfield";garbage=!1;emptyValue(){return null}isEmpty(e){return e==null}get lang(){return this.config.locale??u()._lang}get decimalSep(){return new Intl.NumberFormat(this.lang).formatToParts(1.5).find(e=>e.type==="decimal").value}parse(e){this.garbage=!1;let t=e.trim();if(!t)return null;let{format:r,scale:i=1}=this.config,n=this.decimalSep,l=Number(t.replace(new RegExp(`[^\\d\\-${n==="."?".":","}]`,"g"),"").replace(n,"."))*(r==="percent"?.01:1);return Number.isNaN(l)||!/\d/.test(t)?(this.garbage=!0,null):Math.round(l*i*1e9)/1e9}display(e){if(e==null)return"";let{format:t="decimal",decimals:r,scale:i=1}=this.config,n=e/i;return t==="decimal"&&r==null?String(n).replace(".",this.decimalSep):new Intl.NumberFormat(this.lang,{style:t,currency:t==="currency"?this.config.currency??u()._currency:void 0,...r!=null&&{minimumFractionDigits:r,maximumFractionDigits:r},useGrouping:t!=="decimal"}).format(n)}createControl(){let e=super.createControl(),t=this.input;return t.setAttribute("inputmode","decimal"),t.setAttribute("role","spinbutton"),this.syncAria(),this.listen(t,"blur",()=>{this.garbage||(this.input.value=this.display(this.value))}),e}syncAria(){let{min:e,max:t}=this.config,r=this.inputEl;e!=null?r.setAttribute("aria-valuemin",String(e)):r.removeAttribute("aria-valuemin"),t!=null?r.setAttribute("aria-valuemax",String(t)):r.removeAttribute("aria-valuemax"),this.value!=null?r.setAttribute("aria-valuenow",String(this.value)):r.removeAttribute("aria-valuenow")}onInput(){super.onInput(),this.syncAria(),this.garbage?this.setError(s("number")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1,this.syncAria()}check(){if(this.garbage)return s("number");let e=super.check(),t=this.value,{min:r,max:i}=this.config;return e||t==null?e:r!=null&&i!=null&&(t<r||t>i)?s("range",{min:r,max:i}):r!=null&&t<r?s("min",{n:r}):i!=null&&t>i?s("max",{n:i}):""}onKey(e){let t=e.key==="PageUp"||e.key==="PageDown";e.key==="ArrowUp"||e.key==="ArrowDown"||t?(e.preventDefault(),this.bump((e.key.endsWith("Up")?1:-1)*(t?10:1))):super.onKey(e)}bump(e){let{step:t=1,min:r,max:i,decimals:n,scale:l=1}=this.config,a=(this.value??0)+t*l*e;(r!=null||i!=null)&&(a=c(a,r??-1/0,i??1/0)),a=Number(a.toFixed(n==null?10:Math.max(0,n+Math.log10(l)))),this.setValue(a)}increment(){this.bump(1)}decrement(){this.bump(-1)}setMin(e){this.config.min=e,this.rendered&&this.syncAria()}setMax(e){this.config.max=e,this.rendered&&this.syncAria()}setStep(e){this.config.step=e}setDecimals(e){this.config.decimals=e,this.rendered&&(this.input.value=this.display(this.value))}};m("numberfield",o);export{o as a};
2
- //# sourceMappingURL=chunk-R32HPK7R.js.map
1
+ import{a as p}from"./chunk-LHWY6G6Q.js";import{a as m}from"./chunk-TIPK3SCJ.js";import{f as c}from"./chunk-PZSHOSOS.js";import{d as u,f as s}from"./chunk-S4QD5NID.js";var o=class extends p{baseCls="op-field op-textfield op-numberfield";garbage=!1;emptyValue(){return null}isEmpty(e){return e==null}get lang(){return this.config.locale??u()._lang}get decimalSep(){return new Intl.NumberFormat(this.lang).formatToParts(1.5).find(e=>e.type==="decimal").value}parse(e){this.garbage=!1;let t=e.trim();if(!t)return null;let{format:r,scale:i=1}=this.config,n=this.decimalSep,l=Number(t.replace(new RegExp(`[^\\d\\-${n==="."?".":","}]`,"g"),"").replace(n,"."))*(r==="percent"?.01:1);return Number.isNaN(l)||!/\d/.test(t)?(this.garbage=!0,null):Math.round(l*i*1e9)/1e9}display(e){if(e==null)return"";let{format:t="decimal",decimals:r,scale:i=1}=this.config,n=e/i;return t==="decimal"&&r==null?String(n).replace(".",this.decimalSep):new Intl.NumberFormat(this.lang,{style:t,currency:t==="currency"?this.config.currency??u()._currency:void 0,...r!=null&&{minimumFractionDigits:r,maximumFractionDigits:r},useGrouping:t!=="decimal"}).format(n)}createControl(){let e=super.createControl(),t=this.input;return t.setAttribute("inputmode","decimal"),t.setAttribute("role","spinbutton"),this.syncAria(),this.listen(t,"blur",()=>{this.garbage||(this.input.value=this.display(this.value))}),e}syncAria(){let{min:e,max:t}=this.config,r=this.inputEl;e!=null?r.setAttribute("aria-valuemin",String(e)):r.removeAttribute("aria-valuemin"),t!=null?r.setAttribute("aria-valuemax",String(t)):r.removeAttribute("aria-valuemax"),this.value!=null?r.setAttribute("aria-valuenow",String(this.value)):r.removeAttribute("aria-valuenow")}onInput(){super.onInput(),this.syncAria(),this.garbage?this.setError(s("number")):this.error&&this.validate()}applyValue(e){super.applyValue(e),this.garbage=!1,this.syncAria()}check(){if(this.garbage)return s("number");let e=super.check(),t=this.value,{min:r,max:i}=this.config;return e||t==null?e:r!=null&&i!=null&&(t<r||t>i)?s("range",{min:r,max:i}):r!=null&&t<r?s("min",{n:r}):i!=null&&t>i?s("max",{n:i}):""}onKey(e){let t=e.key==="PageUp"||e.key==="PageDown";e.key==="ArrowUp"||e.key==="ArrowDown"||t?(e.preventDefault(),this.bump((e.key.endsWith("Up")?1:-1)*(t?10:1))):super.onKey(e)}bump(e){let{step:t=1,min:r,max:i,decimals:n,scale:l=1}=this.config,a=(this.value??0)+t*l*e;(r!=null||i!=null)&&(a=c(a,r??-1/0,i??1/0)),a=Number(a.toFixed(n==null?10:Math.max(0,n+Math.log10(l)))),this.setValue(a)}increment(){this.bump(1)}decrement(){this.bump(-1)}setMin(e){this.config.min=e,this.rendered&&this.syncAria()}setMax(e){this.config.max=e,this.rendered&&this.syncAria()}setStep(e){this.config.step=e}setDecimals(e){this.config.decimals=e,this.rendered&&(this.input.value=this.display(this.value))}};m("numberfield",o);export{o as a};
2
+ //# sourceMappingURL=chunk-T5OGUCY2.js.map
@@ -0,0 +1,2 @@
1
+ import{b as y}from"./chunk-PZSHOSOS.js";import{e as F,f as p}from"./chunk-S4QD5NID.js";F("en",{teNew:"New entry",teHours:"{h}h{m}",teHoursOnly:"{h}h",teMinutes:"{m}m",teTotal:"Total",teAt:"at {time}",teCreated:"{title} created, {range}, {lane}",teMoved:"{title} moved to {range}, {lane}",teResized:"{title} now {range}, {lane}",teRemoved:"{title} removed",teRefused:"That overlaps another entry",teCursor:"{lane}: Enter adds an entry at {time}"});F("pt-BR",{teNew:"Novo apontamento",teHours:"{h}h{m}",teHoursOnly:"{h}h",teMinutes:"{m}min",teTotal:"Total",teAt:"\xE0s {time}",teCreated:"{title} criado, {range}, {lane}",teMoved:"{title} movido para {range}, {lane}",teResized:"{title} agora {range}, {lane}",teRemoved:"{title} removido",teRefused:"Isso se sobrep\xF5e a outro apontamento",teCursor:"{lane}: Enter cria um apontamento \xE0s {time}"});var C=6e4,fe=450;function ee(f){let _=Math.round(f),[E,u]=[Math.floor(_/60),_%60];return E?u?p("teHours",{h:E,m:String(u).padStart(2,"0")}):p("teHoursOnly",{h:E}):p("teMinutes",{m:u})}function ge(f={}){let _=f.step??15,E=f.minDuration??_,u=_*C,g=E*C,G=f.overlap!==!1;return{init(l){let h=l.el,d,b,L,x=new Map,S=y("div","op-sr-only",{"aria-live":"polite"}),D=[],o=()=>l.getScale(),N=()=>o().vertical?{earlier:"ArrowUp",later:"ArrowDown",prev:"ArrowLeft",next:"ArrowRight"}:{earlier:"ArrowLeft",later:"ArrowRight",prev:"ArrowUp",next:"ArrowDown"},H=e=>f.editable?.(e)===!1,R=()=>Array.from(h.querySelectorAll(".op-timeline__lane")),M=e=>e.getAttribute("aria-label")??"",$=(e,t)=>l.getItems().filter(r=>r!==t&&r.start&&(r.lane??"")===e),v=e=>({lane:e.lane??"",start:o().parse(e.start),end:o().parse(e.end??e.start)}),z=e=>o().lo+Math.round((e-o().lo)/u)*u,q=e=>`${((e-o().lo)/(o().hi-o().lo)*100).toFixed(3)}%`,J=(e,t)=>{e.style[o().vertical?"insetBlockStart":"insetInlineStart"]=q(t.start),e.style[o().vertical?"insetBlockEnd":"insetInlineEnd"]=`calc(100% - ${q(t.end)})`},Q=e=>`${o().format(e.start)}\u2013${o().format(e.end)}`.replace(/\d{4}-\d{2}-\d{2}T/g,""),B=(e,t,r)=>S.textContent=p(e,{title:t.title??p("teNew"),range:Q(r),lane:r.lane}),w=()=>l.config.store,K=e=>w()?.getFiltered().find(t=>t.data===e),j=(e,t,r)=>{let n=e.getBoundingClientRect(),[a,s,i]=o().vertical?[r,n.top,n.height]:[t,n.left,n.width],m=i?Math.min(1,Math.max(0,(a-s)/i)):0;return o().lo+m*(o().hi-o().lo)},te=(e,t,r)=>R().find(n=>{let a=n.getBoundingClientRect();return o().vertical?e>=a.left&&e<a.right:t>=a.top&&t<a.bottom})??r,k=e=>e.querySelector(".op-timeline__track"),O=(e,t)=>G||!$(e.lane,t).some(r=>{let n=v(r);return e.start<n.end&&n.start<e.end}),A=(e,t,r)=>{if(G)return e;let n=$(e.lane,r).map(v),a=Math.max(o().lo,...n.filter(i=>i.end<=t.start).map(i=>i.end)),s=Math.min(o().hi,...n.filter(i=>i.start>=t.end).map(i=>i.start));return{...e,start:Math.max(e.start,a),end:Math.min(e.end,s)}};function ne(e,t,r){let n=e.holder.closest(".op-timeline__lane"),a=k(te(t,r,n)),s=z(j(k(n),t,r)),{from:i}=e;if(e.kind==="create")return A({lane:i.lane,start:Math.min(e.anchor,s),end:Math.max(e.anchor+g,s)},{...i,start:e.anchor,end:e.anchor});if(e.kind==="start")return A({...i,start:Math.max(o().lo,Math.min(s,i.end-g))},i,e.item);if(e.kind==="end")return A({...i,end:Math.min(o().hi,Math.max(s,i.start+g))},i,e.item);let m=i.end-i.start,c=Math.min(o().hi-m,Math.max(o().lo,i.start+s-e.anchor));return{lane:f.moveAcrossLanes?M(a.closest(".op-timeline__lane")):i.lane,start:c,end:c+m}}function re(e,t){let r=O(t,e.item)&&t.end-t.start>=g;if(e.invalid=!r,e.bar&&e.bar.classList.toggle("is-invalid",!r),e.ghost?.classList.toggle("is-invalid",!r),!r)return;e.last=t;let n=e.bar??e.ghost,a=R().find(s=>M(s)===t.lane);a&&n.parentElement!==k(a)&&k(a).append(n),J(n,t)}function U(e,t){d=void 0,e.holder.releasePointerCapture?.(e.id),e.holder.classList.remove("is-dragging","is-resizing"),h.classList.remove("is-time-dragging"),e.ghost?.remove(),e.bar?.classList.remove("is-dragging","is-resizing","is-invalid");let r=e.last,n=e.kind!=="create"&&r.lane===e.from.lane&&r.start===e.from.start&&r.end===e.from.end;if(!t||n||e.kind==="create"&&r.end-r.start<u||r.end-r.start<g)return void l.setItems(l.getItems());P(e.kind,e.item,r,e.from)}async function P(e,t,r,n){let a={lane:r.lane,start:o().format(r.start),end:o().format(r.end)};if(!t){if(l.emit("before-create",a)===!1)return void l.setItems(l.getItems());let m={title:p("teNew"),...f.defaults,...a};if(f.form){let I=await f.form(m,"create");if(!I)return void l.setItems(l.getItems());Object.assign(m,I)}let c=w()?w().add(m)[0].data:m;return L=c,l.setItems(w()?l.getItems():[...l.getItems(),c]),B("teCreated",c,r),void l.emit("create",c)}let s={lane:n.lane,start:o().format(n.start),end:o().format(n.end)};if(l.emit("before-change",t,a,s)===!1)return void l.setItems(l.getItems());L=t;let i=K(t);if(i)for(let m of["lane","start","end"])i.set(m,a[m]);else Object.assign(t,a),l.setItems([...l.getItems()]);B(e==="move"||e==="key"?"teMoved":"teResized",t,r),l.emit("change",t,a,s)}async function V(e){if(l.emit("edit",e),!f.form)return;let t=await f.form({...e},"edit");if(!t)return;let r={...e};if(l.emit("before-change",e,t,r)===!1)return;L=e;let n=K(e);if(n)for(let[a,s]of Object.entries(t))n.set(a,s);else Object.assign(e,t),l.setItems([...l.getItems()]);l.emit("change",e,t,r)}function ae(e){if(H(e)||l.emit("before-remove",e)===!1)return;let t=K(e);t?w().remove(t):l.setItems(l.getItems().filter(r=>r!==e)),B("teRemoved",e,v(e)),l.emit("remove",e)}let X=e=>e?l.getItems()[Number(e.dataset.i)]:void 0;function W(e,t){d={...t,last:t.from,id:e.pointerId,invalid:!1},t.holder.setPointerCapture?.(e.pointerId),h.classList.add("is-time-dragging"),t.holder.classList.add(t.kind==="move"||t.kind==="create"?"is-dragging":"is-resizing"),t.bar?.classList.add(t.kind==="move"?"is-dragging":"is-resizing"),t.kind==="create"&&(d.ghost=y("div","op-timeentry__ghost",{"aria-hidden":"true"}),t.holder.append(d.ghost),J(d.ghost,{...t.from,start:t.anchor,end:t.anchor+g}))}let ie=e=>{if(e.button||d)return;let t=e.target,r=t.closest(".op-timeline__bar"),n=t.closest(".op-timeline__lane");if(!n)return;let a=k(n);if(r){let i=X(r);if(!i||H(i))return;let m=t.closest(".op-timeentry__handle--start")?"start":t.closest(".op-timeentry__handle--end")?"end":"move";return e.preventDefault(),W(e,{kind:m,item:i,bar:r,holder:a,from:v(i),anchor:z(j(a,e.clientX,e.clientY))})}if(!t.closest(".op-timeline__track"))return;let s=()=>W(e,{kind:"create",holder:a,from:{lane:M(n),start:0,end:0},anchor:z(j(a,e.clientX,e.clientY))});if(e.pointerType==="touch"){b=setTimeout(()=>(b=void 0,s()),fe);return}e.preventDefault(),s()},oe=e=>{b&&e.pointerType==="touch"&&(clearTimeout(b),b=void 0),!(!d||e.pointerId!==d.id)&&re(d,ne(d,e.clientX,e.clientY))},Z=e=>{clearTimeout(b),b=void 0,d&&e.pointerId===d.id&&U(d,e.type==="pointerup")},se=e=>d&&e.cancelable&&e.preventDefault(),le=e=>{let t=X(e.target.closest(".op-timeline__bar"));t&&!H(t)&&V(t)},me=(e,t,r)=>{let n=v(e),a=t===N().later?1:-1,s=n.end-n.start,i;if(r.altKey&&r.shiftKey)i={...n,start:Math.min(n.end-g,Math.max(o().lo,n.start+a*u))};else if(r.shiftKey)i={...n,end:Math.max(n.start+g,Math.min(o().hi,n.end+a*u))};else{let c=Math.min(o().hi-s,Math.max(o().lo,n.start+a*u));i={...n,start:c,end:c+s}}let m=r.shiftKey?A(i,n,e):i;if(m.end-m.start<g||!O(m,e))return void(S.textContent=p("teRefused"));(m.start!==n.start||m.end!==n.end)&&P("key",e,m,n)},ce=(e,t)=>{let r=R().map(M),n=r[r.indexOf(e.lane??"")+t],a=v(e);n===void 0||!O({...a,lane:n},e)||P("key",e,{...a,lane:n},a)},de=e=>{let t=e.target;if(e.key==="Escape"&&d)return e.stopPropagation(),U(d,!1);let r=t.closest(".op-timeline__bar"),n=X(r);if(n&&r===t){if(H(n))return;let a=N();if(e.key===a.earlier||e.key===a.later)me(n,e.key,e);else if((e.key===a.prev||e.key===a.next)&&f.moveAcrossLanes)ce(n,e.key===a.prev?-1:1);else if(e.key==="Enter")V(n);else if(e.key==="Delete"||e.key==="Backspace")ae(n);else return}else if(t.classList.contains("op-timeline__lane")){let a=M(t),s=x.get(a)??o().lo,i=N();if(e.key===i.earlier||e.key===i.later)x.set(a,Math.min(o().hi-u,Math.max(o().lo,s+(e.key===i.later?u:-u))));else if(e.key==="Enter"){let m=Math.min(o().hi,s+(f.duration??60)*C),c=A({lane:a,start:s,end:m},{lane:a,start:s,end:s});if(c.end-c.start>=g&&O(c))P("create",void 0,c);else return void(S.textContent=p("teRefused"))}else return}else return;e.preventDefault(),e.stopPropagation(),Y()};function Y(){if(!l.getScale())return;let e=l.getItems(),t=0;for(let n of R()){let a=M(n);n.tabIndex=0,n.classList.add("op-timeentry__lane"),n.setAttribute("aria-description",p("teCursor",{lane:a,time:o().format(x.get(a)??o().lo).replace(/^\d{4}-\d{2}-\d{2}T/,"")}));let s=$(a).reduce((c,I)=>c+(v(I).end-v(I).start)/C,0);t+=s;let i=n.querySelector(".op-timeline__lane-name");i.textContent=`${a||"\u2014"} \xB7 ${ee(s)}`;for(let c of["under","met","over"])n.classList.remove(`is-${c}`);f.target&&n.classList.add(s<f.target?"is-under":s===f.target?"is-met":"is-over");let m=x.get(a);if(n.querySelector(".op-timeentry__cursor")?.remove(),m!==void 0){let c=y("div","op-timeentry__cursor",{"aria-hidden":"true"});c.style[o().vertical?"insetBlockStart":"insetInlineStart"]=q(m),k(n).append(c)}}for(let n of Array.from(h.querySelectorAll(".op-timeline__bar"))){let a=e[Number(n.dataset.i)];if(!a)continue;let s=v(a),i=H(a);n.classList.toggle("is-locked",i),n.setAttribute("aria-label",`${a.title}, ${Q(s)}, ${s.lane}`),i?n.setAttribute("aria-disabled","true"):n.querySelector(".op-timeentry__handle")||n.append(y("span","op-timeentry__handle op-timeentry__handle--start",{"aria-hidden":"true"}),y("span","op-timeentry__handle op-timeentry__handle--end",{"aria-hidden":"true"})),a===L&&n.focus()}L=void 0,h.querySelector(".op-timeentry__grand")?.remove();let r=y("div","op-timeentry__grand",{},y("span","",{},p("teTotal")),y("strong","",{},ee(t)));h.append(r,S)}let T=(e,t,r)=>{h.addEventListener(e,t,r),D.push(()=>h.removeEventListener(e,t,r))};return T("pointerdown",ie),T("pointermove",oe),T("pointerup",Z),T("pointercancel",Z),T("dblclick",le),T("keydown",de,!0),T("touchmove",se,{passive:!1}),D.push(l.on("paint",Y)),h.classList.add("op-timeline--entry"),Y(),()=>{clearTimeout(b),D.forEach(e=>e()),D=[],h.classList.remove("op-timeline--entry"),S.remove(),d&&U(d,!1)}}}}export{ee as a,ge as b};
2
+ //# sourceMappingURL=chunk-TMBGEZSD.js.map