dockview-core 1.8.4 → 1.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -51
- package/dist/cjs/api/component.api.d.ts +455 -152
- package/dist/cjs/api/component.api.d.ts.map +1 -1
- package/dist/cjs/api/component.api.js +895 -592
- package/dist/cjs/api/component.api.js.map +1 -1
- package/dist/cjs/api/dockviewGroupPanelApi.d.ts +29 -29
- package/dist/cjs/api/dockviewGroupPanelApi.js +53 -53
- package/dist/cjs/api/dockviewPanelApi.d.ts +47 -47
- package/dist/cjs/api/dockviewPanelApi.js +88 -88
- package/dist/cjs/api/gridviewPanelApi.d.ts +37 -37
- package/dist/cjs/api/gridviewPanelApi.js +47 -47
- package/dist/cjs/api/panelApi.d.ts +88 -88
- package/dist/cjs/api/panelApi.js +135 -135
- package/dist/cjs/api/paneviewPanelApi.d.ts +26 -26
- package/dist/cjs/api/paneviewPanelApi.js +57 -57
- package/dist/cjs/api/splitviewPanelApi.d.ts +32 -32
- package/dist/cjs/api/splitviewPanelApi.js +47 -47
- package/dist/cjs/array.d.ts +13 -13
- package/dist/cjs/array.js +67 -67
- package/dist/cjs/dnd/abstractDragHandler.d.ts +12 -12
- package/dist/cjs/dnd/abstractDragHandler.js +141 -141
- package/dist/cjs/dnd/dataTransfer.d.ts +30 -31
- package/dist/cjs/dnd/dataTransfer.d.ts.map +1 -1
- package/dist/cjs/dnd/dataTransfer.js +99 -100
- package/dist/cjs/dnd/dataTransfer.js.map +1 -1
- package/dist/cjs/dnd/dnd.d.ts +27 -27
- package/dist/cjs/dnd/dnd.js +59 -59
- package/dist/cjs/dnd/droptarget.d.ts +53 -53
- package/dist/cjs/dnd/droptarget.js +304 -304
- package/dist/cjs/dnd/droptarget.js.map +1 -1
- package/dist/cjs/dnd/ghost.d.ts +1 -1
- package/dist/cjs/dnd/ghost.js +15 -15
- package/dist/cjs/dnd/groupDragHandler.d.ts +12 -12
- package/dist/cjs/dnd/groupDragHandler.js +77 -77
- package/dist/cjs/dnd/overlay.d.ts +43 -43
- package/dist/cjs/dnd/overlay.d.ts.map +1 -1
- package/dist/cjs/dnd/overlay.js +412 -412
- package/dist/cjs/dnd/overlay.js.map +1 -1
- package/dist/cjs/dockview/components/panel/content.d.ts +30 -30
- package/dist/cjs/dockview/components/panel/content.js +100 -100
- package/dist/cjs/dockview/components/tab/defaultTab.d.ts +21 -21
- package/dist/cjs/dockview/components/tab/defaultTab.js +105 -105
- package/dist/cjs/dockview/components/tab/tab.d.ts +34 -34
- package/dist/cjs/dockview/components/tab/tab.js +120 -120
- package/dist/cjs/dockview/components/titlebar/tabsContainer.d.ts +81 -81
- package/dist/cjs/dockview/components/titlebar/tabsContainer.js +325 -325
- package/dist/cjs/dockview/components/titlebar/voidContainer.d.ts +17 -17
- package/dist/cjs/dockview/components/titlebar/voidContainer.js +77 -77
- package/dist/cjs/dockview/components/watermark/watermark.d.ts +18 -18
- package/dist/cjs/dockview/components/watermark/watermark.js +87 -87
- package/dist/cjs/dockview/deserializer.d.ts +12 -12
- package/dist/cjs/dockview/deserializer.js +33 -33
- package/dist/cjs/dockview/deserializer.js.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.d.ts +159 -159
- package/dist/cjs/dockview/dockviewComponent.d.ts.map +1 -1
- package/dist/cjs/dockview/dockviewComponent.js +1170 -1156
- package/dist/cjs/dockview/dockviewComponent.js.map +1 -1
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.d.ts +23 -23
- package/dist/cjs/dockview/dockviewFloatingGroupPanel.js +34 -34
- package/dist/cjs/dockview/dockviewGroupPanel.d.ts +30 -30
- package/dist/cjs/dockview/dockviewGroupPanel.js +97 -97
- package/dist/cjs/dockview/dockviewGroupPanelModel.d.ts +185 -185
- package/dist/cjs/dockview/dockviewGroupPanelModel.js +632 -631
- package/dist/cjs/dockview/dockviewGroupPanelModel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPanel.d.ts +41 -41
- package/dist/cjs/dockview/dockviewPanel.js +172 -171
- package/dist/cjs/dockview/dockviewPanel.js.map +1 -1
- package/dist/cjs/dockview/dockviewPanelModel.d.ts +35 -35
- package/dist/cjs/dockview/dockviewPanelModel.js +98 -98
- package/dist/cjs/dockview/dockviewPanelModel.js.map +1 -1
- package/dist/cjs/dockview/options.d.ts +133 -136
- package/dist/cjs/dockview/options.d.ts.map +1 -1
- package/dist/cjs/dockview/options.js +31 -31
- package/dist/cjs/dockview/types.d.ts +63 -63
- package/dist/cjs/dockview/types.js +10 -10
- package/dist/cjs/dockview/types.js.map +1 -1
- package/dist/cjs/dom.d.ts +16 -16
- package/dist/cjs/dom.js +197 -197
- package/dist/cjs/events.d.ts +47 -47
- package/dist/cjs/events.js +216 -216
- package/dist/cjs/events.js.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.d.ts +88 -87
- package/dist/cjs/gridview/baseComponentGridview.d.ts.map +1 -1
- package/dist/cjs/gridview/baseComponentGridview.js +270 -270
- package/dist/cjs/gridview/baseComponentGridview.js.map +1 -1
- package/dist/cjs/gridview/basePanelView.d.ts +40 -40
- package/dist/cjs/gridview/basePanelView.js +156 -156
- package/dist/cjs/gridview/branchNode.d.ts +49 -49
- package/dist/cjs/gridview/branchNode.js +343 -343
- package/dist/cjs/gridview/gridview.d.ts +133 -133
- package/dist/cjs/gridview/gridview.js +547 -547
- package/dist/cjs/gridview/gridviewComponent.d.ts +80 -80
- package/dist/cjs/gridview/gridviewComponent.d.ts.map +1 -1
- package/dist/cjs/gridview/gridviewComponent.js +362 -360
- package/dist/cjs/gridview/gridviewComponent.js.map +1 -1
- package/dist/cjs/gridview/gridviewPanel.d.ts +65 -65
- package/dist/cjs/gridview/gridviewPanel.js +214 -214
- package/dist/cjs/gridview/leafNode.d.ts +34 -34
- package/dist/cjs/gridview/leafNode.js +170 -170
- package/dist/cjs/gridview/leafNode.js.map +1 -1
- package/dist/cjs/gridview/options.d.ts +17 -18
- package/dist/cjs/gridview/options.d.ts.map +1 -1
- package/dist/cjs/gridview/options.js +2 -2
- package/dist/cjs/gridview/types.d.ts +3 -3
- package/dist/cjs/gridview/types.js +2 -2
- package/dist/cjs/index.d.ts +42 -42
- package/dist/cjs/index.js +61 -61
- package/dist/cjs/lifecycle.d.ts +23 -23
- package/dist/cjs/lifecycle.js +65 -65
- package/dist/cjs/lifecycle.js.map +1 -1
- package/dist/cjs/math.d.ts +5 -5
- package/dist/cjs/math.js +34 -34
- package/dist/cjs/panel/componentFactory.d.ts +11 -10
- package/dist/cjs/panel/componentFactory.d.ts.map +1 -1
- package/dist/cjs/panel/componentFactory.js +30 -30
- package/dist/cjs/panel/componentFactory.js.map +1 -1
- package/dist/cjs/panel/types.d.ts +33 -33
- package/dist/cjs/panel/types.js +2 -2
- package/dist/cjs/paneview/defaultPaneviewHeader.d.ts +21 -21
- package/dist/cjs/paneview/defaultPaneviewHeader.js +90 -90
- package/dist/cjs/paneview/draggablePaneviewPanel.d.ts +21 -21
- package/dist/cjs/paneview/draggablePaneviewPanel.js +131 -131
- package/dist/cjs/paneview/options.d.ts +25 -28
- package/dist/cjs/paneview/options.d.ts.map +1 -1
- package/dist/cjs/paneview/options.js +2 -2
- package/dist/cjs/paneview/paneview.d.ts +40 -40
- package/dist/cjs/paneview/paneview.d.ts.map +1 -1
- package/dist/cjs/paneview/paneview.js +200 -201
- package/dist/cjs/paneview/paneview.js.map +1 -1
- package/dist/cjs/paneview/paneviewComponent.d.ts +128 -128
- package/dist/cjs/paneview/paneviewComponent.js +400 -397
- package/dist/cjs/paneview/paneviewComponent.js.map +1 -1
- package/dist/cjs/paneview/paneviewPanel.d.ts +92 -92
- package/dist/cjs/paneview/paneviewPanel.d.ts.map +1 -1
- package/dist/cjs/paneview/paneviewPanel.js +275 -275
- package/dist/cjs/resizable.d.ts +10 -7
- package/dist/cjs/resizable.d.ts.map +1 -1
- package/dist/cjs/resizable.js +79 -64
- package/dist/cjs/resizable.js.map +1 -1
- package/dist/cjs/splitview/options.d.ts +26 -27
- package/dist/cjs/splitview/options.d.ts.map +1 -1
- package/dist/cjs/splitview/options.js +2 -2
- package/dist/cjs/splitview/splitview.d.ts +128 -128
- package/dist/cjs/splitview/splitview.js +936 -936
- package/dist/cjs/splitview/splitview.js.map +1 -1
- package/dist/cjs/splitview/splitviewComponent.d.ts +101 -101
- package/dist/cjs/splitview/splitviewComponent.js +395 -392
- package/dist/cjs/splitview/splitviewComponent.js.map +1 -1
- package/dist/cjs/splitview/splitviewPanel.d.ts +45 -45
- package/dist/cjs/splitview/splitviewPanel.d.ts.map +1 -1
- package/dist/cjs/splitview/splitviewPanel.js +179 -179
- package/dist/cjs/splitview/splitviewPanel.js.map +1 -1
- package/dist/cjs/splitview/viewItem.d.ts +25 -25
- package/dist/cjs/splitview/viewItem.js +119 -119
- package/dist/cjs/svg.d.ts +3 -3
- package/dist/cjs/svg.js +43 -43
- package/dist/cjs/types.d.ts +2 -2
- package/dist/cjs/types.js +2 -2
- package/dist/dockview-core.amd.js +7650 -7316
- package/dist/dockview-core.amd.js.map +1 -1
- package/dist/dockview-core.amd.min.js +2 -2
- package/dist/dockview-core.amd.min.js.map +1 -1
- package/dist/dockview-core.amd.min.noStyle.js +2 -2
- package/dist/dockview-core.amd.min.noStyle.js.map +1 -1
- package/dist/dockview-core.amd.noStyle.js +7601 -7267
- package/dist/dockview-core.amd.noStyle.js.map +1 -1
- package/dist/dockview-core.cjs.js +7650 -7316
- package/dist/dockview-core.cjs.js.map +1 -1
- package/dist/dockview-core.esm.js +7650 -7316
- package/dist/dockview-core.esm.js.map +1 -1
- package/dist/dockview-core.esm.min.js +2 -2
- package/dist/dockview-core.esm.min.js.map +1 -1
- package/dist/dockview-core.js +7650 -7316
- package/dist/dockview-core.js.map +1 -1
- package/dist/dockview-core.min.js +2 -2
- package/dist/dockview-core.min.js.map +1 -1
- package/dist/dockview-core.min.noStyle.js +2 -2
- package/dist/dockview-core.min.noStyle.js.map +1 -1
- package/dist/dockview-core.noStyle.js +7601 -7267
- package/dist/dockview-core.noStyle.js.map +1 -1
- package/dist/esm/api/component.api.d.ts +455 -152
- package/dist/esm/api/component.api.d.ts.map +1 -1
- package/dist/esm/api/component.api.js +638 -335
- package/dist/esm/api/component.api.js.map +1 -1
- package/dist/esm/api/dockviewGroupPanelApi.d.ts +29 -29
- package/dist/esm/api/dockviewGroupPanelApi.js +27 -27
- package/dist/esm/api/dockviewPanelApi.d.ts +47 -47
- package/dist/esm/api/dockviewPanelApi.js +53 -53
- package/dist/esm/api/gridviewPanelApi.d.ts +37 -37
- package/dist/esm/api/gridviewPanelApi.js +25 -25
- package/dist/esm/api/panelApi.d.ts +88 -88
- package/dist/esm/api/panelApi.js +93 -93
- package/dist/esm/api/paneviewPanelApi.d.ts +26 -26
- package/dist/esm/api/paneviewPanelApi.js +27 -27
- package/dist/esm/api/splitviewPanelApi.d.ts +32 -32
- package/dist/esm/api/splitviewPanelApi.js +25 -25
- package/dist/esm/array.d.ts +13 -13
- package/dist/esm/array.js +57 -57
- package/dist/esm/dnd/abstractDragHandler.d.ts +12 -12
- package/dist/esm/dnd/abstractDragHandler.js +63 -63
- package/dist/esm/dnd/dataTransfer.d.ts +30 -31
- package/dist/esm/dnd/dataTransfer.d.ts.map +1 -1
- package/dist/esm/dnd/dataTransfer.js +66 -69
- package/dist/esm/dnd/dataTransfer.js.map +1 -1
- package/dist/esm/dnd/dnd.d.ts +27 -27
- package/dist/esm/dnd/dnd.js +36 -36
- package/dist/esm/dnd/droptarget.d.ts +53 -53
- package/dist/esm/dnd/droptarget.js +274 -274
- package/dist/esm/dnd/droptarget.js.map +1 -1
- package/dist/esm/dnd/ghost.d.ts +1 -1
- package/dist/esm/dnd/ghost.js +11 -11
- package/dist/esm/dnd/groupDragHandler.d.ts +12 -12
- package/dist/esm/dnd/groupDragHandler.js +54 -54
- package/dist/esm/dnd/overlay.d.ts +43 -43
- package/dist/esm/dnd/overlay.d.ts.map +1 -1
- package/dist/esm/dnd/overlay.js +304 -304
- package/dist/esm/dnd/overlay.js.map +1 -1
- package/dist/esm/dockview/components/panel/content.d.ts +30 -30
- package/dist/esm/dockview/components/panel/content.js +73 -73
- package/dist/esm/dockview/components/tab/defaultTab.d.ts +21 -21
- package/dist/esm/dockview/components/tab/defaultTab.js +67 -67
- package/dist/esm/dockview/components/tab/tab.d.ts +34 -34
- package/dist/esm/dockview/components/tab/tab.js +90 -90
- package/dist/esm/dockview/components/titlebar/tabsContainer.d.ts +81 -81
- package/dist/esm/dockview/components/titlebar/tabsContainer.js +239 -239
- package/dist/esm/dockview/components/titlebar/voidContainer.d.ts +17 -17
- package/dist/esm/dockview/components/titlebar/voidContainer.js +51 -51
- package/dist/esm/dockview/components/watermark/watermark.d.ts +18 -18
- package/dist/esm/dockview/components/watermark/watermark.js +61 -61
- package/dist/esm/dockview/deserializer.d.ts +12 -12
- package/dist/esm/dockview/deserializer.js +28 -28
- package/dist/esm/dockview/deserializer.js.map +1 -1
- package/dist/esm/dockview/dockviewComponent.d.ts +159 -159
- package/dist/esm/dockview/dockviewComponent.d.ts.map +1 -1
- package/dist/esm/dockview/dockviewComponent.js +932 -918
- package/dist/esm/dockview/dockviewComponent.js.map +1 -1
- package/dist/esm/dockview/dockviewFloatingGroupPanel.d.ts +23 -23
- package/dist/esm/dockview/dockviewFloatingGroupPanel.js +12 -12
- package/dist/esm/dockview/dockviewGroupPanel.d.ts +30 -30
- package/dist/esm/dockview/dockviewGroupPanel.js +51 -51
- package/dist/esm/dockview/dockviewGroupPanelModel.d.ts +185 -185
- package/dist/esm/dockview/dockviewGroupPanelModel.js +499 -498
- package/dist/esm/dockview/dockviewGroupPanelModel.js.map +1 -1
- package/dist/esm/dockview/dockviewPanel.d.ts +41 -41
- package/dist/esm/dockview/dockviewPanel.js +105 -104
- package/dist/esm/dockview/dockviewPanel.js.map +1 -1
- package/dist/esm/dockview/dockviewPanelModel.d.ts +35 -35
- package/dist/esm/dockview/dockviewPanelModel.js +74 -74
- package/dist/esm/dockview/dockviewPanelModel.js.map +1 -1
- package/dist/esm/dockview/options.d.ts +133 -136
- package/dist/esm/dockview/options.d.ts.map +1 -1
- package/dist/esm/dockview/options.js +24 -24
- package/dist/esm/dockview/types.d.ts +63 -63
- package/dist/esm/dockview/types.js +7 -7
- package/dist/esm/dom.d.ts +16 -16
- package/dist/esm/dom.js +126 -126
- package/dist/esm/events.d.ts +47 -47
- package/dist/esm/events.js +156 -156
- package/dist/esm/events.js.map +1 -1
- package/dist/esm/gridview/baseComponentGridview.d.ts +88 -87
- package/dist/esm/gridview/baseComponentGridview.d.ts.map +1 -1
- package/dist/esm/gridview/baseComponentGridview.js +184 -184
- package/dist/esm/gridview/baseComponentGridview.js.map +1 -1
- package/dist/esm/gridview/basePanelView.d.ts +40 -40
- package/dist/esm/gridview/basePanelView.js +85 -85
- package/dist/esm/gridview/branchNode.d.ts +49 -49
- package/dist/esm/gridview/branchNode.js +219 -219
- package/dist/esm/gridview/gridview.d.ts +133 -133
- package/dist/esm/gridview/gridview.js +461 -461
- package/dist/esm/gridview/gridviewComponent.d.ts +80 -80
- package/dist/esm/gridview/gridviewComponent.d.ts.map +1 -1
- package/dist/esm/gridview/gridviewComponent.js +264 -262
- package/dist/esm/gridview/gridviewComponent.js.map +1 -1
- package/dist/esm/gridview/gridviewPanel.d.ts +65 -65
- package/dist/esm/gridview/gridviewPanel.js +151 -151
- package/dist/esm/gridview/leafNode.d.ts +34 -34
- package/dist/esm/gridview/leafNode.js +103 -103
- package/dist/esm/gridview/options.d.ts +17 -18
- package/dist/esm/gridview/options.d.ts.map +1 -1
- package/dist/esm/gridview/options.js +1 -1
- package/dist/esm/gridview/types.d.ts +3 -3
- package/dist/esm/gridview/types.js +1 -1
- package/dist/esm/index.d.ts +42 -42
- package/dist/esm/index.js +34 -34
- package/dist/esm/lifecycle.d.ts +23 -23
- package/dist/esm/lifecycle.js +41 -41
- package/dist/esm/math.d.ts +5 -5
- package/dist/esm/math.js +28 -28
- package/dist/esm/panel/componentFactory.d.ts +11 -10
- package/dist/esm/panel/componentFactory.d.ts.map +1 -1
- package/dist/esm/panel/componentFactory.js +24 -24
- package/dist/esm/panel/componentFactory.js.map +1 -1
- package/dist/esm/panel/types.d.ts +33 -33
- package/dist/esm/panel/types.js +1 -1
- package/dist/esm/paneview/defaultPaneviewHeader.d.ts +21 -21
- package/dist/esm/paneview/defaultPaneviewHeader.js +63 -63
- package/dist/esm/paneview/draggablePaneviewPanel.d.ts +21 -21
- package/dist/esm/paneview/draggablePaneviewPanel.js +92 -92
- package/dist/esm/paneview/options.d.ts +25 -28
- package/dist/esm/paneview/options.d.ts.map +1 -1
- package/dist/esm/paneview/options.js +1 -1
- package/dist/esm/paneview/paneview.d.ts +40 -40
- package/dist/esm/paneview/paneview.d.ts.map +1 -1
- package/dist/esm/paneview/paneview.js +145 -145
- package/dist/esm/paneview/paneviewComponent.d.ts +128 -128
- package/dist/esm/paneview/paneviewComponent.js +276 -273
- package/dist/esm/paneview/paneviewComponent.js.map +1 -1
- package/dist/esm/paneview/paneviewPanel.d.ts +92 -92
- package/dist/esm/paneview/paneviewPanel.d.ts.map +1 -1
- package/dist/esm/paneview/paneviewPanel.js +192 -192
- package/dist/esm/resizable.d.ts +10 -7
- package/dist/esm/resizable.d.ts.map +1 -1
- package/dist/esm/resizable.js +48 -38
- package/dist/esm/resizable.js.map +1 -1
- package/dist/esm/splitview/options.d.ts +26 -27
- package/dist/esm/splitview/options.d.ts.map +1 -1
- package/dist/esm/splitview/options.js +1 -1
- package/dist/esm/splitview/splitview.d.ts +128 -128
- package/dist/esm/splitview/splitview.js +704 -704
- package/dist/esm/splitview/splitviewComponent.d.ts +101 -101
- package/dist/esm/splitview/splitviewComponent.js +261 -258
- package/dist/esm/splitview/splitviewComponent.js.map +1 -1
- package/dist/esm/splitview/splitviewPanel.d.ts +45 -45
- package/dist/esm/splitview/splitviewPanel.d.ts.map +1 -1
- package/dist/esm/splitview/splitviewPanel.js +108 -108
- package/dist/esm/splitview/splitviewPanel.js.map +1 -1
- package/dist/esm/splitview/viewItem.d.ts +25 -25
- package/dist/esm/splitview/viewItem.js +74 -74
- package/dist/esm/svg.d.ts +3 -3
- package/dist/esm/svg.js +31 -31
- package/dist/esm/types.d.ts +2 -2
- package/dist/esm/types.js +1 -1
- package/package.json +30 -42
- package/LICENSE +0 -21
package/dist/esm/dom.js
CHANGED
|
@@ -1,127 +1,127 @@
|
|
|
1
|
-
import { Emitter, addDisposableListener, addDisposableWindowListener, } from './events';
|
|
2
|
-
import { CompositeDisposable } from './lifecycle';
|
|
3
|
-
export function watchElementResize(element, cb) {
|
|
4
|
-
const observer = new ResizeObserver((entires) => {
|
|
5
|
-
/**
|
|
6
|
-
* Fast browser window resize produces Error: ResizeObserver loop limit exceeded.
|
|
7
|
-
* The error isn't visible in browser console, doesn't affect functionality, but degrades performance.
|
|
8
|
-
* See https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded/58701523#58701523
|
|
9
|
-
*/
|
|
10
|
-
requestAnimationFrame(() => {
|
|
11
|
-
const firstEntry = entires[0];
|
|
12
|
-
cb(firstEntry);
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
observer.observe(element);
|
|
16
|
-
return {
|
|
17
|
-
dispose: () => {
|
|
18
|
-
observer.unobserve(element);
|
|
19
|
-
observer.disconnect();
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export const removeClasses = (element, ...classes) => {
|
|
24
|
-
for (const classname of classes) {
|
|
25
|
-
if (element.classList.contains(classname)) {
|
|
26
|
-
element.classList.remove(classname);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
export const addClasses = (element, ...classes) => {
|
|
31
|
-
for (const classname of classes) {
|
|
32
|
-
if (!element.classList.contains(classname)) {
|
|
33
|
-
element.classList.add(classname);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
export const toggleClass = (element, className, isToggled) => {
|
|
38
|
-
const hasClass = element.classList.contains(className);
|
|
39
|
-
if (isToggled && !hasClass) {
|
|
40
|
-
element.classList.add(className);
|
|
41
|
-
}
|
|
42
|
-
if (!isToggled && hasClass) {
|
|
43
|
-
element.classList.remove(className);
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
export function isAncestor(testChild, testAncestor) {
|
|
47
|
-
while (testChild) {
|
|
48
|
-
if (testChild === testAncestor) {
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
testChild = testChild.parentNode;
|
|
52
|
-
}
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
export function getElementsByTagName(tag) {
|
|
56
|
-
return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);
|
|
57
|
-
}
|
|
58
|
-
export function trackFocus(element) {
|
|
59
|
-
return new FocusTracker(element);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Track focus on an element. Ensure tabIndex is set when an HTMLElement is not focusable by default
|
|
63
|
-
*/
|
|
64
|
-
class FocusTracker extends CompositeDisposable {
|
|
65
|
-
constructor(element) {
|
|
66
|
-
super();
|
|
67
|
-
this._onDidFocus = new Emitter();
|
|
68
|
-
this.onDidFocus = this._onDidFocus.event;
|
|
69
|
-
this._onDidBlur = new Emitter();
|
|
70
|
-
this.onDidBlur = this._onDidBlur.event;
|
|
71
|
-
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
72
|
-
let hasFocus = isAncestor(document.activeElement, element);
|
|
73
|
-
let loosingFocus = false;
|
|
74
|
-
const onFocus = () => {
|
|
75
|
-
loosingFocus = false;
|
|
76
|
-
if (!hasFocus) {
|
|
77
|
-
hasFocus = true;
|
|
78
|
-
this._onDidFocus.fire();
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
const onBlur = () => {
|
|
82
|
-
if (hasFocus) {
|
|
83
|
-
loosingFocus = true;
|
|
84
|
-
window.setTimeout(() => {
|
|
85
|
-
if (loosingFocus) {
|
|
86
|
-
loosingFocus = false;
|
|
87
|
-
hasFocus = false;
|
|
88
|
-
this._onDidBlur.fire();
|
|
89
|
-
}
|
|
90
|
-
}, 0);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
this._refreshStateHandler = () => {
|
|
94
|
-
const currentNodeHasFocus = isAncestor(document.activeElement, element);
|
|
95
|
-
if (currentNodeHasFocus !== hasFocus) {
|
|
96
|
-
if (hasFocus) {
|
|
97
|
-
onBlur();
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
onFocus();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
if (element instanceof HTMLElement) {
|
|
105
|
-
this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
|
|
106
|
-
this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.addDisposables(addDisposableWindowListener(element, 'focus', onFocus, true));
|
|
110
|
-
this.addDisposables(addDisposableWindowListener(element, 'blur', onBlur, true));
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
refreshState() {
|
|
114
|
-
this._refreshStateHandler();
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
// quasi: apparently, but not really; seemingly
|
|
118
|
-
const QUASI_PREVENT_DEFAULT_KEY = 'dv-quasiPreventDefault';
|
|
119
|
-
// mark an event directly for other listeners to check
|
|
120
|
-
export function quasiPreventDefault(event) {
|
|
121
|
-
event[QUASI_PREVENT_DEFAULT_KEY] = true;
|
|
122
|
-
}
|
|
123
|
-
// check if this event has been marked
|
|
124
|
-
export function quasiDefaultPrevented(event) {
|
|
125
|
-
return event[QUASI_PREVENT_DEFAULT_KEY];
|
|
126
|
-
}
|
|
1
|
+
import { Emitter, addDisposableListener, addDisposableWindowListener, } from './events';
|
|
2
|
+
import { CompositeDisposable } from './lifecycle';
|
|
3
|
+
export function watchElementResize(element, cb) {
|
|
4
|
+
const observer = new ResizeObserver((entires) => {
|
|
5
|
+
/**
|
|
6
|
+
* Fast browser window resize produces Error: ResizeObserver loop limit exceeded.
|
|
7
|
+
* The error isn't visible in browser console, doesn't affect functionality, but degrades performance.
|
|
8
|
+
* See https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded/58701523#58701523
|
|
9
|
+
*/
|
|
10
|
+
requestAnimationFrame(() => {
|
|
11
|
+
const firstEntry = entires[0];
|
|
12
|
+
cb(firstEntry);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
observer.observe(element);
|
|
16
|
+
return {
|
|
17
|
+
dispose: () => {
|
|
18
|
+
observer.unobserve(element);
|
|
19
|
+
observer.disconnect();
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export const removeClasses = (element, ...classes) => {
|
|
24
|
+
for (const classname of classes) {
|
|
25
|
+
if (element.classList.contains(classname)) {
|
|
26
|
+
element.classList.remove(classname);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export const addClasses = (element, ...classes) => {
|
|
31
|
+
for (const classname of classes) {
|
|
32
|
+
if (!element.classList.contains(classname)) {
|
|
33
|
+
element.classList.add(classname);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
export const toggleClass = (element, className, isToggled) => {
|
|
38
|
+
const hasClass = element.classList.contains(className);
|
|
39
|
+
if (isToggled && !hasClass) {
|
|
40
|
+
element.classList.add(className);
|
|
41
|
+
}
|
|
42
|
+
if (!isToggled && hasClass) {
|
|
43
|
+
element.classList.remove(className);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
export function isAncestor(testChild, testAncestor) {
|
|
47
|
+
while (testChild) {
|
|
48
|
+
if (testChild === testAncestor) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
testChild = testChild.parentNode;
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
export function getElementsByTagName(tag) {
|
|
56
|
+
return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);
|
|
57
|
+
}
|
|
58
|
+
export function trackFocus(element) {
|
|
59
|
+
return new FocusTracker(element);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Track focus on an element. Ensure tabIndex is set when an HTMLElement is not focusable by default
|
|
63
|
+
*/
|
|
64
|
+
class FocusTracker extends CompositeDisposable {
|
|
65
|
+
constructor(element) {
|
|
66
|
+
super();
|
|
67
|
+
this._onDidFocus = new Emitter();
|
|
68
|
+
this.onDidFocus = this._onDidFocus.event;
|
|
69
|
+
this._onDidBlur = new Emitter();
|
|
70
|
+
this.onDidBlur = this._onDidBlur.event;
|
|
71
|
+
this.addDisposables(this._onDidFocus, this._onDidBlur);
|
|
72
|
+
let hasFocus = isAncestor(document.activeElement, element);
|
|
73
|
+
let loosingFocus = false;
|
|
74
|
+
const onFocus = () => {
|
|
75
|
+
loosingFocus = false;
|
|
76
|
+
if (!hasFocus) {
|
|
77
|
+
hasFocus = true;
|
|
78
|
+
this._onDidFocus.fire();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const onBlur = () => {
|
|
82
|
+
if (hasFocus) {
|
|
83
|
+
loosingFocus = true;
|
|
84
|
+
window.setTimeout(() => {
|
|
85
|
+
if (loosingFocus) {
|
|
86
|
+
loosingFocus = false;
|
|
87
|
+
hasFocus = false;
|
|
88
|
+
this._onDidBlur.fire();
|
|
89
|
+
}
|
|
90
|
+
}, 0);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
this._refreshStateHandler = () => {
|
|
94
|
+
const currentNodeHasFocus = isAncestor(document.activeElement, element);
|
|
95
|
+
if (currentNodeHasFocus !== hasFocus) {
|
|
96
|
+
if (hasFocus) {
|
|
97
|
+
onBlur();
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
onFocus();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
if (element instanceof HTMLElement) {
|
|
105
|
+
this.addDisposables(addDisposableListener(element, 'focus', onFocus, true));
|
|
106
|
+
this.addDisposables(addDisposableListener(element, 'blur', onBlur, true));
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.addDisposables(addDisposableWindowListener(element, 'focus', onFocus, true));
|
|
110
|
+
this.addDisposables(addDisposableWindowListener(element, 'blur', onBlur, true));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
refreshState() {
|
|
114
|
+
this._refreshStateHandler();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// quasi: apparently, but not really; seemingly
|
|
118
|
+
const QUASI_PREVENT_DEFAULT_KEY = 'dv-quasiPreventDefault';
|
|
119
|
+
// mark an event directly for other listeners to check
|
|
120
|
+
export function quasiPreventDefault(event) {
|
|
121
|
+
event[QUASI_PREVENT_DEFAULT_KEY] = true;
|
|
122
|
+
}
|
|
123
|
+
// check if this event has been marked
|
|
124
|
+
export function quasiDefaultPrevented(event) {
|
|
125
|
+
return event[QUASI_PREVENT_DEFAULT_KEY];
|
|
126
|
+
}
|
|
127
127
|
//# sourceMappingURL=dom.js.map
|
package/dist/esm/events.d.ts
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import { IDisposable } from './lifecycle';
|
|
2
|
-
export interface Event<T> {
|
|
3
|
-
(listener: (e: T) => any): IDisposable;
|
|
4
|
-
}
|
|
5
|
-
export interface EmitterOptions {
|
|
6
|
-
readonly replay?: boolean;
|
|
7
|
-
}
|
|
8
|
-
export declare namespace Event {
|
|
9
|
-
const any: <T>(...children: Event<T>[]) => Event<T>;
|
|
10
|
-
}
|
|
11
|
-
declare class LeakageMonitor {
|
|
12
|
-
readonly events: Map<Event<any>, Stacktrace>;
|
|
13
|
-
get size(): number;
|
|
14
|
-
add<T>(event: Event<T>, stacktrace: Stacktrace): void;
|
|
15
|
-
delete<T>(event: Event<T>): void;
|
|
16
|
-
clear(): void;
|
|
17
|
-
}
|
|
18
|
-
declare class Stacktrace {
|
|
19
|
-
readonly value: string;
|
|
20
|
-
static create(): Stacktrace;
|
|
21
|
-
private constructor();
|
|
22
|
-
print(): void;
|
|
23
|
-
}
|
|
24
|
-
export declare class Emitter<T> implements IDisposable {
|
|
25
|
-
private readonly options?;
|
|
26
|
-
private _event?;
|
|
27
|
-
private _last?;
|
|
28
|
-
private _listeners;
|
|
29
|
-
private _disposed;
|
|
30
|
-
static ENABLE_TRACKING: boolean;
|
|
31
|
-
static readonly MEMORY_LEAK_WATCHER: LeakageMonitor;
|
|
32
|
-
static setLeakageMonitorEnabled(isEnabled: boolean): void;
|
|
33
|
-
constructor(options?: EmitterOptions | undefined);
|
|
34
|
-
get event(): Event<T>;
|
|
35
|
-
fire(e: T): void;
|
|
36
|
-
dispose(): void;
|
|
37
|
-
}
|
|
38
|
-
export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
39
|
-
export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
40
|
-
export declare class TickDelayedEvent implements IDisposable {
|
|
41
|
-
private timer;
|
|
42
|
-
private readonly _onFired;
|
|
43
|
-
readonly onEvent: Event<void>;
|
|
44
|
-
fire(): void;
|
|
45
|
-
dispose(): void;
|
|
46
|
-
}
|
|
47
|
-
export {};
|
|
1
|
+
import { IDisposable } from './lifecycle';
|
|
2
|
+
export interface Event<T> {
|
|
3
|
+
(listener: (e: T) => any): IDisposable;
|
|
4
|
+
}
|
|
5
|
+
export interface EmitterOptions {
|
|
6
|
+
readonly replay?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare namespace Event {
|
|
9
|
+
const any: <T>(...children: Event<T>[]) => Event<T>;
|
|
10
|
+
}
|
|
11
|
+
declare class LeakageMonitor {
|
|
12
|
+
readonly events: Map<Event<any>, Stacktrace>;
|
|
13
|
+
get size(): number;
|
|
14
|
+
add<T>(event: Event<T>, stacktrace: Stacktrace): void;
|
|
15
|
+
delete<T>(event: Event<T>): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
}
|
|
18
|
+
declare class Stacktrace {
|
|
19
|
+
readonly value: string;
|
|
20
|
+
static create(): Stacktrace;
|
|
21
|
+
private constructor();
|
|
22
|
+
print(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare class Emitter<T> implements IDisposable {
|
|
25
|
+
private readonly options?;
|
|
26
|
+
private _event?;
|
|
27
|
+
private _last?;
|
|
28
|
+
private _listeners;
|
|
29
|
+
private _disposed;
|
|
30
|
+
static ENABLE_TRACKING: boolean;
|
|
31
|
+
static readonly MEMORY_LEAK_WATCHER: LeakageMonitor;
|
|
32
|
+
static setLeakageMonitorEnabled(isEnabled: boolean): void;
|
|
33
|
+
constructor(options?: EmitterOptions | undefined);
|
|
34
|
+
get event(): Event<T>;
|
|
35
|
+
fire(e: T): void;
|
|
36
|
+
dispose(): void;
|
|
37
|
+
}
|
|
38
|
+
export declare function addDisposableWindowListener<K extends keyof WindowEventMap>(element: Window, type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
39
|
+
export declare function addDisposableListener<K extends keyof HTMLElementEventMap>(element: HTMLElement, type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): IDisposable;
|
|
40
|
+
export declare class TickDelayedEvent implements IDisposable {
|
|
41
|
+
private timer;
|
|
42
|
+
private readonly _onFired;
|
|
43
|
+
readonly onEvent: Event<void>;
|
|
44
|
+
fire(): void;
|
|
45
|
+
dispose(): void;
|
|
46
|
+
}
|
|
47
|
+
export {};
|
|
48
48
|
//# sourceMappingURL=events.d.ts.map
|
package/dist/esm/events.js
CHANGED
|
@@ -1,157 +1,157 @@
|
|
|
1
|
-
export var Event;
|
|
2
|
-
(function (Event) {
|
|
3
|
-
Event.any = (...children) => {
|
|
4
|
-
return (listener) => {
|
|
5
|
-
const disposables = children.map((child) => child(listener));
|
|
6
|
-
return {
|
|
7
|
-
dispose: () => {
|
|
8
|
-
disposables.forEach((d) => {
|
|
9
|
-
d.dispose();
|
|
10
|
-
});
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
})(Event || (Event = {}));
|
|
16
|
-
class LeakageMonitor {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.events = new Map();
|
|
19
|
-
}
|
|
20
|
-
get size() {
|
|
21
|
-
return this.events.size;
|
|
22
|
-
}
|
|
23
|
-
add(event, stacktrace) {
|
|
24
|
-
this.events.set(event, stacktrace);
|
|
25
|
-
}
|
|
26
|
-
delete(event) {
|
|
27
|
-
this.events.delete(event);
|
|
28
|
-
}
|
|
29
|
-
clear() {
|
|
30
|
-
this.events.clear();
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
class Stacktrace {
|
|
34
|
-
static create() {
|
|
35
|
-
var _a;
|
|
36
|
-
return new Stacktrace((_a = new Error().stack) !== null && _a !== void 0 ? _a : '');
|
|
37
|
-
}
|
|
38
|
-
constructor(value) {
|
|
39
|
-
this.value = value;
|
|
40
|
-
}
|
|
41
|
-
print() {
|
|
42
|
-
console.warn(this.value);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
class Listener {
|
|
46
|
-
constructor(callback, stacktrace) {
|
|
47
|
-
this.callback = callback;
|
|
48
|
-
this.stacktrace = stacktrace;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// relatively simple event emitter taken from https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
|
|
52
|
-
export class Emitter {
|
|
53
|
-
static setLeakageMonitorEnabled(isEnabled) {
|
|
54
|
-
if (isEnabled !== Emitter.ENABLE_TRACKING) {
|
|
55
|
-
Emitter.MEMORY_LEAK_WATCHER.clear();
|
|
56
|
-
}
|
|
57
|
-
Emitter.ENABLE_TRACKING = isEnabled;
|
|
58
|
-
}
|
|
59
|
-
constructor(options) {
|
|
60
|
-
this.options = options;
|
|
61
|
-
this._listeners = [];
|
|
62
|
-
this._disposed = false;
|
|
63
|
-
}
|
|
64
|
-
get event() {
|
|
65
|
-
if (!this._event) {
|
|
66
|
-
this._event = (callback) => {
|
|
67
|
-
var _a;
|
|
68
|
-
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
|
|
69
|
-
callback(this._last);
|
|
70
|
-
}
|
|
71
|
-
const listener = new Listener(callback, Emitter.ENABLE_TRACKING ? Stacktrace.create() : undefined);
|
|
72
|
-
this._listeners.push(listener);
|
|
73
|
-
return {
|
|
74
|
-
dispose: () => {
|
|
75
|
-
const index = this._listeners.indexOf(listener);
|
|
76
|
-
if (index > -1) {
|
|
77
|
-
this._listeners.splice(index, 1);
|
|
78
|
-
}
|
|
79
|
-
else if (Emitter.ENABLE_TRACKING) {
|
|
80
|
-
// console.warn(
|
|
81
|
-
// `Listener already disposed`,
|
|
82
|
-
// Stacktrace.create().print()
|
|
83
|
-
// );
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
if (Emitter.ENABLE_TRACKING) {
|
|
89
|
-
Emitter.MEMORY_LEAK_WATCHER.add(this._event, Stacktrace.create());
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return this._event;
|
|
93
|
-
}
|
|
94
|
-
fire(e) {
|
|
95
|
-
this._last = e;
|
|
96
|
-
for (const listener of this._listeners) {
|
|
97
|
-
listener.callback(e);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
dispose() {
|
|
101
|
-
if (!this._disposed) {
|
|
102
|
-
this._disposed = true;
|
|
103
|
-
if (this._listeners.length > 0) {
|
|
104
|
-
if (Emitter.ENABLE_TRACKING) {
|
|
105
|
-
queueMicrotask(() => {
|
|
106
|
-
var _a;
|
|
107
|
-
// don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
|
|
108
|
-
for (const listener of this._listeners) {
|
|
109
|
-
console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
this._listeners = [];
|
|
114
|
-
}
|
|
115
|
-
if (Emitter.ENABLE_TRACKING && this._event) {
|
|
116
|
-
Emitter.MEMORY_LEAK_WATCHER.delete(this._event);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
Emitter.ENABLE_TRACKING = false;
|
|
122
|
-
Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
|
|
123
|
-
export function addDisposableWindowListener(element, type, listener, options) {
|
|
124
|
-
element.addEventListener(type, listener, options);
|
|
125
|
-
return {
|
|
126
|
-
dispose: () => {
|
|
127
|
-
element.removeEventListener(type, listener, options);
|
|
128
|
-
},
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
export function addDisposableListener(element, type, listener, options) {
|
|
132
|
-
element.addEventListener(type, listener, options);
|
|
133
|
-
return {
|
|
134
|
-
dispose: () => {
|
|
135
|
-
element.removeEventListener(type, listener, options);
|
|
136
|
-
},
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
export class TickDelayedEvent {
|
|
140
|
-
constructor() {
|
|
141
|
-
this._onFired = new Emitter();
|
|
142
|
-
this.onEvent = this._onFired.event;
|
|
143
|
-
}
|
|
144
|
-
fire() {
|
|
145
|
-
if (this.timer) {
|
|
146
|
-
clearTimeout(this.timer);
|
|
147
|
-
}
|
|
148
|
-
this.timer = setTimeout(() => {
|
|
149
|
-
this._onFired.fire();
|
|
150
|
-
clearTimeout(this.timer);
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
dispose() {
|
|
154
|
-
this._onFired.dispose();
|
|
155
|
-
}
|
|
156
|
-
}
|
|
1
|
+
export var Event;
|
|
2
|
+
(function (Event) {
|
|
3
|
+
Event.any = (...children) => {
|
|
4
|
+
return (listener) => {
|
|
5
|
+
const disposables = children.map((child) => child(listener));
|
|
6
|
+
return {
|
|
7
|
+
dispose: () => {
|
|
8
|
+
disposables.forEach((d) => {
|
|
9
|
+
d.dispose();
|
|
10
|
+
});
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
})(Event || (Event = {}));
|
|
16
|
+
class LeakageMonitor {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.events = new Map();
|
|
19
|
+
}
|
|
20
|
+
get size() {
|
|
21
|
+
return this.events.size;
|
|
22
|
+
}
|
|
23
|
+
add(event, stacktrace) {
|
|
24
|
+
this.events.set(event, stacktrace);
|
|
25
|
+
}
|
|
26
|
+
delete(event) {
|
|
27
|
+
this.events.delete(event);
|
|
28
|
+
}
|
|
29
|
+
clear() {
|
|
30
|
+
this.events.clear();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
class Stacktrace {
|
|
34
|
+
static create() {
|
|
35
|
+
var _a;
|
|
36
|
+
return new Stacktrace((_a = new Error().stack) !== null && _a !== void 0 ? _a : '');
|
|
37
|
+
}
|
|
38
|
+
constructor(value) {
|
|
39
|
+
this.value = value;
|
|
40
|
+
}
|
|
41
|
+
print() {
|
|
42
|
+
console.warn(this.value);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
class Listener {
|
|
46
|
+
constructor(callback, stacktrace) {
|
|
47
|
+
this.callback = callback;
|
|
48
|
+
this.stacktrace = stacktrace;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// relatively simple event emitter taken from https://github.com/microsoft/vscode/blob/master/src/vs/base/common/event.ts
|
|
52
|
+
export class Emitter {
|
|
53
|
+
static setLeakageMonitorEnabled(isEnabled) {
|
|
54
|
+
if (isEnabled !== Emitter.ENABLE_TRACKING) {
|
|
55
|
+
Emitter.MEMORY_LEAK_WATCHER.clear();
|
|
56
|
+
}
|
|
57
|
+
Emitter.ENABLE_TRACKING = isEnabled;
|
|
58
|
+
}
|
|
59
|
+
constructor(options) {
|
|
60
|
+
this.options = options;
|
|
61
|
+
this._listeners = [];
|
|
62
|
+
this._disposed = false;
|
|
63
|
+
}
|
|
64
|
+
get event() {
|
|
65
|
+
if (!this._event) {
|
|
66
|
+
this._event = (callback) => {
|
|
67
|
+
var _a;
|
|
68
|
+
if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.replay) && this._last !== undefined) {
|
|
69
|
+
callback(this._last);
|
|
70
|
+
}
|
|
71
|
+
const listener = new Listener(callback, Emitter.ENABLE_TRACKING ? Stacktrace.create() : undefined);
|
|
72
|
+
this._listeners.push(listener);
|
|
73
|
+
return {
|
|
74
|
+
dispose: () => {
|
|
75
|
+
const index = this._listeners.indexOf(listener);
|
|
76
|
+
if (index > -1) {
|
|
77
|
+
this._listeners.splice(index, 1);
|
|
78
|
+
}
|
|
79
|
+
else if (Emitter.ENABLE_TRACKING) {
|
|
80
|
+
// console.warn(
|
|
81
|
+
// `Listener already disposed`,
|
|
82
|
+
// Stacktrace.create().print()
|
|
83
|
+
// );
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
if (Emitter.ENABLE_TRACKING) {
|
|
89
|
+
Emitter.MEMORY_LEAK_WATCHER.add(this._event, Stacktrace.create());
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return this._event;
|
|
93
|
+
}
|
|
94
|
+
fire(e) {
|
|
95
|
+
this._last = e;
|
|
96
|
+
for (const listener of this._listeners) {
|
|
97
|
+
listener.callback(e);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
dispose() {
|
|
101
|
+
if (!this._disposed) {
|
|
102
|
+
this._disposed = true;
|
|
103
|
+
if (this._listeners.length > 0) {
|
|
104
|
+
if (Emitter.ENABLE_TRACKING) {
|
|
105
|
+
queueMicrotask(() => {
|
|
106
|
+
var _a;
|
|
107
|
+
// don't check until stack of execution is completed to allow for out-of-order disposals within the same execution block
|
|
108
|
+
for (const listener of this._listeners) {
|
|
109
|
+
console.warn((_a = listener.stacktrace) === null || _a === void 0 ? void 0 : _a.print());
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
this._listeners = [];
|
|
114
|
+
}
|
|
115
|
+
if (Emitter.ENABLE_TRACKING && this._event) {
|
|
116
|
+
Emitter.MEMORY_LEAK_WATCHER.delete(this._event);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
Emitter.ENABLE_TRACKING = false;
|
|
122
|
+
Emitter.MEMORY_LEAK_WATCHER = new LeakageMonitor();
|
|
123
|
+
export function addDisposableWindowListener(element, type, listener, options) {
|
|
124
|
+
element.addEventListener(type, listener, options);
|
|
125
|
+
return {
|
|
126
|
+
dispose: () => {
|
|
127
|
+
element.removeEventListener(type, listener, options);
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export function addDisposableListener(element, type, listener, options) {
|
|
132
|
+
element.addEventListener(type, listener, options);
|
|
133
|
+
return {
|
|
134
|
+
dispose: () => {
|
|
135
|
+
element.removeEventListener(type, listener, options);
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export class TickDelayedEvent {
|
|
140
|
+
constructor() {
|
|
141
|
+
this._onFired = new Emitter();
|
|
142
|
+
this.onEvent = this._onFired.event;
|
|
143
|
+
}
|
|
144
|
+
fire() {
|
|
145
|
+
if (this.timer) {
|
|
146
|
+
clearTimeout(this.timer);
|
|
147
|
+
}
|
|
148
|
+
this.timer = setTimeout(() => {
|
|
149
|
+
this._onFired.fire();
|
|
150
|
+
clearTimeout(this.timer);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
dispose() {
|
|
154
|
+
this._onFired.dispose();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
157
|
//# sourceMappingURL=events.js.map
|