@guiexpert/table 1.0.2 → 1.0.5

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 (407) hide show
  1. package/esm2022/guiexpert-table.mjs +5 -0
  2. package/esm2022/index.mjs +140 -0
  3. package/esm2022/lib/table/action/action-id.type.mjs +20 -0
  4. package/esm2022/lib/table/action/on-action-triggered.if.mjs +2 -0
  5. package/esm2022/lib/table/action/osx-shortcut-actionId-mapping.mjs +21 -0
  6. package/esm2022/lib/table/action/shortcut-actionid-mapping.type.mjs +2 -0
  7. package/esm2022/lib/table/action/shortcut.service.mjs +114 -0
  8. package/esm2022/lib/table/action/windows-shortcut-actionId-mapping.mjs +19 -0
  9. package/esm2022/lib/table/checkbox/checkbox-model.if.mjs +2 -0
  10. package/esm2022/lib/table/checkbox/checkbox-model.mjs +50 -0
  11. package/esm2022/lib/table/checkbox/tree-checkbox-model.mjs +107 -0
  12. package/esm2022/lib/table/color/color-rgb.if.mjs +2 -0
  13. package/esm2022/lib/table/color/color-rgb.mjs +11 -0
  14. package/esm2022/lib/table/color/ge-css-color-util.mjs +26 -0
  15. package/esm2022/lib/table/color/three-color-gradient-arg.if.mjs +2 -0
  16. package/esm2022/lib/table/color/three-color-gradient-arg.mjs +17 -0
  17. package/esm2022/lib/table/color/two-color-gradient-arg.if.mjs +2 -0
  18. package/esm2022/lib/table/color/two-color-gradient-arg.mjs +13 -0
  19. package/esm2022/lib/table/css-vars.mjs +238 -0
  20. package/esm2022/lib/table/data/chunk/chunk.data-event.if.mjs +2 -0
  21. package/esm2022/lib/table/data/chunk/chunk.data-event.mjs +12 -0
  22. package/esm2022/lib/table/data/chunk/request-chunk.if.mjs +2 -0
  23. package/esm2022/lib/table/data/chunk/request-chunk.mjs +22 -0
  24. package/esm2022/lib/table/data/common/aligns.mjs +19 -0
  25. package/esm2022/lib/table/data/common/area-map-factory.mjs +7 -0
  26. package/esm2022/lib/table/data/common/area-map.mjs +11 -0
  27. package/esm2022/lib/table/data/common/area-map.type.mjs +2 -0
  28. package/esm2022/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +2 -0
  29. package/esm2022/lib/table/data/common/args-render-cell-div.mjs +2 -0
  30. package/esm2022/lib/table/data/common/boolean-function.mjs +3 -0
  31. package/esm2022/lib/table/data/common/cell-range.mjs +36 -0
  32. package/esm2022/lib/table/data/common/checkbox-column-def.mjs +13 -0
  33. package/esm2022/lib/table/data/common/checked-type.mjs +2 -0
  34. package/esm2022/lib/table/data/common/event/ge-cell-indices.mjs +9 -0
  35. package/esm2022/lib/table/data/common/event/ge-key-event.mjs +9 -0
  36. package/esm2022/lib/table/data/common/event/ge-model-change-event.mjs +11 -0
  37. package/esm2022/lib/table/data/common/event/ge-mouse-event.mjs +30 -0
  38. package/esm2022/lib/table/data/common/event/input/table-cell-update-event.if.mjs +2 -0
  39. package/esm2022/lib/table/data/common/event/input/table-cell-update-event.mjs +13 -0
  40. package/esm2022/lib/table/data/common/filter-function.mjs +2 -0
  41. package/esm2022/lib/table/data/common/get-t.mjs +2 -0
  42. package/esm2022/lib/table/data/common/index-and-px.mjs +9 -0
  43. package/esm2022/lib/table/data/common/size.if.mjs +2 -0
  44. package/esm2022/lib/table/data/common/size.mjs +9 -0
  45. package/esm2022/lib/table/data/common/sizes.mjs +33 -0
  46. package/esm2022/lib/table/data/common/sort-item.mjs +9 -0
  47. package/esm2022/lib/table/data/common/sort-state.type.mjs +2 -0
  48. package/esm2022/lib/table/data/common/tree-arrow.type.mjs +2 -0
  49. package/esm2022/lib/table/data/common/tree-row-if.mjs +2 -0
  50. package/esm2022/lib/table/data/common/tree-row.mjs +19 -0
  51. package/esm2022/lib/table/data/common/value-label.if.mjs +2 -0
  52. package/esm2022/lib/table/data/common/value-label.mjs +9 -0
  53. package/esm2022/lib/table/data/div-scope.type.mjs +2 -0
  54. package/esm2022/lib/table/data/event/mouse-target-data.mjs +36 -0
  55. package/esm2022/lib/table/data/geo-data.mjs +15 -0
  56. package/esm2022/lib/table/data/options/auto-restore-options.if.mjs +2 -0
  57. package/esm2022/lib/table/data/options/auto-restore-options.mjs +40 -0
  58. package/esm2022/lib/table/data/options/default-row-heights.if.mjs +2 -0
  59. package/esm2022/lib/table/data/options/default-row-heights.mjs +11 -0
  60. package/esm2022/lib/table/data/options/icon.if.mjs +2 -0
  61. package/esm2022/lib/table/data/options/icon.mjs +11 -0
  62. package/esm2022/lib/table/data/options/sorted-options.if.mjs +2 -0
  63. package/esm2022/lib/table/data/options/sorted-options.mjs +12 -0
  64. package/esm2022/lib/table/data/options/table-options.if.mjs +2 -0
  65. package/esm2022/lib/table/data/options/table-options.mjs +44 -0
  66. package/esm2022/lib/table/data/options/tree-options.if.mjs +2 -0
  67. package/esm2022/lib/table/data/options/tree-options.mjs +14 -0
  68. package/esm2022/lib/table/data/side-ident.type.mjs +2 -0
  69. package/esm2022/lib/table/data/table-model-and-options.if.mjs +2 -0
  70. package/esm2022/lib/table/data/table-model-and-options.mjs +9 -0
  71. package/esm2022/lib/table/data/tablemodel/area-ident.type.mjs +14 -0
  72. package/esm2022/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +137 -0
  73. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.mjs +47 -0
  74. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-cell-groups.mjs +163 -0
  75. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +84 -0
  76. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +15 -0
  77. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +88 -0
  78. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +181 -0
  79. package/esm2022/lib/table/data/tablemodel/areamodel/area-model.if.mjs +2 -0
  80. package/esm2022/lib/table/data/tablemodel/areamodel/area-model.mjs +76 -0
  81. package/esm2022/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +51 -0
  82. package/esm2022/lib/table/data/tablemodel/areamodel/has-default-row-height-if.mjs +2 -0
  83. package/esm2022/lib/table/data/tablemodel/cellgroup/cell-group-ext.mjs +133 -0
  84. package/esm2022/lib/table/data/tablemodel/cellgroup/cell-group.if.mjs +2 -0
  85. package/esm2022/lib/table/data/tablemodel/cellgroup/cell-group.mjs +18 -0
  86. package/esm2022/lib/table/data/tablemodel/cellgroup/cellgroup-factory.mjs +110 -0
  87. package/esm2022/lib/table/data/tablemodel/column/column-def.if.mjs +2 -0
  88. package/esm2022/lib/table/data/tablemodel/column/column-def.mjs +52 -0
  89. package/esm2022/lib/table/data/tablemodel/padding.mjs +13 -0
  90. package/esm2022/lib/table/data/tablemodel/table-model.if.mjs +2 -0
  91. package/esm2022/lib/table/data/tablemodel/table-model.mjs +308 -0
  92. package/esm2022/lib/table/ele-scope.mjs +199 -0
  93. package/esm2022/lib/table/event-adapter.mjs +17 -0
  94. package/esm2022/lib/table/event-listener.if.mjs +2 -0
  95. package/esm2022/lib/table/factory/table-factory.mjs +186 -0
  96. package/esm2022/lib/table/factory/tree-factory.mjs +32 -0
  97. package/esm2022/lib/table/focus/focus-model.if.mjs +2 -0
  98. package/esm2022/lib/table/focus/focus-model.mjs +33 -0
  99. package/esm2022/lib/table/focus/focus.type.mjs +2 -0
  100. package/esm2022/lib/table/input-handler.mjs +25 -0
  101. package/esm2022/lib/table/mouse-handler.mjs +196 -0
  102. package/esm2022/lib/table/render-scope.mjs +719 -0
  103. package/esm2022/lib/table/renderer/cell-group-ext-cell-renderer.mjs +8 -0
  104. package/esm2022/lib/table/renderer/cell-render.if.mjs +2 -0
  105. package/esm2022/lib/table/renderer/checkbox-boolean-property-cell-renderer.mjs +47 -0
  106. package/esm2022/lib/table/renderer/checkbox-cell-renderer.mjs +22 -0
  107. package/esm2022/lib/table/renderer/date-to-int-date-cell-renderer.mjs +24 -0
  108. package/esm2022/lib/table/renderer/date-to-iso-cell-renderer.mjs +9 -0
  109. package/esm2022/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +9 -0
  110. package/esm2022/lib/table/renderer/date-to-tec-cell-renderer.mjs +12 -0
  111. package/esm2022/lib/table/renderer/edit/edit-cell-renderer.type.mjs +2 -0
  112. package/esm2022/lib/table/renderer/edit/edit-input-pipe-for-number.mjs +4 -0
  113. package/esm2022/lib/table/renderer/edit/edit-input-pipe.if.mjs +2 -0
  114. package/esm2022/lib/table/renderer/edit/input-cell-renderer.mjs +23 -0
  115. package/esm2022/lib/table/renderer/edit/select-cell-renderer.mjs +36 -0
  116. package/esm2022/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +12 -0
  117. package/esm2022/lib/table/renderer/number-cell-renderer.mjs +21 -0
  118. package/esm2022/lib/table/renderer/progress-bar-cell-renderer.mjs +44 -0
  119. package/esm2022/lib/table/renderer/renderer-cleanup-fn.type.mjs +2 -0
  120. package/esm2022/lib/table/renderer/renderer.mjs +7 -0
  121. package/esm2022/lib/table/renderer/star-rating-cell-renderer.mjs +27 -0
  122. package/esm2022/lib/table/renderer/true-false-cell-renderer.mjs +15 -0
  123. package/esm2022/lib/table/selection/selection-model.if.mjs +2 -0
  124. package/esm2022/lib/table/selection/selection-model.mjs +99 -0
  125. package/esm2022/lib/table/selection/selection-service.mjs +101 -0
  126. package/esm2022/lib/table/selection/selection.type.mjs +2 -0
  127. package/esm2022/lib/table/service/abstract-store-state.service.mjs +50 -0
  128. package/esm2022/lib/table/service/convenience-dom.service.mjs +405 -0
  129. package/esm2022/lib/table/service/data/collapsed-expanded.data.mjs +13 -0
  130. package/esm2022/lib/table/service/data/html-style.type.mjs +2 -0
  131. package/esm2022/lib/table/service/dom-service.if.mjs +2 -0
  132. package/esm2022/lib/table/service/ge-filter.service.mjs +98 -0
  133. package/esm2022/lib/table/service/simple-dom-service.mjs +34 -0
  134. package/esm2022/lib/table/service/sorter.service.mjs +27 -0
  135. package/esm2022/lib/table/service/store-state-collapsed-expand.service.mjs +57 -0
  136. package/esm2022/lib/table/service/store-state-scroll-pos.service.mjs +29 -0
  137. package/esm2022/lib/table/service/store-state-sorting.service.mjs +29 -0
  138. package/esm2022/lib/table/service/tree-row.service.mjs +23 -0
  139. package/esm2022/lib/table/table-api.mjs +42 -0
  140. package/esm2022/lib/table/table-scope.mjs +364 -0
  141. package/{src/index.ts → index.d.ts} +4 -24
  142. package/lib/table/action/action-id.type.d.ts +2 -0
  143. package/{src/lib/table/action/on-action-triggered.if.ts → lib/table/action/on-action-triggered.if.d.ts} +1 -4
  144. package/lib/table/action/osx-shortcut-actionId-mapping.d.ts +6 -0
  145. package/lib/table/action/shortcut-actionid-mapping.type.d.ts +4 -0
  146. package/lib/table/action/shortcut.service.d.ts +18 -0
  147. package/lib/table/action/windows-shortcut-actionId-mapping.d.ts +6 -0
  148. package/lib/table/checkbox/checkbox-model.d.ts +12 -0
  149. package/lib/table/checkbox/checkbox-model.if.d.ts +9 -0
  150. package/lib/table/checkbox/tree-checkbox-model.d.ts +17 -0
  151. package/lib/table/color/color-rgb.d.ts +7 -0
  152. package/lib/table/color/color-rgb.if.d.ts +5 -0
  153. package/lib/table/color/ge-css-color-util.d.ts +7 -0
  154. package/lib/table/color/three-color-gradient-arg.d.ts +11 -0
  155. package/lib/table/color/three-color-gradient-arg.if.d.ts +9 -0
  156. package/lib/table/color/two-color-gradient-arg.d.ts +9 -0
  157. package/lib/table/color/two-color-gradient-arg.if.d.ts +7 -0
  158. package/lib/table/css-vars.d.ts +9 -0
  159. package/lib/table/data/chunk/chunk.data-event.d.ts +9 -0
  160. package/lib/table/data/chunk/chunk.data-event.if.d.ts +4 -0
  161. package/lib/table/data/chunk/request-chunk.d.ts +14 -0
  162. package/lib/table/data/chunk/request-chunk.if.d.ts +9 -0
  163. package/lib/table/data/common/aligns.d.ts +24 -0
  164. package/lib/table/data/common/area-map-factory.d.ts +5 -0
  165. package/lib/table/data/common/area-map.d.ts +7 -0
  166. package/lib/table/data/common/area-map.type.d.ts +5 -0
  167. package/{src/lib/table/data/common/args-adjust-columns-to-row-parent-params.ts → lib/table/data/common/args-adjust-columns-to-row-parent-params.d.ts} +10 -11
  168. package/lib/table/data/common/args-render-cell-div.d.ts +17 -0
  169. package/lib/table/data/common/boolean-function.d.ts +3 -0
  170. package/lib/table/data/common/cell-range.d.ts +19 -0
  171. package/lib/table/data/common/checkbox-column-def.d.ts +13 -0
  172. package/lib/table/data/common/event/ge-cell-indices.d.ts +5 -0
  173. package/lib/table/data/common/event/ge-key-event.d.ts +5 -0
  174. package/lib/table/data/common/event/ge-model-change-event.d.ts +6 -0
  175. package/lib/table/data/common/event/ge-mouse-event.d.ts +17 -0
  176. package/lib/table/data/common/event/input/table-cell-update-event.d.ts +9 -0
  177. package/{src/lib/table/data/common/event/input/table-cell-update-event.if.ts → lib/table/data/common/event/input/table-cell-update-event.if.d.ts} +4 -7
  178. package/lib/table/data/common/index-and-px.d.ts +5 -0
  179. package/lib/table/data/common/size.d.ts +6 -0
  180. package/lib/table/data/common/size.if.d.ts +4 -0
  181. package/lib/table/data/common/sizes.d.ts +32 -0
  182. package/lib/table/data/common/sort-item.d.ts +6 -0
  183. package/lib/table/data/common/tree-row-if.d.ts +10 -0
  184. package/lib/table/data/common/tree-row.d.ts +11 -0
  185. package/lib/table/data/common/value-label.d.ts +6 -0
  186. package/lib/table/data/common/value-label.if.d.ts +4 -0
  187. package/lib/table/data/div-scope.type.d.ts +7 -0
  188. package/lib/table/data/event/mouse-target-data.d.ts +15 -0
  189. package/lib/table/data/geo-data.d.ts +8 -0
  190. package/lib/table/data/options/auto-restore-options.d.ts +11 -0
  191. package/lib/table/data/options/auto-restore-options.if.d.ts +16 -0
  192. package/lib/table/data/options/default-row-heights.d.ts +7 -0
  193. package/lib/table/data/options/default-row-heights.if.d.ts +5 -0
  194. package/lib/table/data/options/icon.d.ts +7 -0
  195. package/lib/table/data/options/icon.if.d.ts +5 -0
  196. package/lib/table/data/options/sorted-options.d.ts +8 -0
  197. package/{src/lib/table/data/options/sorted-options.if.ts → lib/table/data/options/sorted-options.if.d.ts} +3 -6
  198. package/lib/table/data/options/table-options.d.ts +41 -0
  199. package/lib/table/data/options/table-options.if.d.ts +42 -0
  200. package/lib/table/data/options/tree-options.d.ts +9 -0
  201. package/lib/table/data/options/tree-options.if.d.ts +7 -0
  202. package/lib/table/data/table-model-and-options.d.ts +8 -0
  203. package/{src/lib/table/data/table-model-and-options.if.ts → lib/table/data/table-model-and-options.if.d.ts} +2 -4
  204. package/{src/lib/table/data/tablemodel/area-ident.type.ts → lib/table/data/tablemodel/area-ident.type.d.ts} +1 -10
  205. package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +47 -0
  206. package/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.d.ts +19 -0
  207. package/lib/table/data/tablemodel/areamodel/area-model-cell-groups.d.ts +51 -0
  208. package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +41 -0
  209. package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +10 -0
  210. package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +28 -0
  211. package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +39 -0
  212. package/lib/table/data/tablemodel/areamodel/area-model.d.ts +37 -0
  213. package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +158 -0
  214. package/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.d.ts +12 -0
  215. package/{src/lib/table/data/tablemodel/areamodel/has-default-row-height-if.ts → lib/table/data/tablemodel/areamodel/has-default-row-height-if.d.ts} +1 -1
  216. package/lib/table/data/tablemodel/cellgroup/cell-group-ext.d.ts +21 -0
  217. package/lib/table/data/tablemodel/cellgroup/cell-group.d.ts +11 -0
  218. package/lib/table/data/tablemodel/cellgroup/cell-group.if.d.ts +9 -0
  219. package/lib/table/data/tablemodel/cellgroup/cellgroup-factory.d.ts +10 -0
  220. package/lib/table/data/tablemodel/column/column-def.d.ts +52 -0
  221. package/lib/table/data/tablemodel/column/column-def.if.d.ts +25 -0
  222. package/lib/table/data/tablemodel/padding.d.ts +7 -0
  223. package/lib/table/data/tablemodel/table-model.d.ts +88 -0
  224. package/lib/table/data/tablemodel/table-model.if.d.ts +56 -0
  225. package/lib/table/ele-scope.d.ts +37 -0
  226. package/lib/table/event-adapter.d.ts +12 -0
  227. package/lib/table/event-listener.if.d.ts +11 -0
  228. package/lib/table/factory/table-factory.d.ts +65 -0
  229. package/lib/table/factory/tree-factory.d.ts +6 -0
  230. package/lib/table/focus/focus-model.d.ts +15 -0
  231. package/lib/table/focus/focus-model.if.d.ts +8 -0
  232. package/{src/lib/table/focus/focus.type.ts → lib/table/focus/focus.type.d.ts} +0 -3
  233. package/lib/table/input-handler.d.ts +6 -0
  234. package/lib/table/mouse-handler.d.ts +25 -0
  235. package/lib/table/render-scope.d.ts +86 -0
  236. package/lib/table/renderer/cell-group-ext-cell-renderer.d.ts +9 -0
  237. package/{src/lib/table/renderer/cell-render.if.ts → lib/table/renderer/cell-render.if.d.ts} +1 -10
  238. package/lib/table/renderer/checkbox-boolean-property-cell-renderer.d.ts +15 -0
  239. package/lib/table/renderer/checkbox-cell-renderer.d.ts +8 -0
  240. package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +9 -0
  241. package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +8 -0
  242. package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +8 -0
  243. package/lib/table/renderer/date-to-tec-cell-renderer.d.ts +8 -0
  244. package/{src/lib/table/renderer/edit/edit-cell-renderer.type.ts → lib/table/renderer/edit/edit-cell-renderer.type.d.ts} +0 -1
  245. package/lib/table/renderer/edit/edit-input-pipe-for-number.d.ts +2 -0
  246. package/lib/table/renderer/edit/edit-input-pipe.if.d.ts +3 -0
  247. package/lib/table/renderer/edit/input-cell-renderer.d.ts +8 -0
  248. package/lib/table/renderer/edit/select-cell-renderer.d.ts +12 -0
  249. package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +8 -0
  250. package/lib/table/renderer/number-cell-renderer.d.ts +11 -0
  251. package/lib/table/renderer/progress-bar-cell-renderer.d.ts +15 -0
  252. package/lib/table/renderer/renderer.d.ts +5 -0
  253. package/lib/table/renderer/star-rating-cell-renderer.d.ts +13 -0
  254. package/lib/table/renderer/true-false-cell-renderer.d.ts +8 -0
  255. package/lib/table/selection/selection-model.d.ts +21 -0
  256. package/lib/table/selection/selection-model.if.d.ts +11 -0
  257. package/lib/table/selection/selection-service.d.ts +17 -0
  258. package/{src/lib/table/selection/selection.type.ts → lib/table/selection/selection.type.d.ts} +0 -3
  259. package/lib/table/service/abstract-store-state.service.d.ts +10 -0
  260. package/lib/table/service/convenience-dom.service.d.ts +46 -0
  261. package/lib/table/service/data/collapsed-expanded.data.d.ts +7 -0
  262. package/lib/table/service/data/html-style.type.d.ts +3 -0
  263. package/lib/table/service/dom-service.if.d.ts +9 -0
  264. package/lib/table/service/ge-filter.service.d.ts +5 -0
  265. package/lib/table/service/simple-dom-service.d.ts +10 -0
  266. package/lib/table/service/sorter.service.d.ts +3 -0
  267. package/lib/table/service/store-state-collapsed-expand.service.d.ts +15 -0
  268. package/lib/table/service/store-state-scroll-pos.service.d.ts +10 -0
  269. package/lib/table/service/store-state-sorting.service.d.ts +11 -0
  270. package/lib/table/service/tree-row.service.d.ts +5 -0
  271. package/lib/table/table-api.d.ts +18 -0
  272. package/lib/table/table-scope.d.ts +56 -0
  273. package/package.json +17 -10
  274. package/.eslintrc.json +0 -42
  275. package/LICENSE +0 -35
  276. package/README.md +0 -102
  277. package/jest.config.ts +0 -18
  278. package/ng-package.json +0 -7
  279. package/project.json +0 -47
  280. package/src/lib/table/action/action-id.type.ts +0 -24
  281. package/src/lib/table/action/osx-shortcut-actionId-mapping.ts +0 -29
  282. package/src/lib/table/action/shortcut-actionid-mapping.type.ts +0 -3
  283. package/src/lib/table/action/shortcut.service.ts +0 -134
  284. package/src/lib/table/action/windows-shortcut-actionId-mapping.ts +0 -27
  285. package/src/lib/table/checkbox/checkbox-model.if.ts +0 -16
  286. package/src/lib/table/checkbox/checkbox-model.ts +0 -62
  287. package/src/lib/table/checkbox/tree-checkbox-model.ts +0 -123
  288. package/src/lib/table/color/color-rgb.if.ts +0 -7
  289. package/src/lib/table/color/color-rgb.ts +0 -10
  290. package/src/lib/table/color/ge-css-color-util.ts +0 -43
  291. package/src/lib/table/color/three-color-gradient-arg.if.ts +0 -10
  292. package/src/lib/table/color/three-color-gradient-arg.ts +0 -14
  293. package/src/lib/table/color/two-color-gradient-arg.if.ts +0 -8
  294. package/src/lib/table/color/two-color-gradient-arg.ts +0 -12
  295. package/src/lib/table/css-vars.ts +0 -243
  296. package/src/lib/table/data/common/aligns.ts +0 -19
  297. package/src/lib/table/data/common/area-map-factory.ts +0 -14
  298. package/src/lib/table/data/common/area-map.ts +0 -11
  299. package/src/lib/table/data/common/area-map.type.ts +0 -5
  300. package/src/lib/table/data/common/args-render-cell-div.ts +0 -18
  301. package/src/lib/table/data/common/boolean-function.ts +0 -4
  302. package/src/lib/table/data/common/cell-range.ts +0 -57
  303. package/src/lib/table/data/common/checkbox-column-def.ts +0 -25
  304. package/src/lib/table/data/common/event/ge-cell-indices.ts +0 -9
  305. package/src/lib/table/data/common/event/ge-key-event.ts +0 -10
  306. package/src/lib/table/data/common/event/ge-model-change-event.ts +0 -13
  307. package/src/lib/table/data/common/event/ge-mouse-event.ts +0 -38
  308. package/src/lib/table/data/common/event/input/table-cell-update-event.ts +0 -14
  309. package/src/lib/table/data/common/index-and-px.ts +0 -9
  310. package/src/lib/table/data/common/size.if.ts +0 -4
  311. package/src/lib/table/data/common/size.ts +0 -9
  312. package/src/lib/table/data/common/sizes.ts +0 -35
  313. package/src/lib/table/data/common/sort-item.ts +0 -11
  314. package/src/lib/table/data/common/tree-row-if.ts +0 -11
  315. package/src/lib/table/data/common/tree-row.ts +0 -16
  316. package/src/lib/table/data/common/value-label.if.ts +0 -6
  317. package/src/lib/table/data/common/value-label.ts +0 -13
  318. package/src/lib/table/data/div-scope.type.ts +0 -5
  319. package/src/lib/table/data/event/mouse-target-data.ts +0 -45
  320. package/src/lib/table/data/geo-data.ts +0 -13
  321. package/src/lib/table/data/options/auto-restore-options.if.ts +0 -21
  322. package/src/lib/table/data/options/auto-restore-options.ts +0 -50
  323. package/src/lib/table/data/options/default-row-heights.if.ts +0 -5
  324. package/src/lib/table/data/options/default-row-heights.ts +0 -10
  325. package/src/lib/table/data/options/icon.if.ts +0 -7
  326. package/src/lib/table/data/options/icon.ts +0 -10
  327. package/src/lib/table/data/options/sorted-options.ts +0 -15
  328. package/src/lib/table/data/options/table-options.if.ts +0 -54
  329. package/src/lib/table/data/options/table-options.ts +0 -66
  330. package/src/lib/table/data/options/tree-options.if.ts +0 -10
  331. package/src/lib/table/data/options/tree-options.ts +0 -32
  332. package/src/lib/table/data/table-model-and-options.ts +0 -13
  333. package/src/lib/table/data/tablemodel/areamodel/abstract-area-model.ts +0 -183
  334. package/src/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.ts +0 -59
  335. package/src/lib/table/data/tablemodel/areamodel/area-model-cell-groups.ts +0 -210
  336. package/src/lib/table/data/tablemodel/areamodel/area-model-hidden.ts +0 -120
  337. package/src/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.ts +0 -23
  338. package/src/lib/table/data/tablemodel/areamodel/area-model-object-array.ts +0 -105
  339. package/src/lib/table/data/tablemodel/areamodel/area-model-tree.ts +0 -215
  340. package/src/lib/table/data/tablemodel/areamodel/area-model.if.ts +0 -186
  341. package/src/lib/table/data/tablemodel/areamodel/area-model.ts +0 -110
  342. package/src/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.ts +0 -61
  343. package/src/lib/table/data/tablemodel/cellgroup/cell-group-ext.ts +0 -167
  344. package/src/lib/table/data/tablemodel/cellgroup/cell-group.if.ts +0 -12
  345. package/src/lib/table/data/tablemodel/cellgroup/cell-group.ts +0 -18
  346. package/src/lib/table/data/tablemodel/cellgroup/cellgroup-factory.ts +0 -148
  347. package/src/lib/table/data/tablemodel/column/column-def.if.ts +0 -28
  348. package/src/lib/table/data/tablemodel/column/column-def.ts +0 -104
  349. package/src/lib/table/data/tablemodel/padding.ts +0 -9
  350. package/src/lib/table/data/tablemodel/table-model.if.ts +0 -90
  351. package/src/lib/table/data/tablemodel/table-model.ts +0 -352
  352. package/src/lib/table/ele-scope.ts +0 -283
  353. package/src/lib/table/event-adapter.ts +0 -28
  354. package/src/lib/table/event-listener.if.ts +0 -19
  355. package/src/lib/table/factory/table-factory.ts +0 -378
  356. package/src/lib/table/factory/tree-factory.ts +0 -51
  357. package/src/lib/table/focus/focus-model.if.ts +0 -14
  358. package/src/lib/table/focus/focus-model.ts +0 -48
  359. package/src/lib/table/input-handler.ts +0 -34
  360. package/src/lib/table/mouse-handler.ts +0 -236
  361. package/src/lib/table/render-scope.ts +0 -936
  362. package/src/lib/table/renderer/cell-group-ext-cell-renderer.ts +0 -27
  363. package/src/lib/table/renderer/checkbox-boolean-property-cell-renderer.ts +0 -63
  364. package/src/lib/table/renderer/checkbox-cell-renderer.ts +0 -39
  365. package/src/lib/table/renderer/date-to-int-date-cell-renderer.ts +0 -39
  366. package/src/lib/table/renderer/date-to-iso-cell-renderer.ts +0 -25
  367. package/src/lib/table/renderer/date-to-locale-date-cell-renderer.ts +0 -24
  368. package/src/lib/table/renderer/date-to-tec-cell-renderer.ts +0 -28
  369. package/src/lib/table/renderer/edit/edit-input-pipe-for-number.ts +0 -6
  370. package/src/lib/table/renderer/edit/edit-input-pipe.if.ts +0 -7
  371. package/src/lib/table/renderer/edit/input-cell-renderer.ts +0 -41
  372. package/src/lib/table/renderer/edit/select-cell-renderer.ts +0 -60
  373. package/src/lib/table/renderer/male-female-to-icon-cell-renderer.ts +0 -26
  374. package/src/lib/table/renderer/number-cell-renderer.ts +0 -38
  375. package/src/lib/table/renderer/progress-bar-cell-renderer.ts +0 -60
  376. package/src/lib/table/renderer/renderer.ts +0 -11
  377. package/src/lib/table/renderer/star-rating-cell-renderer.ts +0 -45
  378. package/src/lib/table/renderer/true-false-cell-renderer.ts +0 -28
  379. package/src/lib/table/selection/selection-model.if.ts +0 -20
  380. package/src/lib/table/selection/selection-model.ts +0 -109
  381. package/src/lib/table/selection/selection-service.ts +0 -120
  382. package/src/lib/table/service/abstract-store-state.service.ts +0 -105
  383. package/src/lib/table/service/convenience-dom.service.ts +0 -548
  384. package/src/lib/table/service/data/collapsed-expanded.data.ts +0 -11
  385. package/src/lib/table/service/data/html-style.type.ts +0 -1
  386. package/src/lib/table/service/dom-service.if.ts +0 -16
  387. package/src/lib/table/service/ge-filter.service.ts +0 -123
  388. package/src/lib/table/service/simple-dom-service.ts +0 -46
  389. package/src/lib/table/service/sorter.service.ts +0 -30
  390. package/src/lib/table/service/store-state-collapsed-expand.service.ts +0 -76
  391. package/src/lib/table/service/store-state-scroll-pos.service.ts +0 -40
  392. package/src/lib/table/service/store-state-sorting.service.ts +0 -41
  393. package/src/lib/table/service/tree-row.service.ts +0 -31
  394. package/src/lib/table/table-api.ts +0 -61
  395. package/src/lib/table/table-scope.ts +0 -433
  396. package/src/test-setup.ts +0 -1
  397. package/tsconfig.json +0 -22
  398. package/tsconfig.lib.json +0 -19
  399. package/tsconfig.lib.prod.json +0 -7
  400. package/tsconfig.spec.json +0 -20
  401. /package/{src/lib/table/data/common/checked-type.ts → lib/table/data/common/checked-type.d.ts} +0 -0
  402. /package/{src/lib/table/data/common/filter-function.ts → lib/table/data/common/filter-function.d.ts} +0 -0
  403. /package/{src/lib/table/data/common/get-t.ts → lib/table/data/common/get-t.d.ts} +0 -0
  404. /package/{src/lib/table/data/common/sort-state.type.ts → lib/table/data/common/sort-state.type.d.ts} +0 -0
  405. /package/{src/lib/table/data/common/tree-arrow.type.ts → lib/table/data/common/tree-arrow.type.d.ts} +0 -0
  406. /package/{src/lib/table/data/side-ident.type.ts → lib/table/data/side-ident.type.d.ts} +0 -0
  407. /package/{src/lib/table/renderer/renderer-cleanup-fn.type.ts → lib/table/renderer/renderer-cleanup-fn.type.d.ts} +0 -0
