@sentropic/design-system-angular 0.36.58 → 0.36.59

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.
@@ -2,29 +2,90 @@ import * as i0 from "@angular/core";
2
2
  export type AppShellVariant = "site" | "workspace";
3
3
  export type AppShellUtilityMode = "reserve" | "overlay" | "floating";
4
4
  export type AppShellUtilitySide = "left" | "right" | "bottom";
5
+ export type AppShellPanelCollapse = "stack" | "accordion";
5
6
  export type AppShellProps = {
6
7
  variant?: AppShellVariant;
8
+ /** Presence flags for named panels — pair with a projected `[slot=x]` element. */
9
+ topChrome?: unknown;
10
+ primaryRail?: unknown;
11
+ navigationPanel?: unknown;
12
+ contextPanel?: unknown;
13
+ utilityPanel?: unknown;
14
+ bottomPanel?: unknown;
7
15
  mainId?: string;
8
16
  navigationLabel?: string;
9
17
  contextLabel?: string;
10
18
  utilityLabel?: string;
11
19
  utilityMode?: AppShellUtilityMode;
12
20
  utilitySide?: AppShellUtilitySide;
21
+ /**
22
+ * Below the 48rem breakpoint, `"stack"` (default) keeps today's behaviour —
23
+ * panels stack full-width in document order, always expanded. `"accordion"`
24
+ * degrades each present panel to a keyboard-accessible disclosure (collapsed
25
+ * by default) instead of squeezing the main content. Desktop (>48rem)
26
+ * rendering is IDENTICAL in both modes. Panel content is mounted once
27
+ * regardless of mode/breakpoint; collapsing hides/sizes the region via CSS
28
+ * rather than destroying it, so a stateful widget projected into a panel
29
+ * never remounts.
30
+ */
31
+ panelCollapse?: AppShellPanelCollapse;
32
+ /** Disclosure label for `primaryRail` when `panelCollapse="accordion"`. */
33
+ primaryRailLabel?: string;
34
+ /** Disclosure label for `navigationPanel` when `panelCollapse="accordion"`. Defaults to `navigationLabel`. */
35
+ navigationPanelLabel?: string;
36
+ /** Disclosure label for `contextPanel` when `panelCollapse="accordion"`. Defaults to `contextLabel`. */
37
+ contextPanelLabel?: string;
38
+ /** Disclosure label for `utilityPanel` when `panelCollapse="accordion"`. Defaults to `utilityLabel`. */
39
+ utilityPanelLabel?: string;
13
40
  class?: string;
14
41
  };
