@guiexpert/table 0.0.2 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/.eslintrc.json +42 -0
  2. package/LICENSE +35 -0
  3. package/README.md +102 -0
  4. package/jest.config.ts +18 -0
  5. package/ng-package.json +7 -0
  6. package/package.json +10 -20
  7. package/project.json +47 -0
  8. package/{index.d.ts → src/index.ts} +69 -20
  9. package/src/lib/table/action/action-id.type.ts +24 -0
  10. package/{lib/table/action/on-action-triggered.if.d.ts → src/lib/table/action/on-action-triggered.if.ts} +4 -1
  11. package/src/lib/table/action/osx-shortcut-actionId-mapping.ts +29 -0
  12. package/src/lib/table/action/shortcut-actionid-mapping.type.ts +3 -0
  13. package/src/lib/table/action/shortcut.service.ts +134 -0
  14. package/src/lib/table/action/windows-shortcut-actionId-mapping.ts +27 -0
  15. package/src/lib/table/checkbox/checkbox-model.if.ts +16 -0
  16. package/src/lib/table/checkbox/checkbox-model.ts +62 -0
  17. package/src/lib/table/checkbox/tree-checkbox-model.ts +123 -0
  18. package/src/lib/table/color/color-rgb.if.ts +7 -0
  19. package/src/lib/table/color/color-rgb.ts +10 -0
  20. package/src/lib/table/color/ge-css-color-util.ts +43 -0
  21. package/src/lib/table/color/three-color-gradient-arg.if.ts +10 -0
  22. package/src/lib/table/color/three-color-gradient-arg.ts +14 -0
  23. package/src/lib/table/color/two-color-gradient-arg.if.ts +8 -0
  24. package/src/lib/table/color/two-color-gradient-arg.ts +12 -0
  25. package/src/lib/table/css-vars.ts +243 -0
  26. package/src/lib/table/data/common/aligns.ts +19 -0
  27. package/src/lib/table/data/common/area-map-factory.ts +14 -0
  28. package/src/lib/table/data/common/area-map.ts +11 -0
  29. package/src/lib/table/data/common/area-map.type.ts +5 -0
  30. package/{lib/table/data/common/args-adjust-columns-to-row-parent-params.d.ts → src/lib/table/data/common/args-adjust-columns-to-row-parent-params.ts} +11 -9
  31. package/src/lib/table/data/common/args-render-cell-div.ts +18 -0
  32. package/src/lib/table/data/common/boolean-function.ts +4 -0
  33. package/src/lib/table/data/common/cell-range.ts +57 -0
  34. package/src/lib/table/data/common/checkbox-column-def.ts +25 -0
  35. package/src/lib/table/data/common/checked-type.ts +1 -0
  36. package/src/lib/table/data/common/event/ge-cell-indices.ts +9 -0
  37. package/src/lib/table/data/common/event/ge-key-event.ts +10 -0
  38. package/src/lib/table/data/common/event/ge-model-change-event.ts +13 -0
  39. package/src/lib/table/data/common/event/ge-mouse-event.ts +38 -0
  40. package/src/lib/table/data/common/event/input/table-cell-update-event.if.ts +10 -0
  41. package/src/lib/table/data/common/event/input/table-cell-update-event.ts +14 -0
  42. package/src/lib/table/data/common/index-and-px.ts +9 -0
  43. package/src/lib/table/data/common/size.if.ts +4 -0
  44. package/src/lib/table/data/common/size.ts +9 -0
  45. package/src/lib/table/data/common/sizes.ts +35 -0
  46. package/src/lib/table/data/common/sort-item.ts +11 -0
  47. package/src/lib/table/data/common/tree-row-if.ts +11 -0
  48. package/src/lib/table/data/common/tree-row.ts +16 -0
  49. package/src/lib/table/data/common/value-label.if.ts +6 -0
  50. package/src/lib/table/data/common/value-label.ts +13 -0
  51. package/src/lib/table/data/div-scope.type.ts +5 -0
  52. package/src/lib/table/data/event/mouse-target-data.ts +45 -0
  53. package/src/lib/table/data/geo-data.ts +13 -0
  54. package/src/lib/table/data/options/auto-restore-options.if.ts +21 -0
  55. package/src/lib/table/data/options/auto-restore-options.ts +50 -0
  56. package/src/lib/table/data/options/default-row-heights.if.ts +5 -0
  57. package/src/lib/table/data/options/default-row-heights.ts +10 -0
  58. package/src/lib/table/data/options/icon.if.ts +7 -0
  59. package/src/lib/table/data/options/icon.ts +10 -0
  60. package/{lib/table/data/options/sorted-options.if.d.ts → src/lib/table/data/options/sorted-options.if.ts} +6 -3
  61. package/src/lib/table/data/options/sorted-options.ts +15 -0
  62. package/src/lib/table/data/options/table-options.if.ts +54 -0
  63. package/src/lib/table/data/options/table-options.ts +66 -0
  64. package/src/lib/table/data/options/tree-options.if.ts +10 -0
  65. package/src/lib/table/data/options/tree-options.ts +32 -0
  66. package/src/lib/table/data/table-model-and-options.if.ts +8 -0
  67. package/src/lib/table/data/table-model-and-options.ts +13 -0
  68. package/src/lib/table/data/tablemodel/area-ident.type.ts +18 -0
  69. package/src/lib/table/data/tablemodel/areamodel/abstract-area-model.ts +183 -0
  70. package/src/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.ts +59 -0
  71. package/src/lib/table/data/tablemodel/areamodel/area-model-cell-groups.ts +210 -0
  72. package/src/lib/table/data/tablemodel/areamodel/area-model-hidden.ts +120 -0
  73. package/src/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.ts +23 -0
  74. package/src/lib/table/data/tablemodel/areamodel/area-model-object-array.ts +105 -0
  75. package/src/lib/table/data/tablemodel/areamodel/area-model-tree.ts +215 -0
  76. package/src/lib/table/data/tablemodel/areamodel/area-model.if.ts +186 -0
  77. package/src/lib/table/data/tablemodel/areamodel/area-model.ts +110 -0
  78. package/src/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.ts +61 -0
  79. package/src/lib/table/data/tablemodel/areamodel/has-default-row-height-if.ts +3 -0
  80. package/src/lib/table/data/tablemodel/cellgroup/cell-group-ext.ts +167 -0
  81. package/src/lib/table/data/tablemodel/cellgroup/cell-group.if.ts +12 -0
  82. package/src/lib/table/data/tablemodel/cellgroup/cell-group.ts +18 -0
  83. package/src/lib/table/data/tablemodel/cellgroup/cellgroup-factory.ts +148 -0
  84. package/src/lib/table/data/tablemodel/column/column-def.if.ts +28 -0
  85. package/src/lib/table/data/tablemodel/column/column-def.ts +104 -0
  86. package/src/lib/table/data/tablemodel/padding.ts +9 -0
  87. package/src/lib/table/data/tablemodel/table-model.if.ts +90 -0
  88. package/src/lib/table/data/tablemodel/table-model.ts +352 -0
  89. package/src/lib/table/ele-scope.ts +283 -0
  90. package/src/lib/table/event-adapter.ts +28 -0
  91. package/src/lib/table/event-listener.if.ts +19 -0
  92. package/src/lib/table/factory/table-factory.ts +378 -0
  93. package/src/lib/table/factory/tree-factory.ts +51 -0
  94. package/src/lib/table/focus/focus-model.if.ts +14 -0
  95. package/src/lib/table/focus/focus-model.ts +48 -0
  96. package/{lib/table/focus/focus.type.d.ts → src/lib/table/focus/focus.type.ts} +3 -0
  97. package/src/lib/table/input-handler.ts +34 -0
  98. package/src/lib/table/mouse-handler.ts +237 -0
  99. package/src/lib/table/render-scope.ts +936 -0
  100. package/src/lib/table/renderer/cell-group-ext-cell-renderer.ts +27 -0
  101. package/{lib/table/renderer/cell-render.if.d.ts → src/lib/table/renderer/cell-render.if.ts} +10 -1
  102. package/src/lib/table/renderer/checkbox-boolean-property-cell-renderer.ts +58 -0
  103. package/src/lib/table/renderer/checkbox-cell-renderer.ts +39 -0
  104. package/src/lib/table/renderer/date-to-int-date-cell-renderer.ts +34 -0
  105. package/src/lib/table/renderer/date-to-iso-cell-renderer.ts +25 -0
  106. package/src/lib/table/renderer/date-to-locale-date-cell-renderer.ts +24 -0
  107. package/src/lib/table/renderer/date-to-tec-cell-renderer.ts +28 -0
  108. package/{lib/table/renderer/edit/edit-cell-renderer.type.d.ts → src/lib/table/renderer/edit/edit-cell-renderer.type.ts} +1 -0
  109. package/src/lib/table/renderer/edit/edit-input-pipe-for-number.ts +6 -0
  110. package/src/lib/table/renderer/edit/edit-input-pipe.if.ts +7 -0
  111. package/src/lib/table/renderer/edit/input-cell-renderer.ts +41 -0
  112. package/src/lib/table/renderer/edit/select-cell-renderer.ts +60 -0
  113. package/src/lib/table/renderer/male-female-to-icon-cell-renderer.ts +26 -0
  114. package/src/lib/table/renderer/number-cell-renderer.ts +38 -0
  115. package/src/lib/table/renderer/renderer.ts +11 -0
  116. package/src/lib/table/renderer/true-false-cell-renderer.ts +28 -0
  117. package/src/lib/table/selection/selection-model.if.ts +20 -0
  118. package/src/lib/table/selection/selection-model.ts +109 -0
  119. package/src/lib/table/selection/selection-service.ts +120 -0
  120. package/{lib/table/selection/selection.type.d.ts → src/lib/table/selection/selection.type.ts} +3 -0
  121. package/src/lib/table/service/abstract-store-state.service.ts +105 -0
  122. package/src/lib/table/service/convenience-dom.service.ts +548 -0
  123. package/src/lib/table/service/data/collapsed-expanded.data.ts +11 -0
  124. package/src/lib/table/service/data/html-style.type.ts +1 -0
  125. package/src/lib/table/service/dom-service.if.ts +16 -0
  126. package/src/lib/table/service/ge-filter.service.ts +123 -0
  127. package/src/lib/table/service/simple-dom-service.ts +46 -0
  128. package/src/lib/table/service/sorter.service.ts +30 -0
  129. package/src/lib/table/service/store-state-collapsed-expand.service.ts +76 -0
  130. package/src/lib/table/service/store-state-scroll-pos.service.ts +40 -0
  131. package/src/lib/table/service/store-state-sorting.service.ts +41 -0
  132. package/src/lib/table/service/tree-row.service.ts +31 -0
  133. package/src/lib/table/table-api.ts +61 -0
  134. package/src/lib/table/table-scope.ts +433 -0
  135. package/src/test-setup.ts +1 -0
  136. package/tsconfig.json +22 -0
  137. package/tsconfig.lib.json +19 -0
  138. package/tsconfig.lib.prod.json +7 -0
  139. package/tsconfig.spec.json +20 -0
  140. package/esm2020/guiexpert-table.mjs +0 -5
  141. package/esm2020/index.mjs +0 -108
  142. package/esm2020/lib/table/action/action-id.type.mjs +0 -20
  143. package/esm2020/lib/table/action/on-action-triggered.if.mjs +0 -2
  144. package/esm2020/lib/table/action/osx-shortcut-actionId-mapping.mjs +0 -17
  145. package/esm2020/lib/table/action/shortcut-actionid-mapping.type.mjs +0 -2
  146. package/esm2020/lib/table/action/shortcut.service.mjs +0 -105
  147. package/esm2020/lib/table/action/windows-shortcut-actionId-mapping.mjs +0 -15
  148. package/esm2020/lib/table/checkbox/checkbox-model.if.mjs +0 -2
  149. package/esm2020/lib/table/checkbox/checkbox-model.mjs +0 -52
  150. package/esm2020/lib/table/checkbox/tree-checkbox-model.mjs +0 -106
  151. package/esm2020/lib/table/data/common/aligns.mjs +0 -19
  152. package/esm2020/lib/table/data/common/area-map-factory.mjs +0 -7
  153. package/esm2020/lib/table/data/common/area-map.mjs +0 -8
  154. package/esm2020/lib/table/data/common/area-map.type.mjs +0 -2
  155. package/esm2020/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +0 -2
  156. package/esm2020/lib/table/data/common/args-render-cell-div.mjs +0 -2
  157. package/esm2020/lib/table/data/common/boolean-function.mjs +0 -3
  158. package/esm2020/lib/table/data/common/cell-range.mjs +0 -27
  159. package/esm2020/lib/table/data/common/checkbox-column.mjs +0 -15
  160. package/esm2020/lib/table/data/common/checked-type.mjs +0 -2
  161. package/esm2020/lib/table/data/common/event/ge-cell-indices.mjs +0 -7
  162. package/esm2020/lib/table/data/common/event/ge-key-event.mjs +0 -7
  163. package/esm2020/lib/table/data/common/event/ge-model-change-event.mjs +0 -10
  164. package/esm2020/lib/table/data/common/event/ge-mouse-event.mjs +0 -19
  165. package/esm2020/lib/table/data/common/filter-function.mjs +0 -2
  166. package/esm2020/lib/table/data/common/get-t.mjs +0 -2
  167. package/esm2020/lib/table/data/common/index-and-px.mjs +0 -7
  168. package/esm2020/lib/table/data/common/size.if.mjs +0 -2
  169. package/esm2020/lib/table/data/common/size.mjs +0 -7
  170. package/esm2020/lib/table/data/common/sizes.mjs +0 -33
  171. package/esm2020/lib/table/data/common/sort-item.mjs +0 -7
  172. package/esm2020/lib/table/data/common/sort-state.type.mjs +0 -2
  173. package/esm2020/lib/table/data/common/tree-arrow.type.mjs +0 -2
  174. package/esm2020/lib/table/data/common/tree-row-if.mjs +0 -2
  175. package/esm2020/lib/table/data/common/tree-row.mjs +0 -12
  176. package/esm2020/lib/table/data/common/value-label.if.mjs +0 -2
  177. package/esm2020/lib/table/data/common/value-label.mjs +0 -7
  178. package/esm2020/lib/table/data/div-scope.type.mjs +0 -2
  179. package/esm2020/lib/table/data/geo-data.mjs +0 -10
  180. package/esm2020/lib/table/data/options/auto-restore-options.if.mjs +0 -2
  181. package/esm2020/lib/table/data/options/auto-restore-options.mjs +0 -42
  182. package/esm2020/lib/table/data/options/default-row-heights.if.mjs +0 -2
  183. package/esm2020/lib/table/data/options/default-row-heights.mjs +0 -8
  184. package/esm2020/lib/table/data/options/icon.if.mjs +0 -2
  185. package/esm2020/lib/table/data/options/icon.mjs +0 -8
  186. package/esm2020/lib/table/data/options/sorted-options.if.mjs +0 -2
  187. package/esm2020/lib/table/data/options/sorted-options.mjs +0 -9
  188. package/esm2020/lib/table/data/options/table-options.if.mjs +0 -2
  189. package/esm2020/lib/table/data/options/table-options.mjs +0 -37
  190. package/esm2020/lib/table/data/options/tree-options.if.mjs +0 -2
  191. package/esm2020/lib/table/data/options/tree-options.mjs +0 -10
  192. package/esm2020/lib/table/data/side-ident.type.mjs +0 -2
  193. package/esm2020/lib/table/data/tablemodel/area-ident.type.mjs +0 -10
  194. package/esm2020/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +0 -108
  195. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-array-array.mjs +0 -34
  196. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +0 -80
  197. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +0 -11
  198. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +0 -79
  199. package/esm2020/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +0 -166
  200. package/esm2020/lib/table/data/tablemodel/areamodel/area-model.if.mjs +0 -2
  201. package/esm2020/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +0 -48
  202. package/esm2020/lib/table/data/tablemodel/column/column-def.if.mjs +0 -2
  203. package/esm2020/lib/table/data/tablemodel/column/column-def.mjs +0 -32
  204. package/esm2020/lib/table/data/tablemodel/padding.mjs +0 -9
  205. package/esm2020/lib/table/data/tablemodel/table-model.if.mjs +0 -2
  206. package/esm2020/lib/table/data/tablemodel/table-model.mjs +0 -268
  207. package/esm2020/lib/table/ele-scope.mjs +0 -173
  208. package/esm2020/lib/table/event-adapter.mjs +0 -17
  209. package/esm2020/lib/table/event-listener.if.mjs +0 -2
  210. package/esm2020/lib/table/focus/focus-model.if.mjs +0 -2
  211. package/esm2020/lib/table/focus/focus-model.mjs +0 -22
  212. package/esm2020/lib/table/focus/focus.type.mjs +0 -2
  213. package/esm2020/lib/table/input-handler.mjs +0 -24
  214. package/esm2020/lib/table/mouse-handler.mjs +0 -191
  215. package/esm2020/lib/table/render-scope.mjs +0 -595
  216. package/esm2020/lib/table/renderer/cell-render.if.mjs +0 -2
  217. package/esm2020/lib/table/renderer/checkbox-cell-renderer.mjs +0 -22
  218. package/esm2020/lib/table/renderer/date-to-int-date-cell-renderer.mjs +0 -21
  219. package/esm2020/lib/table/renderer/date-to-iso-cell-renderer.mjs +0 -9
  220. package/esm2020/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +0 -9
  221. package/esm2020/lib/table/renderer/date-to-tec-cell-renderer.mjs +0 -12
  222. package/esm2020/lib/table/renderer/edit/edit-cell-renderer.type.mjs +0 -2
  223. package/esm2020/lib/table/renderer/edit/input-cell-renderer.mjs +0 -23
  224. package/esm2020/lib/table/renderer/edit/select-cell-renderer.mjs +0 -35
  225. package/esm2020/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +0 -12
  226. package/esm2020/lib/table/renderer/number-cell-renderer.mjs +0 -19
  227. package/esm2020/lib/table/renderer/renderer-cleanup-fn.type.mjs +0 -2
  228. package/esm2020/lib/table/renderer/renderer.mjs +0 -7
  229. package/esm2020/lib/table/renderer/true-false-cell-renderer.mjs +0 -15
  230. package/esm2020/lib/table/selection/selection-model.if.mjs +0 -2
  231. package/esm2020/lib/table/selection/selection-model.mjs +0 -97
  232. package/esm2020/lib/table/selection/selection-service.mjs +0 -97
  233. package/esm2020/lib/table/selection/selection.type.mjs +0 -2
  234. package/esm2020/lib/table/service/abstract-store-state.service.mjs +0 -49
  235. package/esm2020/lib/table/service/convenience-dom.service.mjs +0 -394
  236. package/esm2020/lib/table/service/data/collapsed-expanded.data.mjs +0 -9
  237. package/esm2020/lib/table/service/data/html-style.type.mjs +0 -2
  238. package/esm2020/lib/table/service/dom-service.if.mjs +0 -2
  239. package/esm2020/lib/table/service/ge-filter.service.mjs +0 -98
  240. package/esm2020/lib/table/service/simple-dom-service.mjs +0 -34
  241. package/esm2020/lib/table/service/sorter.service.mjs +0 -27
  242. package/esm2020/lib/table/service/store-state-collapsed-expand.service.mjs +0 -57
  243. package/esm2020/lib/table/service/store-state-scroll-pos.service.mjs +0 -29
  244. package/esm2020/lib/table/service/store-state-sorting.service.mjs +0 -29
  245. package/esm2020/lib/table/service/tree-row.service.mjs +0 -23
  246. package/esm2020/lib/table/table-api.mjs +0 -38
  247. package/esm2020/lib/table/table-model-factory.mjs +0 -124
  248. package/esm2020/lib/table/table-scope.mjs +0 -313
  249. package/lib/table/action/action-id.type.d.ts +0 -2
  250. package/lib/table/action/osx-shortcut-actionId-mapping.d.ts +0 -6
  251. package/lib/table/action/shortcut-actionid-mapping.type.d.ts +0 -4
  252. package/lib/table/action/shortcut.service.d.ts +0 -17
  253. package/lib/table/action/windows-shortcut-actionId-mapping.d.ts +0 -6
  254. package/lib/table/checkbox/checkbox-model.d.ts +0 -12
  255. package/lib/table/checkbox/checkbox-model.if.d.ts +0 -9
  256. package/lib/table/checkbox/tree-checkbox-model.d.ts +0 -17
  257. package/lib/table/data/common/aligns.d.ts +0 -24
  258. package/lib/table/data/common/area-map-factory.d.ts +0 -5
  259. package/lib/table/data/common/area-map.d.ts +0 -7
  260. package/lib/table/data/common/area-map.type.d.ts +0 -5
  261. package/lib/table/data/common/args-render-cell-div.d.ts +0 -13
  262. package/lib/table/data/common/boolean-function.d.ts +0 -3
  263. package/lib/table/data/common/cell-range.d.ts +0 -17
  264. package/lib/table/data/common/checkbox-column.d.ts +0 -13
  265. package/lib/table/data/common/checked-type.d.ts +0 -1
  266. package/lib/table/data/common/event/ge-cell-indices.d.ts +0 -5
  267. package/lib/table/data/common/event/ge-key-event.d.ts +0 -5
  268. package/lib/table/data/common/event/ge-model-change-event.d.ts +0 -6
  269. package/lib/table/data/common/event/ge-mouse-event.d.ts +0 -17
  270. package/lib/table/data/common/index-and-px.d.ts +0 -5
  271. package/lib/table/data/common/size.d.ts +0 -6
  272. package/lib/table/data/common/size.if.d.ts +0 -4
  273. package/lib/table/data/common/sizes.d.ts +0 -32
  274. package/lib/table/data/common/sort-item.d.ts +0 -6
  275. package/lib/table/data/common/tree-row-if.d.ts +0 -10
  276. package/lib/table/data/common/tree-row.d.ts +0 -11
  277. package/lib/table/data/common/value-label.d.ts +0 -6
  278. package/lib/table/data/common/value-label.if.d.ts +0 -4
  279. package/lib/table/data/div-scope.type.d.ts +0 -7
  280. package/lib/table/data/geo-data.d.ts +0 -8
  281. package/lib/table/data/options/auto-restore-options.d.ts +0 -11
  282. package/lib/table/data/options/auto-restore-options.if.d.ts +0 -16
  283. package/lib/table/data/options/default-row-heights.d.ts +0 -7
  284. package/lib/table/data/options/default-row-heights.if.d.ts +0 -5
  285. package/lib/table/data/options/icon.d.ts +0 -7
  286. package/lib/table/data/options/icon.if.d.ts +0 -5
  287. package/lib/table/data/options/sorted-options.d.ts +0 -8
  288. package/lib/table/data/options/table-options.d.ts +0 -35
  289. package/lib/table/data/options/table-options.if.d.ts +0 -36
  290. package/lib/table/data/options/tree-options.d.ts +0 -9
  291. package/lib/table/data/options/tree-options.if.d.ts +0 -7
  292. package/lib/table/data/tablemodel/area-ident.type.d.ts +0 -2
  293. package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +0 -43
  294. package/lib/table/data/tablemodel/areamodel/area-model-array-array.d.ts +0 -18
  295. package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +0 -37
  296. package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +0 -10
  297. package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +0 -27
  298. package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +0 -39
  299. package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +0 -146
  300. package/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.d.ts +0 -12
  301. package/lib/table/data/tablemodel/column/column-def.d.ts +0 -46
  302. package/lib/table/data/tablemodel/column/column-def.if.d.ts +0 -22
  303. package/lib/table/data/tablemodel/padding.d.ts +0 -7
  304. package/lib/table/data/tablemodel/table-model.d.ts +0 -61
  305. package/lib/table/data/tablemodel/table-model.if.d.ts +0 -35
  306. package/lib/table/ele-scope.d.ts +0 -37
  307. package/lib/table/event-adapter.d.ts +0 -12
  308. package/lib/table/event-listener.if.d.ts +0 -11
  309. package/lib/table/focus/focus-model.d.ts +0 -12
  310. package/lib/table/focus/focus-model.if.d.ts +0 -6
  311. package/lib/table/input-handler.d.ts +0 -6
  312. package/lib/table/mouse-handler.d.ts +0 -25
  313. package/lib/table/render-scope.d.ts +0 -82
  314. package/lib/table/renderer/checkbox-cell-renderer.d.ts +0 -8
  315. package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +0 -9
  316. package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +0 -8
  317. package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +0 -8
  318. package/lib/table/renderer/date-to-tec-cell-renderer.d.ts +0 -8
  319. package/lib/table/renderer/edit/input-cell-renderer.d.ts +0 -8
  320. package/lib/table/renderer/edit/select-cell-renderer.d.ts +0 -12
  321. package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +0 -8
  322. package/lib/table/renderer/number-cell-renderer.d.ts +0 -11
  323. package/lib/table/renderer/renderer.d.ts +0 -5
  324. package/lib/table/renderer/true-false-cell-renderer.d.ts +0 -8
  325. package/lib/table/selection/selection-model.d.ts +0 -21
  326. package/lib/table/selection/selection-model.if.d.ts +0 -11
  327. package/lib/table/selection/selection-service.d.ts +0 -17
  328. package/lib/table/service/abstract-store-state.service.d.ts +0 -10
  329. package/lib/table/service/convenience-dom.service.d.ts +0 -46
  330. package/lib/table/service/data/collapsed-expanded.data.d.ts +0 -7
  331. package/lib/table/service/data/html-style.type.d.ts +0 -3
  332. package/lib/table/service/dom-service.if.d.ts +0 -9
  333. package/lib/table/service/ge-filter.service.d.ts +0 -5
  334. package/lib/table/service/simple-dom-service.d.ts +0 -10
  335. package/lib/table/service/sorter.service.d.ts +0 -3
  336. package/lib/table/service/store-state-collapsed-expand.service.d.ts +0 -15
  337. package/lib/table/service/store-state-scroll-pos.service.d.ts +0 -10
  338. package/lib/table/service/store-state-sorting.service.d.ts +0 -11
  339. package/lib/table/service/tree-row.service.d.ts +0 -5
  340. package/lib/table/table-api.d.ts +0 -16
  341. package/lib/table/table-model-factory.d.ts +0 -60
  342. package/lib/table/table-scope.d.ts +0 -56
  343. /package/{lib/table/data/common/filter-function.d.ts → src/lib/table/data/common/filter-function.ts} +0 -0
  344. /package/{lib/table/data/common/get-t.d.ts → src/lib/table/data/common/get-t.ts} +0 -0
  345. /package/{lib/table/data/common/sort-state.type.d.ts → src/lib/table/data/common/sort-state.type.ts} +0 -0
  346. /package/{lib/table/data/common/tree-arrow.type.d.ts → src/lib/table/data/common/tree-arrow.type.ts} +0 -0
  347. /package/{lib/table/data/side-ident.type.d.ts → src/lib/table/data/side-ident.type.ts} +0 -0
  348. /package/{lib/table/renderer/renderer-cleanup-fn.type.d.ts → src/lib/table/renderer/renderer-cleanup-fn.type.ts} +0 -0
