@aquera/nile-elements 2.0.11 → 2.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/demo/app-shell.html +21 -21
- package/dist/index.js +76 -66
- package/dist/nile-app-shell/nile-app-shell.cjs.js +1 -1
- package/dist/nile-app-shell/nile-app-shell.cjs.js.map +1 -1
- package/dist/nile-app-shell/nile-app-shell.css.cjs.js +1 -1
- package/dist/nile-app-shell/nile-app-shell.css.cjs.js.map +1 -1
- package/dist/nile-app-shell/nile-app-shell.css.esm.js +35 -32
- package/dist/nile-app-shell/nile-app-shell.esm.js +39 -34
- package/dist/nile-app-shell-panel/nile-app-shell-panel.css.cjs.js +1 -1
- package/dist/nile-app-shell-panel/nile-app-shell-panel.css.cjs.js.map +1 -1
- package/dist/nile-app-shell-panel/nile-app-shell-panel.css.esm.js +3 -1
- package/dist/src/nile-app-shell/nile-app-shell-regions.test.js +9 -5
- package/dist/src/nile-app-shell/nile-app-shell-regions.test.js.map +1 -1
- package/dist/src/nile-app-shell/nile-app-shell.css.js +33 -30
- package/dist/src/nile-app-shell/nile-app-shell.css.js.map +1 -1
- package/dist/src/nile-app-shell/nile-app-shell.d.ts +22 -22
- package/dist/src/nile-app-shell/nile-app-shell.js +86 -76
- package/dist/src/nile-app-shell/nile-app-shell.js.map +1 -1
- package/dist/src/nile-app-shell/nile-app-shell.test.d.ts +1 -0
- package/dist/src/nile-app-shell/nile-app-shell.test.js +307 -89
- package/dist/src/nile-app-shell/nile-app-shell.test.js.map +1 -1
- package/dist/src/nile-app-shell-panel/nile-app-shell-panel.css.js +3 -1
- package/dist/src/nile-app-shell-panel/nile-app-shell-panel.css.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-app-shell/nile-app-shell-regions.test.ts +9 -5
- package/src/nile-app-shell/nile-app-shell.css.ts +33 -30
- package/src/nile-app-shell/nile-app-shell.test.ts +348 -105
- package/src/nile-app-shell/nile-app-shell.ts +89 -82
- package/src/nile-app-shell-panel/nile-app-shell-panel.css.ts +3 -1
- package/vscode-html-custom-data.json +27 -37
|
@@ -13,8 +13,10 @@ export type NileAppShellPanelMode = 'docked' | 'overlay';
|
|
|
13
13
|
export type NileAppShellTopBarPlacement = 'content' | 'shell';
|
|
14
14
|
/** How the main region lays its content out. */
|
|
15
15
|
export type NileAppShellContentAlign = 'fluid' | 'centered';
|
|
16
|
-
/**
|
|
17
|
-
export
|
|
16
|
+
/** The `detail` of the `nile-click` the header back control emits. */
|
|
17
|
+
export interface NileAppShellClickDetail {
|
|
18
|
+
value: 'back';
|
|
19
|
+
}
|
|
18
20
|
/**
|
|
19
21
|
* @summary The application frame every route inherits: a side nav, a content container, an optional aside and an AI assistant panel.
|
|
20
22
|
*
|
|
@@ -31,7 +33,7 @@ export type NileAppShellLeading = 'none' | 'back' | 'app-icon';
|
|
|
31
33
|
* @slot top-bar - The page-title bar, mounted inside the container by default or spanning the shell when `top-bar-placement="shell"`.
|
|
32
34
|
* @slot top-bar-actions - Controls pinned to the end of the top bar.
|
|
33
35
|
* @slot tabs - A hoisted second-level tab strip, flush under the top bar and outside `<main>`'s scroller.
|
|
34
|
-
* @slot app-icon - The mark shown
|
|
36
|
+
* @slot app-icon - The mark shown before the page title whenever this slot has content, clipped to the shell's box.
|
|
35
37
|
* @slot side-nav - The navigation track. Works best with `<nile-side-bar>`.
|
|
36
38
|
* @slot aside - A secondary column between the content container and the panel.
|
|
37
39
|
* @slot panel - The AI panel's body. When empty the panel is unmounted and `openPanel()` is a no-op.
|
|
@@ -42,7 +44,7 @@ export type NileAppShellLeading = 'none' | 'back' | 'app-icon';
|
|
|
42
44
|
* @event nile-nav-toggle - Emitted after the nav's collapsed state or forced-rail lock changes. `detail: { collapsed, locked }`.
|
|
43
45
|
* @event nile-panel-toggle - Emitted after the panel opens or closes. `detail: { open, mode }`.
|
|
44
46
|
* @event nile-panel-mode-change - Emitted when the panel flips between docked and overlay. `detail: { mode }`.
|
|
45
|
-
* @event nile-
|
|
47
|
+
* @event nile-click - Emitted when the header's back control is pressed, or `goBackHeader()` is called. `detail: { value: 'back' }`. Emitted on the shell itself, so check `event.target === shell` as well as the value: a `nile-click` from page content bubbles through the shell too.
|
|
46
48
|
* @event nile-panel-back - Emitted when the panel's back control is pressed, whether the shell's built-in panel chrome or a slotted `nile-app-shell-panel` draws it.
|
|
47
49
|
*
|
|
48
50
|
* @csspart skip-link - The skip-to-content link.
|
|
@@ -51,15 +53,15 @@ export type NileAppShellLeading = 'none' | 'back' | 'app-icon';
|
|
|
51
53
|
* @csspart top-bar - The top bar, in either placement.
|
|
52
54
|
* @csspart nav-toggle - The built-in nav toggle button.
|
|
53
55
|
* @csspart rule - The vertical rule after the nav toggle.
|
|
56
|
+
* @csspart ask-rule - The vertical rule before the Ask button, drawn when `top-bar-actions` has content.
|
|
54
57
|
* @csspart top-bar-actions - The end-aligned top bar action group.
|
|
55
58
|
* @csspart ask - The built-in Ask button, the shell's single door to the panel.
|
|
56
|
-
* @csspart title-area - The header's own title block:
|
|
59
|
+
* @csspart title-area - The header's own title block: back control, app icon, title, badge and description.
|
|
57
60
|
* @csspart page-title - The title text, exposed as a heading whose level `headingLevel` sets.
|
|
58
61
|
* @csspart description - The second line under the title.
|
|
59
62
|
* @csspart badge - The pill after the title.
|
|
60
|
-
* @csspart
|
|
61
|
-
* @csspart
|
|
62
|
-
* @csspart app-icon - The block shown by `leading="app-icon"`, sized by `--nile-app-shell-app-icon-size`.
|
|
63
|
+
* @csspart back - The header back control, shown by `headerBack`.
|
|
64
|
+
* @csspart app-icon - The block holding the `app-icon` slot, shown when the slot has content and sized by `--nile-app-shell-app-icon-size`.
|
|
63
65
|
* @csspart tabs - The hoisted tab-strip region, under the top bar.
|
|
64
66
|
* @csspart side-nav - The navigation track.
|
|
65
67
|
* @csspart content-section - The flex row holding container, aside and panel.
|
|
@@ -91,7 +93,7 @@ export type NileAppShellLeading = 'none' | 'back' | 'app-icon';
|
|
|
91
93
|
* @cssproperty [--nile-app-shell-content-min-width=640px] - Container floor.
|
|
92
94
|
* @cssproperty [--nile-app-shell-min-width=768px] - Below this the window scrolls rather than the shell compressing.
|
|
93
95
|
* @cssproperty [--nile-app-shell-centered-width=824px] - Column width under `content-align="centered"`.
|
|
94
|
-
* @cssproperty [--nile-app-shell-app-icon-size=20px] - The
|
|
96
|
+
* @cssproperty [--nile-app-shell-app-icon-size=20px] - The app icon's box.
|
|
95
97
|
* @cssproperty [--nile-app-shell-utility-size=32px] - Box the shell's own icon controls sit in.
|
|
96
98
|
* @cssproperty [--nile-app-shell-radius=16px] - Container, aside and panel radius.
|
|
97
99
|
* @cssproperty [--nile-app-shell-duration=250ms] - Track and panel motion.
|
|
@@ -103,9 +105,8 @@ export type NileAppShellLeading = 'none' | 'back' | 'app-icon';
|
|
|
103
105
|
* @method expandNav() - Expand the side nav.
|
|
104
106
|
* @method collapseNav() - Collapse the side nav to a rail.
|
|
105
107
|
* @method toggleNav(force?) - Toggle, or force a specific collapsed state.
|
|
106
|
-
* @method goBackHeader() - Emit `nile-
|
|
108
|
+
* @method goBackHeader() - Emit `nile-click` with `{ value: 'back' }`, as the header's back control does.
|
|
107
109
|
* @method goBackPanel() - Emit `nile-panel-back`, as the panel's back control does.
|
|
108
|
-
* @method goBackPage() - Deprecated alias of `goBackHeader()`.
|
|
109
110
|
* @method goBack() - Deprecated alias of `goBackPanel()`.
|
|
110
111
|
*/
|
|
111
112
|
export declare class NileAppShell extends NileElement {
|
|
@@ -126,10 +127,10 @@ export declare class NileAppShell extends NileElement {
|
|
|
126
127
|
description?: string;
|
|
127
128
|
/** A pill after the page title; a modifier on `pageTitle` like `description`, so with no title there is no badge. */
|
|
128
129
|
badge?: string;
|
|
129
|
-
/**
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
|
|
130
|
+
/** Shows the back arrow before the page title; pressing it emits `nile-click` with `{ value: 'back' }`. Independent of the `app-icon` slot. */
|
|
131
|
+
headerBack: boolean;
|
|
132
|
+
/** Accessible name of the header back control. Never rendered as visible text. */
|
|
133
|
+
headerBackLabel: string;
|
|
133
134
|
/** Hides the built-in nav toggle. Mount `nile-app-shell-nav-toggle` yourself. */
|
|
134
135
|
noNavToggle: boolean;
|
|
135
136
|
/** Drops the Cmd/Ctrl+J and Escape panel shortcuts. */
|
|
@@ -175,6 +176,7 @@ export declare class NileAppShell extends NileElement {
|
|
|
175
176
|
private _hasTopBar;
|
|
176
177
|
private _hasTopBarActions;
|
|
177
178
|
private _hasTabs;
|
|
179
|
+
private _hasAppIcon;
|
|
178
180
|
private _hasPanel;
|
|
179
181
|
private _hasPanelFooter;
|
|
180
182
|
/** True when a `nile-app-shell-panel` is slotted, owning the panel's own chrome so the shell renders a bare region. */
|
|
@@ -206,12 +208,10 @@ export declare class NileAppShell extends NileElement {
|
|
|
206
208
|
closePanel(): void;
|
|
207
209
|
/** Toggle the panel, or force a state. */
|
|
208
210
|
togglePanel(force?: boolean): void;
|
|
209
|
-
/** Emit `nile-
|
|
211
|
+
/** Emit `nile-click` with `{ value: 'back' }`, as the header's back control does; the page owns the history. */
|
|
210
212
|
goBackHeader(): void;
|
|
211
213
|
/** Emit `nile-panel-back`, as the panel's back control does; the page owns the view stack. */
|
|
212
214
|
goBackPanel(): void;
|
|
213
|
-
/** @deprecated Use `goBackHeader()`; kept as an alias that emits `nile-header-back`. */
|
|
214
|
-
goBackPage(): void;
|
|
215
215
|
/** @deprecated Use `goBackPanel()`; kept as an alias that emits `nile-panel-back`. */
|
|
216
216
|
goBack(): void;
|
|
217
217
|
/** Expand the side nav. */
|
|
@@ -241,13 +241,13 @@ export declare class NileAppShell extends NileElement {
|
|
|
241
241
|
private _persist;
|
|
242
242
|
private _onSlotChange;
|
|
243
243
|
private _renderNavToggle;
|
|
244
|
-
/** Whether the header has a title block of its own to draw:
|
|
244
|
+
/** Whether the header has a title block of its own to draw: a title, the back arrow or a slotted app icon mounts it. */
|
|
245
245
|
private get _hasTitleBlock();
|
|
246
|
-
/** Whether `leading` names a control that renders; an empty or unknown value draws nothing, like `none`. */
|
|
247
|
-
private get _hasLeading();
|
|
248
246
|
/** `headingLevel` as a safe `aria-level`: a whole number clamped to 1–6, and 1 for anything non-numeric. */
|
|
249
247
|
private get _headingLevel();
|
|
250
|
-
private
|
|
248
|
+
private _renderBack;
|
|
249
|
+
private _renderAppIconSlot;
|
|
250
|
+
private _renderAppIconProbe;
|
|
251
251
|
private _renderTitleBlock;
|
|
252
252
|
private _renderTopBar;
|
|
253
253
|
render(): TemplateResult;
|
|
@@ -28,7 +28,7 @@ import '../nile-button/nile-button';
|
|
|
28
28
|
* @slot top-bar - The page-title bar, mounted inside the container by default or spanning the shell when `top-bar-placement="shell"`.
|
|
29
29
|
* @slot top-bar-actions - Controls pinned to the end of the top bar.
|
|
30
30
|
* @slot tabs - A hoisted second-level tab strip, flush under the top bar and outside `<main>`'s scroller.
|
|
31
|
-
* @slot app-icon - The mark shown
|
|
31
|
+
* @slot app-icon - The mark shown before the page title whenever this slot has content, clipped to the shell's box.
|
|
32
32
|
* @slot side-nav - The navigation track. Works best with `<nile-side-bar>`.
|
|
33
33
|
* @slot aside - A secondary column between the content container and the panel.
|
|
34
34
|
* @slot panel - The AI panel's body. When empty the panel is unmounted and `openPanel()` is a no-op.
|
|
@@ -39,7 +39,7 @@ import '../nile-button/nile-button';
|
|
|
39
39
|
* @event nile-nav-toggle - Emitted after the nav's collapsed state or forced-rail lock changes. `detail: { collapsed, locked }`.
|
|
40
40
|
* @event nile-panel-toggle - Emitted after the panel opens or closes. `detail: { open, mode }`.
|
|
41
41
|
* @event nile-panel-mode-change - Emitted when the panel flips between docked and overlay. `detail: { mode }`.
|
|
42
|
-
* @event nile-
|
|
42
|
+
* @event nile-click - Emitted when the header's back control is pressed, or `goBackHeader()` is called. `detail: { value: 'back' }`. Emitted on the shell itself, so check `event.target === shell` as well as the value: a `nile-click` from page content bubbles through the shell too.
|
|
43
43
|
* @event nile-panel-back - Emitted when the panel's back control is pressed, whether the shell's built-in panel chrome or a slotted `nile-app-shell-panel` draws it.
|
|
44
44
|
*
|
|
45
45
|
* @csspart skip-link - The skip-to-content link.
|
|
@@ -48,15 +48,15 @@ import '../nile-button/nile-button';
|
|
|
48
48
|
* @csspart top-bar - The top bar, in either placement.
|
|
49
49
|
* @csspart nav-toggle - The built-in nav toggle button.
|
|
50
50
|
* @csspart rule - The vertical rule after the nav toggle.
|
|
51
|
+
* @csspart ask-rule - The vertical rule before the Ask button, drawn when `top-bar-actions` has content.
|
|
51
52
|
* @csspart top-bar-actions - The end-aligned top bar action group.
|
|
52
53
|
* @csspart ask - The built-in Ask button, the shell's single door to the panel.
|
|
53
|
-
* @csspart title-area - The header's own title block:
|
|
54
|
+
* @csspart title-area - The header's own title block: back control, app icon, title, badge and description.
|
|
54
55
|
* @csspart page-title - The title text, exposed as a heading whose level `headingLevel` sets.
|
|
55
56
|
* @csspart description - The second line under the title.
|
|
56
57
|
* @csspart badge - The pill after the title.
|
|
57
|
-
* @csspart
|
|
58
|
-
* @csspart
|
|
59
|
-
* @csspart app-icon - The block shown by `leading="app-icon"`, sized by `--nile-app-shell-app-icon-size`.
|
|
58
|
+
* @csspart back - The header back control, shown by `headerBack`.
|
|
59
|
+
* @csspart app-icon - The block holding the `app-icon` slot, shown when the slot has content and sized by `--nile-app-shell-app-icon-size`.
|
|
60
60
|
* @csspart tabs - The hoisted tab-strip region, under the top bar.
|
|
61
61
|
* @csspart side-nav - The navigation track.
|
|
62
62
|
* @csspart content-section - The flex row holding container, aside and panel.
|
|
@@ -88,7 +88,7 @@ import '../nile-button/nile-button';
|
|
|
88
88
|
* @cssproperty [--nile-app-shell-content-min-width=640px] - Container floor.
|
|
89
89
|
* @cssproperty [--nile-app-shell-min-width=768px] - Below this the window scrolls rather than the shell compressing.
|
|
90
90
|
* @cssproperty [--nile-app-shell-centered-width=824px] - Column width under `content-align="centered"`.
|
|
91
|
-
* @cssproperty [--nile-app-shell-app-icon-size=20px] - The
|
|
91
|
+
* @cssproperty [--nile-app-shell-app-icon-size=20px] - The app icon's box.
|
|
92
92
|
* @cssproperty [--nile-app-shell-utility-size=32px] - Box the shell's own icon controls sit in.
|
|
93
93
|
* @cssproperty [--nile-app-shell-radius=16px] - Container, aside and panel radius.
|
|
94
94
|
* @cssproperty [--nile-app-shell-duration=250ms] - Track and panel motion.
|
|
@@ -100,9 +100,8 @@ import '../nile-button/nile-button';
|
|
|
100
100
|
* @method expandNav() - Expand the side nav.
|
|
101
101
|
* @method collapseNav() - Collapse the side nav to a rail.
|
|
102
102
|
* @method toggleNav(force?) - Toggle, or force a specific collapsed state.
|
|
103
|
-
* @method goBackHeader() - Emit `nile-
|
|
103
|
+
* @method goBackHeader() - Emit `nile-click` with `{ value: 'back' }`, as the header's back control does.
|
|
104
104
|
* @method goBackPanel() - Emit `nile-panel-back`, as the panel's back control does.
|
|
105
|
-
* @method goBackPage() - Deprecated alias of `goBackHeader()`.
|
|
106
105
|
* @method goBack() - Deprecated alias of `goBackPanel()`.
|
|
107
106
|
*/
|
|
108
107
|
let NileAppShell = class NileAppShell extends NileElement {
|
|
@@ -118,10 +117,10 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
118
117
|
this.panelLabel = 'Ask Aquera';
|
|
119
118
|
/** The `aria-level` of the `pageTitle` heading, 1–6, so the title can fit the page's own heading outline; e.g. 2 when the page body or banner already has its h1. Out-of-range values clamp to 1–6 and non-numbers fall back to 1. */
|
|
120
119
|
this.headingLevel = 1;
|
|
121
|
-
/**
|
|
122
|
-
this.
|
|
123
|
-
/**
|
|
124
|
-
this.
|
|
120
|
+
/** Shows the back arrow before the page title; pressing it emits `nile-click` with `{ value: 'back' }`. Independent of the `app-icon` slot. */
|
|
121
|
+
this.headerBack = false;
|
|
122
|
+
/** Accessible name of the header back control. Never rendered as visible text. */
|
|
123
|
+
this.headerBackLabel = 'Back';
|
|
125
124
|
/** Hides the built-in nav toggle. Mount `nile-app-shell-nav-toggle` yourself. */
|
|
126
125
|
this.noNavToggle = false;
|
|
127
126
|
/** Drops the Cmd/Ctrl+J and Escape panel shortcuts. */
|
|
@@ -165,6 +164,7 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
165
164
|
this._hasTopBar = false;
|
|
166
165
|
this._hasTopBarActions = false;
|
|
167
166
|
this._hasTabs = false;
|
|
167
|
+
this._hasAppIcon = false;
|
|
168
168
|
this._hasPanel = false;
|
|
169
169
|
this._hasPanelFooter = false;
|
|
170
170
|
/** True when a `nile-app-shell-panel` is slotted, owning the panel's own chrome so the shell renders a bare region. */
|
|
@@ -261,6 +261,7 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
261
261
|
// Only with a title to sit under: see _hasTitleBlock.
|
|
262
262
|
this.toggleAttribute('has-description', !!this.description && !!this.pageTitle);
|
|
263
263
|
this.toggleAttribute('has-top-bar-actions', this._hasTopBarActions);
|
|
264
|
+
this.toggleAttribute('has-app-icon', this._hasAppIcon);
|
|
264
265
|
this.toggleAttribute('has-ask', this.askVisible);
|
|
265
266
|
this.toggleAttribute('has-tabs', this.tabsVisible);
|
|
266
267
|
this.toggleAttribute('has-aside', this._hasAside);
|
|
@@ -288,18 +289,15 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
288
289
|
else
|
|
289
290
|
this.closePanel();
|
|
290
291
|
}
|
|
291
|
-
/** Emit `nile-
|
|
292
|
+
/** Emit `nile-click` with `{ value: 'back' }`, as the header's back control does; the page owns the history. */
|
|
292
293
|
goBackHeader() {
|
|
293
|
-
|
|
294
|
+
const detail = { value: 'back' };
|
|
295
|
+
this.emit('nile-click', detail);
|
|
294
296
|
}
|
|
295
297
|
/** Emit `nile-panel-back`, as the panel's back control does; the page owns the view stack. */
|
|
296
298
|
goBackPanel() {
|
|
297
299
|
this.emit('nile-panel-back');
|
|
298
300
|
}
|
|
299
|
-
/** @deprecated Use `goBackHeader()`; kept as an alias that emits `nile-header-back`. */
|
|
300
|
-
goBackPage() {
|
|
301
|
-
this.goBackHeader();
|
|
302
|
-
}
|
|
303
301
|
/** @deprecated Use `goBackPanel()`; kept as an alias that emits `nile-panel-back`. */
|
|
304
302
|
goBack() {
|
|
305
303
|
this.goBackPanel();
|
|
@@ -464,6 +462,9 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
464
462
|
case 'tabs':
|
|
465
463
|
this._hasTabs = filled;
|
|
466
464
|
break;
|
|
465
|
+
case 'app-icon':
|
|
466
|
+
this._hasAppIcon = filled;
|
|
467
|
+
break;
|
|
467
468
|
case 'aside':
|
|
468
469
|
this._hasAside = filled;
|
|
469
470
|
break;
|
|
@@ -510,80 +511,83 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
510
511
|
</div>
|
|
511
512
|
`;
|
|
512
513
|
}
|
|
513
|
-
/** Whether the header has a title block of its own to draw:
|
|
514
|
+
/** Whether the header has a title block of its own to draw: a title, the back arrow or a slotted app icon mounts it. */
|
|
514
515
|
get _hasTitleBlock() {
|
|
515
|
-
return !!this.pageTitle || this.
|
|
516
|
-
}
|
|
517
|
-
/** Whether `leading` names a control that renders; an empty or unknown value draws nothing, like `none`. */
|
|
518
|
-
get _hasLeading() {
|
|
519
|
-
return this.leading === 'back' || this.leading === 'app-icon';
|
|
516
|
+
return !!this.pageTitle || this.headerBack || this._hasAppIcon;
|
|
520
517
|
}
|
|
521
518
|
/** `headingLevel` as a safe `aria-level`: a whole number clamped to 1–6, and 1 for anything non-numeric. */
|
|
522
519
|
get _headingLevel() {
|
|
523
520
|
const level = Math.trunc(Number(this.headingLevel));
|
|
524
521
|
return Number.isFinite(level) ? Math.min(6, Math.max(1, level)) : 1;
|
|
525
522
|
}
|
|
526
|
-
|
|
527
|
-
if (this.
|
|
528
|
-
return
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
</span>
|
|
532
|
-
`;
|
|
533
|
-
}
|
|
534
|
-
if (this.leading === 'back') {
|
|
535
|
-
return html `
|
|
523
|
+
_renderBack() {
|
|
524
|
+
if (!this.headerBack)
|
|
525
|
+
return '';
|
|
526
|
+
return html `
|
|
527
|
+
<span class="back-line">
|
|
536
528
|
<button
|
|
537
529
|
class="back"
|
|
538
530
|
part="back"
|
|
539
531
|
type="button"
|
|
532
|
+
aria-label=${this.headerBackLabel}
|
|
533
|
+
title=${this.headerBackLabel}
|
|
540
534
|
@click=${() => this.goBackHeader()}
|
|
541
535
|
>
|
|
542
|
-
${renderGlyph('ng-
|
|
543
|
-
<span>${this.backLabel}</span>
|
|
536
|
+
${renderGlyph('ng-arrow-narrow-left', 20, 'currentColor')}
|
|
544
537
|
</button>
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
538
|
+
</span>
|
|
539
|
+
`;
|
|
540
|
+
}
|
|
541
|
+
_renderAppIconSlot() {
|
|
542
|
+
return html `<slot
|
|
543
|
+
name="app-icon"
|
|
544
|
+
@slotchange=${(e) => this._onSlotChange('app-icon', e)}
|
|
545
|
+
></slot>`;
|
|
546
|
+
}
|
|
547
|
+
/* The app-icon slot has to exist whenever the stack does not, or a slotted icon could never mount it: park it, hidden. */
|
|
548
|
+
_renderAppIconProbe() {
|
|
549
|
+
return html `<span class="app-icon-probe" hidden
|
|
550
|
+
>${this._renderAppIconSlot()}</span
|
|
551
|
+
>`;
|
|
553
552
|
}
|
|
554
553
|
_renderTitleBlock() {
|
|
555
554
|
if (!this._hasTitleBlock)
|
|
556
|
-
return
|
|
557
|
-
/*
|
|
555
|
+
return this._renderAppIconProbe();
|
|
556
|
+
/* The stack is the title and/or the app icon; a back arrow on its own brings no empty stack. */
|
|
557
|
+
if (!this.pageTitle && !this._hasAppIcon) {
|
|
558
|
+
return html `
|
|
559
|
+
<div class="title-area" part="title-area">
|
|
560
|
+
${this._renderBack()} ${this._renderAppIconProbe()}
|
|
561
|
+
</div>
|
|
562
|
+
`;
|
|
563
|
+
}
|
|
564
|
+
/* The back arrow sits beside the stack; the app icon starts the stack's first row, so the description lines up under the icon when there is one and under the title when not. */
|
|
558
565
|
return html `
|
|
559
566
|
<div class="title-area" part="title-area">
|
|
560
|
-
${this.
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
567
|
+
${this._renderBack()}
|
|
568
|
+
<div class="title-stack">
|
|
569
|
+
<div class="title-row">
|
|
570
|
+
<span class="app-icon" part="app-icon"
|
|
571
|
+
>${this._renderAppIconSlot()}</span
|
|
572
|
+
>
|
|
573
|
+
${this.pageTitle
|
|
574
|
+
? html `<div
|
|
575
|
+
class="page-title"
|
|
576
|
+
part="page-title"
|
|
577
|
+
role="heading"
|
|
578
|
+
aria-level=${this._headingLevel}
|
|
579
|
+
>${this.pageTitle}</div>`
|
|
564
580
|
: ''}
|
|
565
|
-
|
|
566
|
-
? html
|
|
567
|
-
<div class="title-stack">
|
|
568
|
-
<div class="title-row">
|
|
569
|
-
<div
|
|
570
|
-
class="page-title"
|
|
571
|
-
part="page-title"
|
|
572
|
-
role="heading"
|
|
573
|
-
aria-level=${this._headingLevel}
|
|
574
|
-
>${this.pageTitle}</div>
|
|
575
|
-
${this.badge
|
|
576
|
-
? html `<span class="badge" part="badge">${this.badge}</span>`
|
|
577
|
-
: ''}
|
|
578
|
-
</div>
|
|
579
|
-
${this.description
|
|
580
|
-
? html `<p class="description" part="description">
|
|
581
|
-
${this.description}
|
|
582
|
-
</p>`
|
|
583
|
-
: ''}
|
|
584
|
-
</div>
|
|
585
|
-
`
|
|
581
|
+
${this.pageTitle && this.badge
|
|
582
|
+
? html `<span class="badge" part="badge">${this.badge}</span>`
|
|
586
583
|
: ''}
|
|
584
|
+
</div>
|
|
585
|
+
${this.pageTitle && this.description
|
|
586
|
+
? html `<p class="description" part="description">
|
|
587
|
+
${this.description}
|
|
588
|
+
</p>`
|
|
589
|
+
: ''}
|
|
590
|
+
</div>
|
|
587
591
|
</div>
|
|
588
592
|
`;
|
|
589
593
|
}
|
|
@@ -606,13 +610,16 @@ let NileAppShell = class NileAppShell extends NileElement {
|
|
|
606
610
|
name="top-bar-actions"
|
|
607
611
|
@slotchange=${(e) => this._onSlotChange('top-bar-actions', e)}
|
|
608
612
|
></slot>
|
|
613
|
+
${this.askVisible && this._hasTopBarActions
|
|
614
|
+
? html `<span class="rule ask-rule" part="ask-rule"></span>`
|
|
615
|
+
: ''}
|
|
609
616
|
${this.askVisible
|
|
610
617
|
? html `
|
|
611
618
|
<nile-button
|
|
612
619
|
class="ask"
|
|
613
620
|
part="ask"
|
|
614
621
|
exportparts="base: ask__base, label: ask__label"
|
|
615
|
-
variant="
|
|
622
|
+
variant="secondary"
|
|
616
623
|
@click=${() => this.openPanel()}
|
|
617
624
|
>
|
|
618
625
|
<span slot="prefix" class="ask-mark">
|
|
@@ -774,11 +781,11 @@ __decorate([
|
|
|
774
781
|
property({ type: String, attribute: true, reflect: true })
|
|
775
782
|
], NileAppShell.prototype, "badge", void 0);
|
|
776
783
|
__decorate([
|
|
777
|
-
property({ type:
|
|
778
|
-
], NileAppShell.prototype, "
|
|
784
|
+
property({ type: Boolean, attribute: true, reflect: true })
|
|
785
|
+
], NileAppShell.prototype, "headerBack", void 0);
|
|
779
786
|
__decorate([
|
|
780
787
|
property({ type: String, attribute: true, reflect: true })
|
|
781
|
-
], NileAppShell.prototype, "
|
|
788
|
+
], NileAppShell.prototype, "headerBackLabel", void 0);
|
|
782
789
|
__decorate([
|
|
783
790
|
property({ type: Boolean, reflect: true, attribute: 'no-nav-toggle' })
|
|
784
791
|
], NileAppShell.prototype, "noNavToggle", void 0);
|
|
@@ -854,6 +861,9 @@ __decorate([
|
|
|
854
861
|
__decorate([
|
|
855
862
|
state()
|
|
856
863
|
], NileAppShell.prototype, "_hasTabs", void 0);
|
|
864
|
+
__decorate([
|
|
865
|
+
state()
|
|
866
|
+
], NileAppShell.prototype, "_hasAppIcon", void 0);
|
|
857
867
|
__decorate([
|
|
858
868
|
state()
|
|
859
869
|
], NileAppShell.prototype, "_hasPanel", void 0);
|