@@ -0,0 +1,405 @@
1
+ import { TreeOptions } from "../data/options/tree-options";
2
+ import { SortedOptions } from "../data/options/sorted-options";
3
+ export class ConvenienceDomService {
4
+ domService;
5
+ constructor(domService) {
6
+ this.domService = domService;
7
+ }
8
+ setStyle(el, style, value) {
9
+ this.domService.setStyle(el, style, value);
10
+ return el;
11
+ }
12
+ ;
13
+ applyStyle(ele, style) {
14
+ for (const key in style) {
15
+ this.domService.setStyle(ele, key, style[key]);
16
+ }
17
+ return ele;
18
+ }
19
+ applyDisplayNoneStyle(ele) {
20
+ this.domService.setStyle(ele, "display", "none");
21
+ return ele;
22
+ }
23
+ applyDisplayBlockStyle(ele) {
24
+ this.domService.setStyle(ele, "display", "block");
25
+ return ele;
26
+ }
27
+ applyStyleInPx(ele, geoData) {
28
+ Object.entries(geoData)
29
+ .forEach(([key, value]) => this.domService.setStyle(ele, key, value + "px"));
30
+ return ele;
31
+ }
32
+ applyStylePosistionRelative(ele) {
33
+ this.domService.setStyle(ele, "position", "relative");
34
+ this.domService.setStyle(ele, "overflow", "clip");
35
+ return ele;
36
+ }
37
+ applyStylePosistionAbsolute(ele) {
38
+ this.domService.setStyle(ele, "position", "absolute");
39
+ return ele;
40
+ }
41
+ applyStyleFullSize(ele) {
42
+ this.domService.setStyle(ele, "width", "100%");
43
+ this.domService.setStyle(ele, "height", "100%");
44
+ return ele;
45
+ }
46
+ applyStyleOverflowAuto(overflowX = "auto", overflowY = "auto", ele) {
47
+ this.domService.setStyle(ele, "overflow-x", overflowX);
48
+ this.domService.setStyle(ele, "overflow-y", overflowY);
49
+ return ele;
50
+ }
51
+ applyStyleNoPadding(ele) {
52
+ this.domService.setStyle(ele, "padding", "0");
53
+ this.domService.setStyle(ele, "margin", "0");
54
+ this.domService.setStyle(ele, "border", "0");
55
+ return ele;
56
+ }
57
+ appendRelativeChildDiv(parent) {
58
+ const child = this.applyStylePosistionRelative(this.applyStyleFullSize(this.applyStyleNoPadding(this.domService.createElement("div"))));
59
+ this.domService.appendChild(parent, child);
60
+ this.applyStylePosistionAbsolute(parent);
61
+ const cache = {};
62
+ return { parent, child, cache };
63
+ }
64
+ appendText(parent, text) {
65
+ const div = this.domService.createText(text);
66
+ this.domService.appendChild(parent, div);
67
+ return div;
68
+ }
69
+ addClass(clazz, div) {
70
+ if (clazz.includes(" ")) {
71
+ clazz.split(" ").forEach(c => this.domService.addClass(div, c));
72
+ }
73
+ else {
74
+ this.domService.addClass(div, clazz);
75
+ }
76
+ return div;
77
+ }
78
+ addClasses(classes, div) {
79
+ if (classes) {
80
+ for (const c of classes) {
81
+ this.domService.addClass(div, c);
82
+ }
83
+ }
84
+ return div;
85
+ }
86
+ setAttribute(div, key, value) {
87
+ if (key && value) {
88
+ this.domService.setAttribute(div, key, value);
89
+ }
90
+ return div;
91
+ }
92
+ createAreaDivWithClass(clazz, parent, areaIdent, sideIdent) {
93
+ const div = this.domService.createElement("div");
94
+ this.addClass(clazz, div);
95
+ this.domService.setAttribute(div, "data-area", areaIdent);
96
+ this.domService.setAttribute(div, "data-side", sideIdent);
97
+ this.domService.appendChild(parent, div);
98
+ return div;
99
+ }
100
+ createDivWithClass(clazz, parent) {
101
+ const div = this.domService.createElement("div");
102
+ this.addClass(clazz, div);
103
+ this.domService.appendChild(parent, div);
104
+ return div;
105
+ }
106
+ addRowDiv(divScope, geo, rowIndex = -1, areaIdent, sideIdent, text = "") {
107
+ const cacheKey = geo.index ?? -1;
108
+ const div = this.getDivOrCreateDiv(cacheKey, divScope);
109
+ this.domService.addClass(div, "ge-table-row-div");
110
+ this.domService.addClass(div, `ge-table-row-div-${geo.index}`);
111
+ if (areaIdent === "body" && sideIdent === "center") {
112
+ const oddEven = (geo?.index ?? 0) % 2 === 0 ? "even" : "odd";
113
+ this.domService.addClass(div, `ge-table-row-${oddEven}`);
114
+ }
115
+ this.domService.setStyle(div, "display", "clip");
116
+ this.domService.setStyle(div, "position", "absolute");
117
+ this.domService.setStyle(div, "left", `${geo.left}px`);
118
+ this.domService.setStyle(div, "top", `${geo.top}px`);
119
+ this.domService.setStyle(div, "width", `${geo.width}px`);
120
+ this.domService.setStyle(div, "height", `${geo.height}px`);
121
+ this.domService.setAttribute(div, "data-row-index", `${rowIndex}`);
122
+ this.domService.setAttribute(div, "data-area", `${areaIdent}`);
123
+ // debugging:
124
+ if (text) {
125
+ const textElement = this.domService.createText(text);
126
+ this.domService.appendChild(div, textElement);
127
+ }
128
+ // -------------
129
+ this.domService.appendChild(divScope.child, div);
130
+ return div;
131
+ }
132
+ addColumnDiv(parent, geo, rowIndex = -1, columnIndex = -1, areaIdent, sideIdent, text = "", treeArrow, tableOptions, checkedType = undefined, sortState) {
133
+ const treeOptions = tableOptions?.treeOptions;
134
+ const checkboxWithoutExtraColumn = tableOptions?.showCheckboxWihoutExtraColumn;
135
+ const div = this.domService.createElement("div");
136
+ this.domService.addClass(div, "ge-table-col-div");
137
+ this.domService.addClass(div, `ge-table-col-div-${geo.index}`);
138
+ this.domService.setAttribute(div, "data-col-index", `${geo.index}`);
139
+ this.domService.setAttribute(div, "data-row-index", `${rowIndex}`);
140
+ this.domService.setAttribute(div, "data-area", `${areaIdent}`);
141
+ const oddEven = (geo?.index ?? 0) % 2 === 0 ? "even" : "odd";
142
+ if (areaIdent === "body" && sideIdent === "center") {
143
+ this.domService.addClass(div, `ge-table-column-${oddEven}`);
144
+ }
145
+ this.domService.setStyle(div, "display", "clip");
146
+ this.domService.setStyle(div, "position", "absolute");
147
+ this.domService.setStyle(div, "left", `${geo.left}px`);
148
+ this.domService.setStyle(div, "top", `${geo.top}px`);
149
+ this.domService.setStyle(div, "width", `${geo.width}px`);
150
+ this.domService.setStyle(div, "height", `${geo.height}px`);
151
+ if (treeArrow && treeArrow !== "none") {
152
+ this.domService.addClass(div, "ge-table-col-tree");
153
+ this.addArrowDiv(div, treeArrow, treeOptions, rowIndex, columnIndex, areaIdent);
154
+ }
155
+ if (checkboxWithoutExtraColumn && columnIndex === 0 && checkedType) {
156
+ this.addCheckboxToDiv(div, checkedType, areaIdent, rowIndex);
157
+ }
158
+ if (text) {
159
+ const firstTreeColumn = (treeArrow !== "none" && columnIndex === 0);
160
+ this.addLabelDiv(div, text, firstTreeColumn, rowIndex, columnIndex, areaIdent);
161
+ }
162
+ if (sortState) {
163
+ this.addSortedIcon(div, sortState, tableOptions?.sortedOptions, columnIndex);
164
+ }
165
+ this.domService.appendChild(parent, div);
166
+ return div;
167
+ }
168
+ addCheckboxToDiv(parent, checkedType, areaIdent, rowIndex) {
169
+ const div = this.domService.createElement("div");
170
+ const checked = (checkedType === "full") ? "checked" : "";
171
+ div.innerHTML = `
172
+ <input
173
+ type="checkbox"
174
+ data-area="${areaIdent}"
175
+ data-row-index="${rowIndex}"
176
+ data-input-type="checkbox"
177
+ ${checked}
178
+ class="ge-table-row-checkbox"> `;
179
+ this.domService.setStyle(div, "display", "inline");
180
+ this.domService.setStyle(div, "width", "inherit");
181
+ this.domService.setAttribute(div, "data-row-index", `${rowIndex}`);
182
+ this.domService.appendChild(parent, div);
183
+ return div;
184
+ }
185
+ addLabelDiv(parent, text = "", firstTreeColumn = false, rowIndex = -1, columnIndex = -1, areaIdent = "body") {
186
+ const div = this.domService.createElement("div");
187
+ this.domService.addClass(div, "ge-table-label-div");
188
+ // this.domService.setStyle(div, 'display', 'inline');
189
+ this.domService.setStyle(div, "position", "relative");
190
+ this.domService.setStyle(div, "background", "transparent");
191
+ this.domService.setStyle(div, "width", "100%");
192
+ this.domService.setStyle(div, "height", "100%");
193
+ this.domService.setAttribute(div, "data-row-index", `${rowIndex}`);
194
+ this.domService.setAttribute(div, "data-col-index", `${columnIndex}`);
195
+ this.domService.setAttribute(div, "data-area", `${areaIdent}`);
196
+ if (text) {
197
+ if (firstTreeColumn) {
198
+ const textElement = this.domService.createText(text);
199
+ this.domService.appendChild(div, textElement);
200
+ }
201
+ else {
202
+ // normal cell:
203
+ const div2 = this.domService.createElement("div");
204
+ this.domService.appendChild(div, div2);
205
+ const textElement = this.domService.createText(text);
206
+ this.domService.addClass(div2, "ge-table-label");
207
+ this.domService.appendChild(div2, textElement);
208
+ this.domService.setAttribute(div2, "data-row-index", `${rowIndex}`);
209
+ this.domService.setAttribute(div2, "data-col-index", `${columnIndex}`);
210
+ this.domService.setAttribute(div2, "data-area", `${areaIdent}`);
211
+ }
212
+ }
213
+ this.domService.appendChild(parent, div);
214
+ return div;
215
+ }
216
+ addSortedIcon(parent, sorted = "", sortedOptions = new SortedOptions(), columnIndex = -1) {
217
+ const div = this.domService.createElement("div");
218
+ this.domService.addClass(div, "ge-table-sorted-icon-div");
219
+ this.domService.setStyle(div, "position", "absolute");
220
+ this.domService.setStyle(div, "top", "0");
221
+ this.domService.setStyle(div, "right", "0");
222
+ this.domService.setStyle(div, "width", "20px");
223
+ this.domService.setStyle(div, "background", "transparent");
224
+ this.domService.setStyle(div, "cursor", "pointer");
225
+ this.domService.setAttribute(div, "data-col-index", `${columnIndex}`);
226
+ this.domService.setAttribute(div, "data-area", "header");
227
+ let treeOptionsArrow;
228
+ if (sorted === "asc") {
229
+ treeOptionsArrow = sortedOptions.iconAsc;
230
+ }
231
+ else if (sorted === "desc") {
232
+ treeOptionsArrow = sortedOptions.iconDesc;
233
+ }
234
+ else {
235
+ treeOptionsArrow = sortedOptions.iconPlaceholder;
236
+ }
237
+ // Text:
238
+ const content = treeOptionsArrow.content;
239
+ const textElement = this.domService.createText(content);
240
+ this.domService.appendChild(div, textElement);
241
+ // Style:
242
+ if (treeOptionsArrow.style) {
243
+ this.applyStyleString(div, treeOptionsArrow.style);
244
+ }
245
+ // Classes:
246
+ for (const clazz of treeOptionsArrow.classes) {
247
+ this.domService.addClass(div, clazz);
248
+ }
249
+ this.domService.appendChild(parent, div);
250
+ return div;
251
+ }
252
+ addArrowDiv(parent, arrow = "none", treeOptions = new TreeOptions(), rowIndex = -1, columnIndex = -1, areaIdent = "body") {
253
+ const div = this.domService.createElement("div");
254
+ this.domService.addClass(div, "ge-table-tree-arrow-div");
255
+ this.domService.setStyle(div, "display", "inline-block");
256
+ this.domService.setStyle(div, "position", "");
257
+ this.domService.setStyle(div, "width", "20px");
258
+ this.domService.setStyle(div, "background", "transparent");
259
+ this.domService.setStyle(div, "cursor", "pointer");
260
+ this.domService.setAttribute(div, "data-row-index", `${rowIndex}`);
261
+ this.domService.setAttribute(div, "data-col-index", `${columnIndex}`);
262
+ this.domService.setAttribute(div, "data-area", `${areaIdent}`);
263
+ let treeOptionsArrow;
264
+ if (arrow === "expanded") {
265
+ treeOptionsArrow = treeOptions.arrowExpanded;
266
+ }
267
+ else if (arrow === "collapsed") {
268
+ treeOptionsArrow = treeOptions.arrowCollapsed;
269
+ }
270
+ else {
271
+ treeOptionsArrow = treeOptions.arrowPlaceholder;
272
+ }
273
+ // Text:
274
+ const content = treeOptionsArrow.content;
275
+ const textElement = this.domService.createText(content);
276
+ this.domService.appendChild(div, textElement);
277
+ // Style:
278
+ if (treeOptionsArrow.style) {
279
+ this.applyStyleString(div, treeOptionsArrow.style);
280
+ }
281
+ // Classes:
282
+ for (const clazz of treeOptionsArrow.classes) {
283
+ this.domService.addClass(div, clazz);
284
+ }
285
+ this.domService.appendChild(parent, div);
286
+ return div;
287
+ }
288
+ addColumnBorderDivs(tableOptions, parent, geo, areaIdent, sideIdent) {
289
+ if (tableOptions.verticalBorderVisible) {
290
+ const clazz = `ge-table-${areaIdent}-${sideIdent}-vertical-border`;
291
+ this.addVerticalBorder(geo, parent, clazz);
292
+ }
293
+ if (tableOptions.horizontalBorderVisible) {
294
+ const clazz = `ge-table-${areaIdent}-${sideIdent}-horizontal-border`;
295
+ this.addHorizontalBorder(geo, parent, clazz);
296
+ }
297
+ return parent;
298
+ }
299
+ addHorizontalBorder(geo, parent, clazz = "ge-table-body-center-horizontal-border") {
300
+ // Border south:
301
+ const div = this.domService.createElement("div");
302
+ this.domService.addClass(div, clazz);
303
+ this.domService.setStyle(div, "display", "clip");
304
+ this.domService.setStyle(div, "position", "absolute");
305
+ this.domService.setStyle(div, "left", `${geo.left}px`);
306
+ this.domService.setStyle(div, "top", `${(geo.top)}px`);
307
+ this.domService.setStyle(div, "width", `${geo.width}px`);
308
+ this.domService.setStyle(div, "height", `1px`);
309
+ this.domService.appendChild(parent, div);
310
+ return div;
311
+ }
312
+ addFocusBorderDivs(parent, geo, style) {
313
+ // Border west:
314
+ let div = this.domService.createElement("div");
315
+ this.domService.addClass(div, "ge-table-focus-border");
316
+ this.domService.setStyle(div, "display", "clip");
317
+ this.domService.setStyle(div, "position", "absolute");
318
+ this.domService.setStyle(div, "left", `${geo.left}px`);
319
+ this.domService.setStyle(div, "top", `${geo.top}px`);
320
+ this.domService.setStyle(div, "width", `1px`);
321
+ this.domService.setStyle(div, "height", `${geo.height}px`);
322
+ this.applyStyle(div, style);
323
+ this.domService.appendChild(parent, div);
324
+ // Border east:
325
+ div = this.domService.createElement("div");
326
+ this.domService.addClass(div, "ge-table-focus-border");
327
+ this.domService.setStyle(div, "display", "clip");
328
+ this.domService.setStyle(div, "position", "absolute");
329
+ this.domService.setStyle(div, "left", `${geo.left + geo.width - 1}px`);
330
+ this.domService.setStyle(div, "top", `${geo.top}px`);
331
+ this.domService.setStyle(div, "width", `1px`);
332
+ this.domService.setStyle(div, "height", `${geo.height}px`);
333
+ this.applyStyle(div, style);
334
+ this.domService.appendChild(parent, div);
335
+ // Border north:
336
+ div = this.domService.createElement("div");
337
+ this.domService.addClass(div, "ge-table-focus-border");
338
+ this.domService.setStyle(div, "display", "clip");
339
+ this.domService.setStyle(div, "position", "absolute");
340
+ this.domService.setStyle(div, "left", `${geo.left}px`);
341
+ this.domService.setStyle(div, "top", `${(geo.top)}px`);
342
+ this.domService.setStyle(div, "width", `${geo.width}px`);
343
+ this.domService.setStyle(div, "height", `1px`);
344
+ this.applyStyle(div, style);
345
+ this.domService.appendChild(parent, div);
346
+ // Border south:
347
+ div = this.domService.createElement("div");
348
+ this.domService.addClass(div, "ge-table-focus-border");
349
+ this.domService.setStyle(div, "display", "clip");
350
+ this.domService.setStyle(div, "position", "absolute");
351
+ this.domService.setStyle(div, "left", `${geo.left}px`);
352
+ this.domService.setStyle(div, "top", `${(geo.top + geo.height - 1)}px`);
353
+ this.domService.setStyle(div, "width", `${geo.width}px`);
354
+ this.domService.setStyle(div, "height", `1px`);
355
+ this.applyStyle(div, style);
356
+ this.domService.appendChild(parent, div);
357
+ return parent;
358
+ }
359
+ addVerticalBorder(geo, parent, clazz = "ge-table-body-center-vertical-border") {
360
+ // Border east:
361
+ const div = this.domService.createElement("div");
362
+ this.domService.addClass(div, clazz);
363
+ this.domService.setStyle(div, "display", "clip");
364
+ this.domService.setStyle(div, "position", "absolute");
365
+ this.domService.setStyle(div, "left", `${geo.left}px`);
366
+ this.domService.setStyle(div, "top", `${geo.top}px`);
367
+ this.domService.setStyle(div, "width", `1px`);
368
+ this.domService.setStyle(div, "height", `${geo.height}px`);
369
+ this.domService.appendChild(parent, div);
370
+ return div;
371
+ }
372
+ addDiv(parent, geo, clazz = "") {
373
+ const div = this.domService.createElement("div");
374
+ if (clazz) {
375
+ this.domService.addClass(div, clazz);
376
+ }
377
+ this.domService.setStyle(div, "display", "clip");
378
+ this.domService.setStyle(div, "position", "absolute");
379
+ this.domService.setStyle(div, "left", `${geo.left}px`);
380
+ this.domService.setStyle(div, "top", `${geo.top}px`);
381
+ this.domService.setStyle(div, "width", `${geo.width}px`);
382
+ this.domService.setStyle(div, "height", `${geo.height}px`);
383
+ this.domService.appendChild(parent, div);
384
+ return div;
385
+ }
386
+ applyStyleString(div, style) {
387
+ // transform: rotate(-90deg) translate(-100%, 0); transform-origin: left top; font-size: 1.5em;
388
+ const cmds = style.split(";").map(s => s.trim()).filter(s => s);
389
+ for (const cmd of cmds) {
390
+ const [key, value] = cmd.split(":");
391
+ this.domService.setStyle(div, key.trim(), value.trim());
392
+ }
393
+ }
394
+ getDivOrCreateDiv(cacheKey, divScope) {
395
+ let div = divScope.cache[cacheKey];
396
+ if (div) {
397
+ div.innerText = ""; // erst mal leer machen, später col-cache nutzen
398
+ return div;
399
+ }
400
+ div = this.domService.createElement("div");
401
+ divScope.cache[cacheKey] = div;
402
+ return div;
403
+ }
404
+ }
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVuaWVuY2UtZG9tLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9jb252ZW5pZW5jZS1kb20uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFPM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSy9ELE1BQU0sT0FBTyxxQkFBcUI7SUFHZDtJQURsQixZQUNrQixVQUF3QjtRQUF4QixlQUFVLEdBQVYsVUFBVSxDQUFjO0lBRTFDLENBQUM7SUFHRCxRQUFRLENBQUMsRUFBTyxFQUFFLEtBQWEsRUFBRSxLQUFVO1FBQ3pDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQUEsQ0FBQztJQUdGLFVBQVUsQ0FBQyxHQUFtQixFQUFFLEtBQWdCO1FBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDaEQ7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFtQjtRQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELHNCQUFzQixDQUFDLEdBQW1CO1FBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FB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QUMsR0FBRyxHQUFHLENBQUM7UUFDL0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb21TZXJ2aWNlSWYgfSBmcm9tIFwiLi9kb20tc2VydmljZS5pZlwiO1xuaW1wb3J0IHsgRGl2U2NvcGUgfSBmcm9tIFwiLi8uLi9kYXRhL2Rpdi1zY29wZS50eXBlXCI7XG5pbXBvcnQgeyBHZW9EYXRhIH0gZnJvbSBcIi4vLi4vZGF0YS9nZW8tZGF0YVwiO1xuaW1wb3J0IHsgVHJlZUFycm93VHlwZSB9IGZyb20gXCIuLi9kYXRhL2NvbW1vbi90cmVlLWFycm93LnR5cGVcIjtcbmltcG9ydCB7IFRyZWVPcHRpb25zSWYgfSBmcm9tIFwiLi4vZGF0YS9vcHRpb25zL3RyZWUtb3B0aW9ucy5pZlwiO1xuaW1wb3J0IHsgVHJlZU9wdGlvbnMgfSBmcm9tIFwiLi4vZGF0YS9vcHRpb25zL3RyZWUtb3B0aW9uc1wiO1xuaW1wb3J0IHsgQXJlYUlkZW50IH0gZnJvbSBcIi4uL2RhdGEvdGFibGVtb2RlbC9hcmVhLWlkZW50LnR5cGVcIjtcbmltcG9ydCB7IEljb25JZiB9IGZyb20gXCIuLi9kYXRhL29wdGlvbnMvaWNvbi5pZlwiO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zSWYgfSBmcm9tIFwiLi4vZGF0YS9vcHRpb25zL3RhYmxlLW9wdGlvbnMuaWZcIjtcbmltcG9ydCB7IENoZWNrZWRUeXBlIH0gZnJvbSBcIi4uL2RhdGEvY29tbW9uL2NoZWNrZWQtdHlwZVwiO1xuaW1wb3J0IHsgU2lkZUlkZW50IH0gZnJvbSBcIi4uL2RhdGEvc2lkZS1pZGVudC50eXBlXCI7XG5pbXBvcnQgeyBTb3J0U3RhdGUgfSBmcm9tIFwiLi4vZGF0YS9jb21tb24vc29ydC1zdGF0ZS50eXBlXCI7XG5pbXBvcnQgeyBTb3J0ZWRPcHRpb25zIH0gZnJvbSBcIi4uL2RhdGEvb3B0aW9ucy9zb3J0ZWQtb3B0aW9uc1wiO1xuaW1wb3J0IHsgU29ydGVkT3B0aW9uc0lmIH0gZnJvbSBcIi4uL2RhdGEvb3B0aW9ucy9zb3J0ZWQtb3B0aW9ucy5pZlwiO1xuaW1wb3J0IHsgSHRtbFN0eWxlIH0gZnJvbSBcIi4vZGF0YS9odG1sLXN0eWxlLnR5cGVcIjtcblxuXG5leHBvcnQgY2xhc3MgQ29udmVuaWVuY2VEb21TZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9tU2VydmljZTogRG9tU2VydmljZUlmXG4gICkge1xuICB9XG5cblxuICBzZXRTdHlsZShlbDogYW55LCBzdHlsZTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWwsIHN0eWxlLCB2YWx1ZSk7XG4gICAgcmV0dXJuIGVsO1xuICB9O1xuXG5cbiAgYXBwbHlTdHlsZShlbGU6IEhUTUxEaXZFbGVtZW50LCBzdHlsZTogSHRtbFN0eWxlKTogSFRNTERpdkVsZW1lbnQge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHN0eWxlKSB7XG4gICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCBrZXksIHN0eWxlW2tleV0pO1xuICAgIH1cbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgYXBwbHlEaXNwbGF5Tm9uZVN0eWxlKGVsZTogSFRNTERpdkVsZW1lbnQpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsZSwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgYXBwbHlEaXNwbGF5QmxvY2tTdHlsZShlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsIFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBhcHBseVN0eWxlSW5QeChlbGU6IEhUTUxEaXZFbGVtZW50LCBnZW9EYXRhOiBHZW9EYXRhKTogSFRNTERpdkVsZW1lbnQge1xuICAgIE9iamVjdC5lbnRyaWVzKGdlb0RhdGEpXG4gICAgICAuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCBrZXksIHZhbHVlICsgXCJweFwiKSk7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIGFwcGx5U3R5bGVQb3Npc3Rpb25SZWxhdGl2ZShlbGU6IEhUTUxEaXZFbGVtZW50KTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsIFwicG9zaXRpb25cIiwgXCJyZWxhdGl2ZVwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCBcIm92ZXJmbG93XCIsIFwiY2xpcFwiKTtcbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgYXBwbHlTdHlsZVBvc2lzdGlvbkFic29sdXRlKGVsZTogSFRNTERpdkVsZW1lbnQpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsZSwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBhcHBseVN0eWxlRnVsbFNpemUoZWxlOiBIVE1MRGl2RWxlbWVudCk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCBcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCBcImhlaWdodFwiLCBcIjEwMCVcIik7XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIGFwcGx5U3R5bGVPdmVyZmxvd0F1dG8oXG4gICAgb3ZlcmZsb3dYOiBcInNjcm9sbFwiIHwgXCJhdXRvXCIgPSBcImF1dG9cIixcbiAgICBvdmVyZmxvd1k6IFwic2Nyb2xsXCIgfCBcImF1dG9cIiA9IFwiYXV0b1wiLFxuICAgIGVsZTogSFRNTERpdkVsZW1lbnRcbiAgKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsIFwib3ZlcmZsb3cteFwiLCBvdmVyZmxvd1gpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShlbGUsIFwib3ZlcmZsb3cteVwiLCBvdmVyZmxvd1kpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBhcHBseVN0eWxlTm9QYWRkaW5nKGVsZTogSFRNTERpdkVsZW1lbnQpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsZSwgXCJwYWRkaW5nXCIsIFwiMFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZWxlLCBcIm1hcmdpblwiLCBcIjBcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGVsZSwgXCJib3JkZXJcIiwgXCIwXCIpO1xuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBhcHBlbmRSZWxhdGl2ZUNoaWxkRGl2KHBhcmVudDogSFRNTERpdkVsZW1lbnQpOiBEaXZTY29wZSB7XG4gICAgY29uc3QgY2hpbGQgPVxuICAgICAgdGhpcy5hcHBseVN0eWxlUG9zaXN0aW9uUmVsYXRpdmUoXG4gICAgICAgIHRoaXMuYXBwbHlTdHlsZUZ1bGxTaXplKFxuICAgICAgICAgIHRoaXMuYXBwbHlTdHlsZU5vUGFkZGluZyhcbiAgICAgICAgICAgIHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBjaGlsZCk7XG4gICAgdGhpcy5hcHBseVN0eWxlUG9zaXN0aW9uQWJzb2x1dGUocGFyZW50KTtcbiAgICBjb25zdCBjYWNoZSA9IHt9O1xuICAgIHJldHVybiB7IHBhcmVudCwgY2hpbGQsIGNhY2hlIH07XG4gIH1cblxuICBhcHBlbmRUZXh0KHBhcmVudDogSFRNTERpdkVsZW1lbnQsIHRleHQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dCh0ZXh0KTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGFkZENsYXNzKGNsYXp6OiBzdHJpbmcsIGRpdjogSFRNTERpdkVsZW1lbnQpIHtcbiAgICBpZiAoY2xhenouaW5jbHVkZXMoXCIgXCIpKSB7XG4gICAgICBjbGF6ei5zcGxpdChcIiBcIikuZm9yRWFjaChjID0+IHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIGMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgY2xhenopO1xuICAgIH1cbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYWRkQ2xhc3NlcyhjbGFzc2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgZGl2OiBIVE1MRGl2RWxlbWVudCkge1xuICAgIGlmIChjbGFzc2VzKSB7XG4gICAgICBmb3IgKGNvbnN0IGMgb2YgY2xhc3Nlcykge1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBjKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIHNldEF0dHJpYnV0ZShkaXY6IEhUTUxEaXZFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChrZXkgJiYgdmFsdWUpIHtcbiAgICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG5cbiAgY3JlYXRlQXJlYURpdldpdGhDbGFzcyhjbGF6ejogc3RyaW5nLCBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LCBhcmVhSWRlbnQ6IEFyZWFJZGVudCwgc2lkZUlkZW50OiBTaWRlSWRlbnQpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuYWRkQ2xhc3MoY2xhenosIGRpdik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsIFwiZGF0YS1hcmVhXCIsIGFyZWFJZGVudCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsIFwiZGF0YS1zaWRlXCIsIHNpZGVJZGVudCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgY3JlYXRlRGl2V2l0aENsYXNzKGNsYXp6OiBzdHJpbmcsIHBhcmVudDogSFRNTERpdkVsZW1lbnQpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuYWRkQ2xhc3MoY2xhenosIGRpdik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cblxuICBhZGRSb3dEaXYoXG4gICAgZGl2U2NvcGU6IERpdlNjb3BlLFxuICAgIGdlbzogR2VvRGF0YSxcbiAgICByb3dJbmRleDogbnVtYmVyID0gLTEsXG4gICAgYXJlYUlkZW50OiBBcmVhSWRlbnQsXG4gICAgc2lkZUlkZW50OiBTaWRlSWRlbnQsXG4gICAgdGV4dDogc3RyaW5nID0gXCJcIlxuICApOiBIVE1MRGl2RWxlbWVudCB7XG5cbiAgICBjb25zdCBjYWNoZUtleSA9IGdlby5pbmRleCA/PyAtMTtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmdldERpdk9yQ3JlYXRlRGl2KGNhY2hlS2V5LCBkaXZTY29wZSk7XG5cbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBcImdlLXRhYmxlLXJvdy1kaXZcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYGdlLXRhYmxlLXJvdy1kaXYtJHtnZW8uaW5kZXh9YCk7XG4gICAgaWYgKGFyZWFJZGVudCA9PT0gXCJib2R5XCIgJiYgc2lkZUlkZW50ID09PSBcImNlbnRlclwiKSB7XG4gICAgICBjb25zdCBvZGRFdmVuID0gKGdlbz8uaW5kZXggPz8gMCkgJSAyID09PSAwID8gXCJldmVuXCIgOiBcIm9kZFwiO1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYGdlLXRhYmxlLXJvdy0ke29kZEV2ZW59YCk7XG4gICAgfVxuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiZGlzcGxheVwiLCBcImNsaXBcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuXG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJsZWZ0XCIsIGAke2dlby5sZWZ0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ0b3BcIiwgYCR7Z2VvLnRvcH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwid2lkdGhcIiwgYCR7Z2VvLndpZHRofXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJoZWlnaHRcIiwgYCR7Z2VvLmhlaWdodH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtcm93LWluZGV4XCIsIGAke3Jvd0luZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtYXJlYVwiLCBgJHthcmVhSWRlbnR9YCk7XG5cbiAgICAvLyBkZWJ1Z2dpbmc6XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZVRleHQodGV4dCk7XG4gICAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCB0ZXh0RWxlbWVudCk7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS1cblxuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChkaXZTY29wZS5jaGlsZCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cblxuICBhZGRDb2x1bW5EaXYoXG4gICAgcGFyZW50OiBIVE1MRGl2RWxlbWVudCxcbiAgICBnZW86IEdlb0RhdGEsXG4gICAgcm93SW5kZXg6IG51bWJlciA9IC0xLFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIgPSAtMSxcbiAgICBhcmVhSWRlbnQ6IEFyZWFJZGVudCxcbiAgICBzaWRlSWRlbnQ6IFNpZGVJZGVudCxcbiAgICB0ZXh0OiBzdHJpbmcgPSBcIlwiLFxuICAgIHRyZWVBcnJvdz86IFRyZWVBcnJvd1R5cGUsXG4gICAgdGFibGVPcHRpb25zPzogVGFibGVPcHRpb25zSWYsXG4gICAgY2hlY2tlZFR5cGU6IENoZWNrZWRUeXBlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIHNvcnRTdGF0ZT86IFNvcnRTdGF0ZVxuICApOiBIVE1MRGl2RWxlbWVudCB7XG5cbiAgICBjb25zdCB0cmVlT3B0aW9ucyA9IHRhYmxlT3B0aW9ucz8udHJlZU9wdGlvbnM7XG4gICAgY29uc3QgY2hlY2tib3hXaXRob3V0RXh0cmFDb2x1bW4gPSB0YWJsZU9wdGlvbnM/LnNob3dDaGVja2JveFdpaG91dEV4dHJhQ29sdW1uO1xuXG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIFwiZ2UtdGFibGUtY29sLWRpdlwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBgZ2UtdGFibGUtY29sLWRpdi0ke2dlby5pbmRleH1gKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdiwgXCJkYXRhLWNvbC1pbmRleFwiLCBgJHtnZW8uaW5kZXh9YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsIFwiZGF0YS1yb3ctaW5kZXhcIiwgYCR7cm93SW5kZXh9YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsIFwiZGF0YS1hcmVhXCIsIGAke2FyZWFJZGVudH1gKTtcbiAgICBjb25zdCBvZGRFdmVuID0gKGdlbz8uaW5kZXggPz8gMCkgJSAyID09PSAwID8gXCJldmVuXCIgOiBcIm9kZFwiO1xuICAgIGlmIChhcmVhSWRlbnQgPT09IFwiYm9keVwiICYmIHNpZGVJZGVudCA9PT0gXCJjZW50ZXJcIikge1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgYGdlLXRhYmxlLWNvbHVtbi0ke29kZEV2ZW59YCk7XG4gICAgfVxuXG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiY2xpcFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJsZWZ0XCIsIGAke2dlby5sZWZ0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ0b3BcIiwgYCR7Z2VvLnRvcH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwid2lkdGhcIiwgYCR7Z2VvLndpZHRofXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJoZWlnaHRcIiwgYCR7Z2VvLmhlaWdodH1weGApO1xuXG4gICAgaWYgKHRyZWVBcnJvdyAmJiB0cmVlQXJyb3cgIT09IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBcImdlLXRhYmxlLWNvbC10cmVlXCIpO1xuICAgICAgdGhpcy5hZGRBcnJvd0RpdihkaXYsIHRyZWVBcnJvdywgdHJlZU9wdGlvbnMsIHJvd0luZGV4LCBjb2x1bW5JbmRleCwgYXJlYUlkZW50KTtcbiAgICB9XG4gICAgaWYgKGNoZWNrYm94V2l0aG91dEV4dHJhQ29sdW1uICYmIGNvbHVtbkluZGV4ID09PSAwICYmIGNoZWNrZWRUeXBlKSB7XG4gICAgICB0aGlzLmFkZENoZWNrYm94VG9EaXYoZGl2LCBjaGVja2VkVHlwZSwgYXJlYUlkZW50LCByb3dJbmRleCk7XG4gICAgfVxuICAgIGlmICh0ZXh0KSB7XG4gICAgICBjb25zdCBmaXJzdFRyZWVDb2x1bW4gPSAodHJlZUFycm93ICE9PSBcIm5vbmVcIiAmJiBjb2x1bW5JbmRleCA9PT0gMCk7XG4gICAgICB0aGlzLmFkZExhYmVsRGl2KGRpdiwgdGV4dCwgZmlyc3RUcmVlQ29sdW1uLCByb3dJbmRleCwgY29sdW1uSW5kZXgsIGFyZWFJZGVudCk7XG4gICAgfVxuICAgIGlmIChzb3J0U3RhdGUpIHtcbiAgICAgIHRoaXMuYWRkU29ydGVkSWNvbihkaXYsIHNvcnRTdGF0ZSwgdGFibGVPcHRpb25zPy5zb3J0ZWRPcHRpb25zLCBjb2x1bW5JbmRleCk7XG4gICAgfVxuXG5cbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGFkZENoZWNrYm94VG9EaXYoXG4gICAgcGFyZW50OiBIVE1MRGl2RWxlbWVudCxcbiAgICBjaGVja2VkVHlwZTogQ2hlY2tlZFR5cGUsXG4gICAgYXJlYUlkZW50OiBBcmVhSWRlbnQsXG4gICAgcm93SW5kZXg6IG51bWJlcik6IEhUTUxEaXZFbGVtZW50IHtcblxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICBjb25zdCBjaGVja2VkID0gKGNoZWNrZWRUeXBlID09PSBcImZ1bGxcIikgPyBcImNoZWNrZWRcIiA6IFwiXCI7XG4gICAgZGl2LmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZGF0YS1hcmVhPVwiJHthcmVhSWRlbnR9XCJcbiAgICAgICAgICAgICAgICBkYXRhLXJvdy1pbmRleD1cIiR7cm93SW5kZXh9XCJcbiAgICAgICAgICAgICAgICBkYXRhLWlucHV0LXR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgJHtjaGVja2VkfVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ2UtdGFibGUtcm93LWNoZWNrYm94XCI+IGA7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiaW5saW5lXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwid2lkdGhcIiwgXCJpbmhlcml0XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtcm93LWluZGV4XCIsIGAke3Jvd0luZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG5cbiAgYWRkTGFiZWxEaXYoXG4gICAgcGFyZW50OiBIVE1MRGl2RWxlbWVudCxcbiAgICB0ZXh0OiBzdHJpbmcgPSBcIlwiLFxuICAgIGZpcnN0VHJlZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHJvd0luZGV4OiBudW1iZXIgPSAtMSxcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyID0gLTEsXG4gICAgYXJlYUlkZW50OiBBcmVhSWRlbnQgPSBcImJvZHlcIik6IEhUTUxEaXZFbGVtZW50IHtcblxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBcImdlLXRhYmxlLWxhYmVsLWRpdlwiKTtcbiAgICAvLyB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCAnZGlzcGxheScsICdpbmxpbmUnKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwicmVsYXRpdmVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJiYWNrZ3JvdW5kXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJoZWlnaHRcIiwgXCIxMDAlXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtcm93LWluZGV4XCIsIGAke3Jvd0luZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtY29sLWluZGV4XCIsIGAke2NvbHVtbkluZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtYXJlYVwiLCBgJHthcmVhSWRlbnR9YCk7XG5cbiAgICBpZiAodGV4dCkge1xuICAgICAgaWYgKGZpcnN0VHJlZUNvbHVtbikge1xuICAgICAgICBjb25zdCB0ZXh0RWxlbWVudCA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVUZXh0KHRleHQpO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCB0ZXh0RWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub3JtYWwgY2VsbDpcbiAgICAgICAgY29uc3QgZGl2MiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICAgICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKGRpdiwgZGl2Mik7XG4gICAgICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZVRleHQodGV4dCk7XG4gICAgICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYyLCBcImdlLXRhYmxlLWxhYmVsXCIpO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2MiwgdGV4dEVsZW1lbnQpO1xuICAgICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0QXR0cmlidXRlKGRpdjIsIFwiZGF0YS1yb3ctaW5kZXhcIiwgYCR7cm93SW5kZXh9YCk7XG4gICAgICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2MiwgXCJkYXRhLWNvbC1pbmRleFwiLCBgJHtjb2x1bW5JbmRleH1gKTtcbiAgICAgICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYyLCBcImRhdGEtYXJlYVwiLCBgJHthcmVhSWRlbnR9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYWRkU29ydGVkSWNvbihcbiAgICBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LFxuICAgIHNvcnRlZDogU29ydFN0YXRlID0gXCJcIixcbiAgICBzb3J0ZWRPcHRpb25zOiBTb3J0ZWRPcHRpb25zSWYgPSBuZXcgU29ydGVkT3B0aW9ucygpLFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIgPSAtMVxuICApOiBIVE1MRGl2RWxlbWVudCB7XG5cbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oXCJkaXZcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgXCJnZS10YWJsZS1zb3J0ZWQtaWNvbi1kaXZcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwidG9wXCIsIFwiMFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInJpZ2h0XCIsIFwiMFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcIndpZHRoXCIsIFwiMjBweFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImJhY2tncm91bmRcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImN1cnNvclwiLCBcInBvaW50ZXJcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsIFwiZGF0YS1jb2wtaW5kZXhcIiwgYCR7Y29sdW1uSW5kZXh9YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldEF0dHJpYnV0ZShkaXYsIFwiZGF0YS1hcmVhXCIsIFwiaGVhZGVyXCIpO1xuXG4gICAgbGV0IHRyZWVPcHRpb25zQXJyb3c6IEljb25JZjtcbiAgICBpZiAoc29ydGVkID09PSBcImFzY1wiKSB7XG4gICAgICB0cmVlT3B0aW9uc0Fycm93ID0gc29ydGVkT3B0aW9ucy5pY29uQXNjO1xuICAgIH0gZWxzZSBpZiAoc29ydGVkID09PSBcImRlc2NcIikge1xuICAgICAgdHJlZU9wdGlvbnNBcnJvdyA9IHNvcnRlZE9wdGlvbnMuaWNvbkRlc2M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVPcHRpb25zQXJyb3cgPSBzb3J0ZWRPcHRpb25zLmljb25QbGFjZWhvbGRlcjtcbiAgICB9XG4gICAgLy8gVGV4dDpcbiAgICBjb25zdCBjb250ZW50ID0gdHJlZU9wdGlvbnNBcnJvdy5jb250ZW50O1xuICAgIGNvbnN0IHRleHRFbGVtZW50ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZVRleHQoY29udGVudCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKGRpdiwgdGV4dEVsZW1lbnQpO1xuXG4gICAgLy8gU3R5bGU6XG4gICAgaWYgKHRyZWVPcHRpb25zQXJyb3cuc3R5bGUpIHtcbiAgICAgIHRoaXMuYXBwbHlTdHlsZVN0cmluZyhkaXYsIHRyZWVPcHRpb25zQXJyb3cuc3R5bGUpO1xuICAgIH1cblxuICAgIC8vIENsYXNzZXM6XG4gICAgZm9yIChjb25zdCBjbGF6eiBvZiB0cmVlT3B0aW9uc0Fycm93LmNsYXNzZXMpIHtcbiAgICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIGNsYXp6KTtcbiAgICB9XG5cbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuXG4gIGFkZEFycm93RGl2KFxuICAgIHBhcmVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgYXJyb3c6IFRyZWVBcnJvd1R5cGUgPSBcIm5vbmVcIixcbiAgICB0cmVlT3B0aW9uczogVHJlZU9wdGlvbnNJZiA9IG5ldyBUcmVlT3B0aW9ucygpLFxuICAgIHJvd0luZGV4OiBudW1iZXIgPSAtMSxcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyID0gLTEsXG4gICAgYXJlYUlkZW50OiBBcmVhSWRlbnQgPSBcImJvZHlcIlxuICApOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgY29uc3QgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIFwiZ2UtdGFibGUtdHJlZS1hcnJvdy1kaXZcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiaW5saW5lLWJsb2NrXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwicG9zaXRpb25cIiwgXCJcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ3aWR0aFwiLCBcIjIwcHhcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJiYWNrZ3JvdW5kXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtcm93LWluZGV4XCIsIGAke3Jvd0luZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtY29sLWluZGV4XCIsIGAke2NvbHVtbkluZGV4fWApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRBdHRyaWJ1dGUoZGl2LCBcImRhdGEtYXJlYVwiLCBgJHthcmVhSWRlbnR9YCk7XG5cbiAgICBsZXQgdHJlZU9wdGlvbnNBcnJvdzogSWNvbklmO1xuICAgIGlmIChhcnJvdyA9PT0gXCJleHBhbmRlZFwiKSB7XG4gICAgICB0cmVlT3B0aW9uc0Fycm93ID0gdHJlZU9wdGlvbnMuYXJyb3dFeHBhbmRlZDtcbiAgICB9IGVsc2UgaWYgKGFycm93ID09PSBcImNvbGxhcHNlZFwiKSB7XG4gICAgICB0cmVlT3B0aW9uc0Fycm93ID0gdHJlZU9wdGlvbnMuYXJyb3dDb2xsYXBzZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyZWVPcHRpb25zQXJyb3cgPSB0cmVlT3B0aW9ucy5hcnJvd1BsYWNlaG9sZGVyO1xuICAgIH1cbiAgICAvLyBUZXh0OlxuICAgIGNvbnN0IGNvbnRlbnQgPSB0cmVlT3B0aW9uc0Fycm93LmNvbnRlbnQ7XG4gICAgY29uc3QgdGV4dEVsZW1lbnQgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlVGV4dChjb250ZW50KTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQoZGl2LCB0ZXh0RWxlbWVudCk7XG5cbiAgICAvLyBTdHlsZTpcbiAgICBpZiAodHJlZU9wdGlvbnNBcnJvdy5zdHlsZSkge1xuICAgICAgdGhpcy5hcHBseVN0eWxlU3RyaW5nKGRpdiwgdHJlZU9wdGlvbnNBcnJvdy5zdHlsZSk7XG4gICAgfVxuXG4gICAgLy8gQ2xhc3NlczpcbiAgICBmb3IgKGNvbnN0IGNsYXp6IG9mIHRyZWVPcHRpb25zQXJyb3cuY2xhc3Nlcykge1xuICAgICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgY2xhenopO1xuICAgIH1cblxuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxuXG4gIGFkZENvbHVtbkJvcmRlckRpdnMoXG4gICAgdGFibGVPcHRpb25zOiBUYWJsZU9wdGlvbnNJZixcbiAgICBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LFxuICAgIGdlbzogR2VvRGF0YSxcbiAgICBhcmVhSWRlbnQ6IEFyZWFJZGVudCxcbiAgICBzaWRlSWRlbnQ6IFNpZGVJZGVudFxuICApOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgaWYgKHRhYmxlT3B0aW9ucy52ZXJ0aWNhbEJvcmRlclZpc2libGUpIHtcbiAgICAgIGNvbnN0IGNsYXp6ID0gYGdlLXRhYmxlLSR7YXJlYUlkZW50fS0ke3NpZGVJZGVudH0tdmVydGljYWwtYm9yZGVyYDtcbiAgICAgIHRoaXMuYWRkVmVydGljYWxCb3JkZXIoZ2VvLCBwYXJlbnQsIGNsYXp6KTtcbiAgICB9XG4gICAgaWYgKHRhYmxlT3B0aW9ucy5ob3Jpem9udGFsQm9yZGVyVmlzaWJsZSkge1xuICAgICAgY29uc3QgY2xhenogPSBgZ2UtdGFibGUtJHthcmVhSWRlbnR9LSR7c2lkZUlkZW50fS1ob3Jpem9udGFsLWJvcmRlcmA7XG4gICAgICB0aGlzLmFkZEhvcml6b250YWxCb3JkZXIoZ2VvLCBwYXJlbnQsIGNsYXp6KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cblxuICBhZGRIb3Jpem9udGFsQm9yZGVyKFxuICAgIGdlbzogR2VvRGF0YSxcbiAgICBwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LFxuICAgIGNsYXp6OiBzdHJpbmcgPSBcImdlLXRhYmxlLWJvZHktY2VudGVyLWhvcml6b250YWwtYm9yZGVyXCIpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgLy8gQm9yZGVyIHNvdXRoOlxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBjbGF6eik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiY2xpcFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJsZWZ0XCIsIGAke2dlby5sZWZ0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ0b3BcIiwgYCR7KGdlby50b3ApfXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ3aWR0aFwiLCBgJHtnZW8ud2lkdGh9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImhlaWdodFwiLCBgMXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFwcGVuZENoaWxkKHBhcmVudCwgZGl2KTtcbiAgICByZXR1cm4gZGl2O1xuICB9XG5cbiAgYWRkRm9jdXNCb3JkZXJEaXZzKHBhcmVudDogSFRNTERpdkVsZW1lbnQsIGdlbzogR2VvRGF0YSwgc3R5bGU6IEh0bWxTdHlsZSk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICAvLyBCb3JkZXIgd2VzdDpcbiAgICBsZXQgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIFwiZ2UtdGFibGUtZm9jdXMtYm9yZGVyXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiZGlzcGxheVwiLCBcImNsaXBcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwibGVmdFwiLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwidG9wXCIsIGAke2dlby50b3B9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcIndpZHRoXCIsIGAxcHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImhlaWdodFwiLCBgJHtnZW8uaGVpZ2h0fXB4YCk7XG4gICAgdGhpcy5hcHBseVN0eWxlKGRpdiwgc3R5bGUpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG5cbiAgICAvLyBCb3JkZXIgZWFzdDpcbiAgICBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oXCJkaXZcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLmFkZENsYXNzKGRpdiwgXCJnZS10YWJsZS1mb2N1cy1ib3JkZXJcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiY2xpcFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJsZWZ0XCIsIGAke2dlby5sZWZ0ICsgZ2VvLndpZHRoIC0gMX1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwidG9wXCIsIGAke2dlby50b3B9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcIndpZHRoXCIsIGAxcHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImhlaWdodFwiLCBgJHtnZW8uaGVpZ2h0fXB4YCk7XG4gICAgdGhpcy5hcHBseVN0eWxlKGRpdiwgc3R5bGUpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG5cbiAgICAvLyBCb3JkZXIgbm9ydGg6XG4gICAgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIFwiZ2UtdGFibGUtZm9jdXMtYm9yZGVyXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiZGlzcGxheVwiLCBcImNsaXBcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwibGVmdFwiLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwidG9wXCIsIGAkeyhnZW8udG9wKX1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwid2lkdGhcIiwgYCR7Z2VvLndpZHRofXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJoZWlnaHRcIiwgYDFweGApO1xuICAgIHRoaXMuYXBwbHlTdHlsZShkaXYsIHN0eWxlKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuXG5cbiAgICAvLyBCb3JkZXIgc291dGg6XG4gICAgZGl2ID0gdGhpcy5kb21TZXJ2aWNlLmNyZWF0ZUVsZW1lbnQ8SFRNTERpdkVsZW1lbnQ+KFwiZGl2XCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hZGRDbGFzcyhkaXYsIFwiZ2UtdGFibGUtZm9jdXMtYm9yZGVyXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiZGlzcGxheVwiLCBcImNsaXBcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwibGVmdFwiLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwidG9wXCIsIGAkeyhnZW8udG9wICsgZ2VvLmhlaWdodCAtIDEpfXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ3aWR0aFwiLCBgJHtnZW8ud2lkdGh9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcImhlaWdodFwiLCBgMXB4YCk7XG4gICAgdGhpcy5hcHBseVN0eWxlKGRpdiwgc3R5bGUpO1xuICAgIHRoaXMuZG9tU2VydmljZS5hcHBlbmRDaGlsZChwYXJlbnQsIGRpdik7XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgYWRkVmVydGljYWxCb3JkZXIoXG4gICAgZ2VvOiBHZW9EYXRhLFxuICAgIHBhcmVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgY2xheno6IHN0cmluZyA9IFwiZ2UtdGFibGUtYm9keS1jZW50ZXItdmVydGljYWwtYm9yZGVyXCJcbiAgKTogSFRNTERpdkVsZW1lbnQge1xuICAgIC8vIEJvcmRlciBlYXN0OlxuICAgIGNvbnN0IGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBjbGF6eik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJkaXNwbGF5XCIsIFwiY2xpcFwiKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcInBvc2l0aW9uXCIsIFwiYWJzb2x1dGVcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJsZWZ0XCIsIGAke2dlby5sZWZ0fXB4YCk7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJ0b3BcIiwgYCR7Z2VvLnRvcH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwid2lkdGhcIiwgYDFweGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiaGVpZ2h0XCIsIGAke2dlby5oZWlnaHR9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhZGREaXYocGFyZW50OiBIVE1MRGl2RWxlbWVudCwgZ2VvOiBHZW9EYXRhLCBjbGF6ejogc3RyaW5nID0gXCJcIik6IEhUTUxEaXZFbGVtZW50IHtcbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvbVNlcnZpY2UuY3JlYXRlRWxlbWVudDxIVE1MRGl2RWxlbWVudD4oXCJkaXZcIik7XG4gICAgaWYgKGNsYXp6KSB7XG4gICAgICB0aGlzLmRvbVNlcnZpY2UuYWRkQ2xhc3MoZGl2LCBjbGF6eik7XG4gICAgfVxuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiZGlzcGxheVwiLCBcImNsaXBcIik7XG4gICAgdGhpcy5kb21TZXJ2aWNlLnNldFN0eWxlKGRpdiwgXCJwb3NpdGlvblwiLCBcImFic29sdXRlXCIpO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwibGVmdFwiLCBgJHtnZW8ubGVmdH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwidG9wXCIsIGAke2dlby50b3B9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBcIndpZHRoXCIsIGAke2dlby53aWR0aH1weGApO1xuICAgIHRoaXMuZG9tU2VydmljZS5zZXRTdHlsZShkaXYsIFwiaGVpZ2h0XCIsIGAke2dlby5oZWlnaHR9cHhgKTtcbiAgICB0aGlzLmRvbVNlcnZpY2UuYXBwZW5kQ2hpbGQocGFyZW50LCBkaXYpO1xuICAgIHJldHVybiBkaXY7XG4gIH1cblxuICBhcHBseVN0eWxlU3RyaW5nKGRpdjogSFRNTERpdkVsZW1lbnQsIHN0eWxlOiBzdHJpbmcpIHtcbiAgICAvLyB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpIHRyYW5zbGF0ZSgtMTAwJSwgMCk7IHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wOyBmb250LXNpemU6IDEuNWVtO1xuICAgIGNvbnN0IGNtZHMgPSBzdHlsZS5zcGxpdChcIjtcIikubWFwKHMgPT4gcy50cmltKCkpLmZpbHRlcihzID0+IHMpO1xuICAgIGZvciAoY29uc3QgY21kIG9mIGNtZHMpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGNtZC5zcGxpdChcIjpcIik7XG4gICAgICB0aGlzLmRvbVNlcnZpY2Uuc2V0U3R5bGUoZGl2LCBrZXkudHJpbSgpLCB2YWx1ZS50cmltKCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGl2T3JDcmVhdGVEaXYoY2FjaGVLZXk6IG51bWJlciwgZGl2U2NvcGU6IERpdlNjb3BlKTogSFRNTERpdkVsZW1lbnQge1xuICAgIGxldCBkaXYgPSBkaXZTY29wZS5jYWNoZVtjYWNoZUtleV07XG4gICAgaWYgKGRpdikge1xuICAgICAgZGl2LmlubmVyVGV4dCA9IFwiXCI7IC8vIGVyc3QgbWFsIGxlZXIgbWFjaGVuLCBzcMOkdGVyIGNvbC1jYWNoZSBudXR6ZW5cbiAgICAgIHJldHVybiBkaXY7XG4gICAgfVxuICAgIGRpdiA9IHRoaXMuZG9tU2VydmljZS5jcmVhdGVFbGVtZW50PEhUTUxEaXZFbGVtZW50PihcImRpdlwiKTtcbiAgICBkaXZTY29wZS5jYWNoZVtjYWNoZUtleV0gPSBkaXY7XG4gICAgcmV0dXJuIGRpdjtcbiAgfVxufVxuIl19
@@ -0,0 +1,13 @@
1
+ export class CollapsedExpandedData {
2
+ mode;
3
+ rowIds;
4
+ allCollapsed;
5
+ allExpanded;
6
+ constructor(mode = "collapsed", rowIds = [], allCollapsed = false, allExpanded = false) {
7
+ this.mode = mode;
8
+ this.rowIds = rowIds;
9
+ this.allCollapsed = allCollapsed;
10
+ this.allExpanded = allExpanded;
11
+ }
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2VkLWV4cGFuZGVkLmRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9kYXRhL2NvbGxhcHNlZC1leHBhbmRlZC5kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxxQkFBcUI7SUFHdkI7SUFDQTtJQUNBO0lBQ0E7SUFKVCxZQUNTLE9BQWlDLFdBQVcsRUFDNUMsU0FBaUMsRUFBRSxFQUNuQyxlQUF3QixLQUFLLEVBQzdCLGNBQXVCLEtBQUs7UUFINUIsU0FBSSxHQUFKLElBQUksQ0FBd0M7UUFDNUMsV0FBTSxHQUFOLE1BQU0sQ0FBNkI7UUFDbkMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtJQUVyQyxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ29sbGFwc2VkRXhwYW5kZWREYXRhIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbW9kZTogXCJjb2xsYXBzZWRcIiB8IFwiZXhwYW5kZWRcIiA9IFwiY29sbGFwc2VkXCIsXG4gICAgcHVibGljIHJvd0lkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFtdLFxuICAgIHB1YmxpYyBhbGxDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBwdWJsaWMgYWxsRXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApIHtcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1zdHlsZS50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy90YWJsZS9zcmMvbGliL3RhYmxlL3NlcnZpY2UvZGF0YS9odG1sLXN0eWxlLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIEh0bWxTdHlsZSA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXNlcnZpY2UuaWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvc2VydmljZS9kb20tc2VydmljZS5pZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBEb21TZXJ2aWNlSWYge1xuXG4gIHNldFN0eWxlKGVsOiBhbnksIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBhbnk7XG5cbiAgYWRkQ2xhc3MoZGl2OiBIVE1MRWxlbWVudCwgY2xheno6IHN0cmluZyk6IEhUTUxEaXZFbGVtZW50O1xuXG4gIGNyZWF0ZUVsZW1lbnQ8VD4oZWxlOiBzdHJpbmcpOiBUO1xuXG4gIGNyZWF0ZVRleHQodGV4dDogc3RyaW5nKTogSFRNTEVsZW1lbnQ7XG5cbiAgYXBwZW5kVGV4dChwYXJlbnQ6IEhUTUxEaXZFbGVtZW50LCB0ZXh0OiBzdHJpbmcpOiBIVE1MRGl2RWxlbWVudDtcblxuICBhcHBlbmRDaGlsZChwYXJlbnQ6IEhUTUxFbGVtZW50LCBjaGlsZDogSFRNTEVsZW1lbnQpOiB2b2lkO1xuXG4gIHNldEF0dHJpYnV0ZShlbGU6IEhUTUxFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQ7XG59XG4iXX0=