@@ -1,313 +0,0 @@
1
- import { GeMouseEvent } from "./data/common/event/ge-mouse-event";
2
- import { ConvenienceDomService } from "./service/convenience-dom.service";
3
- import { MouseHandler } from "./mouse-handler";
4
- import { TableApi } from "./table-api";
5
- import { AreaModelTree } from "./data/tablemodel/areamodel/area-model-tree";
6
- import { StoreStateScrollPosService } from "./service/store-state-scroll-pos.service";
7
- import { StoreStateCollapsedExpandService } from "./service/store-state-collapsed-expand.service";
8
- import { StoreStateSortingService } from "./service/store-state-sorting.service";
9
- import { RenderScope } from "./render-scope";
10
- import { SortItem } from "./data/common/sort-item";
11
- import { InputHandler } from "./input-handler";
12
- import { GeModelChangeEvent } from "./data/common/event/ge-model-change-event";
13
- import { SelectionService } from "./selection/selection-service";
14
- import { ShortcutService } from "./action/shortcut.service";
15
- import { EventAdapter } from "./event-adapter";
16
- export class TableScope extends RenderScope {
17
- constructor(hostElement, tableModel, domService, tableOptions, eventListener) {
18
- super(hostElement, tableModel, new ConvenienceDomService(domService), tableOptions);
19
- this.eventListener = eventListener;
20
- this.selectionService = new SelectionService(this);
21
- this.api = new TableApi(this);
22
- this.mouseStartAction = "";
23
- this.mouseStartWidth = -1;
24
- this.mouseStartColumnIndex = -1;
25
- this.dragFrom = -1;
26
- this.dragTo = -1;
27
- if (!eventListener) {
28
- this.eventListener = new EventAdapter();
29
- }
30
- if (this.tableOptions?.autoRestoreOptions) {
31
- const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
32
- const keyFn = autoRestoreOptions.getStorageKeyFn;
33
- if (keyFn) {
34
- if (autoRestoreOptions.autoRestoreScrollPosition) {
35
- this.storeScrollPosStateService = new StoreStateScrollPosService(keyFn);
36
- }
37
- if (autoRestoreOptions.autoRestoreCollapsedExpandedState) {
38
- this.storeStateCollapsedExpandService = new StoreStateCollapsedExpandService(keyFn);
39
- }
40
- if (autoRestoreOptions.autoRestoreSortingState) {
41
- this.storeSortingService = new StoreStateSortingService(keyFn);
42
- }
43
- }
44
- }
45
- this.mouseHandler = new MouseHandler(this);
46
- this.inputHandler = new InputHandler(this);
47
- this.shortcutService = new ShortcutService(this);
48
- this.shortcutService.addListener(this.selectionService);
49
- }
50
- onActionTriggered(actionId) {
51
- if (actionId === "START_EDITING") {
52
- if (this.getFocusModel) {
53
- const fm = this.getFocusModel();
54
- if (fm) {
55
- const [rowIdx, colIdx] = fm.getFocus();
56
- if (this.tableModel.getBodyModel().isEditable(rowIdx, colIdx)) {
57
- this.clearSelection();
58
- this.initRenderEditor(rowIdx, colIdx);
59
- }
60
- }
61
- }
62
- }
63
- return false;
64
- }
65
- updateModelValue(areaIdent, rowIndex, columnIndex, value) {
66
- if (areaIdent === "body") {
67
- const bodyAreaModel = this.tableModel.getAreaModel(areaIdent);
68
- const ok = bodyAreaModel.setValue(rowIndex, columnIndex, value, this.tableModel);
69
- if (ok) {
70
- this.resetEditorRenderer();
71
- this.repaint();
72
- this.eventListener.onModelChanged(GeModelChangeEvent.createSingle(rowIndex, columnIndex));
73
- }
74
- }
75
- }
76
- getApi() {
77
- return this.api;
78
- }
79
- /*
80
- * Called by the table component
81
- */
82
- firstInit() {
83
- this.tableModel.init();
84
- this.autoRestoreCollapsedExpandedState();
85
- this.autoRestoreSortingState();
86
- this.resetSizeOfWrapperDiv();
87
- this.adjustContainersAndRows();
88
- this.autoRestoreScrollPosition();
89
- }
90
- createGeMouseEvent(mouseEvent) {
91
- const ret = new GeMouseEvent();
92
- ret.originalEvent = mouseEvent;
93
- if (mouseEvent) {
94
- const target = mouseEvent.target;
95
- [ret.areaIdent, ret.sideIdent] = this.getAreaAndSideIdentByAttr(target);
96
- ret.rowIndex = this.getNumberByAttr(target, "data-row-index");
97
- ret.columnIndex = this.getNumberByAttr(target, "data-col-index");
98
- ret.action = this.getStringByAttr(target, "data-ge-action");
99
- const bodyY = mouseEvent.clientY - this.hostElement.offsetTop - this.areaHeaderCenter.parent.clientHeight;
100
- const bodyX = mouseEvent.clientX - this.hostElement.offsetLeft - this.areaBodyWestGeo.width;
101
- if (ret.areaIdent) {
102
- const am = this.tableModel.getAreaModel(ret.areaIdent);
103
- ret.rowTop = am.getYPosByRowIndex(ret.rowIndex);
104
- }
105
- ret.columnLeft = this.tableModel.getXPosByColumnIndex(ret.columnIndex);
106
- if (mouseEvent.ctrlKey && mouseEvent.altKey) {
107
- const bodyY = mouseEvent.clientY - this.hostElement.offsetTop - this.areaHeaderCenter.parent.clientHeight;
108
- const bodyX = mouseEvent.clientX - this.hostElement.offsetLeft - this.areaBodyWestGeo.width;
109
- this.debugOnce(bodyX, bodyY);
110
- }
111
- }
112
- return ret;
113
- }
114
- onMouseDown(mouseEvent) {
115
- if (mouseEvent.columnIndex > -1
116
- && mouseEvent.action
117
- && ["resize-column", "drag-column"].includes(mouseEvent.action)) {
118
- this.mouseStartWidth = this.tableModel.getColumnWidth(mouseEvent.columnIndex);
119
- this.mouseStartAction = mouseEvent.action;
120
- this.mouseStartColumnIndex = mouseEvent.columnIndex;
121
- if (this.mouseStartAction === "drag-column") {
122
- this.dragFrom = this.mouseStartColumnIndex;
123
- }
124
- }
125
- }
126
- mouseDraggingOnFrame(mouseEvent) {
127
- this.eventListener.onMouseDragging(mouseEvent);
128
- this.mouseEvent = mouseEvent;
129
- if (this.mouseStartColumnIndex > -1
130
- && this.mouseStartAction === "resize-column"
131
- && this.tableOptions.columnsResizable) {
132
- this.resizeColumn(mouseEvent);
133
- }
134
- else if (this.mouseStartAction === "drag-column"
135
- && mouseEvent.columnIndex > -1
136
- && this.tableOptions.columnsDraggable) {
137
- this.draggingTargetColumnIndex = mouseEvent.columnIndex;
138
- this.dragTo = this.draggingTargetColumnIndex;
139
- if (this.dragFrom > -1 && this.dragTo > -1 && this.dragFrom !== this.dragTo) {
140
- this.tableModel.changeColumnOrder(this.dragFrom, this.dragTo);
141
- this.dragFrom = this.dragTo;
142
- this.resetSizeOfWrapperDiv();
143
- this.adjustContainersAndRows();
144
- }
145
- this.repaint();
146
- }
147
- }
148
- mouseDraggingEndOnFrame(mouseEvent) {
149
- this.eventListener.onMouseDraggingEnd(mouseEvent);
150
- this.draggingTargetColumnIndex = -1;
151
- if (this.mouseStartAction === "resize-column") {
152
- this.resizeColumn(mouseEvent);
153
- }
154
- else if (this.mouseStartAction === "drag-column") {
155
- this.repaint();
156
- }
157
- this.mouseStartWidth = -1;
158
- this.mouseStartColumnIndex = -1;
159
- this.dragFrom = -1;
160
- this.dragTo = -1;
161
- this.mouseStartAction = "";
162
- }
163
- resizeColumn(mouseEvent) {
164
- this.tableModel.setColumnWidth(this.mouseStartColumnIndex, this.mouseStartWidth + mouseEvent.draggingX);
165
- this.tableModel.recalcPadding();
166
- this.resetSizeOfWrapperDiv();
167
- this.adjustContainersAndRows();
168
- }
169
- mouseMove(mouseMoveEvent) {
170
- this.eventListener.onMouseMoved(mouseMoveEvent);
171
- this.adjustHoverRows(mouseMoveEvent);
172
- this.adjustHoverColumns(mouseMoveEvent);
173
- }
174
- contextmenu(mouseMoveEvent) {
175
- this.eventListener.onContextmenu(mouseMoveEvent);
176
- }
177
- toggleExpandCollapseAll(expand = true) {
178
- const bodyAreaModel = this.tableModel.getBodyModel();
179
- if (bodyAreaModel instanceof AreaModelTree) {
180
- const amt = bodyAreaModel;
181
- amt.toggleExpandCollapseAll(expand);
182
- this.repaint();
183
- this.storeStateCollapsedExpandService?.collapsedStateAll(expand);
184
- }
185
- }
186
- toggleRowCheckbox(rowIdx, _colIdx, areaIdent) {
187
- const areaModel = this.tableModel.getAreaModel(areaIdent);
188
- const state = areaModel.isRowChecked(rowIdx);
189
- const sel = (state === undefined || state === "semi" || state === "none");
190
- areaModel.setRowChecked(rowIdx, sel);
191
- this.repaint();
192
- const selectedRows = areaModel.rowSelectionModel?.getCheckedRows();
193
- this.eventListener.onCheckboxChanged(selectedRows ? selectedRows : []);
194
- }
195
- onMouseClicked(evt, previousEvt) {
196
- const dirty = this.selectionService.onMouseClicked(evt, previousEvt);
197
- this.eventListener.onMouseClicked(evt);
198
- if (dirty) {
199
- this.debounce(this.repaint.bind(this), 10);
200
- }
201
- }
202
- externalFilterChanged() {
203
- const predictFn = this.tableOptions.externalFilterFunction;
204
- if (predictFn) {
205
- this.clearSelectionModel();
206
- this.tableModel.externalFilterChanged(predictFn);
207
- this.repaint();
208
- }
209
- }
210
- onHeaderDblClicked(event, _rowIdx, colIdx) {
211
- const colDef = this.tableModel.getColumnDef(colIdx);
212
- if (colDef?.sortable && colDef.sortable()) {
213
- event.preventDefault();
214
- const states = colDef.sortStatesOrder ? colDef.sortStatesOrder : this.tableOptions.sortOrder;
215
- const currentState = colDef.sortState ?? "";
216
- const newState = states[(states.indexOf(currentState) + 1) % states.length];
217
- const sortItem = new SortItem(colIdx, newState);
218
- const done = this.tableModel.doSort([sortItem]);
219
- if (done) {
220
- this.tableModel.getColumnDefs()?.forEach(cd => cd.sortState = "");
221
- colDef.sortState = newState;
222
- }
223
- this.repaint();
224
- this.storeSortingService?.setSortItems([sortItem]);
225
- }
226
- }
227
- onKeyEvent(evt) {
228
- this.keyEvent = evt;
229
- console.info(this.keyEvent); // TODO
230
- if (this.keyEvent.status === "up" && this.keyEvent.originalEvent?.code === "F2") {
231
- this.keyEvent.originalEvent.stopPropagation();
232
- console.info("F2...");
233
- // TODO check, if we can start to edit a cell
234
- }
235
- }
236
- clearSelectionModel() {
237
- if (this.getSelectionModel) {
238
- this.getSelectionModel()?.clear();
239
- }
240
- }
241
- debugOnce(bodyX, bodyY) {
242
- console.clear();
243
- console.info("this.hostElement.offsetTop", this.hostElement.offsetTop); // pageY of table tag
244
- console.info("this.hostElement.scrollHeight", this.hostElement.scrollHeight); // height of visible scroll area
245
- console.info("this.scrollViewportTop", this.scrollTop); // amount of px scrolled to top (initial : 0)
246
- console.info("this.areaHeaderCenter.parent.clientHeight", this.areaHeaderCenter.parent.clientHeight);
247
- console.info("bodyY", bodyY);
248
- console.info("bodyX", bodyX);
249
- console.info("rows", this.firstVisibleRowIndex);
250
- console.info("");
251
- console.info("this.tableModel", this.tableModel);
252
- console.info("");
253
- console.info("this.mouseMoveEvent.clientX", this.mouseHandler.mouseEvent?.clientX);
254
- console.info("this.hostElement.offsetLeft", this.hostElement.offsetLeft);
255
- console.info("this.areaBodyWestGeo.width", this.areaBodyWestGeo.width);
256
- }
257
- autoRestoreScrollPosition() {
258
- if (this.tableOptions?.autoRestoreOptions && this.storeScrollPosStateService) {
259
- const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
260
- if (autoRestoreOptions.autoRestoreScrollPosition) {
261
- const scrollOffset = this.storeScrollPosStateService.getScrollOffset();
262
- if (scrollOffset) {
263
- this.scrollViewport.scrollTo(...scrollOffset);
264
- }
265
- }
266
- }
267
- }
268
- autoRestoreSortingState() {
269
- if (this.tableOptions?.autoRestoreOptions?.autoRestoreSortingState && this.storeSortingService) {
270
- const sortItems = this.storeSortingService.getSortItems();
271
- if (sortItems?.length) {
272
- const areaModel = this.tableModel.getBodyModel();
273
- areaModel.doSort(sortItems);
274
- }
275
- }
276
- }
277
- autoRestoreCollapsedExpandedState() {
278
- if (this.tableOptions?.autoRestoreOptions?.getRowId && this.storeStateCollapsedExpandService) {
279
- const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
280
- const getRowId = autoRestoreOptions.getRowId;
281
- if (autoRestoreOptions.autoRestoreCollapsedExpandedState && getRowId) {
282
- const state = this.storeStateCollapsedExpandService.collapsedExpandedStateGet();
283
- const areaModel = this.tableModel.getAreaModel("body");
284
- if (areaModel instanceof AreaModelTree) {
285
- const amtr = areaModel;
286
- const rowCount = areaModel.getRowCount();
287
- for (let i = 0; i < rowCount; i++) {
288
- const row = areaModel.getRowByIndex(i);
289
- if (row) {
290
- if (state.allExpanded) {
291
- row.expanded = true;
292
- }
293
- else if (state.allCollapsed) {
294
- row.expanded = false;
295
- }
296
- else {
297
- const rowId = getRowId(row.data);
298
- if (state.mode === "expanded") {
299
- row.expanded = (this.storeStateCollapsedExpandService.collapsedExpandedStateIncludes(rowId));
300
- }
301
- else if (state.mode === "collapsed") {
302
- row.expanded = (!this.storeStateCollapsedExpandService.collapsedExpandedStateIncludes(rowId));
303
- }
304
- }
305
- }
306
- }
307
- amtr.recalcVisibleTreeRows();
308
- }
309
- }
310
- }
311
- }
312
- }
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvdGFibGUtc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxVQUFXLFNBQVEsV0FBVztJQW9CekMsWUFDRSxXQUEyQixFQUMzQixVQUF3QixFQUN4QixVQUF3QixFQUN4QixZQUE0QixFQUNULGFBQThCO1FB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QUMsUUFBUSxHQUFHLElBQUksQ0FBQzs2QkFFckI7aUNBQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFO2dDQUM3QixHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs2QkFFdEI7aUNBQU07Z0NBQ0wsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQ0FDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtvQ0FDN0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lDQUU5RjtxQ0FBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO29DQUNyQyxHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsOEJBQThCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQ0FDL0Y7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7aUJBQzlCO2FBQ0Y7U0FDRjtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlTW9kZWxJZiB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC90YWJsZS1tb2RlbC5pZlwiO1xuaW1wb3J0IHsgQXJlYUlkZW50IH0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL2FyZWEtaWRlbnQudHlwZVwiO1xuaW1wb3J0IHsgR2VNb3VzZUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW91c2UtZXZlbnRcIjtcbmltcG9ydCB7IERvbVNlcnZpY2VJZiB9IGZyb20gXCIuL3NlcnZpY2UvZG9tLXNlcnZpY2UuaWZcIjtcbmltcG9ydCB7IENvbnZlbmllbmNlRG9tU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2UvY29udmVuaWVuY2UtZG9tLnNlcnZpY2VcIjtcbmltcG9ydCB7IFRhYmxlT3B0aW9uc0lmIH0gZnJvbSBcIi4vZGF0YS9vcHRpb25zL3RhYmxlLW9wdGlvbnMuaWZcIjtcbmltcG9ydCB7IFRyZWVSb3cgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi90cmVlLXJvd1wiO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSBcIi4vbW91c2UtaGFuZGxlclwiO1xuaW1wb3J0IHsgRXZlbnRMaXN0ZW5lcklmIH0gZnJvbSBcIi4vZXZlbnQtbGlzdGVuZXIuaWZcIjtcbmltcG9ydCB7IFRhYmxlQXBpIH0gZnJvbSBcIi4vdGFibGUtYXBpXCI7XG5pbXBvcnQgeyBTb3J0U3RhdGUgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9zb3J0LXN0YXRlLnR5cGVcIjtcbmltcG9ydCB7IEFyZWFNb2RlbFRyZWUgfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYW1vZGVsL2FyZWEtbW9kZWwtdHJlZVwiO1xuaW1wb3J0IHsgU3RvcmVTdGF0ZVNjcm9sbFBvc1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLXNjcm9sbC1wb3Muc2VydmljZVwiO1xuaW1wb3J0IHsgU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLWNvbGxhcHNlZC1leHBhbmQuc2VydmljZVwiO1xuaW1wb3J0IHsgU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9zdG9yZS1zdGF0ZS1zb3J0aW5nLnNlcnZpY2VcIjtcbmltcG9ydCB7IFJlbmRlclNjb3BlIH0gZnJvbSBcIi4vcmVuZGVyLXNjb3BlXCI7XG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gXCIuL2RhdGEvY29tbW9uL3NvcnQtaXRlbVwiO1xuaW1wb3J0IHsgSW5wdXRIYW5kbGVyIH0gZnJvbSBcIi4vaW5wdXQtaGFuZGxlclwiO1xuaW1wb3J0IHsgR2VNb2RlbENoYW5nZUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2UtbW9kZWwtY2hhbmdlLWV2ZW50XCI7XG5pbXBvcnQgeyBTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIi4vc2VsZWN0aW9uL3NlbGVjdGlvbi1zZXJ2aWNlXCI7XG5pbXBvcnQgeyBHZUtleUV2ZW50IH0gZnJvbSBcIi4vZGF0YS9jb21tb24vZXZlbnQvZ2Uta2V5LWV2ZW50XCI7XG5pbXBvcnQgeyBPbkFjdGlvblRyaWdnZXJlZElmIH0gZnJvbSBcIi4vYWN0aW9uL29uLWFjdGlvbi10cmlnZ2VyZWQuaWZcIjtcbmltcG9ydCB7IEFjdGlvbklkIH0gZnJvbSBcIi4vYWN0aW9uL2FjdGlvbi1pZC50eXBlXCI7XG5pbXBvcnQgeyBTaG9ydGN1dFNlcnZpY2UgfSBmcm9tIFwiLi9hY3Rpb24vc2hvcnRjdXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRXZlbnRBZGFwdGVyIH0gZnJvbSBcIi4vZXZlbnQtYWRhcHRlclwiO1xuXG5cbmV4cG9ydCBjbGFzcyBUYWJsZVNjb3BlIGV4dGVuZHMgUmVuZGVyU2NvcGUgaW1wbGVtZW50cyBPbkFjdGlvblRyaWdnZXJlZElmIHtcblxuXG4gIHB1YmxpYyBtb3VzZUhhbmRsZXI6IE1vdXNlSGFuZGxlcjtcbiAgcHVibGljIGlucHV0SGFuZGxlcjogSW5wdXRIYW5kbGVyO1xuICBwdWJsaWMgc2hvcnRjdXRTZXJ2aWNlOiBTaG9ydGN1dFNlcnZpY2U7XG5cbiAgcHVibGljIHN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPzogU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2U7XG4gIHB1YmxpYyBzdG9yZVNvcnRpbmdTZXJ2aWNlPzogU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBTZWxlY3Rpb25TZXJ2aWNlID0gbmV3IFNlbGVjdGlvblNlcnZpY2UodGhpcyk7XG4gIHByb3RlY3RlZCBrZXlFdmVudD86IEdlS2V5RXZlbnQ7XG4gIHByaXZhdGUgYXBpID0gbmV3IFRhYmxlQXBpKHRoaXMpO1xuXG4gIHByaXZhdGUgbW91c2VTdGFydEFjdGlvbiA9IFwiXCI7XG4gIHByaXZhdGUgbW91c2VTdGFydFdpZHRoID0gLTE7XG4gIHByaXZhdGUgbW91c2VTdGFydENvbHVtbkluZGV4ID0gLTE7XG4gIHByaXZhdGUgZHJhZ0Zyb20gPSAtMTtcbiAgcHJpdmF0ZSBkcmFnVG8gPSAtMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0RWxlbWVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgdGFibGVNb2RlbDogVGFibGVNb2RlbElmLFxuICAgIGRvbVNlcnZpY2U6IERvbVNlcnZpY2VJZixcbiAgICB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9uc0lmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudExpc3RlbmVyOiBFdmVudExpc3RlbmVySWZcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBob3N0RWxlbWVudCxcbiAgICAgIHRhYmxlTW9kZWwsXG4gICAgICBuZXcgQ29udmVuaWVuY2VEb21TZXJ2aWNlKGRvbVNlcnZpY2UpLFxuICAgICAgdGFibGVPcHRpb25zXG4gICAgKTtcbiAgICBpZiAoIWV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lciA9IG5ldyBFdmVudEFkYXB0ZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF1dG9SZXN0b3JlT3B0aW9ucyA9IHRoaXMudGFibGVPcHRpb25zLmF1dG9SZXN0b3JlT3B0aW9ucztcbiAgICAgIGNvbnN0IGtleUZuID0gYXV0b1Jlc3RvcmVPcHRpb25zLmdldFN0b3JhZ2VLZXlGbjtcbiAgICAgIGlmIChrZXlGbikge1xuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU2Nyb2xsUG9zU3RhdGVTZXJ2aWNlID0gbmV3IFN0b3JlU3RhdGVTY3JvbGxQb3NTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2Uoa2V5Rm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvUmVzdG9yZU9wdGlvbnMuYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1vdXNlSGFuZGxlciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcyk7XG4gICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgSW5wdXRIYW5kbGVyKHRoaXMpO1xuXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2UgPSBuZXcgU2hvcnRjdXRTZXJ2aWNlKHRoaXMpO1xuICAgIHRoaXMuc2hvcnRjdXRTZXJ2aWNlLmFkZExpc3RlbmVyKHRoaXMuc2VsZWN0aW9uU2VydmljZSk7XG4gIH1cblxuICBvbkFjdGlvblRyaWdnZXJlZChhY3Rpb25JZDogQWN0aW9uSWQpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uSWQgPT09IFwiU1RBUlRfRURJVElOR1wiKSB7XG4gICAgICBpZiAodGhpcy5nZXRGb2N1c01vZGVsKSB7XG4gICAgICAgIGNvbnN0IGZtID0gdGhpcy5nZXRGb2N1c01vZGVsKCk7XG4gICAgICAgIGlmIChmbSkge1xuICAgICAgICAgIGNvbnN0IFtyb3dJZHgsIGNvbElkeF0gPSBmbS5nZXRGb2N1cygpO1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCkuaXNFZGl0YWJsZShyb3dJZHgsIGNvbElkeCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFJlbmRlckVkaXRvcihyb3dJZHgsIGNvbElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHVwZGF0ZU1vZGVsVmFsdWUoYXJlYUlkZW50OiBBcmVhSWRlbnQsIHJvd0luZGV4OiBudW1iZXIsIGNvbHVtbkluZGV4OiBudW1iZXIsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoYXJlYUlkZW50ID09PSBcImJvZHlcIikge1xuICAgICAgY29uc3QgYm9keUFyZWFNb2RlbCA9IHRoaXMudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoYXJlYUlkZW50KTtcbiAgICAgIGNvbnN0IG9rOiBib29sZWFuID0gYm9keUFyZWFNb2RlbC5zZXRWYWx1ZShyb3dJbmRleCwgY29sdW1uSW5kZXgsIHZhbHVlLCB0aGlzLnRhYmxlTW9kZWwpO1xuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIHRoaXMucmVzZXRFZGl0b3JSZW5kZXJlcigpO1xuICAgICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyLm9uTW9kZWxDaGFuZ2VkKEdlTW9kZWxDaGFuZ2VFdmVudC5jcmVhdGVTaW5nbGUocm93SW5kZXgsIGNvbHVtbkluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBpKCk6IFRhYmxlQXBpIHtcbiAgICByZXR1cm4gdGhpcy5hcGk7XG4gIH1cblxuICAvKlxuICAgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIGNvbXBvbmVudFxuICAgKi9cbiAgZmlyc3RJbml0KCkge1xuICAgIHRoaXMudGFibGVNb2RlbC5pbml0KCk7XG4gICAgdGhpcy5hdXRvUmVzdG9yZUNvbGxhcHNlZEV4cGFuZGVkU3RhdGUoKTtcbiAgICB0aGlzLmF1dG9SZXN0b3JlU29ydGluZ1N0YXRlKCk7XG4gICAgdGhpcy5yZXNldFNpemVPZldyYXBwZXJEaXYoKTtcbiAgICB0aGlzLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG4gICAgdGhpcy5hdXRvUmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7XG4gIH1cblxuICBjcmVhdGVHZU1vdXNlRXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCk6IEdlTW91c2VFdmVudCB7XG4gICAgY29uc3QgcmV0OiBHZU1vdXNlRXZlbnQgPSBuZXcgR2VNb3VzZUV2ZW50KCk7XG4gICAgcmV0Lm9yaWdpbmFsRXZlbnQgPSBtb3VzZUV2ZW50O1xuXG4gICAgaWYgKG1vdXNlRXZlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IG1vdXNlRXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgW3JldC5hcmVhSWRlbnQsIHJldC5zaWRlSWRlbnRdID0gdGhpcy5nZXRBcmVhQW5kU2lkZUlkZW50QnlBdHRyKHRhcmdldCk7XG4gICAgICByZXQucm93SW5kZXggPSB0aGlzLmdldE51bWJlckJ5QXR0cih0YXJnZXQsIFwiZGF0YS1yb3ctaW5kZXhcIik7XG4gICAgICByZXQuY29sdW1uSW5kZXggPSB0aGlzLmdldE51bWJlckJ5QXR0cih0YXJnZXQsIFwiZGF0YS1jb2wtaW5kZXhcIik7XG4gICAgICByZXQuYWN0aW9uID0gdGhpcy5nZXRTdHJpbmdCeUF0dHIodGFyZ2V0LCBcImRhdGEtZ2UtYWN0aW9uXCIpO1xuXG4gICAgICBjb25zdCBib2R5WSA9IG1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBib2R5WCA9IG1vdXNlRXZlbnQuY2xpZW50WCAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0TGVmdCAtIHRoaXMuYXJlYUJvZHlXZXN0R2VvLndpZHRoO1xuXG4gICAgICBpZiAocmV0LmFyZWFJZGVudCkge1xuICAgICAgICBjb25zdCBhbSA9IHRoaXMudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwocmV0LmFyZWFJZGVudCk7XG4gICAgICAgIHJldC5yb3dUb3AgPSBhbS5nZXRZUG9zQnlSb3dJbmRleChyZXQucm93SW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0LmNvbHVtbkxlZnQgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0WFBvc0J5Q29sdW1uSW5kZXgocmV0LmNvbHVtbkluZGV4KTtcblxuICAgICAgaWYgKG1vdXNlRXZlbnQuY3RybEtleSAmJiBtb3VzZUV2ZW50LmFsdEtleSkge1xuICAgICAgICBjb25zdCBib2R5WSA9IG1vdXNlRXZlbnQuY2xpZW50WSAtIHRoaXMuaG9zdEVsZW1lbnQub2Zmc2V0VG9wIC0gdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGJvZHlYID0gbW91c2VFdmVudC5jbGllbnRYIC0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0IC0gdGhpcy5hcmVhQm9keVdlc3RHZW8ud2lkdGg7XG4gICAgICAgIHRoaXMuZGVidWdPbmNlKGJvZHlYLCBib2R5WSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBvbk1vdXNlRG93bihtb3VzZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICBpZiAobW91c2VFdmVudC5jb2x1bW5JbmRleCA+IC0xXG4gICAgICAmJiBtb3VzZUV2ZW50LmFjdGlvblxuICAgICAgJiYgW1wicmVzaXplLWNvbHVtblwiLCBcImRyYWctY29sdW1uXCJdLmluY2x1ZGVzKG1vdXNlRXZlbnQuYWN0aW9uKSkge1xuXG4gICAgICB0aGlzLm1vdXNlU3RhcnRXaWR0aCA9IHRoaXMudGFibGVNb2RlbC5nZXRDb2x1bW5XaWR0aChtb3VzZUV2ZW50LmNvbHVtbkluZGV4KTtcbiAgICAgIHRoaXMubW91c2VTdGFydEFjdGlvbiA9IG1vdXNlRXZlbnQuYWN0aW9uO1xuICAgICAgdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPSBtb3VzZUV2ZW50LmNvbHVtbkluZGV4O1xuXG4gICAgICBpZiAodGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSBcImRyYWctY29sdW1uXCIpIHtcbiAgICAgICAgdGhpcy5kcmFnRnJvbSA9IHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1vdXNlRHJhZ2dpbmdPbkZyYW1lKG1vdXNlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlRHJhZ2dpbmcobW91c2VFdmVudCk7XG4gICAgdGhpcy5tb3VzZUV2ZW50ID0gbW91c2VFdmVudDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4ID4gLTFcbiAgICAgICYmIHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJyZXNpemUtY29sdW1uXCJcbiAgICAgICYmIHRoaXMudGFibGVPcHRpb25zLmNvbHVtbnNSZXNpemFibGUpIHtcbiAgICAgIHRoaXMucmVzaXplQ29sdW1uKG1vdXNlRXZlbnQpO1xuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJkcmFnLWNvbHVtblwiXG4gICAgICAmJiBtb3VzZUV2ZW50LmNvbHVtbkluZGV4ID4gLTFcbiAgICAgICYmIHRoaXMudGFibGVPcHRpb25zLmNvbHVtbnNEcmFnZ2FibGUpIHtcblxuICAgICAgdGhpcy5kcmFnZ2luZ1RhcmdldENvbHVtbkluZGV4ID0gbW91c2VFdmVudC5jb2x1bW5JbmRleDtcbiAgICAgIHRoaXMuZHJhZ1RvID0gdGhpcy5kcmFnZ2luZ1RhcmdldENvbHVtbkluZGV4O1xuXG4gICAgICBpZiAodGhpcy5kcmFnRnJvbSA+IC0xICYmIHRoaXMuZHJhZ1RvID4gLTEgJiYgdGhpcy5kcmFnRnJvbSAhPT0gdGhpcy5kcmFnVG8pIHtcbiAgICAgICAgdGhpcy50YWJsZU1vZGVsLmNoYW5nZUNvbHVtbk9yZGVyKHRoaXMuZHJhZ0Zyb20sIHRoaXMuZHJhZ1RvKTtcbiAgICAgICAgdGhpcy5kcmFnRnJvbSA9IHRoaXMuZHJhZ1RvO1xuICAgICAgICB0aGlzLnJlc2V0U2l6ZU9mV3JhcHBlckRpdigpO1xuICAgICAgICB0aGlzLmFkanVzdENvbnRhaW5lcnNBbmRSb3dzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICB9XG4gIH1cblxuICBtb3VzZURyYWdnaW5nRW5kT25GcmFtZShtb3VzZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZURyYWdnaW5nRW5kKG1vdXNlRXZlbnQpO1xuICAgIHRoaXMuZHJhZ2dpbmdUYXJnZXRDb2x1bW5JbmRleCA9IC0xO1xuXG4gICAgaWYgKHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJyZXNpemUtY29sdW1uXCIpIHtcbiAgICAgIHRoaXMucmVzaXplQ29sdW1uKG1vdXNlRXZlbnQpO1xuXG4gICAgfSBlbHNlIGlmICh0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPT09IFwiZHJhZy1jb2x1bW5cIikge1xuICAgICAgdGhpcy5yZXBhaW50KCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VTdGFydFdpZHRoID0gLTE7XG4gICAgdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPSAtMTtcbiAgICB0aGlzLmRyYWdGcm9tID0gLTE7XG4gICAgdGhpcy5kcmFnVG8gPSAtMTtcbiAgICB0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPSBcIlwiO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemVDb2x1bW4obW91c2VFdmVudDogR2VNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy50YWJsZU1vZGVsLnNldENvbHVtbldpZHRoKHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4LCB0aGlzLm1vdXNlU3RhcnRXaWR0aCArIG1vdXNlRXZlbnQuZHJhZ2dpbmdYKTtcbiAgICB0aGlzLnRhYmxlTW9kZWwucmVjYWxjUGFkZGluZygpO1xuICAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJzQW5kUm93cygpO1xuICB9XG5cbiAgbW91c2VNb3ZlKG1vdXNlTW92ZUV2ZW50OiBHZU1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZU1vdmVkKG1vdXNlTW92ZUV2ZW50KTtcbiAgICB0aGlzLmFkanVzdEhvdmVyUm93cyhtb3VzZU1vdmVFdmVudCk7XG4gICAgdGhpcy5hZGp1c3RIb3ZlckNvbHVtbnMobW91c2VNb3ZlRXZlbnQpO1xuICB9XG5cbiAgY29udGV4dG1lbnUobW91c2VNb3ZlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbkNvbnRleHRtZW51KG1vdXNlTW92ZUV2ZW50KTtcbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZENvbGxhcHNlQWxsKGV4cGFuZDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBib2R5QXJlYU1vZGVsID0gdGhpcy50YWJsZU1vZGVsLmdldEJvZHlNb2RlbCgpO1xuICAgIGlmIChib2R5QXJlYU1vZGVsIGluc3RhbmNlb2YgQXJlYU1vZGVsVHJlZSkge1xuICAgICAgY29uc3QgYW10OiBBcmVhTW9kZWxUcmVlPGFueT4gPSBib2R5QXJlYU1vZGVsO1xuICAgICAgYW10LnRvZ2dsZUV4cGFuZENvbGxhcHNlQWxsKGV4cGFuZCk7XG4gICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICAgIHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2U/LmNvbGxhcHNlZFN0YXRlQWxsKGV4cGFuZCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUm93Q2hlY2tib3gocm93SWR4OiBudW1iZXIsIF9jb2xJZHg6IG51bWJlciwgYXJlYUlkZW50OiBBcmVhSWRlbnQpIHtcbiAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0QXJlYU1vZGVsKGFyZWFJZGVudCk7XG4gICAgY29uc3Qgc3RhdGUgPSBhcmVhTW9kZWwuaXNSb3dDaGVja2VkKHJvd0lkeCk7XG4gICAgY29uc3Qgc2VsID0gKHN0YXRlID09PSB1bmRlZmluZWQgfHwgc3RhdGUgPT09IFwic2VtaVwiIHx8IHN0YXRlID09PSBcIm5vbmVcIik7XG4gICAgYXJlYU1vZGVsLnNldFJvd0NoZWNrZWQocm93SWR4LCBzZWwpO1xuICAgIHRoaXMucmVwYWludCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IGFyZWFNb2RlbC5yb3dTZWxlY3Rpb25Nb2RlbD8uZ2V0Q2hlY2tlZFJvd3MoKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25DaGVja2JveENoYW5nZWQoc2VsZWN0ZWRSb3dzID8gc2VsZWN0ZWRSb3dzIDogW10pO1xuICB9XG5cbiAgb25Nb3VzZUNsaWNrZWQoZXZ0OiBHZU1vdXNlRXZlbnQsIHByZXZpb3VzRXZ0OiBHZU1vdXNlRXZlbnQgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkaXJ0eSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5vbk1vdXNlQ2xpY2tlZChldnQsIHByZXZpb3VzRXZ0KTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb3VzZUNsaWNrZWQoZXZ0KTtcbiAgICBpZiAoZGlydHkpIHtcbiAgICAgIHRoaXMuZGVib3VuY2UodGhpcy5yZXBhaW50LmJpbmQodGhpcyksIDEwKTtcbiAgICB9XG4gIH1cblxuICBleHRlcm5hbEZpbHRlckNoYW5nZWQoKSB7XG4gICAgY29uc3QgcHJlZGljdEZuID0gdGhpcy50YWJsZU9wdGlvbnMuZXh0ZXJuYWxGaWx0ZXJGdW5jdGlvbjtcbiAgICBpZiAocHJlZGljdEZuKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgIHRoaXMudGFibGVNb2RlbC5leHRlcm5hbEZpbHRlckNoYW5nZWQocHJlZGljdEZuKTtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRGJsQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgX3Jvd0lkeDogbnVtYmVyLCBjb2xJZHg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbERlZiA9IHRoaXMudGFibGVNb2RlbC5nZXRDb2x1bW5EZWYoY29sSWR4KTtcbiAgICBpZiAoY29sRGVmPy5zb3J0YWJsZSAmJiBjb2xEZWYuc29ydGFibGUoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IHN0YXRlczogU29ydFN0YXRlW10gPSBjb2xEZWYuc29ydFN0YXRlc09yZGVyID8gY29sRGVmLnNvcnRTdGF0ZXNPcmRlciA6IHRoaXMudGFibGVPcHRpb25zLnNvcnRPcmRlcjtcbiAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZTogU29ydFN0YXRlID0gY29sRGVmLnNvcnRTdGF0ZSA/PyBcIlwiO1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBzdGF0ZXNbKHN0YXRlcy5pbmRleE9mKGN1cnJlbnRTdGF0ZSkgKyAxKSAlIHN0YXRlcy5sZW5ndGhdO1xuXG4gICAgICBjb25zdCBzb3J0SXRlbSA9IG5ldyBTb3J0SXRlbShjb2xJZHgsIG5ld1N0YXRlKTtcbiAgICAgIGNvbnN0IGRvbmUgPSB0aGlzLnRhYmxlTW9kZWwuZG9Tb3J0KFtzb3J0SXRlbV0pO1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgdGhpcy50YWJsZU1vZGVsLmdldENvbHVtbkRlZnMoKT8uZm9yRWFjaChjZCA9PiBjZC5zb3J0U3RhdGUgPSBcIlwiKTtcbiAgICAgICAgY29sRGVmLnNvcnRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXBhaW50KCk7XG4gICAgICB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2U/LnNldFNvcnRJdGVtcyhbc29ydEl0ZW1dKTtcbiAgICB9XG4gIH1cblxuICBvbktleUV2ZW50KGV2dDogR2VLZXlFdmVudCkge1xuICAgIHRoaXMua2V5RXZlbnQgPSBldnQ7XG4gICAgY29uc29sZS5pbmZvKHRoaXMua2V5RXZlbnQpOyAvLyBUT0RPXG4gICAgaWYgKHRoaXMua2V5RXZlbnQuc3RhdHVzID09PSBcInVwXCIgJiYgdGhpcy5rZXlFdmVudC5vcmlnaW5hbEV2ZW50Py5jb2RlID09PSBcIkYyXCIpIHtcbiAgICAgIHRoaXMua2V5RXZlbnQub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnNvbGUuaW5mbyhcIkYyLi4uXCIpO1xuICAgICAgLy8gVE9ETyAgY2hlY2ssIGlmIHdlIGNhbiBzdGFydCB0byBlZGl0IGEgY2VsbFxuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdGlvbk1vZGVsKCkge1xuICAgIGlmICh0aGlzLmdldFNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICB0aGlzLmdldFNlbGVjdGlvbk1vZGVsKCk/LmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWJ1Z09uY2UoXG4gICAgYm9keVg6IG51bWJlcixcbiAgICBib2R5WTogbnVtYmVyXG4gICkge1xuICAgIGNvbnNvbGUuY2xlYXIoKTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcFwiLCB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcCk7IC8vIHBhZ2VZIG9mIHRhYmxlIHRhZ1xuICAgIGNvbnNvbGUuaW5mbyhcInRoaXMuaG9zdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XCIsIHRoaXMuaG9zdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KTsgLy8gaGVpZ2h0IG9mIHZpc2libGUgc2Nyb2xsIGFyZWFcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLnNjcm9sbFZpZXdwb3J0VG9wXCIsIHRoaXMuc2Nyb2xsVG9wKTsgLy8gYW1vdW50IG9mIHB4IHNjcm9sbGVkIHRvIHRvcCAoaW5pdGlhbCA6IDApXG4gICAgY29uc29sZS5pbmZvKFwidGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHRcIiwgdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQpO1xuICAgIGNvbnNvbGUuaW5mbyhcImJvZHlZXCIsIGJvZHlZKTtcbiAgICBjb25zb2xlLmluZm8oXCJib2R5WFwiLCBib2R5WCk7XG4gICAgY29uc29sZS5pbmZvKFwicm93c1wiLCB0aGlzLmZpcnN0VmlzaWJsZVJvd0luZGV4KTtcbiAgICBjb25zb2xlLmluZm8oXCJcIik7XG4gICAgY29uc29sZS5pbmZvKFwidGhpcy50YWJsZU1vZGVsXCIsIHRoaXMudGFibGVNb2RlbCk7XG4gICAgY29uc29sZS5pbmZvKFwiXCIpO1xuICAgIGNvbnNvbGUuaW5mbyhcInRoaXMubW91c2VNb3ZlRXZlbnQuY2xpZW50WFwiLCB0aGlzLm1vdXNlSGFuZGxlci5tb3VzZUV2ZW50Py5jbGllbnRYKTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmhvc3RFbGVtZW50Lm9mZnNldExlZnRcIiwgdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0KTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aFwiLCB0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMgJiYgdGhpcy5zdG9yZVNjcm9sbFBvc1N0YXRlU2VydmljZSkge1xuICAgICAgY29uc3QgYXV0b1Jlc3RvcmVPcHRpb25zID0gdGhpcy50YWJsZU9wdGlvbnMuYXV0b1Jlc3RvcmVPcHRpb25zO1xuICAgICAgaWYgKGF1dG9SZXN0b3JlT3B0aW9ucy5hdXRvUmVzdG9yZVNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IHRoaXMuc3RvcmVTY3JvbGxQb3NTdGF0ZVNlcnZpY2UuZ2V0U2Nyb2xsT2Zmc2V0KCk7XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvKC4uLnNjcm9sbE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlU29ydGluZ1N0YXRlKCkge1xuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9ucz8uYXV0b1Jlc3RvcmVPcHRpb25zPy5hdXRvUmVzdG9yZVNvcnRpbmdTdGF0ZSAmJiB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHNvcnRJdGVtcyA9IHRoaXMuc3RvcmVTb3J0aW5nU2VydmljZS5nZXRTb3J0SXRlbXMoKTtcbiAgICAgIGlmIChzb3J0SXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCk7XG4gICAgICAgIGFyZWFNb2RlbC5kb1NvcnQoc29ydEl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbnM/LmF1dG9SZXN0b3JlT3B0aW9ucz8uZ2V0Um93SWQgJiYgdGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZSkge1xuICAgICAgY29uc3QgYXV0b1Jlc3RvcmVPcHRpb25zID0gdGhpcy50YWJsZU9wdGlvbnMuYXV0b1Jlc3RvcmVPcHRpb25zO1xuICAgICAgY29uc3QgZ2V0Um93SWQgPSBhdXRvUmVzdG9yZU9wdGlvbnMuZ2V0Um93SWQ7XG4gICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSAmJiBnZXRSb3dJZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UuY29sbGFwc2VkRXhwYW5kZWRTdGF0ZUdldCgpO1xuICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0QXJlYU1vZGVsKFwiYm9keVwiKTtcbiAgICAgICAgaWYgKGFyZWFNb2RlbCBpbnN0YW5jZW9mIEFyZWFNb2RlbFRyZWUpIHtcbiAgICAgICAgICBjb25zdCBhbXRyOiBBcmVhTW9kZWxUcmVlPGFueT4gPSBhcmVhTW9kZWw7XG4gICAgICAgICAgY29uc3Qgcm93Q291bnQgPSBhcmVhTW9kZWwuZ2V0Um93Q291bnQoKTtcblxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3c6IFRyZWVSb3c8YW55PiB8IHVuZGVmaW5lZCA9IGFyZWFNb2RlbC5nZXRSb3dCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgICBpZiAoc3RhdGUuYWxsRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuYWxsQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJZCA9IGdldFJvd0lkKHJvdy5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gXCJleHBhbmRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSAodGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZS5jb2xsYXBzZWRFeHBhbmRlZFN0YXRlSW5jbHVkZXMocm93SWQpKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubW9kZSA9PT0gXCJjb2xsYXBzZWRcIikge1xuICAgICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gKCF0aGlzLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlLmNvbGxhcHNlZEV4cGFuZGVkU3RhdGVJbmNsdWRlcyhyb3dJZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbXRyLnJlY2FsY1Zpc2libGVUcmVlUm93cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuIl19
@@ -1,2 +0,0 @@
1
- export declare const actionIds: readonly ["START_EDITING", "TOGGLE_SELECTION", "SELECT_ALL", "DESELECT_ALL"];
2
- export type ActionId = typeof actionIds[number];
@@ -1,6 +0,0 @@
1
- import { ActionId } from "./action-id.type";
2
- export declare class OsxShortcutActionIdMapping {
3
- get(): {
4
- [key: string]: ActionId;
5
- };
6
- }
@@ -1,4 +0,0 @@
1
- import { ActionId } from "./action-id.type";
2
- export type ShortcutActionIdMapping = {
3
- [key: string]: ActionId;
4
- };
@@ -1,17 +0,0 @@
1
- import { TableScope } from "../table-scope";
2
- import { OnActionTriggeredIf } from "./on-action-triggered.if";
3
- export declare class ShortcutService {
4
- protected tableScope: TableScope;
5
- private shortcutActionIdMapping;
6
- private listener;
7
- constructor(tableScope: TableScope);
8
- addListener(listener: OnActionTriggeredIf): void;
9
- init(): void;
10
- private isMacintosh;
11
- private isLocalhost;
12
- private onKeyDown;
13
- private emit;
14
- private findEnty;
15
- private areTokensEquals;
16
- private getTokenByEvent;
17
- }
@@ -1,6 +0,0 @@
1
- import { ActionId } from "./action-id.type";
2
- export declare class WindowsShortcutActionIdMapping {
3
- get(): {
4
- [key: string]: ActionId;
5
- };
6
- }
@@ -1,12 +0,0 @@
1
- import { CheckedType } from "../data/common/checked-type";
2
- import { CheckboxModelIf } from "./checkbox-model.if";
3
- export declare class CheckboxModel<T> implements CheckboxModelIf<T> {
4
- protected checkedRows: Array<T>;
5
- getCheckedRows(): T[];
6
- setCheckedRows(rows: T[]): void;
7
- addCheckedRows(rows: T[]): void;
8
- checkRow(row: T, sel: boolean): void;
9
- isRowChecked(row: T): CheckedType;
10
- checkAll(_rows: T[]): void;
11
- private removeSelectedRow;
12
- }
@@ -1,9 +0,0 @@
1
- import { CheckedType } from "../data/common/checked-type";
2
- export interface CheckboxModelIf<T> {
3
- getCheckedRows(): T[];
4
- setCheckedRows(value: T[]): void;
5
- addCheckedRows(value: T[]): void;
6
- checkRow(row: T, check: boolean): void;
7
- isRowChecked(row: T): CheckedType;
8
- checkAll(value: T[]): void;
9
- }
@@ -1,17 +0,0 @@
1
- import { CheckedType } from "../data/common/checked-type";
2
- import { CheckboxModelIf } from "./checkbox-model.if";
3
- import { TreeRowIf } from "../data/common/tree-row-if";
4
- export declare class TreeCheckboxModel<T extends TreeRowIf<any>> implements CheckboxModelIf<T> {
5
- protected allRootNodes: T[];
6
- constructor(allRootNodes?: T[]);
7
- checkRow(row: T, sel: boolean): void;
8
- checkAll(_arr: T[]): void;
9
- getCheckedRows(): T[];
10
- isRowChecked(row: T): CheckedType;
11
- setCheckedRows(rows: T[]): void;
12
- addCheckedRows(rows: T[]): void;
13
- private autoCheckParent;
14
- private areAllChildrenChecked;
15
- private areAllChildrenUnchecked;
16
- private addSelectedRecursive;
17
- }
@@ -1,24 +0,0 @@
1
- export declare const bodyLeft: {
2
- body: string[];
3
- };
4
- export declare const bodyCenter: {
5
- body: string[];
6
- };
7
- export declare const bodyRight: {
8
- body: string[];
9
- };
10
- export declare const allLeft: {
11
- header: string[];
12
- body: string[];
13
- footer: string[];
14
- };
15
- export declare const allCenter: {
16
- header: string[];
17
- body: string[];
18
- footer: string[];
19
- };
20
- export declare const allRight: {
21
- header: string[];
22
- body: string[];
23
- footer: string[];
24
- };
@@ -1,5 +0,0 @@
1
- import { AreaObjectMap } from "./area-map";
2
- import { CellRendererIf } from "../../renderer/cell-render.if";
3
- export declare class AreaMapFactory {
4
- static body(bodyRenderer: CellRendererIf): AreaObjectMap<CellRendererIf>;
5
- }
@@ -1,7 +0,0 @@
1
- import { AreaObjectMapType } from "./area-map.type";
2
- export declare class AreaObjectMap<T> implements AreaObjectMapType<T> {
3
- header?: T | undefined;
4
- body?: T | undefined;
5
- footer?: T | undefined;
6
- constructor(header?: T | undefined, body?: T | undefined, footer?: T | undefined);
7
- }
@@ -1,5 +0,0 @@
1
- export type AreaObjectMapType<T> = {
2
- header?: T | undefined;
3
- body?: T | undefined;
4
- footer?: T | undefined;
5
- };
@@ -1,13 +0,0 @@
1
- import { AreaModelIf } from "../tablemodel/areamodel/area-model.if";
2
- import { AreaIdent } from "../tablemodel/area-ident.type";
3
- export interface ArgsRenderCellDiv {
4
- areaModel: AreaModelIf;
5
- areaIdent: AreaIdent;
6
- rowIndex: number;
7
- index: number;
8
- left: number;
9
- width: number;
10
- height: number;
11
- top: number;
12
- parent: HTMLDivElement;
13
- }
@@ -1,3 +0,0 @@
1
- export type BooleanFunction = () => boolean;
2
- export declare const TrueFn: () => boolean;
3
- export declare const FalseFn: () => boolean;
@@ -1,17 +0,0 @@
1
- export declare class CellRange {
2
- r1: number;
3
- c1: number;
4
- r2: number;
5
- c2: number;
6
- constructor(r1: number, c1: number, r2: number, c2: number);
7
- static create(params: {
8
- rowIndex1: number;
9
- columnIndex1: number;
10
- rowIndex2: number;
11
- columnIndex2: number;
12
- }): CellRange;
13
- static singleCell(rowIndex: number, columnIndex: number): CellRange;
14
- static singleRow(rowIndex: number): CellRange;
15
- static singleColumn(columnIndex: number): CellRange;
16
- isInRange(rowIndex: number, columnIndex: number): boolean;
17
- }
@@ -1,13 +0,0 @@
1
- import { SizeIf } from "./size.if";
2
- import { ColumnDefIf } from "../tablemodel/column/column-def.if";
3
- import { CellRendererIf } from "../../renderer/cell-render.if";
4
- import { AreaObjectMapType } from "./area-map.type";
5
- export declare class CheckboxColumn implements ColumnDefIf {
6
- property: string;
7
- headerLabel: string;
8
- width: SizeIf;
9
- minWidth: SizeIf;
10
- maxWidth: SizeIf;
11
- rendererMap: AreaObjectMapType<CellRendererIf>;
12
- classes: AreaObjectMapType<string[]>;
13
- }
@@ -1 +0,0 @@
1
- export type CheckedType = 'none' | 'semi' | 'full';
@@ -1,5 +0,0 @@
1
- export declare class GeCellIndices {
2
- rowIndex: number;
3
- columnIndex: number;
4
- constructor(rowIndex?: number, columnIndex?: number);
5
- }
@@ -1,5 +0,0 @@
1
- export declare class GeKeyEvent {
2
- status: 'down' | 'up';
3
- originalEvent?: KeyboardEvent | undefined;
4
- constructor(status?: 'down' | 'up', originalEvent?: KeyboardEvent | undefined);
5
- }
@@ -1,6 +0,0 @@
1
- import { GeCellIndices } from "./ge-cell-indices";
2
- export declare class GeModelChangeEvent {
3
- cells: GeCellIndices[];
4
- constructor(cells: GeCellIndices[]);
5
- static createSingle(rowIndex: number, columnIndex: number): GeModelChangeEvent;
6
- }
@@ -1,17 +0,0 @@
1
- import { AreaIdent } from "../../tablemodel/area-ident.type";
2
- import { SideIdent } from "../../side-ident.type";
3
- export declare class GeMouseEvent {
4
- rowIndex: number;
5
- rowTop: number;
6
- columnIndex: number;
7
- columnLeft: number;
8
- areaIdent?: AreaIdent | undefined;
9
- sideIdent?: SideIdent | undefined;
10
- originalEvent?: MouseEvent | undefined;
11
- clickCount: number;
12
- draggingX: number;
13
- draggingY: number;
14
- action: string | null;
15
- constructor(rowIndex?: number, rowTop?: number, columnIndex?: number, columnLeft?: number, areaIdent?: AreaIdent | undefined, sideIdent?: SideIdent | undefined, originalEvent?: MouseEvent | undefined, clickCount?: number, draggingX?: number, draggingY?: number, action?: string | null);
16
- clone(): GeMouseEvent;
17
- }
@@ -1,5 +0,0 @@
1
- export declare class IndexAndPx {
2
- index: number;
3
- px: number;
4
- constructor(index: number, px: number);
5
- }
@@ -1,6 +0,0 @@
1
- import { SizeIf } from "./size.if";
2
- export declare class Size implements SizeIf {
3
- value: number;
4
- unit: 'px' | '%';
5
- constructor(value?: number, unit?: 'px' | '%');
6
- }
@@ -1,4 +0,0 @@
1
- export interface SizeIf {
2
- value: number;
3
- unit: 'px' | '%';
4
- }