@sentropic/design-system-angular 0.36.59 → 0.36.61
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/dist/AppShell.d.ts +41 -1
- package/dist/AppShell.d.ts.map +1 -1
- package/dist/AppShell.js +288 -8
- package/dist/AppShell.js.map +1 -1
- package/dist/MenuPopover.d.ts +69 -4
- package/dist/MenuPopover.d.ts.map +1 -1
- package/dist/MenuPopover.js +207 -13
- package/dist/MenuPopover.js.map +1 -1
- package/dist/PanelSection.d.ts +69 -0
- package/dist/PanelSection.d.ts.map +1 -0
- package/dist/PanelSection.js +191 -0
- package/dist/PanelSection.js.map +1 -0
- package/dist/PanelStack.d.ts +270 -0
- package/dist/PanelStack.d.ts.map +1 -0
- package/dist/PanelStack.js +584 -0
- package/dist/PanelStack.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/styles.css +229 -8
- package/package.json +1 -1
package/dist/AppShell.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export type AppShellVariant = "site" | "workspace";
|
|
|
3
3
|
export type AppShellUtilityMode = "reserve" | "overlay" | "floating";
|
|
4
4
|
export type AppShellUtilitySide = "left" | "right" | "bottom";
|
|
5
5
|
export type AppShellPanelCollapse = "stack" | "accordion";
|
|
6
|
+
export type AppShellPanelKey = "navigationPanel" | "contextPanel" | "utilityPanel";
|
|
6
7
|
export type AppShellProps = {
|
|
7
8
|
variant?: AppShellVariant;
|
|
8
9
|
/** Presence flags for named panels — pair with a projected `[slot=x]` element. */
|
|
@@ -37,6 +38,18 @@ export type AppShellProps = {
|
|
|
37
38
|
contextPanelLabel?: string;
|
|
38
39
|
/** Disclosure label for `utilityPanel` when `panelCollapse="accordion"`. Defaults to `utilityLabel`. */
|
|
39
40
|
utilityPanelLabel?: string;
|
|
41
|
+
/** Enables drag-to-resize handles on side panels above 48rem. Default false — zero regression. */
|
|
42
|
+
panelResize?: boolean;
|
|
43
|
+
/** Controlled panel widths in px. When provided the component never mutates width itself. */
|
|
44
|
+
panelWidths?: Partial<Record<AppShellPanelKey, number>>;
|
|
45
|
+
/** Seeds uncontrolled widths in px. */
|
|
46
|
+
defaultPanelWidths?: Partial<Record<AppShellPanelKey, number>>;
|
|
47
|
+
/** Fired on every committed resize. Persistence is the CONSUMER's job — the DS stays presentational. */
|
|
48
|
+
onPanelResize?: (key: AppShellPanelKey, width: number) => void;
|
|
49
|
+
/** Lower clamp in px. Default 180. */
|
|
50
|
+
panelMinWidth?: number;
|
|
51
|
+
/** Upper clamp in px. Default 640. */
|
|
52
|
+
panelMaxWidth?: number;
|
|
40
53
|
class?: string;
|
|
41
54
|
};
|
|
42
55
|
export declare class AppShell {
|
|
@@ -61,6 +74,20 @@ export declare class AppShell {
|
|
|
61
74
|
contextPanelLabel?: string;
|
|
62
75
|
utilityPanelLabel?: string;
|
|
63
76
|
classInput?: string;
|
|
77
|
+
panelResize: boolean;
|
|
78
|
+
panelWidths?: Partial<Record<AppShellPanelKey, number>>;
|
|
79
|
+
defaultPanelWidths?: Partial<Record<AppShellPanelKey, number>>;
|
|
80
|
+
onPanelResize?: (key: AppShellPanelKey, width: number) => void;
|
|
81
|
+
panelMinWidth: number;
|
|
82
|
+
panelMaxWidth: number;
|
|
83
|
+
private navigationPanelRef?;
|
|
84
|
+
private contextPanelRef?;
|
|
85
|
+
private utilityPanelRef?;
|
|
86
|
+
private internalWidths?;
|
|
87
|
+
private dragKey;
|
|
88
|
+
private dragPositive;
|
|
89
|
+
private dragStartX;
|
|
90
|
+
private dragStartWidth;
|
|
64
91
|
primaryRailPanelOpen: boolean;
|
|
65
92
|
navigationPanelOpen: boolean;
|
|
66
93
|
contextPanelOpen: boolean;
|
|
@@ -85,7 +112,20 @@ export declare class AppShell {
|
|
|
85
112
|
toggleNavigationPanel(): void;
|
|
86
113
|
toggleContextPanel(): void;
|
|
87
114
|
toggleUtilityPanel(): void;
|
|
115
|
+
private get isWidthControlled();
|
|
116
|
+
private ensureInternalWidths;
|
|
117
|
+
widthFor(key: AppShellPanelKey): number | undefined;
|
|
118
|
+
clampWidth(n: number): number;
|
|
119
|
+
displayWidth(key: AppShellPanelKey): number;
|
|
120
|
+
private panelElFor;
|
|
121
|
+
get utilityPositive(): boolean;
|
|
122
|
+
get panelStyle(): string | null;
|
|
123
|
+
private commitWidth;
|
|
124
|
+
onHandlePointerDown(event: PointerEvent, key: AppShellPanelKey, positive: boolean): void;
|
|
125
|
+
onHandlePointerMove(event: PointerEvent): void;
|
|
126
|
+
onHandlePointerUp(event: PointerEvent): void;
|
|
127
|
+
onHandleKeydown(event: KeyboardEvent, key: AppShellPanelKey, positive: boolean): void;
|
|
88
128
|
static ɵfac: i0.ɵɵFactoryDeclaration<AppShell, never>;
|
|
89
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AppShell, "st-app-shell", never, { "variant": { "alias": "variant"; "required": false; }; "topChrome": { "alias": "topChrome"; "required": false; }; "primaryRail": { "alias": "primaryRail"; "required": false; }; "navigationPanel": { "alias": "navigationPanel"; "required": false; }; "contextPanel": { "alias": "contextPanel"; "required": false; }; "utilityPanel": { "alias": "utilityPanel"; "required": false; }; "bottomPanel": { "alias": "bottomPanel"; "required": false; }; "mainId": { "alias": "mainId"; "required": false; }; "navigationLabel": { "alias": "navigationLabel"; "required": false; }; "contextLabel": { "alias": "contextLabel"; "required": false; }; "utilityLabel": { "alias": "utilityLabel"; "required": false; }; "utilityMode": { "alias": "utilityMode"; "required": false; }; "utilitySide": { "alias": "utilitySide"; "required": false; }; "panelCollapse": { "alias": "panelCollapse"; "required": false; }; "primaryRailLabel": { "alias": "primaryRailLabel"; "required": false; }; "navigationPanelLabel": { "alias": "navigationPanelLabel"; "required": false; }; "contextPanelLabel": { "alias": "contextPanelLabel"; "required": false; }; "utilityPanelLabel": { "alias": "utilityPanelLabel"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; }, {}, never, ["*", "[slot=topChrome]", "[slot=primaryRail]", "[slot=navigationPanel]", "[slot=main]", "[slot=contextPanel]", "[slot=utilityPanel]", "[slot=bottomPanel]"], true, never>;
|
|
129
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AppShell, "st-app-shell", never, { "variant": { "alias": "variant"; "required": false; }; "topChrome": { "alias": "topChrome"; "required": false; }; "primaryRail": { "alias": "primaryRail"; "required": false; }; "navigationPanel": { "alias": "navigationPanel"; "required": false; }; "contextPanel": { "alias": "contextPanel"; "required": false; }; "utilityPanel": { "alias": "utilityPanel"; "required": false; }; "bottomPanel": { "alias": "bottomPanel"; "required": false; }; "mainId": { "alias": "mainId"; "required": false; }; "navigationLabel": { "alias": "navigationLabel"; "required": false; }; "contextLabel": { "alias": "contextLabel"; "required": false; }; "utilityLabel": { "alias": "utilityLabel"; "required": false; }; "utilityMode": { "alias": "utilityMode"; "required": false; }; "utilitySide": { "alias": "utilitySide"; "required": false; }; "panelCollapse": { "alias": "panelCollapse"; "required": false; }; "primaryRailLabel": { "alias": "primaryRailLabel"; "required": false; }; "navigationPanelLabel": { "alias": "navigationPanelLabel"; "required": false; }; "contextPanelLabel": { "alias": "contextPanelLabel"; "required": false; }; "utilityPanelLabel": { "alias": "utilityPanelLabel"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; "panelResize": { "alias": "panelResize"; "required": false; }; "panelWidths": { "alias": "panelWidths"; "required": false; }; "defaultPanelWidths": { "alias": "defaultPanelWidths"; "required": false; }; "onPanelResize": { "alias": "onPanelResize"; "required": false; }; "panelMinWidth": { "alias": "panelMinWidth"; "required": false; }; "panelMaxWidth": { "alias": "panelMaxWidth"; "required": false; }; }, {}, never, ["*", "[slot=topChrome]", "[slot=primaryRail]", "[slot=navigationPanel]", "[slot=main]", "[slot=contextPanel]", "[slot=utilityPanel]", "[slot=bottomPanel]"], true, never>;
|
|
90
130
|
}
|
|
91
131
|
//# sourceMappingURL=AppShell.d.ts.map
|
package/dist/AppShell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":";AAKA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC9D,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"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"}
|
package/dist/AppShell.js
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import { Component, Input as NgInput } from "@angular/core";
|
|
1
|
+
import { Component, ElementRef, Input as NgInput, ViewChild } from "@angular/core";
|
|
2
2
|
import { classNames } from "./classNames.js";
|
|
3
3
|
import { Icon } from "./Icon.js";
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
+
// CSS custom property each resizable panel is sized by (see the
|
|
6
|
+
// `.st-appShell` base rule in shared styles.css) — setting it inline on the
|
|
7
|
+
// shell root is the intended resize mechanism, it simply out-specificities
|
|
8
|
+
// the token-driven default declared there. Mirrors Svelte's `PANEL_VAR`.
|
|
9
|
+
const PANEL_VAR = {
|
|
10
|
+
navigationPanel: "--st-appShell-navigation-width",
|
|
11
|
+
contextPanel: "--st-appShell-context-width",
|
|
12
|
+
utilityPanel: "--st-appShell-utility-width",
|
|
13
|
+
};
|
|
14
|
+
// Nominal px equivalent of each panel's own CSS-token default (navigation
|
|
15
|
+
// 20rem, context 22rem, utility 24rem, all at a 16px root) — used ONLY as a
|
|
16
|
+
// display/ARIA fallback (aria-valuenow, drag-start anchor) before any width
|
|
17
|
+
// has ever been supplied or committed. Never written back as an inline
|
|
18
|
+
// style, so a themed override of the underlying token is never fought until
|
|
19
|
+
// the consumer/user actually establishes a concrete width.
|
|
20
|
+
// NOTE: `primaryRail` is intentionally NOT a resizable panel — it is a
|
|
21
|
+
// fixed-width icon rail (à la VS Code's activity bar), not a splittable
|
|
22
|
+
// pane; see `AppShellPanelKey` above.
|
|
23
|
+
const PANEL_NOMINAL_PX = {
|
|
24
|
+
navigationPanel: 320,
|
|
25
|
+
contextPanel: 352,
|
|
26
|
+
utilityPanel: 384,
|
|
27
|
+
};
|
|
5
28
|
export class AppShell {
|
|
6
29
|
static stComponentName = "AppShell";
|
|
7
30
|
componentName = "AppShell";
|
|
@@ -24,6 +47,26 @@ export class AppShell {
|
|
|
24
47
|
contextPanelLabel;
|
|
25
48
|
utilityPanelLabel;
|
|
26
49
|
classInput;
|
|
50
|
+
panelResize = false;
|
|
51
|
+
panelWidths;
|
|
52
|
+
defaultPanelWidths;
|
|
53
|
+
onPanelResize;
|
|
54
|
+
panelMinWidth = 180;
|
|
55
|
+
panelMaxWidth = 640;
|
|
56
|
+
navigationPanelRef;
|
|
57
|
+
contextPanelRef;
|
|
58
|
+
utilityPanelRef;
|
|
59
|
+
// Uncontrolled fallback for resizable widths, seeded on first read from
|
|
60
|
+
// `defaultPanelWidths` (mirrors `internalValue` on TimeRangePicker — a
|
|
61
|
+
// lazy, one-time seed rather than a constructor-time copy, since
|
|
62
|
+
// `@Input()`s aren't bound yet when the class is constructed).
|
|
63
|
+
internalWidths;
|
|
64
|
+
// Pointer-drag bookkeeping — plain fields, never read from the template,
|
|
65
|
+
// only from the pointer handlers below.
|
|
66
|
+
dragKey = null;
|
|
67
|
+
dragPositive = true;
|
|
68
|
+
dragStartX = 0;
|
|
69
|
+
dragStartWidth = 0;
|
|
27
70
|
// Uncontrolled per-panel disclosure state (v1) — each accordion panel
|
|
28
71
|
// starts collapsed. Desktop rendering never reads these (CSS scopes the
|
|
29
72
|
// collapse to `@media (max-width: 48rem)`), so they have zero effect above
|
|
@@ -81,8 +124,120 @@ export class AppShell {
|
|
|
81
124
|
toggleUtilityPanel() {
|
|
82
125
|
this.utilityPanelOpen = !this.utilityPanelOpen;
|
|
83
126
|
}
|
|
127
|
+
// ── Resizable panels (panelResize) ──────────────────────────────────────
|
|
128
|
+
// Controlled/uncontrolled mirrors the Svelte reference: `panelWidths`
|
|
129
|
+
// present (even as `{}`) means controlled — the component reads it but
|
|
130
|
+
// never writes it; otherwise widths live in `internalWidths`.
|
|
131
|
+
get isWidthControlled() {
|
|
132
|
+
return this.panelWidths !== undefined;
|
|
133
|
+
}
|
|
134
|
+
ensureInternalWidths() {
|
|
135
|
+
if (this.internalWidths === undefined) {
|
|
136
|
+
this.internalWidths = { ...this.defaultPanelWidths };
|
|
137
|
+
}
|
|
138
|
+
return this.internalWidths;
|
|
139
|
+
}
|
|
140
|
+
widthFor(key) {
|
|
141
|
+
const source = this.isWidthControlled ? this.panelWidths : this.ensureInternalWidths();
|
|
142
|
+
return source?.[key];
|
|
143
|
+
}
|
|
144
|
+
clampWidth(n) {
|
|
145
|
+
return Math.min(Math.max(n, this.panelMinWidth), this.panelMaxWidth);
|
|
146
|
+
}
|
|
147
|
+
// Current width for rendering/ARIA — always a concrete, clamped number so
|
|
148
|
+
// aria-valuenow is never NaN and is always within [aria-valuemin, aria-valuemax].
|
|
149
|
+
displayWidth(key) {
|
|
150
|
+
return this.clampWidth(this.widthFor(key) ?? PANEL_NOMINAL_PX[key]);
|
|
151
|
+
}
|
|
152
|
+
panelElFor(key) {
|
|
153
|
+
if (key === "navigationPanel")
|
|
154
|
+
return this.navigationPanelRef?.nativeElement ?? null;
|
|
155
|
+
if (key === "contextPanel")
|
|
156
|
+
return this.contextPanelRef?.nativeElement ?? null;
|
|
157
|
+
return this.utilityPanelRef?.nativeElement ?? null;
|
|
158
|
+
}
|
|
159
|
+
// `utilityPanel` mirrors a left panel (grow-on-drag-right) unless it sits
|
|
160
|
+
// on the right edge; the "bottom" side never renders a handle at all
|
|
161
|
+
// (guarded in the template), so its `positive` value is never read.
|
|
162
|
+
get utilityPositive() {
|
|
163
|
+
return this.utilitySide !== "right";
|
|
164
|
+
}
|
|
165
|
+
// Only the CSS vars for panels with an explicit (controlled or committed)
|
|
166
|
+
// width are emitted — an untouched panel keeps deferring to its token
|
|
167
|
+
// default (`.st-appShell` base rule), so a theme's own width override is
|
|
168
|
+
// never silently overridden just because `panelResize` is on.
|
|
169
|
+
get panelStyle() {
|
|
170
|
+
if (!this.panelResize)
|
|
171
|
+
return null;
|
|
172
|
+
const parts = [];
|
|
173
|
+
for (const key of Object.keys(PANEL_VAR)) {
|
|
174
|
+
const width = this.widthFor(key);
|
|
175
|
+
if (width !== undefined)
|
|
176
|
+
parts.push(`${PANEL_VAR[key]}: ${this.clampWidth(width)}px`);
|
|
177
|
+
}
|
|
178
|
+
return parts.length ? parts.join("; ") : null;
|
|
179
|
+
}
|
|
180
|
+
commitWidth(key, next) {
|
|
181
|
+
const clamped = this.clampWidth(next);
|
|
182
|
+
if (!this.isWidthControlled) {
|
|
183
|
+
const widths = this.ensureInternalWidths();
|
|
184
|
+
this.internalWidths = { ...widths, [key]: clamped };
|
|
185
|
+
}
|
|
186
|
+
this.onPanelResize?.(key, clamped);
|
|
187
|
+
}
|
|
188
|
+
onHandlePointerDown(event, key, positive) {
|
|
189
|
+
const handle = event.currentTarget;
|
|
190
|
+
handle?.setPointerCapture?.(event.pointerId);
|
|
191
|
+
this.dragKey = key;
|
|
192
|
+
this.dragPositive = positive;
|
|
193
|
+
this.dragStartX = event.clientX;
|
|
194
|
+
const measured = this.panelElFor(key)?.getBoundingClientRect().width ?? 0;
|
|
195
|
+
this.dragStartWidth = measured > 0 ? measured : this.displayWidth(key);
|
|
196
|
+
event.preventDefault();
|
|
197
|
+
}
|
|
198
|
+
onHandlePointerMove(event) {
|
|
199
|
+
if (this.dragKey === null)
|
|
200
|
+
return;
|
|
201
|
+
const dx = event.clientX - this.dragStartX;
|
|
202
|
+
const delta = this.dragPositive ? dx : -dx;
|
|
203
|
+
this.commitWidth(this.dragKey, this.dragStartWidth + delta);
|
|
204
|
+
}
|
|
205
|
+
onHandlePointerUp(event) {
|
|
206
|
+
if (this.dragKey === null)
|
|
207
|
+
return;
|
|
208
|
+
const handle = event.currentTarget;
|
|
209
|
+
if (handle?.hasPointerCapture?.(event.pointerId))
|
|
210
|
+
handle.releasePointerCapture?.(event.pointerId);
|
|
211
|
+
this.dragKey = null;
|
|
212
|
+
}
|
|
213
|
+
// Arrow keys move the splitter itself (WAI-ARIA window-splitter pattern):
|
|
214
|
+
// for a "positive" (left-edge) panel, moving the splitter right grows it;
|
|
215
|
+
// for a "negative" (right-edge) panel, moving the splitter right shrinks
|
|
216
|
+
// it. Home/End always jump to the absolute clamp bounds.
|
|
217
|
+
onHandleKeydown(event, key, positive) {
|
|
218
|
+
const current = this.displayWidth(key);
|
|
219
|
+
let next;
|
|
220
|
+
switch (event.key) {
|
|
221
|
+
case "ArrowLeft":
|
|
222
|
+
next = current + (positive ? -16 : 16);
|
|
223
|
+
break;
|
|
224
|
+
case "ArrowRight":
|
|
225
|
+
next = current + (positive ? 16 : -16);
|
|
226
|
+
break;
|
|
227
|
+
case "Home":
|
|
228
|
+
next = this.panelMinWidth;
|
|
229
|
+
break;
|
|
230
|
+
case "End":
|
|
231
|
+
next = this.panelMaxWidth;
|
|
232
|
+
break;
|
|
233
|
+
default:
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
event.preventDefault();
|
|
237
|
+
this.commitWidth(key, next);
|
|
238
|
+
}
|
|
84
239
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: AppShell, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
85
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: AppShell, isStandalone: true, selector: "st-app-shell", inputs: { variant: "variant", topChrome: "topChrome", primaryRail: "primaryRail", navigationPanel: "navigationPanel", contextPanel: "contextPanel", utilityPanel: "utilityPanel", bottomPanel: "bottomPanel", mainId: "mainId", navigationLabel: "navigationLabel", contextLabel: "contextLabel", utilityLabel: "utilityLabel", utilityMode: "utilityMode", utilitySide: "utilitySide", panelCollapse: "panelCollapse", primaryRailLabel: "primaryRailLabel", navigationPanelLabel: "navigationPanelLabel", contextPanelLabel: "contextPanelLabel", utilityPanelLabel: "utilityPanelLabel", classInput: ["class", "classInput"] }, ngImport: i0, template: `
|
|
240
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: AppShell, isStandalone: true, selector: "st-app-shell", inputs: { variant: "variant", topChrome: "topChrome", primaryRail: "primaryRail", navigationPanel: "navigationPanel", contextPanel: "contextPanel", utilityPanel: "utilityPanel", bottomPanel: "bottomPanel", mainId: "mainId", navigationLabel: "navigationLabel", contextLabel: "contextLabel", utilityLabel: "utilityLabel", utilityMode: "utilityMode", utilitySide: "utilitySide", panelCollapse: "panelCollapse", primaryRailLabel: "primaryRailLabel", navigationPanelLabel: "navigationPanelLabel", contextPanelLabel: "contextPanelLabel", utilityPanelLabel: "utilityPanelLabel", classInput: ["class", "classInput"], panelResize: "panelResize", panelWidths: "panelWidths", defaultPanelWidths: "defaultPanelWidths", onPanelResize: "onPanelResize", panelMinWidth: "panelMinWidth", panelMaxWidth: "panelMaxWidth" }, viewQueries: [{ propertyName: "navigationPanelRef", first: true, predicate: ["navigationPanelEl"], descendants: true }, { propertyName: "contextPanelRef", first: true, predicate: ["contextPanelEl"], descendants: true }, { propertyName: "utilityPanelRef", first: true, predicate: ["utilityPanelEl"], descendants: true }], ngImport: i0, template: `
|
|
86
241
|
@if (variant === "site") {
|
|
87
242
|
<div [attr.data-st-component]="componentName" data-st-app-shell-variant="site" [class]="hostClass">
|
|
88
243
|
<ng-content></ng-content>
|
|
@@ -95,6 +250,7 @@ export class AppShell {
|
|
|
95
250
|
[attr.data-utility-side]="utilitySide"
|
|
96
251
|
[attr.data-panel-collapse]="panelCollapse"
|
|
97
252
|
[class]="hostClass"
|
|
253
|
+
[style]="panelStyle"
|
|
98
254
|
>
|
|
99
255
|
@if (topChrome) {
|
|
100
256
|
<div class="st-appShell__topChrome">
|
|
@@ -131,7 +287,7 @@ export class AppShell {
|
|
|
131
287
|
</aside>
|
|
132
288
|
}
|
|
133
289
|
@if (navigationPanel) {
|
|
134
|
-
<aside class="st-appShell__navigationPanel" [attr.aria-label]="navigationLabel">
|
|
290
|
+
<aside class="st-appShell__navigationPanel" [attr.aria-label]="navigationLabel" #navigationPanelEl>
|
|
135
291
|
@if (panelCollapse === "accordion") {
|
|
136
292
|
<button
|
|
137
293
|
type="button"
|
|
@@ -156,13 +312,30 @@ export class AppShell {
|
|
|
156
312
|
>
|
|
157
313
|
<ng-content select="[slot=navigationPanel]"></ng-content>
|
|
158
314
|
</div>
|
|
315
|
+
@if (panelResize) {
|
|
316
|
+
<div
|
|
317
|
+
class="st-appShell__resizeHandle"
|
|
318
|
+
role="separator"
|
|
319
|
+
aria-orientation="vertical"
|
|
320
|
+
tabindex="0"
|
|
321
|
+
[attr.aria-valuenow]="displayWidth('navigationPanel')"
|
|
322
|
+
[attr.aria-valuemin]="panelMinWidth"
|
|
323
|
+
[attr.aria-valuemax]="panelMaxWidth"
|
|
324
|
+
[attr.aria-label]="'Resize ' + navigationLabel"
|
|
325
|
+
(pointerdown)="onHandlePointerDown($event, 'navigationPanel', true)"
|
|
326
|
+
(pointermove)="onHandlePointerMove($event)"
|
|
327
|
+
(pointerup)="onHandlePointerUp($event)"
|
|
328
|
+
(pointercancel)="onHandlePointerUp($event)"
|
|
329
|
+
(keydown)="onHandleKeydown($event, 'navigationPanel', true)"
|
|
330
|
+
></div>
|
|
331
|
+
}
|
|
159
332
|
</aside>
|
|
160
333
|
}
|
|
161
334
|
<main class="st-appShell__main" [id]="mainId">
|
|
162
335
|
<ng-content select="[slot=main]"></ng-content>
|
|
163
336
|
</main>
|
|
164
337
|
@if (contextPanel) {
|
|
165
|
-
<aside class="st-appShell__contextPanel" [attr.aria-label]="contextLabel">
|
|
338
|
+
<aside class="st-appShell__contextPanel" [attr.aria-label]="contextLabel" #contextPanelEl>
|
|
166
339
|
@if (panelCollapse === "accordion") {
|
|
167
340
|
<button
|
|
168
341
|
type="button"
|
|
@@ -187,10 +360,27 @@ export class AppShell {
|
|
|
187
360
|
>
|
|
188
361
|
<ng-content select="[slot=contextPanel]"></ng-content>
|
|
189
362
|
</div>
|
|
363
|
+
@if (panelResize) {
|
|
364
|
+
<div
|
|
365
|
+
class="st-appShell__resizeHandle"
|
|
366
|
+
role="separator"
|
|
367
|
+
aria-orientation="vertical"
|
|
368
|
+
tabindex="0"
|
|
369
|
+
[attr.aria-valuenow]="displayWidth('contextPanel')"
|
|
370
|
+
[attr.aria-valuemin]="panelMinWidth"
|
|
371
|
+
[attr.aria-valuemax]="panelMaxWidth"
|
|
372
|
+
[attr.aria-label]="'Resize ' + contextLabel"
|
|
373
|
+
(pointerdown)="onHandlePointerDown($event, 'contextPanel', false)"
|
|
374
|
+
(pointermove)="onHandlePointerMove($event)"
|
|
375
|
+
(pointerup)="onHandlePointerUp($event)"
|
|
376
|
+
(pointercancel)="onHandlePointerUp($event)"
|
|
377
|
+
(keydown)="onHandleKeydown($event, 'contextPanel', false)"
|
|
378
|
+
></div>
|
|
379
|
+
}
|
|
190
380
|
</aside>
|
|
191
381
|
}
|
|
192
382
|
@if (utilityPanel) {
|
|
193
|
-
<aside class="st-appShell__utilityPanel" [attr.aria-label]="utilityLabel">
|
|
383
|
+
<aside class="st-appShell__utilityPanel" [attr.aria-label]="utilityLabel" #utilityPanelEl>
|
|
194
384
|
@if (panelCollapse === "accordion") {
|
|
195
385
|
<button
|
|
196
386
|
type="button"
|
|
@@ -215,6 +405,23 @@ export class AppShell {
|
|
|
215
405
|
>
|
|
216
406
|
<ng-content select="[slot=utilityPanel]"></ng-content>
|
|
217
407
|
</div>
|
|
408
|
+
@if (panelResize && utilitySide !== "bottom") {
|
|
409
|
+
<div
|
|
410
|
+
class="st-appShell__resizeHandle"
|
|
411
|
+
role="separator"
|
|
412
|
+
aria-orientation="vertical"
|
|
413
|
+
tabindex="0"
|
|
414
|
+
[attr.aria-valuenow]="displayWidth('utilityPanel')"
|
|
415
|
+
[attr.aria-valuemin]="panelMinWidth"
|
|
416
|
+
[attr.aria-valuemax]="panelMaxWidth"
|
|
417
|
+
[attr.aria-label]="'Resize ' + utilityLabel"
|
|
418
|
+
(pointerdown)="onHandlePointerDown($event, 'utilityPanel', utilityPositive)"
|
|
419
|
+
(pointermove)="onHandlePointerMove($event)"
|
|
420
|
+
(pointerup)="onHandlePointerUp($event)"
|
|
421
|
+
(pointercancel)="onHandlePointerUp($event)"
|
|
422
|
+
(keydown)="onHandleKeydown($event, 'utilityPanel', utilityPositive)"
|
|
423
|
+
></div>
|
|
424
|
+
}
|
|
218
425
|
</aside>
|
|
219
426
|
}
|
|
220
427
|
</div>
|
|
@@ -242,6 +449,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
242
449
|
[attr.data-utility-side]="utilitySide"
|
|
243
450
|
[attr.data-panel-collapse]="panelCollapse"
|
|
244
451
|
[class]="hostClass"
|
|
452
|
+
[style]="panelStyle"
|
|
245
453
|
>
|
|
246
454
|
@if (topChrome) {
|
|
247
455
|
<div class="st-appShell__topChrome">
|
|
@@ -278,7 +486,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
278
486
|
</aside>
|
|
279
487
|
}
|
|
280
488
|
@if (navigationPanel) {
|
|
281
|
-
<aside class="st-appShell__navigationPanel" [attr.aria-label]="navigationLabel">
|
|
489
|
+
<aside class="st-appShell__navigationPanel" [attr.aria-label]="navigationLabel" #navigationPanelEl>
|
|
282
490
|
@if (panelCollapse === "accordion") {
|
|
283
491
|
<button
|
|
284
492
|
type="button"
|
|
@@ -303,13 +511,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
303
511
|
>
|
|
304
512
|
<ng-content select="[slot=navigationPanel]"></ng-content>
|
|
305
513
|
</div>
|
|
514
|
+
@if (panelResize) {
|
|
515
|
+
<div
|
|
516
|
+
class="st-appShell__resizeHandle"
|
|
517
|
+
role="separator"
|
|
518
|
+
aria-orientation="vertical"
|
|
519
|
+
tabindex="0"
|
|
520
|
+
[attr.aria-valuenow]="displayWidth('navigationPanel')"
|
|
521
|
+
[attr.aria-valuemin]="panelMinWidth"
|
|
522
|
+
[attr.aria-valuemax]="panelMaxWidth"
|
|
523
|
+
[attr.aria-label]="'Resize ' + navigationLabel"
|
|
524
|
+
(pointerdown)="onHandlePointerDown($event, 'navigationPanel', true)"
|
|
525
|
+
(pointermove)="onHandlePointerMove($event)"
|
|
526
|
+
(pointerup)="onHandlePointerUp($event)"
|
|
527
|
+
(pointercancel)="onHandlePointerUp($event)"
|
|
528
|
+
(keydown)="onHandleKeydown($event, 'navigationPanel', true)"
|
|
529
|
+
></div>
|
|
530
|
+
}
|
|
306
531
|
</aside>
|
|
307
532
|
}
|
|
308
533
|
<main class="st-appShell__main" [id]="mainId">
|
|
309
534
|
<ng-content select="[slot=main]"></ng-content>
|
|
310
535
|
</main>
|
|
311
536
|
@if (contextPanel) {
|
|
312
|
-
<aside class="st-appShell__contextPanel" [attr.aria-label]="contextLabel">
|
|
537
|
+
<aside class="st-appShell__contextPanel" [attr.aria-label]="contextLabel" #contextPanelEl>
|
|
313
538
|
@if (panelCollapse === "accordion") {
|
|
314
539
|
<button
|
|
315
540
|
type="button"
|
|
@@ -334,10 +559,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
334
559
|
>
|
|
335
560
|
<ng-content select="[slot=contextPanel]"></ng-content>
|
|
336
561
|
</div>
|
|
562
|
+
@if (panelResize) {
|
|
563
|
+
<div
|
|
564
|
+
class="st-appShell__resizeHandle"
|
|
565
|
+
role="separator"
|
|
566
|
+
aria-orientation="vertical"
|
|
567
|
+
tabindex="0"
|
|
568
|
+
[attr.aria-valuenow]="displayWidth('contextPanel')"
|
|
569
|
+
[attr.aria-valuemin]="panelMinWidth"
|
|
570
|
+
[attr.aria-valuemax]="panelMaxWidth"
|
|
571
|
+
[attr.aria-label]="'Resize ' + contextLabel"
|
|
572
|
+
(pointerdown)="onHandlePointerDown($event, 'contextPanel', false)"
|
|
573
|
+
(pointermove)="onHandlePointerMove($event)"
|
|
574
|
+
(pointerup)="onHandlePointerUp($event)"
|
|
575
|
+
(pointercancel)="onHandlePointerUp($event)"
|
|
576
|
+
(keydown)="onHandleKeydown($event, 'contextPanel', false)"
|
|
577
|
+
></div>
|
|
578
|
+
}
|
|
337
579
|
</aside>
|
|
338
580
|
}
|
|
339
581
|
@if (utilityPanel) {
|
|
340
|
-
<aside class="st-appShell__utilityPanel" [attr.aria-label]="utilityLabel">
|
|
582
|
+
<aside class="st-appShell__utilityPanel" [attr.aria-label]="utilityLabel" #utilityPanelEl>
|
|
341
583
|
@if (panelCollapse === "accordion") {
|
|
342
584
|
<button
|
|
343
585
|
type="button"
|
|
@@ -362,6 +604,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
362
604
|
>
|
|
363
605
|
<ng-content select="[slot=utilityPanel]"></ng-content>
|
|
364
606
|
</div>
|
|
607
|
+
@if (panelResize && utilitySide !== "bottom") {
|
|
608
|
+
<div
|
|
609
|
+
class="st-appShell__resizeHandle"
|
|
610
|
+
role="separator"
|
|
611
|
+
aria-orientation="vertical"
|
|
612
|
+
tabindex="0"
|
|
613
|
+
[attr.aria-valuenow]="displayWidth('utilityPanel')"
|
|
614
|
+
[attr.aria-valuemin]="panelMinWidth"
|
|
615
|
+
[attr.aria-valuemax]="panelMaxWidth"
|
|
616
|
+
[attr.aria-label]="'Resize ' + utilityLabel"
|
|
617
|
+
(pointerdown)="onHandlePointerDown($event, 'utilityPanel', utilityPositive)"
|
|
618
|
+
(pointermove)="onHandlePointerMove($event)"
|
|
619
|
+
(pointerup)="onHandlePointerUp($event)"
|
|
620
|
+
(pointercancel)="onHandlePointerUp($event)"
|
|
621
|
+
(keydown)="onHandleKeydown($event, 'utilityPanel', utilityPositive)"
|
|
622
|
+
></div>
|
|
623
|
+
}
|
|
365
624
|
</aside>
|
|
366
625
|
}
|
|
367
626
|
</div>
|
|
@@ -412,5 +671,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
|
|
|
412
671
|
}], classInput: [{
|
|
413
672
|
type: NgInput,
|
|
414
673
|
args: ["class"]
|
|
674
|
+
}], panelResize: [{
|
|
675
|
+
type: NgInput
|
|
676
|
+
}], panelWidths: [{
|
|
677
|
+
type: NgInput
|
|
678
|
+
}], defaultPanelWidths: [{
|
|
679
|
+
type: NgInput
|
|
680
|
+
}], onPanelResize: [{
|
|
681
|
+
type: NgInput
|
|
682
|
+
}], panelMinWidth: [{
|
|
683
|
+
type: NgInput
|
|
684
|
+
}], panelMaxWidth: [{
|
|
685
|
+
type: NgInput
|
|
686
|
+
}], navigationPanelRef: [{
|
|
687
|
+
type: ViewChild,
|
|
688
|
+
args: ["navigationPanelEl"]
|
|
689
|
+
}], contextPanelRef: [{
|
|
690
|
+
type: ViewChild,
|
|
691
|
+
args: ["contextPanelEl"]
|
|
692
|
+
}], utilityPanelRef: [{
|
|
693
|
+
type: ViewChild,
|
|
694
|
+
args: ["utilityPanelEl"]
|
|
415
695
|
}] } });
|
|
416
696
|
//# sourceMappingURL=AppShell.js.map
|
package/dist/AppShell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;;AAQjC,gEAAgE;AAChE,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,SAAS,GAAqC;IAClD,eAAe,EAAE,gCAAgC;IACjD,YAAY,EAAE,6BAA6B;IAC3C,YAAY,EAAE,6BAA6B;CAC5C,CAAC;AAEF,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,uEAAuE;AACvE,4EAA4E;AAC5E,2DAA2D;AAC3D,uEAAuE;AACvE,wEAAwE;AACxE,sCAAsC;AACtC,MAAM,gBAAgB,GAAqC;IACzD,eAAe,EAAE,GAAG;IACpB,YAAY,EAAE,GAAG;IACjB,YAAY,EAAE,GAAG;CAClB,CAAC;AAiQF,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAU,eAAe,GAAG,UAAU,CAAC;IACpC,aAAa,GAAG,UAAU,CAAC;IAEzB,OAAO,GAAoB,WAAW,CAAC;IACvC,SAAS,CAAW;IACpB,WAAW,CAAW;IACtB,eAAe,CAAW;IAC1B,YAAY,CAAW;IACvB,YAAY,CAAW;IACvB,WAAW,CAAW;IACtB,MAAM,GAAG,MAAM,CAAC;IAChB,eAAe,GAAG,sBAAsB,CAAC;IACzC,YAAY,GAAG,eAAe,CAAC;IAC/B,YAAY,GAAG,eAAe,CAAC;IAC/B,WAAW,GAAwB,SAAS,CAAC;IAC7C,WAAW,GAAwB,OAAO,CAAC;IAC3C,aAAa,GAA0B,OAAO,CAAC;IAC/C,gBAAgB,GAAG,cAAc,CAAC;IAClC,oBAAoB,CAAU;IAC9B,iBAAiB,CAAU;IAC3B,iBAAiB,CAAU;IACpB,UAAU,CAAU;IAC3B,WAAW,GAAG,KAAK,CAAC;IACpB,WAAW,CAA6C;IACxD,kBAAkB,CAA6C;IAC/D,aAAa,CAAkD;IAC/D,aAAa,GAAG,GAAG,CAAC;IACpB,aAAa,GAAG,GAAG,CAAC;IAES,kBAAkB,CAA2B;IAChD,eAAe,CAA2B;IAC1C,eAAe,CAA2B;IAE/E,wEAAwE;IACxE,uEAAuE;IACvE,iEAAiE;IACjE,+DAA+D;IACvD,cAAc,CAA6C;IAEnE,yEAAyE;IACzE,wCAAwC;IAChC,OAAO,GAA4B,IAAI,CAAC;IACxC,YAAY,GAAG,IAAI,CAAC;IACpB,UAAU,GAAG,CAAC,CAAC;IACf,cAAc,GAAG,CAAC,CAAC;IAE3B,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,kBAAkB;IAClB,oBAAoB,GAAG,KAAK,CAAC;IAC7B,mBAAmB,GAAG,KAAK,CAAC;IAC5B,gBAAgB,GAAG,KAAK,CAAC;IACzB,gBAAgB,GAAG,KAAK,CAAC;IAEzB,yEAAyE;IACzE,qEAAqE;IAC5D,oBAAoB,GAAG,iCAAiC,CAAC;IACzD,mBAAmB,GAAG,gCAAgC,CAAC;IACvD,wBAAwB,GAAG,qCAAqC,CAAC;IACjE,uBAAuB,GAAG,oCAAoC,CAAC;IAC/D,qBAAqB,GAAG,kCAAkC,CAAC;IAC3D,oBAAoB,GAAG,iCAAiC,CAAC;IACzD,qBAAqB,GAAG,kCAAkC,CAAC;IAC3D,oBAAoB,GAAG,iCAAiC,CAAC;IAElE,IAAI,SAAS;QACX,OAAO,UAAU,CAAC,aAAa,EAAE,gBAAgB,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpF,CAAC;IAED,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,IAAI,4BAA4B;QAC9B,OAAO,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,CAAC;IAC3D,CAAC;IAED,IAAI,yBAAyB;QAC3B,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC;IACrD,CAAC;IAED,IAAI,yBAAyB;QAC3B,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC;IACrD,CAAC;IAED,IAAI,0BAA0B;QAC5B,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC;IAC1E,CAAC;IAED,IAAI,8BAA8B;QAChC,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACzE,CAAC;IAED,IAAI,2BAA2B;QAC7B,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACtE,CAAC;IAED,IAAI,2BAA2B;QAC7B,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACtE,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACzD,CAAC;IAED,qBAAqB;QACnB,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC;IACvD,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACjD,CAAC;IAED,kBAAkB;QAChB,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;IACjD,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,uEAAuE;IACvE,8DAA8D;IAE9D,IAAY,iBAAiB;QAC3B,OAAO,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC;IACxC,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,GAAqB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACvF,OAAO,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,CAAS;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACvE,CAAC;IAED,0EAA0E;IAC1E,kFAAkF;IAClF,YAAY,CAAC,GAAqB;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAEO,UAAU,CAAC,GAAqB;QACtC,IAAI,GAAG,KAAK,iBAAiB;YAAE,OAAO,IAAI,CAAC,kBAAkB,EAAE,aAAa,IAAI,IAAI,CAAC;QACrF,IAAI,GAAG,KAAK,cAAc;YAAE,OAAO,IAAI,CAAC,eAAe,EAAE,aAAa,IAAI,IAAI,CAAC;QAC/E,OAAO,IAAI,CAAC,eAAe,EAAE,aAAa,IAAI,IAAI,CAAC;IACrD,CAAC;IAED,0EAA0E;IAC1E,qEAAqE;IACrE,oEAAoE;IACpE,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC;IACtC,CAAC;IAED,0EAA0E;IAC1E,sEAAsE;IACtE,yEAAyE;IACzE,8DAA8D;IAC9D,IAAI,UAAU;QACZ,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAuB,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAEO,WAAW,CAAC,GAAqB,EAAE,IAAY;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,mBAAmB,CAAC,KAAmB,EAAE,GAAqB,EAAE,QAAiB;QAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,aAAmC,CAAC;QACzD,MAAM,EAAE,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACvE,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC;IAED,mBAAmB,CAAC,KAAmB;QACrC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAClC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,iBAAiB,CAAC,KAAmB;QACnC,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAmC,CAAC;QACzD,IAAI,MAAM,EAAE,iBAAiB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,MAAM,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,yDAAyD;IACzD,eAAe,CAAC,KAAoB,EAAE,GAAqB,EAAE,QAAiB;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,IAAY,CAAC;QACjB,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,WAAW;gBACd,IAAI,GAAG,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,GAAG,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,MAAM;gBACT,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC1B,MAAM;YACR,KAAK,KAAK;gBACR,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC1B,MAAM;YACR;gBACE,OAAO;QACX,CAAC;QACD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;wGA3OU,QAAQ;4FAAR,QAAQ,8qCArMT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmMT,sGAzMS,IAAI;;4FA2MH,QAAQ;kBA9MpB,SAAS;+BACE,cAAc,cACZ,IAAI,WACP,CAAC,IAAI,CAAC,YAML;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmMT;;sBAMA,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;uBAAC,OAAO;;sBACf,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBAEP,SAAS;uBAAC,mBAAmB;;sBAC7B,SAAS;uBAAC,gBAAgB;;sBAC1B,SAAS;uBAAC,gBAAgB"}
|
package/dist/MenuPopover.d.ts
CHANGED
|
@@ -1,21 +1,86 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter } from "@angular/core";
|
|
2
|
+
import type { AfterViewInit, OnChanges, OnDestroy, SimpleChanges } from "@angular/core";
|
|
1
3
|
import type { MenuItem } from "./Menu.js";
|
|
2
4
|
import * as i0 from "@angular/core";
|
|
3
5
|
export type MenuPopoverPlacement = "top-start" | "top-end" | "bottom-start" | "bottom-end";
|
|
6
|
+
export type MenuPopoverAlign = "start" | "end" | "center";
|
|
7
|
+
export type MenuPopoverRect = {
|
|
8
|
+
top: number;
|
|
9
|
+
bottom: number;
|
|
10
|
+
left: number;
|
|
11
|
+
right: number;
|
|
12
|
+
width: number;
|
|
13
|
+
};
|
|
14
|
+
export type MenuPopoverViewport = {
|
|
15
|
+
height: number;
|
|
16
|
+
scrollX: number;
|
|
17
|
+
scrollY: number;
|
|
18
|
+
};
|
|
19
|
+
export type MenuPopoverPosition = {
|
|
20
|
+
top: number;
|
|
21
|
+
left: number;
|
|
22
|
+
maxHeight: number;
|
|
23
|
+
alignEnd: boolean;
|
|
24
|
+
alignCenter: boolean;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Pure position solver — mirrors Svelte's `computePosition()` / React's
|
|
28
|
+
* `computePosition` callback so it can be unit-tested without a real
|
|
29
|
+
* `window`/DOM (this package's tests run in a Node environment, no jsdom).
|
|
30
|
+
*/
|
|
31
|
+
export declare function computeMenuPopoverPosition(rect: MenuPopoverRect, placement: MenuPopoverPlacement, align: MenuPopoverAlign | undefined, viewport: MenuPopoverViewport): MenuPopoverPosition;
|
|
32
|
+
export declare function menuPopoverIsWithin(event: {
|
|
33
|
+
composedPath?: () => EventTarget[];
|
|
34
|
+
target: EventTarget | null;
|
|
35
|
+
}, node: Element | null | undefined): boolean;
|
|
4
36
|
export type MenuPopoverProps = {
|
|
5
37
|
items?: MenuItem[];
|
|
6
38
|
open?: boolean;
|
|
39
|
+
trigger?: HTMLElement | null;
|
|
7
40
|
placement?: MenuPopoverPlacement;
|
|
41
|
+
align?: MenuPopoverAlign;
|
|
42
|
+
label?: string;
|
|
8
43
|
class?: string;
|
|
44
|
+
closeOnOutside?: boolean;
|
|
45
|
+
closeOnEscape?: boolean;
|
|
9
46
|
};
|
|
10
|
-
export declare class MenuPopover {
|
|
47
|
+
export declare class MenuPopover implements AfterViewInit, OnChanges, OnDestroy {
|
|
11
48
|
static readonly stComponentName = "MenuPopover";
|
|
12
49
|
readonly componentName = "MenuPopover";
|
|
50
|
+
/** Convenience (not in the Svelte contract): renders a <st-menu> from `items` instead of projected content. */
|
|
13
51
|
items?: MenuItem[];
|
|
14
|
-
open
|
|
15
|
-
|
|
52
|
+
open: boolean;
|
|
53
|
+
/** Anchor element used for position computation and outside-click exclusion (Svelte-canonical). */
|
|
54
|
+
trigger: HTMLElement | null;
|
|
55
|
+
placement: MenuPopoverPlacement;
|
|
56
|
+
align?: MenuPopoverAlign;
|
|
57
|
+
/** Accessible name for the panel (Svelte-canonical: applied as aria-label on role="dialog"). */
|
|
58
|
+
label: string;
|
|
16
59
|
classInput?: string;
|
|
60
|
+
closeOnOutside: boolean;
|
|
61
|
+
closeOnEscape: boolean;
|
|
62
|
+
readonly openChange: EventEmitter<boolean>;
|
|
63
|
+
panel?: ElementRef<HTMLDivElement>;
|
|
64
|
+
top: number;
|
|
65
|
+
left: number;
|
|
66
|
+
maxHeight: number;
|
|
67
|
+
alignEnd: boolean;
|
|
68
|
+
alignCenter: boolean;
|
|
69
|
+
private listenersActive;
|
|
70
|
+
private readonly onScroll;
|
|
71
|
+
private readonly onResize;
|
|
72
|
+
private readonly onPointerDown;
|
|
73
|
+
private readonly onKeyDown;
|
|
17
74
|
get hostClass(): string;
|
|
75
|
+
get panelStyle(): string;
|
|
76
|
+
ngAfterViewInit(): void;
|
|
77
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
78
|
+
ngOnDestroy(): void;
|
|
79
|
+
computePosition(): void;
|
|
80
|
+
close(): void;
|
|
81
|
+
private registerWindowListeners;
|
|
82
|
+
private unregisterWindowListeners;
|
|
18
83
|
static ɵfac: i0.ɵɵFactoryDeclaration<MenuPopover, never>;
|
|
19
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MenuPopover, "st-menu-popover", never, { "items": { "alias": "items"; "required": false; }; "open": { "alias": "open"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
84
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MenuPopover, "st-menu-popover", never, { "items": { "alias": "items"; "required": false; }; "open": { "alias": "open"; "required": false; }; "trigger": { "alias": "trigger"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "align": { "alias": "align"; "required": false; }; "label": { "alias": "label"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; "closeOnOutside": { "alias": "closeOnOutside"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; }, { "openChange": "openChange"; }, never, ["*"], true, never>;
|
|
20
85
|
}
|
|
21
86
|
//# sourceMappingURL=MenuPopover.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../src/MenuPopover.ts"],"names":[],"mappings":"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"}
|