15
42
  export declare class AppShell {
16
43
  static readonly stComponentName = "AppShell";
17
44
  readonly componentName = "AppShell";
18
45
  variant: AppShellVariant;
46
+ topChrome?: unknown;
47
+ primaryRail?: unknown;
48
+ navigationPanel?: unknown;
49
+ contextPanel?: unknown;
50
+ utilityPanel?: unknown;
51
+ bottomPanel?: unknown;
19
52
  mainId: string;
20
53
  navigationLabel: string;
21
54
  contextLabel: string;
22
55
  utilityLabel: string;
23
56
  utilityMode: AppShellUtilityMode;
24
57
  utilitySide: AppShellUtilitySide;
58
+ panelCollapse: AppShellPanelCollapse;
59
+ primaryRailLabel: string;
60
+ navigationPanelLabel?: string;
61
+ contextPanelLabel?: string;
62
+ utilityPanelLabel?: string;
25
63
  classInput?: string;
64
+ primaryRailPanelOpen: boolean;
65
+ navigationPanelOpen: boolean;
66
+ contextPanelOpen: boolean;
67
+ utilityPanelOpen: boolean;
68
+ readonly primaryRailTriggerId = "st-appShell-primaryRail-trigger";
69
+ readonly primaryRailRegionId = "st-appShell-primaryRail-region";
70
+ readonly navigationPanelTriggerId = "st-appShell-navigationPanel-trigger";
71
+ readonly navigationPanelRegionId = "st-appShell-navigationPanel-region";
72
+ readonly contextPanelTriggerId = "st-appShell-contextPanel-trigger";
73
+ readonly contextPanelRegionId = "st-appShell-contextPanel-region";
74
+ readonly utilityPanelTriggerId = "st-appShell-utilityPanel-trigger";
75
+ readonly utilityPanelRegionId = "st-appShell-utilityPanel-region";
26
76
  get hostClass(): string;
77
+ get navigationPanelLabelResolved(): string;
78
+ get contextPanelLabelResolved(): string;
79
+ get utilityPanelLabelResolved(): string;
80
+ get primaryRailRegionCollapsed(): boolean;
81
+ get navigationPanelRegionCollapsed(): boolean;
82
+ get contextPanelRegionCollapsed(): boolean;
83
+ get utilityPanelRegionCollapsed(): boolean;
84
+ togglePrimaryRailPanel(): void;
85
+ toggleNavigationPanel(): void;
86
+ toggleContextPanel(): void;
87
+ toggleUtilityPanel(): void;
27
88
  static ɵfac: i0.ɵɵFactoryDeclaration<AppShell, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<AppShell, "st-app-shell", never, { "variant": { "alias": "variant"; "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; }; "classInput": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, 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>;
29
90
  }
30
91
  //# sourceMappingURL=AppShell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":";AAEA,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;AAE9D,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,qBASa,QAAQ;IACnB,MAAM,CAAC,QAAQ,CAAC,eAAe,cAAc;IAC7C,QAAQ,CAAC,aAAa,cAAc;IACzB,OAAO,EAAE,eAAe,CAAe;IACvC,MAAM,SAAU;IAChB,eAAe,SAA0B;IACzC,YAAY,SAAmB;IAC/B,YAAY,SAAmB;IAC/B,WAAW,EAAE,mBAAmB,CAAa;IAC7C,WAAW,EAAE,mBAAmB,CAAW;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEtC,IAAI,SAAS,IAAI,MAAM,CAEtB;yCAdU,QAAQ;2CAAR,QAAQ;CAepB"}
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"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"}
package/dist/AppShell.js CHANGED
@@ -1,39 +1,392 @@
1
1
  import { Component, Input as NgInput } from "@angular/core";
2
+ import { classNames } from "./classNames.js";
3
+ import { Icon } from "./Icon.js";
2
4
  import * as i0 from "@angular/core";
3
5
  export class AppShell {
4
6
  static stComponentName = "AppShell";
5
7
  componentName = "AppShell";
6
8
  variant = "workspace";
9
+ topChrome;
10
+ primaryRail;
11
+ navigationPanel;
12
+ contextPanel;
13
+ utilityPanel;
14
+ bottomPanel;
7
15
  mainId = "main";
8
16
  navigationLabel = "Workspace navigation";
9
17
  contextLabel = "Context panel";
10
18
  utilityLabel = "Utility panel";
11
19
  utilityMode = "reserve";
12
20
  utilitySide = "right";
21
+ panelCollapse = "stack";
22
+ primaryRailLabel = "Primary rail";
23
+ navigationPanelLabel;
24
+ contextPanelLabel;
25
+ utilityPanelLabel;
13
26
  classInput;
27
+ // Uncontrolled per-panel disclosure state (v1) — each accordion panel
28
+ // starts collapsed. Desktop rendering never reads these (CSS scopes the
29
+ // collapse to `@media (max-width: 48rem)`), so they have zero effect above
30
+ // the breakpoint.
31
+ primaryRailPanelOpen = false;
32
+ navigationPanelOpen = false;
33
+ contextPanelOpen = false;
34
+ utilityPanelOpen = false;
35
+ // Static, framework-wide-matching disclosure ids (parity with the Svelte
36
+ // reference — one AppShell instance per page is the expected usage).
37
+ primaryRailTriggerId = "st-appShell-primaryRail-trigger";
38
+ primaryRailRegionId = "st-appShell-primaryRail-region";
39
+ navigationPanelTriggerId = "st-appShell-navigationPanel-trigger";
40
+ navigationPanelRegionId = "st-appShell-navigationPanel-region";
41
+ contextPanelTriggerId = "st-appShell-contextPanel-trigger";
42
+ contextPanelRegionId = "st-appShell-contextPanel-region";
43
+ utilityPanelTriggerId = "st-appShell-utilityPanel-trigger";
44
+ utilityPanelRegionId = "st-appShell-utilityPanel-region";
14
45
  get hostClass() {
15
- return ["st-appShell", `st-appShell--${this.variant}`, this.classInput].filter(Boolean).join(" ");
46
+ return classNames("st-appShell", `st-appShell--${this.variant}`, this.classInput);
47
+ }
48
+ // Resolved disclosure labels: default to the existing aria-label inputs so
49
+ // a consumer who already customized navigationLabel/contextLabel/utilityLabel
50
+ // doesn't need to duplicate the translation for the accordion trigger text.
51
+ get navigationPanelLabelResolved() {
52
+ return this.navigationPanelLabel ?? this.navigationLabel;
53
+ }
54
+ get contextPanelLabelResolved() {
55
+ return this.contextPanelLabel ?? this.contextLabel;
56
+ }
57
+ get utilityPanelLabelResolved() {
58
+ return this.utilityPanelLabel ?? this.utilityLabel;
59
+ }
60
+ get primaryRailRegionCollapsed() {
61
+ return this.panelCollapse === "accordion" && !this.primaryRailPanelOpen;
62
+ }
63
+ get navigationPanelRegionCollapsed() {
64
+ return this.panelCollapse === "accordion" && !this.navigationPanelOpen;
65
+ }
66
+ get contextPanelRegionCollapsed() {
67
+ return this.panelCollapse === "accordion" && !this.contextPanelOpen;
68
+ }
69
+ get utilityPanelRegionCollapsed() {
70
+ return this.panelCollapse === "accordion" && !this.utilityPanelOpen;
71
+ }
72
+ togglePrimaryRailPanel() {
73
+ this.primaryRailPanelOpen = !this.primaryRailPanelOpen;
74
+ }
75
+ toggleNavigationPanel() {
76
+ this.navigationPanelOpen = !this.navigationPanelOpen;
77
+ }
78
+ toggleContextPanel() {
79
+ this.contextPanelOpen = !this.contextPanelOpen;
80
+ }
81
+ toggleUtilityPanel() {
82
+ this.utilityPanelOpen = !this.utilityPanelOpen;
16
83
  }
17
84
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: AppShell, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.17", type: AppShell, isStandalone: true, selector: "st-app-shell", inputs: { variant: "variant", mainId: "mainId", navigationLabel: "navigationLabel", contextLabel: "contextLabel", utilityLabel: "utilityLabel", utilityMode: "utilityMode", utilitySide: "utilitySide", classInput: ["class", "classInput"] }, ngImport: i0, template: `
19
- <div [attr.data-st-component]="componentName" [attr.data-st-app-shell-variant]="variant" [attr.data-utility-mode]="utilityMode" [attr.data-utility-side]="utilitySide" [class]="hostClass">
20
- <ng-content></ng-content>
21
- </div>
22
- `, isInline: true });
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: `
86
+ @if (variant === "site") {
87
+ <div [attr.data-st-component]="componentName" data-st-app-shell-variant="site" [class]="hostClass">
88
+ <ng-content></ng-content>
89
+ </div>
90
+ } @else {
91
+ <div
92
+ [attr.data-st-component]="componentName"
93
+ data-st-app-shell-variant="workspace"
94
+ [attr.data-utility-mode]="utilityMode"
95
+ [attr.data-utility-side]="utilitySide"
96
+ [attr.data-panel-collapse]="panelCollapse"
97
+ [class]="hostClass"
98
+ >
99
+ @if (topChrome) {
100
+ <div class="st-appShell__topChrome">
101
+ <ng-content select="[slot=topChrome]"></ng-content>
102
+ </div>
103
+ }
104
+ <div class="st-appShell__body">
105
+ @if (primaryRail) {
106
+ <aside class="st-appShell__primaryRail" [attr.aria-label]="primaryRailLabel">
107
+ @if (panelCollapse === "accordion") {
108
+ <button
109
+ type="button"
110
+ class="st-appShell__panelDisclosure"
111
+ [attr.aria-expanded]="primaryRailPanelOpen"
112
+ [attr.aria-controls]="primaryRailRegionId"
113
+ [id]="primaryRailTriggerId"
114
+ (click)="togglePrimaryRailPanel()"
115
+ >
116
+ <span class="st-appShell__panelDisclosureLabel">{{ primaryRailLabel }}</span>
117
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="primaryRailPanelOpen">
118
+ <st-icon name="chevron-down" [size]="16"></st-icon>
119
+ </span>
120
+ </button>
121
+ }
122
+ <div
123
+ class="st-appShell__panelRegion"
124
+ [class.st-appShell__panelRegion--collapsed]="primaryRailRegionCollapsed"
125
+ [attr.id]="panelCollapse === 'accordion' ? primaryRailRegionId : null"
126
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
127
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? primaryRailTriggerId : null"
128
+ >
129
+ <ng-content select="[slot=primaryRail]"></ng-content>
130
+ </div>
131
+ </aside>
132
+ }
133
+ @if (navigationPanel) {
134
+ <aside class="st-appShell__navigationPanel" [attr.aria-label]="navigationLabel">
135
+ @if (panelCollapse === "accordion") {
136
+ <button
137
+ type="button"
138
+ class="st-appShell__panelDisclosure"
139
+ [attr.aria-expanded]="navigationPanelOpen"
140
+ [attr.aria-controls]="navigationPanelRegionId"
141
+ [id]="navigationPanelTriggerId"
142
+ (click)="toggleNavigationPanel()"
143
+ >
144
+ <span class="st-appShell__panelDisclosureLabel">{{ navigationPanelLabelResolved }}</span>
145
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="navigationPanelOpen">
146
+ <st-icon name="chevron-down" [size]="16"></st-icon>
147
+ </span>
148
+ </button>
149
+ }
150
+ <div
151
+ class="st-appShell__panelRegion"
152
+ [class.st-appShell__panelRegion--collapsed]="navigationPanelRegionCollapsed"
153
+ [attr.id]="panelCollapse === 'accordion' ? navigationPanelRegionId : null"
154
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
155
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? navigationPanelTriggerId : null"
156
+ >
157
+ <ng-content select="[slot=navigationPanel]"></ng-content>
158
+ </div>
159
+ </aside>
160
+ }
161
+ <main class="st-appShell__main" [id]="mainId">
162
+ <ng-content select="[slot=main]"></ng-content>
163
+ </main>
164
+ @if (contextPanel) {
165
+ <aside class="st-appShell__contextPanel" [attr.aria-label]="contextLabel">
166
+ @if (panelCollapse === "accordion") {
167
+ <button
168
+ type="button"
169
+ class="st-appShell__panelDisclosure"
170
+ [attr.aria-expanded]="contextPanelOpen"
171
+ [attr.aria-controls]="contextPanelRegionId"
172
+ [id]="contextPanelTriggerId"
173
+ (click)="toggleContextPanel()"
174
+ >
175
+ <span class="st-appShell__panelDisclosureLabel">{{ contextPanelLabelResolved }}</span>
176
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="contextPanelOpen">
177
+ <st-icon name="chevron-down" [size]="16"></st-icon>
178
+ </span>
179
+ </button>
180
+ }
181
+ <div
182
+ class="st-appShell__panelRegion"
183
+ [class.st-appShell__panelRegion--collapsed]="contextPanelRegionCollapsed"
184
+ [attr.id]="panelCollapse === 'accordion' ? contextPanelRegionId : null"
185
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
186
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? contextPanelTriggerId : null"
187
+ >
188
+ <ng-content select="[slot=contextPanel]"></ng-content>
189
+ </div>
190
+ </aside>
191
+ }
192
+ @if (utilityPanel) {
193
+ <aside class="st-appShell__utilityPanel" [attr.aria-label]="utilityLabel">
194
+ @if (panelCollapse === "accordion") {
195
+ <button
196
+ type="button"
197
+ class="st-appShell__panelDisclosure"
198
+ [attr.aria-expanded]="utilityPanelOpen"
199
+ [attr.aria-controls]="utilityPanelRegionId"
200
+ [id]="utilityPanelTriggerId"
201
+ (click)="toggleUtilityPanel()"
202
+ >
203
+ <span class="st-appShell__panelDisclosureLabel">{{ utilityPanelLabelResolved }}</span>
204
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="utilityPanelOpen">
205
+ <st-icon name="chevron-down" [size]="16"></st-icon>
206
+ </span>
207
+ </button>
208
+ }
209
+ <div
210
+ class="st-appShell__panelRegion"
211
+ [class.st-appShell__panelRegion--collapsed]="utilityPanelRegionCollapsed"
212
+ [attr.id]="panelCollapse === 'accordion' ? utilityPanelRegionId : null"
213
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
214
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? utilityPanelTriggerId : null"
215
+ >
216
+ <ng-content select="[slot=utilityPanel]"></ng-content>
217
+ </div>
218
+ </aside>
219
+ }
220
+ </div>
221
+ @if (bottomPanel) {
222
+ <section class="st-appShell__bottomPanel" aria-label="Workspace tools">
223
+ <ng-content select="[slot=bottomPanel]"></ng-content>
224
+ </section>
225
+ }
226
+ </div>
227
+ }
228
+ `, isInline: true, styles: [":host { display: contents; }"], dependencies: [{ kind: "component", type: Icon, selector: "st-icon", inputs: ["name", "size", "strokeWidth", "title", "class"] }] });
23
229
  }
24
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: AppShell, decorators: [{
25
231
  type: Component,
26
- args: [{
27
- selector: "st-app-shell",
28
- standalone: true,
29
- template: `
30
- <div [attr.data-st-component]="componentName" [attr.data-st-app-shell-variant]="variant" [attr.data-utility-mode]="utilityMode" [attr.data-utility-side]="utilitySide" [class]="hostClass">
31
- <ng-content></ng-content>
32
- </div>
33
- `,
34
- }]
232
+ args: [{ selector: "st-app-shell", standalone: true, imports: [Icon], template: `
233
+ @if (variant === "site") {
234
+ <div [attr.data-st-component]="componentName" data-st-app-shell-variant="site" [class]="hostClass">
235
+ <ng-content></ng-content>
236
+ </div>
237
+ } @else {
238
+ <div
239
+ [attr.data-st-component]="componentName"
240
+ data-st-app-shell-variant="workspace"
241
+ [attr.data-utility-mode]="utilityMode"
242
+ [attr.data-utility-side]="utilitySide"
243
+ [attr.data-panel-collapse]="panelCollapse"
244
+ [class]="hostClass"
245
+ >
246
+ @if (topChrome) {
247
+ <div class="st-appShell__topChrome">
248
+ <ng-content select="[slot=topChrome]"></ng-content>
249
+ </div>
250
+ }
251
+ <div class="st-appShell__body">
252
+ @if (primaryRail) {
253
+ <aside class="st-appShell__primaryRail" [attr.aria-label]="primaryRailLabel">
254
+ @if (panelCollapse === "accordion") {
255
+ <button
256
+ type="button"
257
+ class="st-appShell__panelDisclosure"
258
+ [attr.aria-expanded]="primaryRailPanelOpen"
259
+ [attr.aria-controls]="primaryRailRegionId"
260
+ [id]="primaryRailTriggerId"
261
+ (click)="togglePrimaryRailPanel()"
262
+ >
263
+ <span class="st-appShell__panelDisclosureLabel">{{ primaryRailLabel }}</span>
264
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="primaryRailPanelOpen">
265
+ <st-icon name="chevron-down" [size]="16"></st-icon>
266
+ </span>
267
+ </button>
268
+ }
269
+ <div
270
+ class="st-appShell__panelRegion"
271
+ [class.st-appShell__panelRegion--collapsed]="primaryRailRegionCollapsed"
272
+ [attr.id]="panelCollapse === 'accordion' ? primaryRailRegionId : null"
273
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
274
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? primaryRailTriggerId : null"
275
+ >
276
+ <ng-content select="[slot=primaryRail]"></ng-content>
277
+ </div>
278
+ </aside>
279
+ }
280
+ @if (navigationPanel) {
281
+ <aside class="st-appShell__navigationPanel" [attr.aria-label]="navigationLabel">
282
+ @if (panelCollapse === "accordion") {
283
+ <button
284
+ type="button"
285
+ class="st-appShell__panelDisclosure"
286
+ [attr.aria-expanded]="navigationPanelOpen"
287
+ [attr.aria-controls]="navigationPanelRegionId"
288
+ [id]="navigationPanelTriggerId"
289
+ (click)="toggleNavigationPanel()"
290
+ >
291
+ <span class="st-appShell__panelDisclosureLabel">{{ navigationPanelLabelResolved }}</span>
292
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="navigationPanelOpen">
293
+ <st-icon name="chevron-down" [size]="16"></st-icon>
294
+ </span>
295
+ </button>
296
+ }
297
+ <div
298
+ class="st-appShell__panelRegion"
299
+ [class.st-appShell__panelRegion--collapsed]="navigationPanelRegionCollapsed"
300
+ [attr.id]="panelCollapse === 'accordion' ? navigationPanelRegionId : null"
301
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
302
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? navigationPanelTriggerId : null"
303
+ >
304
+ <ng-content select="[slot=navigationPanel]"></ng-content>
305
+ </div>
306
+ </aside>
307
+ }
308
+ <main class="st-appShell__main" [id]="mainId">
309
+ <ng-content select="[slot=main]"></ng-content>
310
+ </main>
311
+ @if (contextPanel) {
312
+ <aside class="st-appShell__contextPanel" [attr.aria-label]="contextLabel">
313
+ @if (panelCollapse === "accordion") {
314
+ <button
315
+ type="button"
316
+ class="st-appShell__panelDisclosure"
317
+ [attr.aria-expanded]="contextPanelOpen"
318
+ [attr.aria-controls]="contextPanelRegionId"
319
+ [id]="contextPanelTriggerId"
320
+ (click)="toggleContextPanel()"
321
+ >
322
+ <span class="st-appShell__panelDisclosureLabel">{{ contextPanelLabelResolved }}</span>
323
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="contextPanelOpen">
324
+ <st-icon name="chevron-down" [size]="16"></st-icon>
325
+ </span>
326
+ </button>
327
+ }
328
+ <div
329
+ class="st-appShell__panelRegion"
330
+ [class.st-appShell__panelRegion--collapsed]="contextPanelRegionCollapsed"
331
+ [attr.id]="panelCollapse === 'accordion' ? contextPanelRegionId : null"
332
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
333
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? contextPanelTriggerId : null"
334
+ >
335
+ <ng-content select="[slot=contextPanel]"></ng-content>
336
+ </div>
337
+ </aside>
338
+ }
339
+ @if (utilityPanel) {
340
+ <aside class="st-appShell__utilityPanel" [attr.aria-label]="utilityLabel">
341
+ @if (panelCollapse === "accordion") {
342
+ <button
343
+ type="button"
344
+ class="st-appShell__panelDisclosure"
345
+ [attr.aria-expanded]="utilityPanelOpen"
346
+ [attr.aria-controls]="utilityPanelRegionId"
347
+ [id]="utilityPanelTriggerId"
348
+ (click)="toggleUtilityPanel()"
349
+ >
350
+ <span class="st-appShell__panelDisclosureLabel">{{ utilityPanelLabelResolved }}</span>
351
+ <span class="st-appShell__panelDisclosureIcon" [class.st-appShell__panelDisclosureIcon--expanded]="utilityPanelOpen">
352
+ <st-icon name="chevron-down" [size]="16"></st-icon>
353
+ </span>
354
+ </button>
355
+ }
356
+ <div
357
+ class="st-appShell__panelRegion"
358
+ [class.st-appShell__panelRegion--collapsed]="utilityPanelRegionCollapsed"
359
+ [attr.id]="panelCollapse === 'accordion' ? utilityPanelRegionId : null"
360
+ [attr.role]="panelCollapse === 'accordion' ? 'region' : null"
361
+ [attr.aria-labelledby]="panelCollapse === 'accordion' ? utilityPanelTriggerId : null"
362
+ >
363
+ <ng-content select="[slot=utilityPanel]"></ng-content>
364
+ </div>
365
+ </aside>
366
+ }
367
+ </div>
368
+ @if (bottomPanel) {
369
+ <section class="st-appShell__bottomPanel" aria-label="Workspace tools">
370
+ <ng-content select="[slot=bottomPanel]"></ng-content>
371
+ </section>
372
+ }
373
+ </div>
374
+ }
375
+ `, styles: [":host { display: contents; }"] }]
35
376
  }], propDecorators: { variant: [{
36
377
  type: NgInput
378
+ }], topChrome: [{
379
+ type: NgInput
380
+ }], primaryRail: [{
381
+ type: NgInput
382
+ }], navigationPanel: [{
383
+ type: NgInput
384
+ }], contextPanel: [{
385
+ type: NgInput
386
+ }], utilityPanel: [{
387
+ type: NgInput
388
+ }], bottomPanel: [{
389
+ type: NgInput
37
390
  }], mainId: [{
38
391
  type: NgInput
39
392
  }], navigationLabel: [{
@@ -46,6 +399,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
46
399
  type: NgInput
47
400
  }], utilitySide: [{
48
401
  type: NgInput
402
+ }], panelCollapse: [{
403
+ type: NgInput
404
+ }], primaryRailLabel: [{
405
+ type: NgInput
406
+ }], navigationPanelLabel: [{
407
+ type: NgInput
408
+ }], contextPanelLabel: [{
409
+ type: NgInput
410
+ }], utilityPanelLabel: [{
411
+ type: NgInput
49
412
  }], classInput: [{
50
413
  type: NgInput,
51
414
  args: ["class"]
@@ -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;;AA0B5D,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAU,eAAe,GAAG,UAAU,CAAC;IACpC,aAAa,GAAG,UAAU,CAAC;IACzB,OAAO,GAAoB,WAAW,CAAC;IACvC,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;IACpC,UAAU,CAAU;IAEtC,IAAI,SAAS;QACX,OAAO,CAAC,aAAa,EAAE,gBAAgB,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpG,CAAC;wGAdU,QAAQ;4FAAR,QAAQ,uTANT;;;;GAIT;;4FAEU,QAAQ;kBATpB,SAAS;mBAAC;oBACT,QAAQ,EAAE,cAAc;oBACxB,UAAU,EAAE,IAAI;oBAChB,QAAQ,EAAE;;;;GAIT;iBACF;;sBAIE,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;;sBACP,OAAO;uBAAC,OAAO"}
1
+ {"version":3,"file":"AppShell.js","sourceRoot":"","sources":["../src/AppShell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { EventEmitter } from "@angular/core";
2
+ import { type AbsoluteDraft, type TimeRange, type TimeRangeMode, type TimeRangePreset } from "./timeRange.js";
3
+ import * as i0 from "@angular/core";
4
+ export type TimeRangePickerSize = "sm" | "md" | "lg";
5
+ export type TimeRangePickerPlacement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
6
+ export type TimeRangePickerAlign = "start" | "end" | "center";
7
+ export type TimeRangePickerProps = {
8
+ value?: TimeRange;
9
+ defaultValue?: TimeRange;
10
+ presets?: TimeRangePreset[];
11
+ min?: number;
12
+ max?: number;
13
+ locale?: string;
14
+ timeFormat?: "24" | "12";
15
+ timeStep?: number;
16
+ calendarMonths?: 1 | 2;
17
+ disabled?: boolean;
18
+ label?: string;
19
+ placement?: TimeRangePickerPlacement;
20
+ align?: TimeRangePickerAlign;
21
+ size?: TimeRangePickerSize;
22
+ class?: string;
23
+ };
24
+ type ResolvedPreset = {
25
+ token: string;
26
+ label: string;
27
+ disabled: boolean;
28
+ };
29
+ export declare class TimeRangePicker {
30
+ static readonly stComponentName = "TimeRangePicker";
31
+ readonly componentName = "TimeRangePicker";
32
+ value?: TimeRange;
33
+ defaultValue?: TimeRange;
34
+ presets?: TimeRangePreset[];
35
+ min?: number;
36
+ max?: number;
37
+ locale?: string;
38
+ timeFormat?: "24" | "12";
39
+ timeStep?: number;
40
+ calendarMonths?: 1 | 2;
41
+ disabled?: boolean;
42
+ label?: string;
43
+ placement?: TimeRangePickerPlacement;
44
+ align?: TimeRangePickerAlign;
45
+ size?: TimeRangePickerSize;
46
+ classInput?: string;
47
+ formatRange?: (value: TimeRange, locale: string) => string;
48
+ formatPresetLabel?: (token: string, locale: string) => string;
49
+ valueChange: EventEmitter<TimeRange>;
50
+ change: EventEmitter<TimeRange>;
51
+ open: boolean;
52
+ activeTab: TimeRangeMode;
53
+ draft: AbsoluteDraft;
54
+ /** Uncontrolled fallback, seeded on first read from `defaultValue`. */
55
+ private internalValue?;
56
+ private get resolvedLocale();
57
+ private get isFr();
58
+ /** The committed range: controlled `value` wins, else internal/uncontrolled. */
59
+ get currentValue(): TimeRange;
60
+ get hostClass(): string;
61
+ get popoverClass(): string;
62
+ get triggerLabel(): string;
63
+ get tabItems(): Array<{
64
+ value: string;
65
+ label: string;
66
+ }>;
67
+ get fromLabel(): string;
68
+ get toLabel(): string;
69
+ get applyLabel(): string;
70
+ get cancelLabel(): string;
71
+ get selectedRelativeToken(): string | null;
72
+ /** Presets resolved to labels + a disabled flag when they'd fall below `min`. */
73
+ get resolvedPresets(): ResolvedPreset[];
74
+ /** `AbsoluteDraft` times are optional; the TimePicker input requires a string. */
75
+ get fromTimeValue(): string;
76
+ get toTimeValue(): string;
77
+ get calendarValue(): [string | null, string | null];
78
+ get minDay(): string | null;
79
+ get maxDay(): string | null;
80
+ /** Null when the draft is valid; otherwise the user-facing reason. */
81
+ get errorText(): string | null;
82
+ get canApply(): boolean;
83
+ toggle(): void;
84
+ openPanel(): void;
85
+ close(): void;
86
+ /** Cancel discards the draft and emits nothing. */
87
+ cancel(): void;
88
+ onTabChange: (tab: string) => void;
89
+ onFromTimeChange: (time: string) => void;
90
+ onToTimeChange: (time: string) => void;
91
+ onCalendarChange: (next: unknown) => void;
92
+ makePresetSelect(preset: ResolvedPreset): () => void;
93
+ /** Relative presets resolve, emit and close immediately. */
94
+ selectPreset(token: string): void;
95
+ /** Absolute mode is staged: nothing emits until Apply. */
96
+ apply(): void;
97
+ private resolveToken;
98
+ private commit;
99
+ static ɵfac: i0.ɵɵFactoryDeclaration<TimeRangePicker, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<TimeRangePicker, "st-time-range-picker", never, { "value": { "alias": "value"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "presets": { "alias": "presets"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "locale": { "alias": "locale"; "required": false; }; "timeFormat": { "alias": "timeFormat"; "required": false; }; "timeStep": { "alias": "timeStep"; "required": false; }; "calendarMonths": { "alias": "calendarMonths"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placement": { "alias": "placement"; "required": false; }; "align": { "alias": "align"; "required": false; }; "size": { "alias": "size"; "required": false; }; "classInput": { "alias": "class"; "required": false; }; "formatRange": { "alias": "formatRange"; "required": false; }; "formatPresetLabel": { "alias": "formatPresetLabel"; "required": false; }; }, { "valueChange": "valueChange"; "change": "change"; }, never, never, true, never>;
101
+ }
102
+ export {};
103
+ //# sourceMappingURL=TimeRangePicker.d.ts.map