@ngutil/layout 0.0.3-dev.0 → 0.0.3-dev.10
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/docking/docking-content.component.d.ts +5 -0
- package/docking/docking-layout.component.d.ts +22 -0
- package/docking/docking-panel.component.d.ts +40 -0
- package/docking/index.d.ts +13 -0
- package/esm2022/docking/docking-content.component.mjs +11 -0
- package/esm2022/docking/docking-layout.component.mjs +140 -0
- package/esm2022/docking/docking-panel.component.mjs +179 -0
- package/esm2022/docking/index.mjs +20 -0
- package/esm2022/index.mjs +5 -0
- package/esm2022/l9/index.mjs +3 -0
- package/esm2022/l9/range.mjs +109 -0
- package/esm2022/l9/state.mjs +29 -0
- package/esm2022/ngutil-layout.mjs +5 -0
- package/esm2022/services/slots.service.mjs +240 -0
- package/esm2022/util/dimension-watcher.mjs +85 -0
- package/esm2022/util/dimension.mjs +2 -0
- package/esm2022/util/index.mjs +3 -0
- package/esm2022/util/media-watcher.mjs +29 -0
- package/esm2022/util/rect.mjs +2 -0
- package/fesm2022/ngutil-layout.mjs +822 -0
- package/fesm2022/ngutil-layout.mjs.map +1 -0
- package/index.d.ts +4 -0
- package/l9/index.d.ts +2 -0
- package/l9/range.d.ts +28 -0
- package/l9/state.d.ts +14 -0
- package/package.json +19 -5
- package/services/slots.service.d.ts +69 -0
- package/util/dimension-watcher.d.ts +4 -0
- package/util/dimension.d.ts +5 -0
- package/util/index.d.ts +4 -0
- package/util/media-watcher.d.ts +5 -0
- package/util/rect.d.ts +5 -0
- package/.eslintrc.json +0 -25
- package/.storybook/main.ts +0 -16
- package/.storybook/preview.ts +0 -0
- package/.storybook/tsconfig.json +0 -16
- package/jest.config.ts +0 -22
- package/ng-package.json +0 -7
- package/project.json +0 -73
- package/src/index.ts +0 -1
- package/src/lib/layout/layout.component.scss +0 -0
- package/src/lib/layout/layout.component.spec.ts +0 -22
- package/src/lib/layout/layout.component.stories.ts +0 -24
- package/src/lib/layout/layout.component.ts +0 -11
- package/src/test-setup.ts +0 -9
- package/tsconfig.json +0 -32
- package/tsconfig.lib.json +0 -19
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -11
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class DockingContentComponent {
|
|
3
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DockingContentComponent, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DockingContentComponent, "nu-docking-content", ["nuDockingContent"], {}, {}, never, ["*"], true, never>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AfterViewInit, OnChanges, QueryList, SimpleChanges } from "@angular/core";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { Destructible } from "@ngutil/common";
|
|
4
|
+
import { DockingContentComponent } from "./docking-content.component";
|
|
5
|
+
import { DockingPanelComponent } from "./docking-panel.component";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
type DockingVerticalPosition = "top" | "middle" | "bottom";
|
|
8
|
+
type DockingHorizontalPositon = "left" | "center" | "right";
|
|
9
|
+
type DockingPosition = `${DockingVerticalPosition}:${DockingHorizontalPositon}`;
|
|
10
|
+
export type DockingRange = DockingVerticalPosition | DockingHorizontalPositon | DockingPosition | `${DockingPosition}-${DockingPosition}`;
|
|
11
|
+
export declare class DockingLayoutComponent extends Destructible implements AfterViewInit, OnChanges {
|
|
12
|
+
#private;
|
|
13
|
+
contentOnly: boolean;
|
|
14
|
+
contentComponent?: DockingContentComponent;
|
|
15
|
+
dockingPanels: QueryList<DockingPanelComponent>;
|
|
16
|
+
readonly panels: Observable<Array<DockingPanelComponent>>;
|
|
17
|
+
ngAfterViewInit(): void;
|
|
18
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DockingLayoutComponent, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DockingLayoutComponent, "nu-docking", never, { "contentOnly": { "alias": "contentOnly"; "required": false; }; }, {}, ["contentComponent", "dockingPanels"], ["nu-docking-panel", "*", "nu-docking-content"], true, never>;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ElementRef } from "@angular/core";
|
|
2
|
+
import { BehaviorSubject, Observable } from "rxjs";
|
|
3
|
+
import { BooleanInput, Destructible, NumberWithUnit, NumberWithUnitInput } from "@ngutil/common";
|
|
4
|
+
import { L9Range, L9RangeName } from "../l9/range";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export type DockingPanelState = "full" | "mini" | "invisible";
|
|
7
|
+
export type DockingPanelMode = "over" | "push" | "rigid";
|
|
8
|
+
export declare class DockingPanelComponent extends Destructible {
|
|
9
|
+
#private;
|
|
10
|
+
readonly el: ElementRef<any>;
|
|
11
|
+
set positionInput(val: L9Range | L9RangeName);
|
|
12
|
+
readonly position: BehaviorSubject<L9Range>;
|
|
13
|
+
set stateInput(val: DockingPanelState);
|
|
14
|
+
readonly state: BehaviorSubject<DockingPanelState>;
|
|
15
|
+
set modeInput(val: DockingPanelMode);
|
|
16
|
+
readonly mode: BehaviorSubject<DockingPanelMode>;
|
|
17
|
+
set fullSizeInput(val: NumberWithUnitInput);
|
|
18
|
+
set miniSizeInput(val: NumberWithUnitInput);
|
|
19
|
+
set minimizable(val: BooleanInput);
|
|
20
|
+
get minimizable(): boolean;
|
|
21
|
+
readonly fullSize: Observable<NumberWithUnit>;
|
|
22
|
+
readonly miniSize: Observable<NumberWithUnit>;
|
|
23
|
+
readonly changes: Observable<{
|
|
24
|
+
position: L9Range;
|
|
25
|
+
state: DockingPanelState;
|
|
26
|
+
mode: DockingPanelMode;
|
|
27
|
+
fullSize: NumberWithUnit;
|
|
28
|
+
miniSize: NumberWithUnit;
|
|
29
|
+
contentSize: import("../util").Dimension;
|
|
30
|
+
}>;
|
|
31
|
+
constructor();
|
|
32
|
+
open(): void;
|
|
33
|
+
close(): void;
|
|
34
|
+
minimize(): void;
|
|
35
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DockingPanelComponent, never>;
|
|
36
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DockingPanelComponent, "nu-docking-panel", ["nuDockingPanel"], { "positionInput": { "alias": "position"; "required": false; }; "stateInput": { "alias": "state"; "required": false; }; "modeInput": { "alias": "mode"; "required": false; }; "fullSizeInput": { "alias": "fullSize"; "required": false; }; "miniSizeInput": { "alias": "miniSize"; "required": false; }; "minimizable": { "alias": "minimizable"; "required": false; }; }, { "state": "stateChanges"; }, never, ["*"], true, never>;
|
|
37
|
+
}
|
|
38
|
+
type ChangesObservable = typeof DockingPanelComponent.prototype.changes;
|
|
39
|
+
export type DockingPanelChanges = ChangesObservable extends Observable<infer T> ? T : never;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DockingContentComponent } from "./docking-content.component";
|
|
2
|
+
import { DockingLayoutComponent } from "./docking-layout.component";
|
|
3
|
+
import { DockingPanelComponent } from "./docking-panel.component";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./docking-layout.component";
|
|
6
|
+
import * as i2 from "./docking-panel.component";
|
|
7
|
+
import * as i3 from "./docking-content.component";
|
|
8
|
+
export { DockingLayoutComponent, DockingPanelComponent, DockingContentComponent };
|
|
9
|
+
export declare class NuDockingLayout {
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NuDockingLayout, never>;
|
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NuDockingLayout, never, [typeof i1.DockingLayoutComponent, typeof i2.DockingPanelComponent, typeof i3.DockingContentComponent], [typeof i1.DockingLayoutComponent, typeof i2.DockingPanelComponent, typeof i3.DockingContentComponent]>;
|
|
12
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<NuDockingLayout>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DockingContentComponent {
|
|
4
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DockingContentComponent, isStandalone: true, selector: "nu-docking-content", exportAs: ["nuDockingContent"], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:flex;flex-flow:column nowrap;align-items:stretch;box-sizing:border-box;flex:1;overflow:auto}\n"] }); }
|
|
6
|
+
}
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingContentComponent, decorators: [{
|
|
8
|
+
type: Component,
|
|
9
|
+
args: [{ standalone: true, selector: "nu-docking-content", exportAs: "nuDockingContent", template: `<ng-content></ng-content>`, styles: [":host{display:flex;flex-flow:column nowrap;align-items:stretch;box-sizing:border-box;flex:1;overflow:auto}\n"] }]
|
|
10
|
+
}] });
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xheW91dC9zcmMvZG9ja2luZy9kb2NraW5nLWNvbnRlbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7O0FBU3pDLE1BQU0sT0FBTyx1QkFBdUI7OEdBQXZCLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDhHQUZ0QiwyQkFBMkI7OzJGQUU1Qix1QkFBdUI7a0JBUG5DLFNBQVM7aUNBQ00sSUFBSSxZQUNOLG9CQUFvQixZQUNwQixrQkFBa0IsWUFFbEIsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIm51LWRvY2tpbmctY29udGVudFwiLFxuICAgIGV4cG9ydEFzOiBcIm51RG9ja2luZ0NvbnRlbnRcIixcbiAgICBzdHlsZVVybDogXCIuL2RvY2tpbmctY29udGVudC5jb21wb25lbnQuc2Nzc1wiLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgRG9ja2luZ0NvbnRlbnRDb21wb25lbnQge31cbiJdfQ==
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, inject, Input, QueryList } from "@angular/core";
|
|
2
|
+
import { combineLatest, map, shareReplay, startWith, Subject, switchMap } from "rxjs";
|
|
3
|
+
import { Destructible, FastDOM } from "@ngutil/common";
|
|
4
|
+
import { DockingContentComponent } from "./docking-content.component";
|
|
5
|
+
import { DockingPanelComponent } from "./docking-panel.component";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const RIGID_ZINDEX = 20;
|
|
8
|
+
const OVER_ZINDEX = RIGID_ZINDEX * 2;
|
|
9
|
+
export class DockingLayoutComponent extends Destructible {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.#el = inject((ElementRef));
|
|
13
|
+
this.contentOnly = false;
|
|
14
|
+
this.#reflow = new Subject();
|
|
15
|
+
}
|
|
16
|
+
#el;
|
|
17
|
+
#reflow;
|
|
18
|
+
ngAfterViewInit() {
|
|
19
|
+
// eslint-disable-next-line prettier/prettier
|
|
20
|
+
this.panels = this.dockingPanels.changes.pipe(startWith(null), map(() => this.dockingPanels.toArray()), shareReplay(1));
|
|
21
|
+
this.d
|
|
22
|
+
.sub(combineLatest({ panels: this.panels, reflow: this.#reflow.pipe(startWith(null)) }))
|
|
23
|
+
.pipe(switchMap(({ panels }) => combineLatest(panels.map(panel => panel.changes.pipe(map(changes => {
|
|
24
|
+
return { panel, changes };
|
|
25
|
+
}))))))
|
|
26
|
+
.subscribe(this.#layout.bind(this));
|
|
27
|
+
}
|
|
28
|
+
ngOnChanges(changes) {
|
|
29
|
+
if ("contentOnly" in changes || "positionMode" in changes) {
|
|
30
|
+
this.#reflow.next();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
#layout(entries) {
|
|
34
|
+
let paddingTop = 0;
|
|
35
|
+
let paddingRight = 0;
|
|
36
|
+
let paddingBottom = 0;
|
|
37
|
+
let paddingLeft = 0;
|
|
38
|
+
let rigidZIndex = RIGID_ZINDEX;
|
|
39
|
+
let overZIndex = OVER_ZINDEX;
|
|
40
|
+
if (this.contentOnly) {
|
|
41
|
+
// TODO:...
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
for (const entry of entries) {
|
|
45
|
+
const panelState = entry.changes;
|
|
46
|
+
const panelSize = panelState.state === "full"
|
|
47
|
+
? panelState.fullSize.value
|
|
48
|
+
: panelState.state === "mini"
|
|
49
|
+
? panelState.miniSize.value
|
|
50
|
+
: 0;
|
|
51
|
+
const isHorizontal = panelState.position.orient === "horizontal";
|
|
52
|
+
const isRigid = panelState.mode === "rigid";
|
|
53
|
+
let panelTop = null;
|
|
54
|
+
let panelRight = null;
|
|
55
|
+
let panelBottom = null;
|
|
56
|
+
let panelLeft = null;
|
|
57
|
+
if (isHorizontal) {
|
|
58
|
+
panelLeft = 0;
|
|
59
|
+
panelRight = 0;
|
|
60
|
+
if (panelState.position.cells[0].v === "top") {
|
|
61
|
+
if (isRigid) {
|
|
62
|
+
paddingTop = Math.max(paddingTop, panelSize);
|
|
63
|
+
}
|
|
64
|
+
panelTop = 0;
|
|
65
|
+
}
|
|
66
|
+
else if (panelState.position.cells[0].v === "bottom") {
|
|
67
|
+
if (isRigid) {
|
|
68
|
+
paddingBottom = Math.max(paddingBottom, panelSize);
|
|
69
|
+
}
|
|
70
|
+
panelBottom = 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
panelTop = 0;
|
|
75
|
+
panelBottom = 0;
|
|
76
|
+
if (panelState.position.cells[0].h === "left") {
|
|
77
|
+
if (isRigid) {
|
|
78
|
+
paddingLeft = Math.max(paddingLeft, panelSize);
|
|
79
|
+
}
|
|
80
|
+
panelLeft = 0;
|
|
81
|
+
}
|
|
82
|
+
else if (panelState.position.cells[0].h === "right") {
|
|
83
|
+
if (isRigid) {
|
|
84
|
+
paddingRight = Math.max(paddingRight, panelSize);
|
|
85
|
+
}
|
|
86
|
+
panelRight = 0;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
FastDOM.setStyle(entry.panel.el.nativeElement, {
|
|
90
|
+
"z-index": `${isRigid ? rigidZIndex++ : overZIndex++}`,
|
|
91
|
+
"--docking-panel-t": panelTop != null ? `${panelTop}px` : null,
|
|
92
|
+
"--docking-panel-r": panelRight != null ? `${panelRight}px` : null,
|
|
93
|
+
"--docking-panel-b": panelBottom != null ? `${panelBottom}px` : null,
|
|
94
|
+
"--docking-panel-l": panelLeft != null ? `${panelLeft}px` : null
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
FastDOM.setStyle(this.#el.nativeElement, {
|
|
98
|
+
"--docking-layout-top": `${paddingTop}px`,
|
|
99
|
+
"--docking-layout-right": `${paddingRight}px`,
|
|
100
|
+
"--docking-layout-bottom": `${paddingBottom}px`,
|
|
101
|
+
"--docking-layout-left": `${paddingLeft}px`
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingLayoutComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
106
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DockingLayoutComponent, isStandalone: true, selector: "nu-docking", inputs: { contentOnly: "contentOnly" }, queries: [{ propertyName: "contentComponent", first: true, predicate: DockingContentComponent, descendants: true }, { propertyName: "dockingPanels", predicate: DockingPanelComponent }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
|
|
107
|
+
<ng-content select="nu-docking-panel"></ng-content>
|
|
108
|
+
|
|
109
|
+
@if (!contentComponent) {
|
|
110
|
+
<nu-docking-content>
|
|
111
|
+
<ng-content></ng-content>
|
|
112
|
+
</nu-docking-content>
|
|
113
|
+
} @else {
|
|
114
|
+
<ng-content select="nu-docking-content"></ng-content>
|
|
115
|
+
}
|
|
116
|
+
`, isInline: true, styles: [":host{---docking-layout-top: var(--docking-layout-top, 0px);---docking-layout-right: var(--docking-layout-right, 0px);---docking-layout-bottom: var(--docking-layout-bottom, 0px);---docking-layout-left: var(--docking-layout-left, 0px);---docking-layout-anim-duration: var(--docking-layout-anim-duration, .2s);---docking-layout-anim-ease: var(--docking-layout-anim-ease, ease-out);display:flex;flex-flow:column nowrap;align-items:stretch;position:relative;overflow:hidden;box-sizing:border-box;z-index:0;padding:var(---docking-layout-top) var(---docking-layout-right) var(---docking-layout-bottom) var(---docking-layout-left);transition:padding var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}\n"], dependencies: [{ kind: "component", type: DockingContentComponent, selector: "nu-docking-content", exportAs: ["nuDockingContent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
117
|
+
}
|
|
118
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingLayoutComponent, decorators: [{
|
|
119
|
+
type: Component,
|
|
120
|
+
args: [{ selector: "nu-docking", standalone: true, imports: [DockingContentComponent], template: `
|
|
121
|
+
<ng-content select="nu-docking-panel"></ng-content>
|
|
122
|
+
|
|
123
|
+
@if (!contentComponent) {
|
|
124
|
+
<nu-docking-content>
|
|
125
|
+
<ng-content></ng-content>
|
|
126
|
+
</nu-docking-content>
|
|
127
|
+
} @else {
|
|
128
|
+
<ng-content select="nu-docking-content"></ng-content>
|
|
129
|
+
}
|
|
130
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{---docking-layout-top: var(--docking-layout-top, 0px);---docking-layout-right: var(--docking-layout-right, 0px);---docking-layout-bottom: var(--docking-layout-bottom, 0px);---docking-layout-left: var(--docking-layout-left, 0px);---docking-layout-anim-duration: var(--docking-layout-anim-duration, .2s);---docking-layout-anim-ease: var(--docking-layout-anim-ease, ease-out);display:flex;flex-flow:column nowrap;align-items:stretch;position:relative;overflow:hidden;box-sizing:border-box;z-index:0;padding:var(---docking-layout-top) var(---docking-layout-right) var(---docking-layout-bottom) var(---docking-layout-left);transition:padding var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}\n"] }]
|
|
131
|
+
}], propDecorators: { contentOnly: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], contentComponent: [{
|
|
134
|
+
type: ContentChild,
|
|
135
|
+
args: [DockingContentComponent]
|
|
136
|
+
}], dockingPanels: [{
|
|
137
|
+
type: ContentChildren,
|
|
138
|
+
args: [DockingPanelComponent]
|
|
139
|
+
}] } });
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbGF5b3V0L3NyYy9kb2NraW5nL2RvY2tpbmctbGF5b3V0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLFNBQVMsRUFFWixNQUFNLGVBQWUsQ0FBQTtBQUV0QixPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFakcsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUNyRSxPQUFPLEVBQTRCLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUE7O0FBVzNGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQTtBQUN2QixNQUFNLFdBQVcsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFBO0FBc0JwQyxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsWUFBWTtJQWxCeEQ7O1FBbUJhLFFBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQSxVQUF1QixDQUFBLENBQUMsQ0FBQTtRQUVyQyxnQkFBVyxHQUFHLEtBQUssQ0FBQTtRQVE1QixZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtLQThHaEM7SUF4SFksR0FBRyxDQUFrQztJQVU5QyxPQUFPLENBQXNCO0lBRTdCLGVBQWU7UUFDWCw2Q0FBNkM7UUFDNUMsSUFBNkQsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNuRyxTQUFTLENBQUMsSUFBSSxD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QUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwIH0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBEZXN0cnVjdGlibGUsIEZhc3RET00gfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBEb2NraW5nQ29udGVudENvbXBvbmVudCB9IGZyb20gXCIuL2RvY2tpbmctY29udGVudC5jb21wb25lbnRcIlxuaW1wb3J0IHsgdHlwZSBEb2NraW5nUGFuZWxDaGFuZ2VzLCBEb2NraW5nUGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi9kb2NraW5nLXBhbmVsLmNvbXBvbmVudFwiXG5cbnR5cGUgRG9ja2luZ1ZlcnRpY2FsUG9zaXRpb24gPSBcInRvcFwiIHwgXCJtaWRkbGVcIiB8IFwiYm90dG9tXCJcbnR5cGUgRG9ja2luZ0hvcml6b250YWxQb3NpdG9uID0gXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiXG50eXBlIERvY2tpbmdQb3NpdGlvbiA9IGAke0RvY2tpbmdWZXJ0aWNhbFBvc2l0aW9ufToke0RvY2tpbmdIb3Jpem9udGFsUG9zaXRvbn1gXG5leHBvcnQgdHlwZSBEb2NraW5nUmFuZ2UgPVxuICAgIHwgRG9ja2luZ1ZlcnRpY2FsUG9zaXRpb25cbiAgICB8IERvY2tpbmdIb3Jpem9udGFsUG9zaXRvblxuICAgIHwgRG9ja2luZ1Bvc2l0aW9uXG4gICAgfCBgJHtEb2NraW5nUG9zaXRpb259LSR7RG9ja2luZ1Bvc2l0aW9ufWBcblxuY29uc3QgUklHSURfWklOREVYID0gMjBcbmNvbnN0IE9WRVJfWklOREVYID0gUklHSURfWklOREVYICogMlxuXG50eXBlIFBhbmVsc0NoYW5nZXMgPSBBcnJheTx7IHBhbmVsOiBEb2NraW5nUGFuZWxDb21wb25lbnQ7IGNoYW5nZXM6IERvY2tpbmdQYW5lbENoYW5nZXMgfT5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibnUtZG9ja2luZ1wiLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0RvY2tpbmdDb250ZW50Q29tcG9uZW50XSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJudS1kb2NraW5nLXBhbmVsXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIEBpZiAoIWNvbnRlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICAgIDxudS1kb2NraW5nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9udS1kb2NraW5nLWNvbnRlbnQ+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibnUtZG9ja2luZy1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuICAgICAgICB9XG4gICAgYCxcbiAgICBzdHlsZVVybDogXCIuL2RvY2tpbmctbGF5b3V0LmNvbXBvbmVudC5zY3NzXCIsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRG9ja2luZ0xheW91dENvbXBvbmVudCBleHRlbmRzIERlc3RydWN0aWJsZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgcmVhZG9ubHkgI2VsID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KVxuXG4gICAgQElucHV0KCkgY29udGVudE9ubHkgPSBmYWxzZVxuXG4gICAgQENvbnRlbnRDaGlsZChEb2NraW5nQ29udGVudENvbXBvbmVudCkgY29udGVudENvbXBvbmVudD86IERvY2tpbmdDb250ZW50Q29tcG9uZW50XG4gICAgQENvbnRlbnRDaGlsZHJlbihEb2NraW5nUGFuZWxDb21wb25lbnQpIGRvY2tpbmdQYW5lbHMhOiBRdWVyeUxpc3Q8RG9ja2luZ1BhbmVsQ29tcG9uZW50PlxuXG4gICAgLy8gcmVhZG9ubHkgcGFuZWxzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYW5lbFJlZltdPihbXSlcbiAgICByZWFkb25seSBwYW5lbHMhOiBPYnNlcnZhYmxlPEFycmF5PERvY2tpbmdQYW5lbENvbXBvbmVudD4+XG5cbiAgICAjcmVmbG93ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcbiAgICAgICAgKHRoaXMgYXMgeyBwYW5lbHM6IE9ic2VydmFibGU8QXJyYXk8RG9ja2luZ1BhbmVsQ29tcG9uZW50Pj4gfSkucGFuZWxzID0gdGhpcy5kb2NraW5nUGFuZWxzLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLmRvY2tpbmdQYW5lbHMudG9BcnJheSgpKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLmRcbiAgICAgICAgICAgIC5zdWIoY29tYmluZUxhdGVzdCh7IHBhbmVsczogdGhpcy5wYW5lbHMsIHJlZmxvdzogdGhpcy4jcmVmbG93LnBpcGUoc3RhcnRXaXRoKG51bGwpKSB9KSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoeyBwYW5lbHMgfSkgPT5cbiAgICAgICAgICAgICAgICAgICAgY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVscy5tYXAocGFuZWwgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChjaGFuZ2VzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhbmVsLCBjaGFuZ2VzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuI2xheW91dC5iaW5kKHRoaXMpKVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKFwiY29udGVudE9ubHlcIiBpbiBjaGFuZ2VzIHx8IFwicG9zaXRpb25Nb2RlXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy4jcmVmbG93Lm5leHQoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2xheW91dChlbnRyaWVzOiBQYW5lbHNDaGFuZ2VzKSB7XG4gICAgICAgIGxldCBwYWRkaW5nVG9wID0gMFxuICAgICAgICBsZXQgcGFkZGluZ1JpZ2h0ID0gMFxuICAgICAgICBsZXQgcGFkZGluZ0JvdHRvbSA9IDBcbiAgICAgICAgbGV0IHBhZGRpbmdMZWZ0ID0gMFxuICAgICAgICBsZXQgcmlnaWRaSW5kZXggPSBSSUdJRF9aSU5ERVhcbiAgICAgICAgbGV0IG92ZXJaSW5kZXggPSBPVkVSX1pJTkRFWFxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRPbmx5KSB7XG4gICAgICAgICAgICAvLyBUT0RPOi4uLlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFuZWxTdGF0ZSA9IGVudHJ5LmNoYW5nZXNcbiAgICAgICAgICAgICAgICBjb25zdCBwYW5lbFNpemUgPVxuICAgICAgICAgICAgICAgICAgICBwYW5lbFN0YXRlLnN0YXRlID09PSBcImZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwYW5lbFN0YXRlLmZ1bGxTaXplLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHBhbmVsU3RhdGUuc3RhdGUgPT09IFwibWluaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcGFuZWxTdGF0ZS5taW5pU2l6ZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IDBcblxuICAgICAgICAgICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHBhbmVsU3RhdGUucG9zaXRpb24ub3JpZW50ID09PSBcImhvcml6b250YWxcIlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmlnaWQgPSBwYW5lbFN0YXRlLm1vZGUgPT09IFwicmlnaWRcIlxuXG4gICAgICAgICAgICAgICAgbGV0IHBhbmVsVG9wID0gbnVsbFxuICAgICAgICAgICAgICAgIGxldCBwYW5lbFJpZ2h0ID0gbnVsbFxuICAgICAgICAgICAgICAgIGxldCBwYW5lbEJvdHRvbSA9IG51bGxcbiAgICAgICAgICAgICAgICBsZXQgcGFuZWxMZWZ0ID0gbnVsbFxuXG4gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgICAgICBwYW5lbExlZnQgPSAwXG4gICAgICAgICAgICAgICAgICAgIHBhbmVsUmlnaHQgPSAwXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYW5lbFN0YXRlLnBvc2l0aW9uLmNlbGxzWzBdLnYgPT09IFwidG9wXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JpZ2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcCA9IE1hdGgubWF4KHBhZGRpbmdUb3AsIHBhbmVsU2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsVG9wID0gMFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbmVsU3RhdGUucG9zaXRpb24uY2VsbHNbMF0udiA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmlnaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nQm90dG9tID0gTWF0aC5tYXgocGFkZGluZ0JvdHRvbSwgcGFuZWxTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxCb3R0b20gPSAwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYW5lbFRvcCA9IDBcbiAgICAgICAgICAgICAgICAgICAgcGFuZWxCb3R0b20gPSAwXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhbmVsU3RhdGUucG9zaXRpb24uY2VsbHNbMF0uaCA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JpZ2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQgPSBNYXRoLm1heChwYWRkaW5nTGVmdCwgcGFuZWxTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxMZWZ0ID0gMFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhbmVsU3RhdGUucG9zaXRpb24uY2VsbHNbMF0uaCA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSaWdpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodCA9IE1hdGgubWF4KHBhZGRpbmdSaWdodCwgcGFuZWxTaXplKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxSaWdodCA9IDBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEZhc3RET00uc2V0U3R5bGUoZW50cnkucGFuZWwuZWwubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgICAgICBcInotaW5kZXhcIjogYCR7aXNSaWdpZCA/IHJpZ2lkWkluZGV4KysgOiBvdmVyWkluZGV4Kyt9YCxcbiAgICAgICAgICAgICAgICAgICAgXCItLWRvY2tpbmctcGFuZWwtdFwiOiBwYW5lbFRvcCAhPSBudWxsID8gYCR7cGFuZWxUb3B9cHhgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCItLWRvY2tpbmctcGFuZWwtclwiOiBwYW5lbFJpZ2h0ICE9IG51bGwgPyBgJHtwYW5lbFJpZ2h0fXB4YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWJcIjogcGFuZWxCb3R0b20gIT0gbnVsbCA/IGAke3BhbmVsQm90dG9tfXB4YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWxcIjogcGFuZWxMZWZ0ICE9IG51bGwgPyBgJHtwYW5lbExlZnR9cHhgIDogbnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0U3R5bGUodGhpcy4jZWwubmF0aXZlRWxlbWVudCwge1xuICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLWxheW91dC10b3BcIjogYCR7cGFkZGluZ1RvcH1weGAsXG4gICAgICAgICAgICAgICAgXCItLWRvY2tpbmctbGF5b3V0LXJpZ2h0XCI6IGAke3BhZGRpbmdSaWdodH1weGAsXG4gICAgICAgICAgICAgICAgXCItLWRvY2tpbmctbGF5b3V0LWJvdHRvbVwiOiBgJHtwYWRkaW5nQm90dG9tfXB4YCxcbiAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1sYXlvdXQtbGVmdFwiOiBgJHtwYWRkaW5nTGVmdH1weGBcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Component, ElementRef, inject, Input, Output } from "@angular/core";
|
|
2
|
+
import { BehaviorSubject, combineLatest, map, of, shareReplay, switchMap } from "rxjs";
|
|
3
|
+
import { coerceBoolAttr, Destructible, FastDOM, NumberWithUnit } from "@ngutil/common";
|
|
4
|
+
import { L9Range } from "../l9/range";
|
|
5
|
+
import { watchDimension } from "../util";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const DEFAULT_POSITION = L9Range.coerce("left");
|
|
8
|
+
const INVISIBLE_SIZE = new NumberWithUnit(0, "px");
|
|
9
|
+
const AUTO_SIZE = NumberWithUnit.coerce("auto");
|
|
10
|
+
export class DockingPanelComponent extends Destructible {
|
|
11
|
+
set positionInput(val) {
|
|
12
|
+
const coerced = L9Range.coerce(val);
|
|
13
|
+
if (coerced.orient === "rect") {
|
|
14
|
+
throw new Error(`Invalid position value: ${val}`);
|
|
15
|
+
}
|
|
16
|
+
if (!this.position.value.isEq(coerced)) {
|
|
17
|
+
this.position.next(coerced);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
set stateInput(val) {
|
|
21
|
+
if (this.state.value !== val) {
|
|
22
|
+
this.state.next(val);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
set modeInput(val) {
|
|
26
|
+
if (this.mode.value !== val) {
|
|
27
|
+
this.mode.next(val);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
set fullSizeInput(val) {
|
|
31
|
+
const coerced = NumberWithUnit.coerce(val, "px");
|
|
32
|
+
if (this.#fullSize.value !== coerced) {
|
|
33
|
+
this.#fullSize.next(coerced);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
#fullSize;
|
|
37
|
+
set miniSizeInput(val) {
|
|
38
|
+
const coerced = NumberWithUnit.coerce(val, "px");
|
|
39
|
+
if (this.#miniSize.value !== coerced) {
|
|
40
|
+
this.#miniSize.next(coerced);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
#miniSize;
|
|
44
|
+
set minimizable(val) {
|
|
45
|
+
this.#minimizable = coerceBoolAttr(val);
|
|
46
|
+
this.#minimizableAuto = false;
|
|
47
|
+
}
|
|
48
|
+
get minimizable() {
|
|
49
|
+
return this.#minimizable;
|
|
50
|
+
}
|
|
51
|
+
#minimizable;
|
|
52
|
+
#minimizableAuto;
|
|
53
|
+
#contentSize;
|
|
54
|
+
#autoSize;
|
|
55
|
+
constructor() {
|
|
56
|
+
super();
|
|
57
|
+
this.el = inject((ElementRef));
|
|
58
|
+
this.position = new BehaviorSubject(DEFAULT_POSITION);
|
|
59
|
+
this.state = new BehaviorSubject("invisible");
|
|
60
|
+
this.mode = new BehaviorSubject("rigid");
|
|
61
|
+
this.#fullSize = new BehaviorSubject(AUTO_SIZE);
|
|
62
|
+
this.#miniSize = new BehaviorSubject(INVISIBLE_SIZE);
|
|
63
|
+
this.#minimizable = false;
|
|
64
|
+
this.#minimizableAuto = true;
|
|
65
|
+
this.#contentSize = watchDimension(this.el.nativeElement, "scroll-box").pipe(shareReplay(1));
|
|
66
|
+
this.#autoSize = combineLatest({
|
|
67
|
+
dim: this.#contentSize,
|
|
68
|
+
pos: this.position
|
|
69
|
+
}).pipe(map(({ dim, pos }) => {
|
|
70
|
+
if (pos.orient === "horizontal") {
|
|
71
|
+
return dim.height;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
return dim.width;
|
|
75
|
+
}
|
|
76
|
+
}), shareReplay(1));
|
|
77
|
+
this.fullSize = this.#fullSize.pipe(switchMap(size => {
|
|
78
|
+
if (size.unit === "auto") {
|
|
79
|
+
return this.#autoSize;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return of(size);
|
|
83
|
+
}
|
|
84
|
+
}), shareReplay(1));
|
|
85
|
+
this.miniSize = this.#miniSize.pipe(switchMap(size => {
|
|
86
|
+
if (size.unit === "auto") {
|
|
87
|
+
return this.#autoSize;
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
return of(size);
|
|
91
|
+
}
|
|
92
|
+
}), shareReplay(1));
|
|
93
|
+
this.changes = combineLatest({
|
|
94
|
+
position: this.position,
|
|
95
|
+
state: this.state,
|
|
96
|
+
mode: this.mode,
|
|
97
|
+
fullSize: this.fullSize,
|
|
98
|
+
miniSize: this.miniSize,
|
|
99
|
+
contentSize: this.#contentSize
|
|
100
|
+
});
|
|
101
|
+
this.d.sub(this.changes).subscribe(changes => {
|
|
102
|
+
if (this.#minimizableAuto) {
|
|
103
|
+
this.#minimizable = this.#miniSize.value.value !== 0;
|
|
104
|
+
}
|
|
105
|
+
FastDOM.setAttributes(this.el.nativeElement, {
|
|
106
|
+
state: changes.state,
|
|
107
|
+
orient: changes.position.orient,
|
|
108
|
+
mode: changes.mode,
|
|
109
|
+
side: changes.position.orient === "horizontal" ? changes.position.cells[0].v : changes.position.cells[0].h
|
|
110
|
+
});
|
|
111
|
+
const isHorizontal = changes.position.orient === "horizontal";
|
|
112
|
+
let w = null;
|
|
113
|
+
let h = null;
|
|
114
|
+
// TODO: when change state from mini -> invisible, currently wrong behavior
|
|
115
|
+
// the good behavior is to not gain fullSize ang go to invisible
|
|
116
|
+
if (changes.state === "mini") {
|
|
117
|
+
if (isHorizontal) {
|
|
118
|
+
h = changes.miniSize.unit === "auto" ? changes.contentSize.height : changes.miniSize;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
w = changes.miniSize.unit === "auto" ? changes.contentSize.width : changes.miniSize;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
if (isHorizontal) {
|
|
126
|
+
h = changes.fullSize.unit === "auto" ? changes.contentSize.height : changes.fullSize;
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
w = changes.fullSize.unit === "auto" ? changes.contentSize.width : changes.fullSize;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
FastDOM.setStyle(this.el.nativeElement, {
|
|
133
|
+
"--docking-panel-w": w != null ? `${w}` : null,
|
|
134
|
+
"--docking-panel-h": h != null ? `${h}` : null,
|
|
135
|
+
"--docking-panel-content-w": changes.contentSize.width,
|
|
136
|
+
"--docking-panel-content-h": changes.contentSize.height
|
|
137
|
+
}, () => FastDOM.setAttributes(this.el.nativeElement, { animate: "" }));
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
open() {
|
|
141
|
+
this.state.next("full");
|
|
142
|
+
}
|
|
143
|
+
close() {
|
|
144
|
+
this.state.next("invisible");
|
|
145
|
+
}
|
|
146
|
+
minimize() {
|
|
147
|
+
if (this.minimizable) {
|
|
148
|
+
this.state.next("mini");
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
152
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: DockingPanelComponent, isStandalone: true, selector: "nu-docking-panel", inputs: { positionInput: ["position", "positionInput"], stateInput: ["state", "stateInput"], modeInput: ["mode", "modeInput"], fullSizeInput: ["fullSize", "fullSizeInput"], miniSizeInput: ["miniSize", "miniSizeInput"], minimizable: "minimizable" }, outputs: { state: "stateChanges" }, exportAs: ["nuDockingPanel"], usesInheritance: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{---docking-panel-t: var(--docking-panel-t, auto);---docking-panel-r: var(--docking-panel-r, auto);---docking-panel-b: var(--docking-panel-b, auto);---docking-panel-l: var(--docking-panel-l, auto);---docking-panel-w: var(--docking-panel-w, auto);---docking-panel-h: var(--docking-panel-h, auto);---docking-panel-content-w: var(--docking-panel-content-w, var(---docking-panel-w));---docking-panel-content-h: var(--docking-panel-content-h, var(---docking-panel-h));display:flex;flex-flow:column nowrap;align-items:stretch;position:absolute;box-sizing:border-box;top:var(---docking-panel-t);right:var(---docking-panel-r);bottom:var(---docking-panel-b);left:var(---docking-panel-l);width:var(---docking-panel-w);height:var(---docking-panel-h)}:host[animate]{transition:transform var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),width var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),height var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}:host[side=top],:host[side=left]{---docking-panel-t-hide: -100%;---docking-panel-t-visible: 0%}:host[side=bottom],:host[side=right]{---docking-panel-t-hide: 100%;---docking-panel-t-visible: 0%}:host[state=invisible][orient=horizontal]{transform:translateY(var(---docking-panel-t-hide))}:host[state=invisible][orient=vertical]{transform:translate(var(---docking-panel-t-hide))}:host:not([state=invisible])[orient=horizontal]{transform:translateY(var(---docking-panel-t-visible))}:host:not([state=invisible])[orient=vertical]{transform:translate(var(---docking-panel-t-visible))}\n"] }); }
|
|
153
|
+
}
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DockingPanelComponent, decorators: [{
|
|
155
|
+
type: Component,
|
|
156
|
+
args: [{ standalone: true, selector: "nu-docking-panel", exportAs: "nuDockingPanel", template: `<ng-content></ng-content>`, styles: [":host{---docking-panel-t: var(--docking-panel-t, auto);---docking-panel-r: var(--docking-panel-r, auto);---docking-panel-b: var(--docking-panel-b, auto);---docking-panel-l: var(--docking-panel-l, auto);---docking-panel-w: var(--docking-panel-w, auto);---docking-panel-h: var(--docking-panel-h, auto);---docking-panel-content-w: var(--docking-panel-content-w, var(---docking-panel-w));---docking-panel-content-h: var(--docking-panel-content-h, var(---docking-panel-h));display:flex;flex-flow:column nowrap;align-items:stretch;position:absolute;box-sizing:border-box;top:var(---docking-panel-t);right:var(---docking-panel-r);bottom:var(---docking-panel-b);left:var(---docking-panel-l);width:var(---docking-panel-w);height:var(---docking-panel-h)}:host[animate]{transition:transform var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),width var(---docking-layout-anim-duration) var(---docking-layout-anim-ease),height var(---docking-layout-anim-duration) var(---docking-layout-anim-ease)}:host[side=top],:host[side=left]{---docking-panel-t-hide: -100%;---docking-panel-t-visible: 0%}:host[side=bottom],:host[side=right]{---docking-panel-t-hide: 100%;---docking-panel-t-visible: 0%}:host[state=invisible][orient=horizontal]{transform:translateY(var(---docking-panel-t-hide))}:host[state=invisible][orient=vertical]{transform:translate(var(---docking-panel-t-hide))}:host:not([state=invisible])[orient=horizontal]{transform:translateY(var(---docking-panel-t-visible))}:host:not([state=invisible])[orient=vertical]{transform:translate(var(---docking-panel-t-visible))}\n"] }]
|
|
157
|
+
}], ctorParameters: () => [], propDecorators: { positionInput: [{
|
|
158
|
+
type: Input,
|
|
159
|
+
args: ["position"]
|
|
160
|
+
}], stateInput: [{
|
|
161
|
+
type: Input,
|
|
162
|
+
args: ["state"]
|
|
163
|
+
}], state: [{
|
|
164
|
+
type: Output,
|
|
165
|
+
args: ["stateChanges"]
|
|
166
|
+
}], modeInput: [{
|
|
167
|
+
type: Input,
|
|
168
|
+
args: ["mode"]
|
|
169
|
+
}], fullSizeInput: [{
|
|
170
|
+
type: Input,
|
|
171
|
+
args: ["fullSize"]
|
|
172
|
+
}], miniSizeInput: [{
|
|
173
|
+
type: Input,
|
|
174
|
+
args: ["miniSize"]
|
|
175
|
+
}], minimizable: [{
|
|
176
|
+
type: Input,
|
|
177
|
+
args: ["minimizable"]
|
|
178
|
+
}] } });
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2luZy1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvZG9ja2luZy1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFNUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRWxHLE9BQU8sRUFFSCxjQUFjLEVBQ2QsWUFBWSxFQUNaLE9BQU8sRUFDUCxjQUFjLEVBRWpCLE1BQU0sZ0JBQWdCLENBQUE7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBZSxNQUFNLGFBQWEsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFBOztBQUt4QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ2xELE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFTL0MsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFlBQVk7SUFHbkQsSUFDSSxhQUFhLENBQUMsR0FBMEI7UUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNuQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUNyRCxDQUFD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VyxDQUFDLE1BQU07YUFDMUQsRUFDRCxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQ3RFLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxJQUFJO1FBQ0EsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzNCLENBQUM7SUFDTCxDQUFDOzhHQTFLUSxxQkFBcUI7a0dBQXJCLHFCQUFxQiw4WkFGcEIsMkJBQTJCOzsyRkFFNUIscUJBQXFCO2tCQVBqQyxTQUFTO2lDQUNNLElBQUksWUFDTixrQkFBa0IsWUFDbEIsZ0JBQWdCLFlBRWhCLDJCQUEyQjt3REFNakMsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQWNiLFVBQVU7c0JBRGIsS0FBSzt1QkFBQyxPQUFPO2dCQU9MLEtBQUs7c0JBRGIsTUFBTTt1QkFBQyxjQUFjO2dCQUlsQixTQUFTO3NCQURaLEtBQUs7dUJBQUMsTUFBTTtnQkFTVCxhQUFhO3NCQURoQixLQUFLO3VCQUFDLFVBQVU7Z0JBVWIsYUFBYTtzQkFEaEIsS0FBSzt1QkFBQyxVQUFVO2dCQVViLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHtcbiAgICBCb29sZWFuSW5wdXQsXG4gICAgY29lcmNlQm9vbEF0dHIsXG4gICAgRGVzdHJ1Y3RpYmxlLFxuICAgIEZhc3RET00sXG4gICAgTnVtYmVyV2l0aFVuaXQsXG4gICAgTnVtYmVyV2l0aFVuaXRJbnB1dFxufSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBMOVJhbmdlLCBMOVJhbmdlTmFtZSB9IGZyb20gXCIuLi9sOS9yYW5nZVwiXG5pbXBvcnQgeyB3YXRjaERpbWVuc2lvbiB9IGZyb20gXCIuLi91dGlsXCJcblxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsU3RhdGUgPSBcImZ1bGxcIiB8IFwibWluaVwiIHwgXCJpbnZpc2libGVcIlxuZXhwb3J0IHR5cGUgRG9ja2luZ1BhbmVsTW9kZSA9IFwib3ZlclwiIHwgXCJwdXNoXCIgfCBcInJpZ2lkXCJcblxuY29uc3QgREVGQVVMVF9QT1NJVElPTiA9IEw5UmFuZ2UuY29lcmNlKFwibGVmdFwiKVxuY29uc3QgSU5WSVNJQkxFX1NJWkUgPSBuZXcgTnVtYmVyV2l0aFVuaXQoMCwgXCJweFwiKVxuY29uc3QgQVVUT19TSVpFID0gTnVtYmVyV2l0aFVuaXQuY29lcmNlKFwiYXV0b1wiKVxuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIm51LWRvY2tpbmctcGFuZWxcIixcbiAgICBleHBvcnRBczogXCJudURvY2tpbmdQYW5lbFwiLFxuICAgIHN0eWxlVXJsOiBcIi4vZG9ja2luZy1wYW5lbC5jb21wb25lbnQuc2Nzc1wiLFxuICAgIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmBcbn0pXG5leHBvcnQgY2xhc3MgRG9ja2luZ1BhbmVsQ29tcG9uZW50IGV4dGVuZHMgRGVzdHJ1Y3RpYmxlIHtcbiAgICByZWFkb25seSBlbCA9IGluamVjdChFbGVtZW50UmVmPEhUTUxFbGVtZW50PilcblxuICAgIEBJbnB1dChcInBvc2l0aW9uXCIpXG4gICAgc2V0IHBvc2l0aW9uSW5wdXQodmFsOiBMOVJhbmdlIHwgTDlSYW5nZU5hbWUpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IEw5UmFuZ2UuY29lcmNlKHZhbClcbiAgICAgICAgaWYgKGNvZXJjZWQub3JpZW50ID09PSBcInJlY3RcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBvc2l0aW9uIHZhbHVlOiAke3ZhbH1gKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvc2l0aW9uLnZhbHVlLmlzRXEoY29lcmNlZCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb24ubmV4dChjb2VyY2VkKVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRvbmx5IHBvc2l0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMOVJhbmdlPihERUZBVUxUX1BPU0lUSU9OKVxuXG4gICAgQElucHV0KFwic3RhdGVcIilcbiAgICBzZXQgc3RhdGVJbnB1dCh2YWw6IERvY2tpbmdQYW5lbFN0YXRlKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUubmV4dCh2YWwpXG4gICAgICAgIH1cbiAgICB9XG4gICAgQE91dHB1dChcInN0YXRlQ2hhbmdlc1wiKVxuICAgIHJlYWRvbmx5IHN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2NraW5nUGFuZWxTdGF0ZT4oXCJpbnZpc2libGVcIilcblxuICAgIEBJbnB1dChcIm1vZGVcIilcbiAgICBzZXQgbW9kZUlucHV0KHZhbDogRG9ja2luZ1BhbmVsTW9kZSkge1xuICAgICAgICBpZiAodGhpcy5tb2RlLnZhbHVlICE9PSB2YWwpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZS5uZXh0KHZhbClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSBtb2RlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2NraW5nUGFuZWxNb2RlPihcInJpZ2lkXCIpXG5cbiAgICBASW5wdXQoXCJmdWxsU2l6ZVwiKVxuICAgIHNldCBmdWxsU2l6ZUlucHV0KHZhbDogTnVtYmVyV2l0aFVuaXRJbnB1dCkge1xuICAgICAgICBjb25zdCBjb2VyY2VkID0gTnVtYmVyV2l0aFVuaXQuY29lcmNlKHZhbCwgXCJweFwiKVxuICAgICAgICBpZiAodGhpcy4jZnVsbFNpemUudmFsdWUgIT09IGNvZXJjZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2Z1bGxTaXplLm5leHQoY29lcmNlZClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSAjZnVsbFNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE51bWJlcldpdGhVbml0PihBVVRPX1NJWkUpXG5cbiAgICBASW5wdXQoXCJtaW5pU2l6ZVwiKVxuICAgIHNldCBtaW5pU2l6ZUlucHV0KHZhbDogTnVtYmVyV2l0aFVuaXRJbnB1dCkge1xuICAgICAgICBjb25zdCBjb2VyY2VkID0gTnVtYmVyV2l0aFVuaXQuY29lcmNlKHZhbCwgXCJweFwiKVxuICAgICAgICBpZiAodGhpcy4jbWluaVNpemUudmFsdWUgIT09IGNvZXJjZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI21pbmlTaXplLm5leHQoY29lcmNlZClcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWFkb25seSAjbWluaVNpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE51bWJlcldpdGhVbml0PihJTlZJU0lCTEVfU0laRSlcblxuICAgIEBJbnB1dChcIm1pbmltaXphYmxlXCIpXG4gICAgc2V0IG1pbmltaXphYmxlKHZhbDogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuI21pbmltaXphYmxlID0gY29lcmNlQm9vbEF0dHIodmFsKVxuICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZUF1dG8gPSBmYWxzZVxuICAgIH1cbiAgICBnZXQgbWluaW1pemFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNtaW5pbWl6YWJsZVxuICAgIH1cbiAgICAjbWluaW1pemFibGU6IGJvb2xlYW4gPSBmYWxzZVxuICAgICNtaW5pbWl6YWJsZUF1dG86IGJvb2xlYW4gPSB0cnVlXG5cbiAgICByZWFkb25seSAjY29udGVudFNpemUgPSB3YXRjaERpbWVuc2lvbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIFwic2Nyb2xsLWJveFwiKS5waXBlKHNoYXJlUmVwbGF5KDEpKVxuXG4gICAgcmVhZG9ubHkgI2F1dG9TaXplID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIGRpbTogdGhpcy4jY29udGVudFNpemUsXG4gICAgICAgIHBvczogdGhpcy5wb3NpdGlvblxuICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoeyBkaW0sIHBvcyB9KSA9PiB7XG4gICAgICAgICAgICBpZiAocG9zLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLmhlaWdodFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGltLndpZHRoXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGZ1bGxTaXplID0gdGhpcy4jZnVsbFNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IG1pbmlTaXplID0gdGhpcy4jbWluaVNpemUucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNpemUgPT4ge1xuICAgICAgICAgICAgaWYgKHNpemUudW5pdCA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4jYXV0b1NpemVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHNpemUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGNoYW5nZXMgPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICAgIHN0YXRlOiB0aGlzLnN0YXRlLFxuICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgIGZ1bGxTaXplOiB0aGlzLmZ1bGxTaXplLFxuICAgICAgICBtaW5pU2l6ZTogdGhpcy5taW5pU2l6ZSxcbiAgICAgICAgY29udGVudFNpemU6IHRoaXMuI2NvbnRlbnRTaXplXG4gICAgfSlcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpXG5cbiAgICAgICAgdGhpcy5kLnN1Yih0aGlzLmNoYW5nZXMpLnN1YnNjcmliZShjaGFuZ2VzID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNtaW5pbWl6YWJsZUF1dG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNtaW5pbWl6YWJsZSA9IHRoaXMuI21pbmlTaXplLnZhbHVlLnZhbHVlICE9PSAwXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0QXR0cmlidXRlcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICBzdGF0ZTogY2hhbmdlcy5zdGF0ZSxcbiAgICAgICAgICAgICAgICBvcmllbnQ6IGNoYW5nZXMucG9zaXRpb24ub3JpZW50LFxuICAgICAgICAgICAgICAgIG1vZGU6IGNoYW5nZXMubW9kZSxcbiAgICAgICAgICAgICAgICBzaWRlOlxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnBvc2l0aW9uLm9yaWVudCA9PT0gXCJob3Jpem9udGFsXCIgPyBjaGFuZ2VzLnBvc2l0aW9uLmNlbGxzWzBdLnYgOiBjaGFuZ2VzLnBvc2l0aW9uLmNlbGxzWzBdLmhcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGNoYW5nZXMucG9zaXRpb24ub3JpZW50ID09PSBcImhvcml6b250YWxcIlxuICAgICAgICAgICAgbGV0IHcgPSBudWxsXG4gICAgICAgICAgICBsZXQgaCA9IG51bGxcblxuICAgICAgICAgICAgLy8gVE9ETzogd2hlbiBjaGFuZ2Ugc3RhdGUgZnJvbSBtaW5pIC0+IGludmlzaWJsZSwgY3VycmVudGx5IHdyb25nIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyB0aGUgZ29vZCBiZWhhdmlvciBpcyB0byBub3QgZ2FpbiBmdWxsU2l6ZSBhbmcgZ28gdG8gaW52aXNpYmxlXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5zdGF0ZSA9PT0gXCJtaW5pXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGggPSBjaGFuZ2VzLm1pbmlTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHQgOiBjaGFuZ2VzLm1pbmlTaXplXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdyA9IGNoYW5nZXMubWluaVNpemUudW5pdCA9PT0gXCJhdXRvXCIgPyBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoIDogY2hhbmdlcy5taW5pU2l6ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgICAgICBoID0gY2hhbmdlcy5mdWxsU2l6ZS51bml0ID09PSBcImF1dG9cIiA/IGNoYW5nZXMuY29udGVudFNpemUuaGVpZ2h0IDogY2hhbmdlcy5mdWxsU2l6ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHcgPSBjaGFuZ2VzLmZ1bGxTaXplLnVuaXQgPT09IFwiYXV0b1wiID8gY2hhbmdlcy5jb250ZW50U2l6ZS53aWR0aCA6IGNoYW5nZXMuZnVsbFNpemVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZhc3RET00uc2V0U3R5bGUoXG4gICAgICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCItLWRvY2tpbmctcGFuZWwtd1wiOiB3ICE9IG51bGwgPyBgJHt3fWAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC1oXCI6IGggIT0gbnVsbCA/IGAke2h9YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIFwiLS1kb2NraW5nLXBhbmVsLWNvbnRlbnQtd1wiOiBjaGFuZ2VzLmNvbnRlbnRTaXplLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBcIi0tZG9ja2luZy1wYW5lbC1jb250ZW50LWhcIjogY2hhbmdlcy5jb250ZW50U2l6ZS5oZWlnaHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IEZhc3RET00uc2V0QXR0cmlidXRlcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHsgYW5pbWF0ZTogXCJcIiB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuc3RhdGUubmV4dChcImZ1bGxcIilcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZS5uZXh0KFwiaW52aXNpYmxlXCIpXG4gICAgfVxuXG4gICAgbWluaW1pemUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1pbmltaXphYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLm5leHQoXCJtaW5pXCIpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbnR5cGUgQ2hhbmdlc09ic2VydmFibGUgPSB0eXBlb2YgRG9ja2luZ1BhbmVsQ29tcG9uZW50LnByb3RvdHlwZS5jaGFuZ2VzXG5leHBvcnQgdHlwZSBEb2NraW5nUGFuZWxDaGFuZ2VzID0gQ2hhbmdlc09ic2VydmFibGUgZXh0ZW5kcyBPYnNlcnZhYmxlPGluZmVyIFQ+ID8gVCA6IG5ldmVyXG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NgModule } from "@angular/core";
|
|
2
|
+
import { DockingContentComponent } from "./docking-content.component";
|
|
3
|
+
import { DockingLayoutComponent } from "./docking-layout.component";
|
|
4
|
+
import { DockingPanelComponent } from "./docking-panel.component";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export { DockingLayoutComponent, DockingPanelComponent, DockingContentComponent };
|
|
7
|
+
const members = [DockingLayoutComponent, DockingPanelComponent, DockingContentComponent];
|
|
8
|
+
export class NuDockingLayout {
|
|
9
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NuDockingLayout, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
10
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: NuDockingLayout, imports: [DockingLayoutComponent, DockingPanelComponent, DockingContentComponent], exports: [DockingLayoutComponent, DockingPanelComponent, DockingContentComponent] }); }
|
|
11
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NuDockingLayout }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: NuDockingLayout, decorators: [{
|
|
14
|
+
type: NgModule,
|
|
15
|
+
args: [{
|
|
16
|
+
imports: members,
|
|
17
|
+
exports: members
|
|
18
|
+
}]
|
|
19
|
+
}] });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2RvY2tpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTs7QUFFakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLENBQUE7QUFFakYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUIsQ0FBQyxDQUFBO0FBTXhGLE1BQU0sT0FBTyxlQUFlOzhHQUFmLGVBQWU7K0dBQWYsZUFBZSxZQU5YLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixhQUF0RSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSx1QkFBdUI7K0dBTTFFLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxPQUFPO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuXG5pbXBvcnQgeyBEb2NraW5nQ29udGVudENvbXBvbmVudCB9IGZyb20gXCIuL2RvY2tpbmctY29udGVudC5jb21wb25lbnRcIlxuaW1wb3J0IHsgRG9ja2luZ0xheW91dENvbXBvbmVudCB9IGZyb20gXCIuL2RvY2tpbmctbGF5b3V0LmNvbXBvbmVudFwiXG5pbXBvcnQgeyBEb2NraW5nUGFuZWxDb21wb25lbnQgfSBmcm9tIFwiLi9kb2NraW5nLXBhbmVsLmNvbXBvbmVudFwiXG5cbmV4cG9ydCB7IERvY2tpbmdMYXlvdXRDb21wb25lbnQsIERvY2tpbmdQYW5lbENvbXBvbmVudCwgRG9ja2luZ0NvbnRlbnRDb21wb25lbnQgfVxuXG5jb25zdCBtZW1iZXJzID0gW0RvY2tpbmdMYXlvdXRDb21wb25lbnQsIERvY2tpbmdQYW5lbENvbXBvbmVudCwgRG9ja2luZ0NvbnRlbnRDb21wb25lbnRdXG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogbWVtYmVycyxcbiAgICBleHBvcnRzOiBtZW1iZXJzXG59KVxuZXhwb3J0IGNsYXNzIE51RG9ja2luZ0xheW91dCB7fVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from "./util";
|
|
2
|
+
export * from "./l9";
|
|
3
|
+
export * from "./docking";
|
|
4
|
+
export * from "./services/slots.service";
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsUUFBUSxDQUFBO0FBQ3RCLGNBQWMsTUFBTSxDQUFBO0FBQ3BCLGNBQWMsV0FBVyxDQUFBO0FBQ3pCLGNBQWMsMEJBQTBCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi91dGlsXCJcbmV4cG9ydCAqIGZyb20gXCIuL2w5XCJcbmV4cG9ydCAqIGZyb20gXCIuL2RvY2tpbmdcIlxuZXhwb3J0ICogZnJvbSBcIi4vc2VydmljZXMvc2xvdHMuc2VydmljZVwiXG4iXX0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from "./range";
|
|
2
|
+
export * from "./state";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYXlvdXQvc3JjL2w5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsU0FBUyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcmFuZ2VcIlxuZXhwb3J0ICogZnJvbSBcIi4vc3RhdGVcIlxuIl19
|