@ngutil/layout 0.0.3-dev.7 → 0.0.3-dev.9
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/esm2022/docking/docking-layout.component.mjs +2 -83
- package/esm2022/docking/docking-panel.component.mjs +3 -4
- package/esm2022/index.mjs +2 -1
- package/esm2022/services/slots.service.mjs +240 -0
- package/esm2022/util/dimension-watcher.mjs +4 -3
- package/esm2022/util/index.mjs +1 -2
- package/fesm2022/ngutil-layout.mjs +243 -157
- package/fesm2022/ngutil-layout.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/package.json +2 -2
- package/services/slots.service.d.ts +69 -0
- package/util/index.d.ts +0 -1
- package/esm2022/util/dom.mjs +0 -71
- package/util/dom.d.ts +0 -17
|
@@ -2,7 +2,7 @@ import { inject, NgZone } from "@angular/core";
|
|
|
2
2
|
import { distinctUntilChanged, Observable, shareReplay } from "rxjs";
|
|
3
3
|
import { NumberWithUnit } from "@ngutil/common";
|
|
4
4
|
const RESIZE_WATCHES = new Map();
|
|
5
|
-
const
|
|
5
|
+
const SCROLL_WATCHES = new Map();
|
|
6
6
|
export function watchDimension(el, box = "border-box") {
|
|
7
7
|
const zone = inject(NgZone);
|
|
8
8
|
return box === "scroll-box" ? _watchScroll(zone, el) : _watchResize(zone, el, box);
|
|
@@ -11,7 +11,7 @@ function _watchResize(zone, el, box) {
|
|
|
11
11
|
return _watch(zone, el, RESIZE_WATCHES, () => _createResizeWatcher(zone, el, box));
|
|
12
12
|
}
|
|
13
13
|
function _watchScroll(zone, el) {
|
|
14
|
-
return _watch(zone, el,
|
|
14
|
+
return _watch(zone, el, SCROLL_WATCHES, () => _createScollWatcher(zone, el));
|
|
15
15
|
}
|
|
16
16
|
function _watch(zone, el, watches, factory) {
|
|
17
17
|
const existing = watches.get(el);
|
|
@@ -74,10 +74,11 @@ function _createScollWatcher(zone, el) {
|
|
|
74
74
|
return () => {
|
|
75
75
|
dimSum.unsubscribe();
|
|
76
76
|
mutation.disconnect();
|
|
77
|
+
SCROLL_WATCHES.delete(el);
|
|
77
78
|
};
|
|
78
79
|
}).pipe(shareReplay(1)));
|
|
79
80
|
}
|
|
80
81
|
function _number(val) {
|
|
81
82
|
return new NumberWithUnit(val, "pk");
|
|
82
83
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGltZW5zaW9uLXdhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvZGltZW5zaW9uLXdhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQWMsTUFBTSxNQUFNLENBQUE7QUFFaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBTy9DLE1BQU0sY0FBYyxHQUFZLElBQUksR0FBRyxFQUFFLENBQUE7QUFDekMsTUFBTSxjQUFjLEdBQVksSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUV6QyxNQUFNLFVBQVUsY0FBYyxDQUFDLEVBQWUsRUFBRSxNQUFnQixZQUFZO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMzQixPQUFPLEdBQUcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3RGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFZLEVBQUUsRUFBZSxFQUFFLEdBQWE7SUFDOUQsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFBO0FBQ3RGLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxJQUFZLEVBQUUsRUFBZTtJQUMvQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUs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blxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCBTdWJzY3JpYmVyIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBOdW1iZXJXaXRoVW5pdCB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB7IERpbWVuc2lvbiB9IGZyb20gXCIuL2RpbWVuc2lvblwiXG5cbnR5cGUgV2F0Y2hlcyA9IE1hcDxIVE1MRWxlbWVudCwgT2JzZXJ2YWJsZTxEaW1lbnNpb24+PlxuZXhwb3J0IHR5cGUgV2F0Y2hCb3ggPSBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfCBcInNjcm9sbC1ib3hcIlxuXG5jb25zdCBSRVNJWkVfV0FUQ0hFUzogV2F0Y2hlcyA9IG5ldyBNYXAoKVxuY29uc3QgU0NST0xMX1dBVENIRVM6IFdhdGNoZXMgPSBuZXcgTWFwKClcblxuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoRGltZW5zaW9uKGVsOiBIVE1MRWxlbWVudCwgYm94OiBXYXRjaEJveCA9IFwiYm9yZGVyLWJveFwiKTogT2JzZXJ2YWJsZTxEaW1lbnNpb24+IHtcbiAgICBjb25zdCB6b25lID0gaW5qZWN0KE5nWm9uZSlcbiAgICByZXR1cm4gYm94ID09PSBcInNjcm9sbC1ib3hcIiA/IF93YXRjaFNjcm9sbCh6b25lLCBlbCkgOiBfd2F0Y2hSZXNpemUoem9uZSwgZWwsIGJveClcbn1cblxuZnVuY3Rpb24gX3dhdGNoUmVzaXplKHpvbmU6IE5nWm9uZSwgZWw6IEhUTUxFbGVtZW50LCBib3g6IFdhdGNoQm94KSB7XG4gICAgcmV0dXJuIF93YXRjaCh6b25lLCBlbCwgUkVTSVpFX1dBVENIRVMsICgpID0+IF9jcmVhdGVSZXNpemVXYXRjaGVyKHpvbmUsIGVsLCBib3gpKVxufVxuXG5mdW5jdGlvbiBfd2F0Y2hTY3JvbGwoem9uZTogTmdab25lLCBlbDogSFRNTEVsZW1lbnQpIHtcbiAgICByZXR1cm4gX3dhdGNoKHpvbmUsIGVsLCBTQ1JPTExfV0FUQ0hFUywgKCkgPT4gX2NyZWF0ZVNjb2xsV2F0Y2hlcih6b25lLCBlbCkpXG59XG5cbmZ1bmN0aW9uIF93YXRjaCh6b25lOiBOZ1pvbmUsIGVsOiBIVE1MRWxlbWVudCwgd2F0Y2hlczogV2F0Y2hlcywgZmFjdG9yeTogKCkgPT4gT2JzZXJ2YWJsZTxEaW1lbnNpb24+KSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB3YXRjaGVzLmdldChlbClcbiAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB3YXRjaGVyID0gZmFjdG9yeSgpXG4gICAgICAgIHdhdGNoZXMuc2V0KGVsLCB3YXRjaGVyKVxuICAgICAgICByZXR1cm4gd2F0Y2hlclxuICAgIH1cbiAgICByZXR1cm4gZXhpc3Rpbmdcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZVJlc2l6ZVdhdGNoZXIoem9uZTogTmdab25lLCBlbDogSFRNTEVsZW1lbnQsIGJveDogV2F0Y2hCb3gpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgIGlmIChib3ggIT09IFwiYm9yZGVyLWJveFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCBib3ggbW9kZTogJHtib3h9YClcbiAgICB9XG5cbiAgICByZXR1cm4gem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PlxuICAgICAgICBuZXcgT2JzZXJ2YWJsZSgoc3ViOiBTdWJzY3JpYmVyPERpbWVuc2lvbj4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkuYm9yZGVyQm94U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfbnVtYmVyKGVudHJ5LmJvcmRlckJveFNpemVbMF0uaW5saW5lU2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfbnVtYmVyKGVudHJ5LmJvcmRlckJveFNpemVbMF0uYmxvY2tTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yi5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX251bWJlcihlbC5vZmZzZXRXaWR0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBfbnVtYmVyKGVsLm9mZnNldEhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCwgeyBib3g6IGJveCBhcyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfSlcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICAgICAgICAgICAgICBSRVNJWkVfV0FUQ0hFUy5kZWxldGUoZWwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocCwgYykgPT4gcCAmJiBjICYmIHAud2lkdGggPT09IGMud2lkdGggJiYgcC5oZWlnaHQgPT09IGMuaGVpZ2h0KSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgIClcbiAgICApXG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTY29sbFdhdGNoZXIoem9uZTogTmdab25lLCBlbDogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPERpbWVuc2lvbj4ge1xuICAgIHJldHVybiB6b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+XG4gICAgICAgIG5ldyBPYnNlcnZhYmxlKChzdWI6IFN1YnNjcmliZXI8RGltZW5zaW9uPikgPT4ge1xuICAgICAgICAgICAgbGV0IGxhc3RTdzogbnVtYmVyID0gMFxuICAgICAgICAgICAgbGV0IGxhc3RTaDogbnVtYmVyID0gMFxuXG4gICAgICAgICAgICBjb25zdCBlbWl0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN3ID0gZWwuc2Nyb2xsV2lkdGhcbiAgICAgICAgICAgICAgICBjb25zdCBzaCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICAgIGlmIChsYXN0U3cgIT09IHN3IHx8IGxhc3RTaCAhPT0gc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdFN3ID0gc3dcbiAgICAgICAgICAgICAgICAgICAgbGFzdFNoID0gc2hcbiAgICAgICAgICAgICAgICAgICAgc3ViLm5leHQoeyB3aWR0aDogX251bWJlcihsYXN0U3cpLCBoZWlnaHQ6IF9udW1iZXIobGFzdFNoKSB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGltU3VtID0gX3dhdGNoUmVzaXplKHpvbmUsIGVsLCBcImJvcmRlci1ib3hcIikuc3Vic2NyaWJlKGVtaXQpXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGVtaXQpXG4gICAgICAgICAgICBtdXRhdGlvbi5vYnNlcnZlKGVsLCB7XG4gICAgICAgICAgICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpbVN1bS51bnN1YnNjcmliZSgpXG4gICAgICAgICAgICAgICAgbXV0YXRpb24uZGlzY29ubmVjdCgpXG4gICAgICAgICAgICAgICAgU0NST0xMX1dBVENIRVMuZGVsZXRlKGVsKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuICAgIClcbn1cblxuZnVuY3Rpb24gX251bWJlcih2YWw6IG51bWJlcik6IE51bWJlcldpdGhVbml0IHtcbiAgICByZXR1cm4gbmV3IE51bWJlcldpdGhVbml0KHZhbCwgXCJwa1wiKVxufVxuIl19
|
package/esm2022/util/index.mjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { watchMedia } from "./media-watcher";
|
|
2
2
|
export { watchDimension } from "./dimension-watcher";
|
|
3
|
-
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRGltZW5zaW9uIH0gZnJvbSBcIi4vZGltZW5zaW9uXCJcbmV4cG9ydCB7IFJlY3QgfSBmcm9tIFwiLi9yZWN0XCJcbmV4cG9ydCB7IHdhdGNoTWVkaWEgfSBmcm9tIFwiLi9tZWRpYS13YXRjaGVyXCJcbmV4cG9ydCB7IHdhdGNoRGltZW5zaW9uIH0gZnJvbSBcIi4vZGltZW5zaW9uLXdhdGNoZXJcIlxuZXhwb3J0IHsgRmFzdERPTSB9IGZyb20gXCIuL2RvbVwiXG4iXX0=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL3V0aWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IERpbWVuc2lvbiB9IGZyb20gXCIuL2RpbWVuc2lvblwiXG5leHBvcnQgeyBSZWN0IH0gZnJvbSBcIi4vcmVjdFwiXG5leHBvcnQgeyB3YXRjaE1lZGlhIH0gZnJvbSBcIi4vbWVkaWEtd2F0Y2hlclwiXG5leHBvcnQgeyB3YXRjaERpbWVuc2lvbiB9IGZyb20gXCIuL2RpbWVuc2lvbi13YXRjaGVyXCJcbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, NgZone, Component, ElementRef, Input, Output, ChangeDetectionStrategy, ContentChild, ContentChildren, NgModule } from '@angular/core';
|
|
3
|
-
import { Observable, distinctUntilChanged, shareReplay, BehaviorSubject, map, combineLatest, switchMap, of, Subject, startWith } from 'rxjs';
|
|
4
|
-
import { NumberWithUnit,
|
|
2
|
+
import { inject, NgZone, Component, ElementRef, Input, Output, ChangeDetectionStrategy, ContentChild, ContentChildren, NgModule, Injectable, TemplateRef, Directive, ViewContainerRef, Injector } from '@angular/core';
|
|
3
|
+
import { Observable, distinctUntilChanged, shareReplay, BehaviorSubject, map, combineLatest, switchMap, of, Subject, startWith, scan, tap, finalize } from 'rxjs';
|
|
4
|
+
import { NumberWithUnit, Destructible, coerceBoolAttr, FastDOM } from '@ngutil/common';
|
|
5
5
|
|
|
6
6
|
const WATCHES = {};
|
|
7
7
|
/**
|
|
@@ -31,7 +31,7 @@ function _createWatcher(expr) {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
const RESIZE_WATCHES = new Map();
|
|
34
|
-
const
|
|
34
|
+
const SCROLL_WATCHES = new Map();
|
|
35
35
|
function watchDimension(el, box = "border-box") {
|
|
36
36
|
const zone = inject(NgZone);
|
|
37
37
|
return box === "scroll-box" ? _watchScroll(zone, el) : _watchResize(zone, el, box);
|
|
@@ -40,7 +40,7 @@ function _watchResize(zone, el, box) {
|
|
|
40
40
|
return _watch(zone, el, RESIZE_WATCHES, () => _createResizeWatcher(zone, el, box));
|
|
41
41
|
}
|
|
42
42
|
function _watchScroll(zone, el) {
|
|
43
|
-
return _watch(zone, el,
|
|
43
|
+
return _watch(zone, el, SCROLL_WATCHES, () => _createScollWatcher(zone, el));
|
|
44
44
|
}
|
|
45
45
|
function _watch(zone, el, watches, factory) {
|
|
46
46
|
const existing = watches.get(el);
|
|
@@ -103,6 +103,7 @@ function _createScollWatcher(zone, el) {
|
|
|
103
103
|
return () => {
|
|
104
104
|
dimSum.unsubscribe();
|
|
105
105
|
mutation.disconnect();
|
|
106
|
+
SCROLL_WATCHES.delete(el);
|
|
106
107
|
};
|
|
107
108
|
}).pipe(shareReplay(1)));
|
|
108
109
|
}
|
|
@@ -110,76 +111,6 @@ function _number(val) {
|
|
|
110
111
|
return new NumberWithUnit(val, "pk");
|
|
111
112
|
}
|
|
112
113
|
|
|
113
|
-
class _FastDOM {
|
|
114
|
-
#rafId;
|
|
115
|
-
#mutate = [];
|
|
116
|
-
#measure = [];
|
|
117
|
-
mutate(handler) {
|
|
118
|
-
this.#mutate.push(handler);
|
|
119
|
-
this._schedule();
|
|
120
|
-
}
|
|
121
|
-
mutateNext(handler) {
|
|
122
|
-
this.#mutate.push(() => {
|
|
123
|
-
this.#mutate.push(handler);
|
|
124
|
-
});
|
|
125
|
-
this._schedule();
|
|
126
|
-
}
|
|
127
|
-
measure(handler) {
|
|
128
|
-
this.#measure.push(handler);
|
|
129
|
-
this._schedule();
|
|
130
|
-
}
|
|
131
|
-
setStyle(el, style, chain) {
|
|
132
|
-
this.mutate(() => {
|
|
133
|
-
for (const [k, v] of Object.entries(style)) {
|
|
134
|
-
if (v == null) {
|
|
135
|
-
el.style.removeProperty(k);
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
el.style.setProperty(k, v);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
chain && chain();
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
setAttributes(el, attrs, chain) {
|
|
145
|
-
this.mutate(() => {
|
|
146
|
-
for (const [k, v] of Object.entries(attrs)) {
|
|
147
|
-
if (v == null) {
|
|
148
|
-
el.removeAttribute(k);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
el.setAttribute(k, v);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
chain && chain();
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
_schedule() {
|
|
158
|
-
if (!this.#rafId) {
|
|
159
|
-
this.#rafId = rawRequestAnimationFrame(this._apply.bind(this));
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
_apply() {
|
|
163
|
-
this.#rafId = null;
|
|
164
|
-
const measure = this.#measure.slice();
|
|
165
|
-
const mutate = this.#mutate.slice();
|
|
166
|
-
this.#measure.length = 0;
|
|
167
|
-
this.#mutate.length = 0;
|
|
168
|
-
runQ(measure);
|
|
169
|
-
runQ(mutate);
|
|
170
|
-
if (this.#measure.length || this.#mutate.length) {
|
|
171
|
-
this._schedule();
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
function runQ(items) {
|
|
176
|
-
let item;
|
|
177
|
-
while ((item = items.shift())) {
|
|
178
|
-
item();
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
const FastDOM = new _FastDOM();
|
|
182
|
-
|
|
183
114
|
/**
|
|
184
115
|
* -----------------------------------------------
|
|
185
116
|
* | TOP:LEFT | TOP:CENTER | TOP:RIGHT |
|
|
@@ -329,7 +260,6 @@ const DEFAULT_POSITION = L9Range.coerce("left");
|
|
|
329
260
|
class DockingPanelComponent extends Destructible {
|
|
330
261
|
set positionInput(val) {
|
|
331
262
|
const coerced = L9Range.coerce(val);
|
|
332
|
-
console.log("SET POSITION", coerced, this.position.value.isEq(coerced));
|
|
333
263
|
if (coerced.orient === "rect") {
|
|
334
264
|
throw new Error(`Invalid position value: ${val}`);
|
|
335
265
|
}
|
|
@@ -523,7 +453,6 @@ class DockingLayoutComponent extends Destructible {
|
|
|
523
453
|
}
|
|
524
454
|
}
|
|
525
455
|
#layout(entries) {
|
|
526
|
-
console.log("layout", entries);
|
|
527
456
|
let paddingTop = 0;
|
|
528
457
|
let paddingRight = 0;
|
|
529
458
|
let paddingBottom = 0;
|
|
@@ -600,7 +529,6 @@ class DockingLayoutComponent extends Destructible {
|
|
|
600
529
|
"--docking-panel-real-h": isHorizontal ? `${panelSize}px` : null
|
|
601
530
|
});
|
|
602
531
|
}
|
|
603
|
-
console.log({ paddingTop, paddingRight, paddingBottom, paddingLeft });
|
|
604
532
|
FastDOM.setStyle(this.#el.nativeElement, {
|
|
605
533
|
"--docking-layout-top": `${paddingTop}px`,
|
|
606
534
|
"--docking-layout-right": `${paddingRight}px`,
|
|
@@ -609,84 +537,6 @@ class DockingLayoutComponent extends Destructible {
|
|
|
609
537
|
});
|
|
610
538
|
}
|
|
611
539
|
}
|
|
612
|
-
#layoutOld(entries) {
|
|
613
|
-
// let paddingTop = 0
|
|
614
|
-
// let paddingRight = 0
|
|
615
|
-
// let paddingBottom = 0
|
|
616
|
-
// let paddingLeft = 0
|
|
617
|
-
// if (!this.contentOnly) {
|
|
618
|
-
// let embeddedZIndex = EMBEDDED_ZINDEX
|
|
619
|
-
// let overlayZIndex = OVERLAY_ZINDEX
|
|
620
|
-
// const leftRight: PanelRefChanges[] = entries.filter(v =>
|
|
621
|
-
// ["left", "right"].includes(v.changes.position.side)
|
|
622
|
-
// )
|
|
623
|
-
// const topBottom: PanelRefChanges[] = entries.filter(v =>
|
|
624
|
-
// ["top", "bottom"].includes(v.changes.position.side)
|
|
625
|
-
// )
|
|
626
|
-
// for (const entry of entries) {
|
|
627
|
-
// const changes = entry.changes
|
|
628
|
-
// const ref = entry.ref
|
|
629
|
-
// if (changes.mode === "embedded") {
|
|
630
|
-
// ref.style.zIndex = `${embeddedZIndex++}`
|
|
631
|
-
// } else if (changes.mode === "overlay") {
|
|
632
|
-
// ref.style.zIndex = `${overlayZIndex++}`
|
|
633
|
-
// }
|
|
634
|
-
// }
|
|
635
|
-
// for (const entry of leftRight) {
|
|
636
|
-
// const changes = entry.changes
|
|
637
|
-
// const ref = entry.ref
|
|
638
|
-
// const padding =
|
|
639
|
-
// changes.mode === "embedded"
|
|
640
|
-
// ? changes.state === "full"
|
|
641
|
-
// ? changes.fullSize
|
|
642
|
-
// : changes.state === "mini"
|
|
643
|
-
// ? changes.miniSize
|
|
644
|
-
// : 0
|
|
645
|
-
// : 0
|
|
646
|
-
// ref.style.top = "0"
|
|
647
|
-
// ref.style.bottom = "0"
|
|
648
|
-
// if (changes.position.side === "left") {
|
|
649
|
-
// paddingLeft = Math.max(paddingLeft, padding)
|
|
650
|
-
// ref.style.left = "0"
|
|
651
|
-
// ref.style.right = ""
|
|
652
|
-
// } else {
|
|
653
|
-
// paddingRight = Math.max(paddingRight, padding)
|
|
654
|
-
// ref.style.right = "0"
|
|
655
|
-
// ref.style.left = ""
|
|
656
|
-
// }
|
|
657
|
-
// }
|
|
658
|
-
// for (const entry of topBottom) {
|
|
659
|
-
// const changes = entry.changes
|
|
660
|
-
// const ref = entry.ref
|
|
661
|
-
// const padding =
|
|
662
|
-
// changes.mode === "embedded"
|
|
663
|
-
// ? changes.state === "full"
|
|
664
|
-
// ? changes.fullSize
|
|
665
|
-
// : changes.state === "mini"
|
|
666
|
-
// ? changes.miniSize
|
|
667
|
-
// : 0
|
|
668
|
-
// : 0
|
|
669
|
-
// if (changes.mode === "embedded") {
|
|
670
|
-
// ref.style.left = `${paddingLeft}px`
|
|
671
|
-
// ref.style.right = `${paddingRight}px`
|
|
672
|
-
// } else {
|
|
673
|
-
// ref.style.left = "0"
|
|
674
|
-
// ref.style.right = "0"
|
|
675
|
-
// }
|
|
676
|
-
// if (changes.position?.cells[0].v === "top") {
|
|
677
|
-
// paddingTop = Math.max(paddingTop, padding)
|
|
678
|
-
// ref.style.top = "0"
|
|
679
|
-
// ref.style.bottom = ""
|
|
680
|
-
// } else {
|
|
681
|
-
// paddingBottom = Math.max(paddingBottom, padding)
|
|
682
|
-
// ref.style.bottom = `0`
|
|
683
|
-
// ref.style.top = ""
|
|
684
|
-
// }
|
|
685
|
-
// }
|
|
686
|
-
// }
|
|
687
|
-
// const cel = this.contentEl.nativeElement
|
|
688
|
-
// cel.style.padding = `${paddingTop}px ${paddingRight}px ${paddingBottom}px ${paddingLeft}px`
|
|
689
|
-
}
|
|
690
540
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingLayoutComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
691
541
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DockingLayoutComponent, isStandalone: true, selector: "nu-docking", inputs: { contentOnly: "contentOnly", positionMode: "positionMode" }, queries: [{ propertyName: "contentComponent", first: true, predicate: DockingContentComponent, descendants: true }, { propertyName: "dockingPanels", predicate: DockingPanelComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
692
542
|
<ng-content select="nu-docking-panel"></ng-content>
|
|
@@ -739,9 +589,245 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
739
589
|
}]
|
|
740
590
|
}] });
|
|
741
591
|
|
|
592
|
+
const SLOT_REGEX = /^([^:\s]+)(?::(\d+))?(?:\s+as\s+(.*?))?$/i;
|
|
593
|
+
class SlotDef {
|
|
594
|
+
constructor(slot, tpl) {
|
|
595
|
+
this.tpl = tpl;
|
|
596
|
+
const match = slot.match(SLOT_REGEX);
|
|
597
|
+
if (!match) {
|
|
598
|
+
console.warn(`Invalid slot definition: ${slot}`);
|
|
599
|
+
}
|
|
600
|
+
else {
|
|
601
|
+
this.slot = match[1];
|
|
602
|
+
this.order = match[2] != null ? Number(match[2]) : Infinity;
|
|
603
|
+
this.id = match[3];
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
dispose() {
|
|
607
|
+
this.viewRef?.destroy();
|
|
608
|
+
this.viewRef = undefined;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* @Directive({selector: "ng-template[xyzSlot]", inputs: [{name: "slot", alias: "xyzSlot"}]})
|
|
613
|
+
* class XYZSlotDirective extends SlotDirective<XYZComponentSlots> { }
|
|
614
|
+
*
|
|
615
|
+
* @Directive({selector: "ng-template[xyzSlotOutlet]", inputs: [{name: "slot", alias: "xyzSlotOutlet"}]})
|
|
616
|
+
* class XYZSlotOutletDirective extends SlotOutletDirective<XYZComponentSlots> { }
|
|
617
|
+
*
|
|
618
|
+
*
|
|
619
|
+
* @Component({provides: [SlotsService]})
|
|
620
|
+
* class XYZComponent {
|
|
621
|
+
* slots: inject(SlotsService<XYZComponentSlots>)
|
|
622
|
+
* }
|
|
623
|
+
*
|
|
624
|
+
*
|
|
625
|
+
*/
|
|
626
|
+
class SlotsService extends Destructible {
|
|
627
|
+
#events = new Subject();
|
|
628
|
+
#entries = this.#events.pipe(scan((entries, event) => {
|
|
629
|
+
if (event.type === "add") {
|
|
630
|
+
const index = entries.findIndex(value => value === event.def);
|
|
631
|
+
if (index > -1) {
|
|
632
|
+
entries[index] = event.def;
|
|
633
|
+
}
|
|
634
|
+
else {
|
|
635
|
+
entries.push(event.def);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
else if (event.type === "del") {
|
|
639
|
+
const index = entries.findIndex(value => value === event.def);
|
|
640
|
+
if (index > -1) {
|
|
641
|
+
entries.splice(index, 1);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
return entries;
|
|
645
|
+
}, []), tap(entries => {
|
|
646
|
+
entries.sort((a, b) => {
|
|
647
|
+
if (a.slot === b.slot) {
|
|
648
|
+
return a.order - b.order;
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
return a.slot.localeCompare(b.slot);
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
}), shareReplay(1));
|
|
655
|
+
constructor() {
|
|
656
|
+
super();
|
|
657
|
+
// XXX: need to collect entries from the beginning
|
|
658
|
+
this.d.sub(this.#entries).subscribe();
|
|
659
|
+
}
|
|
660
|
+
addTpl(def) {
|
|
661
|
+
this.#events.next({ type: "add", def });
|
|
662
|
+
}
|
|
663
|
+
delTpl(def) {
|
|
664
|
+
this.#events.next({ type: "del", def });
|
|
665
|
+
}
|
|
666
|
+
#watchers = {};
|
|
667
|
+
watch(slot) {
|
|
668
|
+
const existing = this.#watchers[slot];
|
|
669
|
+
if (existing == null) {
|
|
670
|
+
return (this.#watchers[slot] = this.#watch(slot));
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
return existing;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
#watch(slot) {
|
|
677
|
+
return this.#entries.pipe(map(entries => entries.filter(entry => entry.slot === slot)), distinctUntilChanged((prev, curr) => {
|
|
678
|
+
if (prev.length === curr.length) {
|
|
679
|
+
for (let i = 0; i < prev.length; i++) {
|
|
680
|
+
if (prev[i] !== curr[i]) {
|
|
681
|
+
return false;
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
return true;
|
|
685
|
+
}
|
|
686
|
+
else {
|
|
687
|
+
return false;
|
|
688
|
+
}
|
|
689
|
+
}), finalize(() => {
|
|
690
|
+
delete this.#watchers[slot];
|
|
691
|
+
}), shareReplay(1));
|
|
692
|
+
}
|
|
693
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
694
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService }); }
|
|
695
|
+
}
|
|
696
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotsService, decorators: [{
|
|
697
|
+
type: Injectable
|
|
698
|
+
}], ctorParameters: () => [] });
|
|
699
|
+
class SlotDirective {
|
|
700
|
+
constructor() {
|
|
701
|
+
this.tpl = inject((TemplateRef));
|
|
702
|
+
}
|
|
703
|
+
set slot(slot) {
|
|
704
|
+
if (this.#slot !== slot) {
|
|
705
|
+
this.#slot = slot;
|
|
706
|
+
if (this.#slotDef) {
|
|
707
|
+
this.slotSvc.delTpl(this.#slotDef);
|
|
708
|
+
}
|
|
709
|
+
this.#slotDef = new SlotDef(slot, this.tpl);
|
|
710
|
+
this.slotSvc.addTpl(this.#slotDef);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
get slot() {
|
|
714
|
+
return this.#slot;
|
|
715
|
+
}
|
|
716
|
+
#slot;
|
|
717
|
+
#slotDef;
|
|
718
|
+
ngOnDestroy() {
|
|
719
|
+
if (this.#slotDef) {
|
|
720
|
+
this.slotSvc.delTpl(this.#slotDef);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
724
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: SlotDirective, ngImport: i0 }); }
|
|
725
|
+
}
|
|
726
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotDirective, decorators: [{
|
|
727
|
+
type: Directive
|
|
728
|
+
}] });
|
|
729
|
+
class SlotOutletDirective extends Destructible {
|
|
730
|
+
set slot(slot) {
|
|
731
|
+
if (this.#slot.value !== slot) {
|
|
732
|
+
this.#slot.next(slot);
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
get slot() {
|
|
736
|
+
return this.#slot.value;
|
|
737
|
+
}
|
|
738
|
+
#slot;
|
|
739
|
+
#watch;
|
|
740
|
+
#views;
|
|
741
|
+
constructor() {
|
|
742
|
+
super();
|
|
743
|
+
this.vcr = inject(ViewContainerRef);
|
|
744
|
+
this.injector = inject(Injector);
|
|
745
|
+
this.#slot = new BehaviorSubject(null);
|
|
746
|
+
this.#watch = this.#slot.pipe(switchMap(slot => {
|
|
747
|
+
if (slot) {
|
|
748
|
+
return this.slotSvc.watch(slot);
|
|
749
|
+
}
|
|
750
|
+
else {
|
|
751
|
+
return of([]);
|
|
752
|
+
}
|
|
753
|
+
}));
|
|
754
|
+
this.#views = [];
|
|
755
|
+
this.#onEntriesChanged = (entries) => {
|
|
756
|
+
const { remove, undecided } = this.#determineActions(entries);
|
|
757
|
+
for (const r of remove) {
|
|
758
|
+
r.dispose();
|
|
759
|
+
const idx = this.#views.indexOf(r);
|
|
760
|
+
if (idx >= 0) {
|
|
761
|
+
this.#views.splice(idx, 1);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
this.#views.length = 0;
|
|
765
|
+
for (const [pos, entry] of undecided.entries()) {
|
|
766
|
+
if (entry.viewRef && !entry.viewRef.destroyed) {
|
|
767
|
+
const currentPos = this.vcr.indexOf(entry.viewRef);
|
|
768
|
+
if (currentPos !== pos) {
|
|
769
|
+
this.vcr.insert(entry.viewRef, pos);
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
else {
|
|
773
|
+
;
|
|
774
|
+
entry.viewRef = this.vcr.createEmbeddedView(entry.tpl, null, {
|
|
775
|
+
index: pos,
|
|
776
|
+
injector: this.injector
|
|
777
|
+
});
|
|
778
|
+
entry.viewRef.markForCheck();
|
|
779
|
+
}
|
|
780
|
+
this.#views.push(entry);
|
|
781
|
+
}
|
|
782
|
+
};
|
|
783
|
+
this.d.any(this.#clearViews.bind(this));
|
|
784
|
+
}
|
|
785
|
+
ngOnInit() {
|
|
786
|
+
this.d.sub(this.#watch).subscribe(this.#onEntriesChanged);
|
|
787
|
+
}
|
|
788
|
+
#onEntriesChanged;
|
|
789
|
+
#determineActions(entries) {
|
|
790
|
+
const byId = {};
|
|
791
|
+
let remove = [];
|
|
792
|
+
const undecided = [];
|
|
793
|
+
for (const entry of entries) {
|
|
794
|
+
if (entry.id != null) {
|
|
795
|
+
if (!byId[entry.id]) {
|
|
796
|
+
byId[entry.id] = [entry];
|
|
797
|
+
}
|
|
798
|
+
else {
|
|
799
|
+
byId[entry.id].push(entry);
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
else {
|
|
803
|
+
undecided.push(entry);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
for (const values of Object.values(byId)) {
|
|
807
|
+
remove = remove.concat(values.slice(0, -1));
|
|
808
|
+
undecided.push(values[values.length - 1]);
|
|
809
|
+
}
|
|
810
|
+
for (const current of this.#views) {
|
|
811
|
+
if (!undecided.includes(current)) {
|
|
812
|
+
remove.push(current);
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
return { remove, undecided };
|
|
816
|
+
}
|
|
817
|
+
#clearViews() {
|
|
818
|
+
this.vcr.clear();
|
|
819
|
+
this.#views = [];
|
|
820
|
+
}
|
|
821
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotOutletDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
822
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: SlotOutletDirective, usesInheritance: true, ngImport: i0 }); }
|
|
823
|
+
}
|
|
824
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: SlotOutletDirective, decorators: [{
|
|
825
|
+
type: Directive
|
|
826
|
+
}], ctorParameters: () => [] });
|
|
827
|
+
|
|
742
828
|
/**
|
|
743
829
|
* Generated bundle index. Do not edit.
|
|
744
830
|
*/
|
|
745
831
|
|
|
746
|
-
export { DockingContentComponent, DockingLayoutComponent, DockingPanelComponent,
|
|
832
|
+
export { DockingContentComponent, DockingLayoutComponent, DockingPanelComponent, L9Cell, L9Range, L9State, NuDockingLayout, SlotDef, SlotDirective, SlotOutletDirective, SlotsService, watchDimension, watchMedia };
|
|
747
833
|
//# sourceMappingURL=ngutil-layout.mjs.map
|