@guiexpert/table 0.0.2 → 1.0.2
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.
- package/.eslintrc.json +42 -0
- package/LICENSE +35 -0
- package/README.md +102 -0
- package/jest.config.ts +18 -0
- package/ng-package.json +7 -0
- package/package.json +10 -20
- package/project.json +47 -0
- package/{index.d.ts → src/index.ts} +72 -20
- package/src/lib/table/action/action-id.type.ts +24 -0
- package/{lib/table/action/on-action-triggered.if.d.ts → src/lib/table/action/on-action-triggered.if.ts} +4 -1
- package/src/lib/table/action/osx-shortcut-actionId-mapping.ts +29 -0
- package/src/lib/table/action/shortcut-actionid-mapping.type.ts +3 -0
- package/src/lib/table/action/shortcut.service.ts +134 -0
- package/src/lib/table/action/windows-shortcut-actionId-mapping.ts +27 -0
- package/src/lib/table/checkbox/checkbox-model.if.ts +16 -0
- package/src/lib/table/checkbox/checkbox-model.ts +62 -0
- package/src/lib/table/checkbox/tree-checkbox-model.ts +123 -0
- package/src/lib/table/color/color-rgb.if.ts +7 -0
- package/src/lib/table/color/color-rgb.ts +10 -0
- package/src/lib/table/color/ge-css-color-util.ts +43 -0
- package/src/lib/table/color/three-color-gradient-arg.if.ts +10 -0
- package/src/lib/table/color/three-color-gradient-arg.ts +14 -0
- package/src/lib/table/color/two-color-gradient-arg.if.ts +8 -0
- package/src/lib/table/color/two-color-gradient-arg.ts +12 -0
- package/src/lib/table/css-vars.ts +243 -0
- package/src/lib/table/data/common/aligns.ts +19 -0
- package/src/lib/table/data/common/area-map-factory.ts +14 -0
- package/src/lib/table/data/common/area-map.ts +11 -0
- package/src/lib/table/data/common/area-map.type.ts +5 -0
- 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
- package/src/lib/table/data/common/args-render-cell-div.ts +18 -0
- package/src/lib/table/data/common/boolean-function.ts +4 -0
- package/src/lib/table/data/common/cell-range.ts +57 -0
- package/src/lib/table/data/common/checkbox-column-def.ts +25 -0
- package/src/lib/table/data/common/checked-type.ts +1 -0
- package/src/lib/table/data/common/event/ge-cell-indices.ts +9 -0
- package/src/lib/table/data/common/event/ge-key-event.ts +10 -0
- package/src/lib/table/data/common/event/ge-model-change-event.ts +13 -0
- package/src/lib/table/data/common/event/ge-mouse-event.ts +38 -0
- package/src/lib/table/data/common/event/input/table-cell-update-event.if.ts +10 -0
- package/src/lib/table/data/common/event/input/table-cell-update-event.ts +14 -0
- package/src/lib/table/data/common/index-and-px.ts +9 -0
- package/src/lib/table/data/common/size.if.ts +4 -0
- package/src/lib/table/data/common/size.ts +9 -0
- package/src/lib/table/data/common/sizes.ts +35 -0
- package/src/lib/table/data/common/sort-item.ts +11 -0
- package/src/lib/table/data/common/tree-row-if.ts +11 -0
- package/src/lib/table/data/common/tree-row.ts +16 -0
- package/src/lib/table/data/common/value-label.if.ts +6 -0
- package/src/lib/table/data/common/value-label.ts +13 -0
- package/src/lib/table/data/div-scope.type.ts +5 -0
- package/src/lib/table/data/event/mouse-target-data.ts +45 -0
- package/src/lib/table/data/geo-data.ts +13 -0
- package/src/lib/table/data/options/auto-restore-options.if.ts +21 -0
- package/src/lib/table/data/options/auto-restore-options.ts +50 -0
- package/src/lib/table/data/options/default-row-heights.if.ts +5 -0
- package/src/lib/table/data/options/default-row-heights.ts +10 -0
- package/src/lib/table/data/options/icon.if.ts +7 -0
- package/src/lib/table/data/options/icon.ts +10 -0
- package/{lib/table/data/options/sorted-options.if.d.ts → src/lib/table/data/options/sorted-options.if.ts} +6 -3
- package/src/lib/table/data/options/sorted-options.ts +15 -0
- package/src/lib/table/data/options/table-options.if.ts +54 -0
- package/src/lib/table/data/options/table-options.ts +66 -0
- package/src/lib/table/data/options/tree-options.if.ts +10 -0
- package/src/lib/table/data/options/tree-options.ts +32 -0
- package/src/lib/table/data/table-model-and-options.if.ts +8 -0
- package/src/lib/table/data/table-model-and-options.ts +13 -0
- package/src/lib/table/data/tablemodel/area-ident.type.ts +18 -0
- package/src/lib/table/data/tablemodel/areamodel/abstract-area-model.ts +183 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.ts +59 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-cell-groups.ts +210 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-hidden.ts +120 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.ts +23 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-object-array.ts +105 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model-tree.ts +215 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model.if.ts +186 -0
- package/src/lib/table/data/tablemodel/areamodel/area-model.ts +110 -0
- package/src/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.ts +61 -0
- package/src/lib/table/data/tablemodel/areamodel/has-default-row-height-if.ts +3 -0
- package/src/lib/table/data/tablemodel/cellgroup/cell-group-ext.ts +167 -0
- package/src/lib/table/data/tablemodel/cellgroup/cell-group.if.ts +12 -0
- package/src/lib/table/data/tablemodel/cellgroup/cell-group.ts +18 -0
- package/src/lib/table/data/tablemodel/cellgroup/cellgroup-factory.ts +148 -0
- package/src/lib/table/data/tablemodel/column/column-def.if.ts +28 -0
- package/src/lib/table/data/tablemodel/column/column-def.ts +104 -0
- package/src/lib/table/data/tablemodel/padding.ts +9 -0
- package/src/lib/table/data/tablemodel/table-model.if.ts +90 -0
- package/src/lib/table/data/tablemodel/table-model.ts +352 -0
- package/src/lib/table/ele-scope.ts +283 -0
- package/src/lib/table/event-adapter.ts +28 -0
- package/src/lib/table/event-listener.if.ts +19 -0
- package/src/lib/table/factory/table-factory.ts +378 -0
- package/src/lib/table/factory/tree-factory.ts +51 -0
- package/src/lib/table/focus/focus-model.if.ts +14 -0
- package/src/lib/table/focus/focus-model.ts +48 -0
- package/{lib/table/focus/focus.type.d.ts → src/lib/table/focus/focus.type.ts} +3 -0
- package/src/lib/table/input-handler.ts +34 -0
- package/src/lib/table/mouse-handler.ts +236 -0
- package/src/lib/table/render-scope.ts +936 -0
- package/src/lib/table/renderer/cell-group-ext-cell-renderer.ts +27 -0
- package/{lib/table/renderer/cell-render.if.d.ts → src/lib/table/renderer/cell-render.if.ts} +10 -1
- package/src/lib/table/renderer/checkbox-boolean-property-cell-renderer.ts +63 -0
- package/src/lib/table/renderer/checkbox-cell-renderer.ts +39 -0
- package/src/lib/table/renderer/date-to-int-date-cell-renderer.ts +39 -0
- package/src/lib/table/renderer/date-to-iso-cell-renderer.ts +25 -0
- package/src/lib/table/renderer/date-to-locale-date-cell-renderer.ts +24 -0
- package/src/lib/table/renderer/date-to-tec-cell-renderer.ts +28 -0
- package/{lib/table/renderer/edit/edit-cell-renderer.type.d.ts → src/lib/table/renderer/edit/edit-cell-renderer.type.ts} +1 -0
- package/src/lib/table/renderer/edit/edit-input-pipe-for-number.ts +6 -0
- package/src/lib/table/renderer/edit/edit-input-pipe.if.ts +7 -0
- package/src/lib/table/renderer/edit/input-cell-renderer.ts +41 -0
- package/src/lib/table/renderer/edit/select-cell-renderer.ts +60 -0
- package/src/lib/table/renderer/male-female-to-icon-cell-renderer.ts +26 -0
- package/src/lib/table/renderer/number-cell-renderer.ts +38 -0
- package/src/lib/table/renderer/progress-bar-cell-renderer.ts +60 -0
- package/src/lib/table/renderer/renderer.ts +11 -0
- package/src/lib/table/renderer/star-rating-cell-renderer.ts +45 -0
- package/src/lib/table/renderer/true-false-cell-renderer.ts +28 -0
- package/src/lib/table/selection/selection-model.if.ts +20 -0
- package/src/lib/table/selection/selection-model.ts +109 -0
- package/src/lib/table/selection/selection-service.ts +120 -0
- package/{lib/table/selection/selection.type.d.ts → src/lib/table/selection/selection.type.ts} +3 -0
- package/src/lib/table/service/abstract-store-state.service.ts +105 -0
- package/src/lib/table/service/convenience-dom.service.ts +548 -0
- package/src/lib/table/service/data/collapsed-expanded.data.ts +11 -0
- package/src/lib/table/service/data/html-style.type.ts +1 -0
- package/src/lib/table/service/dom-service.if.ts +16 -0
- package/src/lib/table/service/ge-filter.service.ts +123 -0
- package/src/lib/table/service/simple-dom-service.ts +46 -0
- package/src/lib/table/service/sorter.service.ts +30 -0
- package/src/lib/table/service/store-state-collapsed-expand.service.ts +76 -0
- package/src/lib/table/service/store-state-scroll-pos.service.ts +40 -0
- package/src/lib/table/service/store-state-sorting.service.ts +41 -0
- package/src/lib/table/service/tree-row.service.ts +31 -0
- package/src/lib/table/table-api.ts +61 -0
- package/src/lib/table/table-scope.ts +433 -0
- package/src/test-setup.ts +1 -0
- package/tsconfig.json +22 -0
- package/tsconfig.lib.json +19 -0
- package/tsconfig.lib.prod.json +7 -0
- package/tsconfig.spec.json +20 -0
- package/esm2020/guiexpert-table.mjs +0 -5
- package/esm2020/index.mjs +0 -108
- package/esm2020/lib/table/action/action-id.type.mjs +0 -20
- package/esm2020/lib/table/action/on-action-triggered.if.mjs +0 -2
- package/esm2020/lib/table/action/osx-shortcut-actionId-mapping.mjs +0 -17
- package/esm2020/lib/table/action/shortcut-actionid-mapping.type.mjs +0 -2
- package/esm2020/lib/table/action/shortcut.service.mjs +0 -105
- package/esm2020/lib/table/action/windows-shortcut-actionId-mapping.mjs +0 -15
- package/esm2020/lib/table/checkbox/checkbox-model.if.mjs +0 -2
- package/esm2020/lib/table/checkbox/checkbox-model.mjs +0 -52
- package/esm2020/lib/table/checkbox/tree-checkbox-model.mjs +0 -106
- package/esm2020/lib/table/data/common/aligns.mjs +0 -19
- package/esm2020/lib/table/data/common/area-map-factory.mjs +0 -7
- package/esm2020/lib/table/data/common/area-map.mjs +0 -8
- package/esm2020/lib/table/data/common/area-map.type.mjs +0 -2
- package/esm2020/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +0 -2
- package/esm2020/lib/table/data/common/args-render-cell-div.mjs +0 -2
- package/esm2020/lib/table/data/common/boolean-function.mjs +0 -3
- package/esm2020/lib/table/data/common/cell-range.mjs +0 -27
- package/esm2020/lib/table/data/common/checkbox-column.mjs +0 -15
- package/esm2020/lib/table/data/common/checked-type.mjs +0 -2
- package/esm2020/lib/table/data/common/event/ge-cell-indices.mjs +0 -7
- package/esm2020/lib/table/data/common/event/ge-key-event.mjs +0 -7
- package/esm2020/lib/table/data/common/event/ge-model-change-event.mjs +0 -10
- package/esm2020/lib/table/data/common/event/ge-mouse-event.mjs +0 -19
- package/esm2020/lib/table/data/common/filter-function.mjs +0 -2
- package/esm2020/lib/table/data/common/get-t.mjs +0 -2
- package/esm2020/lib/table/data/common/index-and-px.mjs +0 -7
- package/esm2020/lib/table/data/common/size.if.mjs +0 -2
- package/esm2020/lib/table/data/common/size.mjs +0 -7
- package/esm2020/lib/table/data/common/sizes.mjs +0 -33
- package/esm2020/lib/table/data/common/sort-item.mjs +0 -7
- package/esm2020/lib/table/data/common/sort-state.type.mjs +0 -2
- package/esm2020/lib/table/data/common/tree-arrow.type.mjs +0 -2
- package/esm2020/lib/table/data/common/tree-row-if.mjs +0 -2
- package/esm2020/lib/table/data/common/tree-row.mjs +0 -12
- package/esm2020/lib/table/data/common/value-label.if.mjs +0 -2
- package/esm2020/lib/table/data/common/value-label.mjs +0 -7
- package/esm2020/lib/table/data/div-scope.type.mjs +0 -2
- package/esm2020/lib/table/data/geo-data.mjs +0 -10
- package/esm2020/lib/table/data/options/auto-restore-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/auto-restore-options.mjs +0 -42
- package/esm2020/lib/table/data/options/default-row-heights.if.mjs +0 -2
- package/esm2020/lib/table/data/options/default-row-heights.mjs +0 -8
- package/esm2020/lib/table/data/options/icon.if.mjs +0 -2
- package/esm2020/lib/table/data/options/icon.mjs +0 -8
- package/esm2020/lib/table/data/options/sorted-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/sorted-options.mjs +0 -9
- package/esm2020/lib/table/data/options/table-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/table-options.mjs +0 -37
- package/esm2020/lib/table/data/options/tree-options.if.mjs +0 -2
- package/esm2020/lib/table/data/options/tree-options.mjs +0 -10
- package/esm2020/lib/table/data/side-ident.type.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/area-ident.type.mjs +0 -10
- package/esm2020/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +0 -108
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-array-array.mjs +0 -34
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +0 -80
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +0 -11
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +0 -79
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +0 -166
- package/esm2020/lib/table/data/tablemodel/areamodel/area-model.if.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +0 -48
- package/esm2020/lib/table/data/tablemodel/column/column-def.if.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/column/column-def.mjs +0 -32
- package/esm2020/lib/table/data/tablemodel/padding.mjs +0 -9
- package/esm2020/lib/table/data/tablemodel/table-model.if.mjs +0 -2
- package/esm2020/lib/table/data/tablemodel/table-model.mjs +0 -268
- package/esm2020/lib/table/ele-scope.mjs +0 -173
- package/esm2020/lib/table/event-adapter.mjs +0 -17
- package/esm2020/lib/table/event-listener.if.mjs +0 -2
- package/esm2020/lib/table/focus/focus-model.if.mjs +0 -2
- package/esm2020/lib/table/focus/focus-model.mjs +0 -22
- package/esm2020/lib/table/focus/focus.type.mjs +0 -2
- package/esm2020/lib/table/input-handler.mjs +0 -24
- package/esm2020/lib/table/mouse-handler.mjs +0 -191
- package/esm2020/lib/table/render-scope.mjs +0 -595
- package/esm2020/lib/table/renderer/cell-render.if.mjs +0 -2
- package/esm2020/lib/table/renderer/checkbox-cell-renderer.mjs +0 -22
- package/esm2020/lib/table/renderer/date-to-int-date-cell-renderer.mjs +0 -21
- package/esm2020/lib/table/renderer/date-to-iso-cell-renderer.mjs +0 -9
- package/esm2020/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +0 -9
- package/esm2020/lib/table/renderer/date-to-tec-cell-renderer.mjs +0 -12
- package/esm2020/lib/table/renderer/edit/edit-cell-renderer.type.mjs +0 -2
- package/esm2020/lib/table/renderer/edit/input-cell-renderer.mjs +0 -23
- package/esm2020/lib/table/renderer/edit/select-cell-renderer.mjs +0 -35
- package/esm2020/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +0 -12
- package/esm2020/lib/table/renderer/number-cell-renderer.mjs +0 -19
- package/esm2020/lib/table/renderer/renderer-cleanup-fn.type.mjs +0 -2
- package/esm2020/lib/table/renderer/renderer.mjs +0 -7
- package/esm2020/lib/table/renderer/true-false-cell-renderer.mjs +0 -15
- package/esm2020/lib/table/selection/selection-model.if.mjs +0 -2
- package/esm2020/lib/table/selection/selection-model.mjs +0 -97
- package/esm2020/lib/table/selection/selection-service.mjs +0 -97
- package/esm2020/lib/table/selection/selection.type.mjs +0 -2
- package/esm2020/lib/table/service/abstract-store-state.service.mjs +0 -49
- package/esm2020/lib/table/service/convenience-dom.service.mjs +0 -394
- package/esm2020/lib/table/service/data/collapsed-expanded.data.mjs +0 -9
- package/esm2020/lib/table/service/data/html-style.type.mjs +0 -2
- package/esm2020/lib/table/service/dom-service.if.mjs +0 -2
- package/esm2020/lib/table/service/ge-filter.service.mjs +0 -98
- package/esm2020/lib/table/service/simple-dom-service.mjs +0 -34
- package/esm2020/lib/table/service/sorter.service.mjs +0 -27
- package/esm2020/lib/table/service/store-state-collapsed-expand.service.mjs +0 -57
- package/esm2020/lib/table/service/store-state-scroll-pos.service.mjs +0 -29
- package/esm2020/lib/table/service/store-state-sorting.service.mjs +0 -29
- package/esm2020/lib/table/service/tree-row.service.mjs +0 -23
- package/esm2020/lib/table/table-api.mjs +0 -38
- package/esm2020/lib/table/table-model-factory.mjs +0 -124
- package/esm2020/lib/table/table-scope.mjs +0 -313
- package/lib/table/action/action-id.type.d.ts +0 -2
- package/lib/table/action/osx-shortcut-actionId-mapping.d.ts +0 -6
- package/lib/table/action/shortcut-actionid-mapping.type.d.ts +0 -4
- package/lib/table/action/shortcut.service.d.ts +0 -17
- package/lib/table/action/windows-shortcut-actionId-mapping.d.ts +0 -6
- package/lib/table/checkbox/checkbox-model.d.ts +0 -12
- package/lib/table/checkbox/checkbox-model.if.d.ts +0 -9
- package/lib/table/checkbox/tree-checkbox-model.d.ts +0 -17
- package/lib/table/data/common/aligns.d.ts +0 -24
- package/lib/table/data/common/area-map-factory.d.ts +0 -5
- package/lib/table/data/common/area-map.d.ts +0 -7
- package/lib/table/data/common/area-map.type.d.ts +0 -5
- package/lib/table/data/common/args-render-cell-div.d.ts +0 -13
- package/lib/table/data/common/boolean-function.d.ts +0 -3
- package/lib/table/data/common/cell-range.d.ts +0 -17
- package/lib/table/data/common/checkbox-column.d.ts +0 -13
- package/lib/table/data/common/checked-type.d.ts +0 -1
- package/lib/table/data/common/event/ge-cell-indices.d.ts +0 -5
- package/lib/table/data/common/event/ge-key-event.d.ts +0 -5
- package/lib/table/data/common/event/ge-model-change-event.d.ts +0 -6
- package/lib/table/data/common/event/ge-mouse-event.d.ts +0 -17
- package/lib/table/data/common/index-and-px.d.ts +0 -5
- package/lib/table/data/common/size.d.ts +0 -6
- package/lib/table/data/common/size.if.d.ts +0 -4
- package/lib/table/data/common/sizes.d.ts +0 -32
- package/lib/table/data/common/sort-item.d.ts +0 -6
- package/lib/table/data/common/tree-row-if.d.ts +0 -10
- package/lib/table/data/common/tree-row.d.ts +0 -11
- package/lib/table/data/common/value-label.d.ts +0 -6
- package/lib/table/data/common/value-label.if.d.ts +0 -4
- package/lib/table/data/div-scope.type.d.ts +0 -7
- package/lib/table/data/geo-data.d.ts +0 -8
- package/lib/table/data/options/auto-restore-options.d.ts +0 -11
- package/lib/table/data/options/auto-restore-options.if.d.ts +0 -16
- package/lib/table/data/options/default-row-heights.d.ts +0 -7
- package/lib/table/data/options/default-row-heights.if.d.ts +0 -5
- package/lib/table/data/options/icon.d.ts +0 -7
- package/lib/table/data/options/icon.if.d.ts +0 -5
- package/lib/table/data/options/sorted-options.d.ts +0 -8
- package/lib/table/data/options/table-options.d.ts +0 -35
- package/lib/table/data/options/table-options.if.d.ts +0 -36
- package/lib/table/data/options/tree-options.d.ts +0 -9
- package/lib/table/data/options/tree-options.if.d.ts +0 -7
- package/lib/table/data/tablemodel/area-ident.type.d.ts +0 -2
- package/lib/table/data/tablemodel/areamodel/abstract-area-model.d.ts +0 -43
- package/lib/table/data/tablemodel/areamodel/area-model-array-array.d.ts +0 -18
- package/lib/table/data/tablemodel/areamodel/area-model-hidden.d.ts +0 -37
- package/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.d.ts +0 -10
- package/lib/table/data/tablemodel/areamodel/area-model-object-array.d.ts +0 -27
- package/lib/table/data/tablemodel/areamodel/area-model-tree.d.ts +0 -39
- package/lib/table/data/tablemodel/areamodel/area-model.if.d.ts +0 -146
- package/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.d.ts +0 -12
- package/lib/table/data/tablemodel/column/column-def.d.ts +0 -46
- package/lib/table/data/tablemodel/column/column-def.if.d.ts +0 -22
- package/lib/table/data/tablemodel/padding.d.ts +0 -7
- package/lib/table/data/tablemodel/table-model.d.ts +0 -61
- package/lib/table/data/tablemodel/table-model.if.d.ts +0 -35
- package/lib/table/ele-scope.d.ts +0 -37
- package/lib/table/event-adapter.d.ts +0 -12
- package/lib/table/event-listener.if.d.ts +0 -11
- package/lib/table/focus/focus-model.d.ts +0 -12
- package/lib/table/focus/focus-model.if.d.ts +0 -6
- package/lib/table/input-handler.d.ts +0 -6
- package/lib/table/mouse-handler.d.ts +0 -25
- package/lib/table/render-scope.d.ts +0 -82
- package/lib/table/renderer/checkbox-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/date-to-int-date-cell-renderer.d.ts +0 -9
- package/lib/table/renderer/date-to-iso-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/date-to-locale-date-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/date-to-tec-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/edit/input-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/edit/select-cell-renderer.d.ts +0 -12
- package/lib/table/renderer/male-female-to-icon-cell-renderer.d.ts +0 -8
- package/lib/table/renderer/number-cell-renderer.d.ts +0 -11
- package/lib/table/renderer/renderer.d.ts +0 -5
- package/lib/table/renderer/true-false-cell-renderer.d.ts +0 -8
- package/lib/table/selection/selection-model.d.ts +0 -21
- package/lib/table/selection/selection-model.if.d.ts +0 -11
- package/lib/table/selection/selection-service.d.ts +0 -17
- package/lib/table/service/abstract-store-state.service.d.ts +0 -10
- package/lib/table/service/convenience-dom.service.d.ts +0 -46
- package/lib/table/service/data/collapsed-expanded.data.d.ts +0 -7
- package/lib/table/service/data/html-style.type.d.ts +0 -3
- package/lib/table/service/dom-service.if.d.ts +0 -9
- package/lib/table/service/ge-filter.service.d.ts +0 -5
- package/lib/table/service/simple-dom-service.d.ts +0 -10
- package/lib/table/service/sorter.service.d.ts +0 -3
- package/lib/table/service/store-state-collapsed-expand.service.d.ts +0 -15
- package/lib/table/service/store-state-scroll-pos.service.d.ts +0 -10
- package/lib/table/service/store-state-sorting.service.d.ts +0 -11
- package/lib/table/service/tree-row.service.d.ts +0 -5
- package/lib/table/table-api.d.ts +0 -16
- package/lib/table/table-model-factory.d.ts +0 -60
- package/lib/table/table-scope.d.ts +0 -56
- /package/{lib/table/data/common/filter-function.d.ts → src/lib/table/data/common/filter-function.ts} +0 -0
- /package/{lib/table/data/common/get-t.d.ts → src/lib/table/data/common/get-t.ts} +0 -0
- /package/{lib/table/data/common/sort-state.type.d.ts → src/lib/table/data/common/sort-state.type.ts} +0 -0
- /package/{lib/table/data/common/tree-arrow.type.d.ts → src/lib/table/data/common/tree-arrow.type.ts} +0 -0
- /package/{lib/table/data/side-ident.type.d.ts → src/lib/table/data/side-ident.type.ts} +0 -0
- /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,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,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,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,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,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,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
|
-
}
|