@aquera/nile-elements 2.0.10 → 2.0.11

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.
Files changed (104) hide show
  1. package/README.md +3 -0
  2. package/demo/app-shell.html +852 -0
  3. package/demo/nxtgen-classes.css +2 -2
  4. package/demo/nxtgen-properties.css +2 -2
  5. package/demo/nxtgen-utilities.css +2 -2
  6. package/demo/nxtgen.css +2 -2
  7. package/demo/utilities.css +2 -2
  8. package/demo/variables.css +2 -2
  9. package/dist/index.cjs.js +1 -1
  10. package/dist/index.esm.js +1 -1
  11. package/dist/index.js +579 -296
  12. package/dist/internal/app-shell-utility-control-styles.cjs.js +2 -0
  13. package/dist/internal/app-shell-utility-control-styles.cjs.js.map +1 -0
  14. package/dist/internal/app-shell-utility-control-styles.esm.js +16 -0
  15. package/dist/nile-app-shell/index.cjs.js +1 -1
  16. package/dist/nile-app-shell/index.esm.js +1 -1
  17. package/dist/nile-app-shell/nile-app-shell.cjs.js +1 -1
  18. package/dist/nile-app-shell/nile-app-shell.cjs.js.map +1 -1
  19. package/dist/nile-app-shell/nile-app-shell.css.cjs.js +1 -1
  20. package/dist/nile-app-shell/nile-app-shell.css.cjs.js.map +1 -1
  21. package/dist/nile-app-shell/nile-app-shell.css.esm.js +270 -92
  22. package/dist/nile-app-shell/nile-app-shell.esm.js +61 -10
  23. package/dist/nile-app-shell/shell-controller.cjs.js.map +1 -1
  24. package/dist/nile-app-shell-main/nile-app-shell-main.cjs.js.map +1 -1
  25. package/dist/nile-app-shell-nav-toggle/index.cjs.js +1 -1
  26. package/dist/nile-app-shell-nav-toggle/index.esm.js +1 -1
  27. package/dist/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.cjs.js +1 -1
  28. package/dist/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.cjs.js.map +1 -1
  29. package/dist/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.cjs.js +1 -1
  30. package/dist/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.cjs.js.map +1 -1
  31. package/dist/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.esm.js +7 -3
  32. package/dist/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.esm.js +3 -3
  33. package/dist/nile-app-shell-panel/index.cjs.js +1 -1
  34. package/dist/nile-app-shell-panel/index.esm.js +1 -1
  35. package/dist/nile-app-shell-panel/nile-app-shell-panel.cjs.js +1 -1
  36. package/dist/nile-app-shell-panel/nile-app-shell-panel.cjs.js.map +1 -1
  37. package/dist/nile-app-shell-panel/nile-app-shell-panel.css.cjs.js +1 -1
  38. package/dist/nile-app-shell-panel/nile-app-shell-panel.css.cjs.js.map +1 -1
  39. package/dist/nile-app-shell-panel/nile-app-shell-panel.css.esm.js +29 -7
  40. package/dist/nile-app-shell-panel/nile-app-shell-panel.esm.js +18 -5
  41. package/dist/nile-app-shell-side-nav/nile-app-shell-side-nav.cjs.js.map +1 -1
  42. package/dist/nile-app-shell-side-nav/nile-app-shell-side-nav.css.cjs.js.map +1 -1
  43. package/dist/src/internal/app-shell-utility-control-styles.d.ts +12 -0
  44. package/dist/src/internal/app-shell-utility-control-styles.js +29 -0
  45. package/dist/src/internal/app-shell-utility-control-styles.js.map +1 -0
  46. package/dist/src/nile-app-shell/nile-app-shell-regions.test.d.ts +3 -0
  47. package/dist/src/nile-app-shell/nile-app-shell-regions.test.js +206 -0
  48. package/dist/src/nile-app-shell/nile-app-shell-regions.test.js.map +1 -1
  49. package/dist/src/nile-app-shell/nile-app-shell.css.d.ts +1 -9
  50. package/dist/src/nile-app-shell/nile-app-shell.css.js +270 -99
  51. package/dist/src/nile-app-shell/nile-app-shell.css.js.map +1 -1
  52. package/dist/src/nile-app-shell/nile-app-shell.d.ts +90 -122
  53. package/dist/src/nile-app-shell/nile-app-shell.js +224 -143
  54. package/dist/src/nile-app-shell/nile-app-shell.js.map +1 -1
  55. package/dist/src/nile-app-shell/nile-app-shell.test.d.ts +3 -0
  56. package/dist/src/nile-app-shell/nile-app-shell.test.js +898 -29
  57. package/dist/src/nile-app-shell/nile-app-shell.test.js.map +1 -1
  58. package/dist/src/nile-app-shell/shell-controller.d.ts +1 -8
  59. package/dist/src/nile-app-shell/shell-controller.js +2 -14
  60. package/dist/src/nile-app-shell/shell-controller.js.map +1 -1
  61. package/dist/src/nile-app-shell-main/nile-app-shell-main.d.ts +2 -6
  62. package/dist/src/nile-app-shell-main/nile-app-shell-main.js +2 -6
  63. package/dist/src/nile-app-shell-main/nile-app-shell-main.js.map +1 -1
  64. package/dist/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.d.ts +1 -4
  65. package/dist/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.js +7 -5
  66. package/dist/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.js.map +1 -1
  67. package/dist/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.d.ts +4 -8
  68. package/dist/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.js +5 -6
  69. package/dist/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.js.map +1 -1
  70. package/dist/src/nile-app-shell-panel/nile-app-shell-panel.css.js +28 -5
  71. package/dist/src/nile-app-shell-panel/nile-app-shell-panel.css.js.map +1 -1
  72. package/dist/src/nile-app-shell-panel/nile-app-shell-panel.d.ts +18 -13
  73. package/dist/src/nile-app-shell-panel/nile-app-shell-panel.js +45 -16
  74. package/dist/src/nile-app-shell-panel/nile-app-shell-panel.js.map +1 -1
  75. package/dist/src/nile-app-shell-side-nav/nile-app-shell-side-nav.css.d.ts +1 -4
  76. package/dist/src/nile-app-shell-side-nav/nile-app-shell-side-nav.css.js +1 -4
  77. package/dist/src/nile-app-shell-side-nav/nile-app-shell-side-nav.css.js.map +1 -1
  78. package/dist/src/nile-app-shell-side-nav/nile-app-shell-side-nav.d.ts +4 -12
  79. package/dist/src/nile-app-shell-side-nav/nile-app-shell-side-nav.js +4 -12
  80. package/dist/src/nile-app-shell-side-nav/nile-app-shell-side-nav.js.map +1 -1
  81. package/dist/src/version.js +1 -1
  82. package/dist/src/version.js.map +1 -1
  83. package/dist/tsconfig.tsbuildinfo +1 -1
  84. package/dist/version.cjs.js +1 -1
  85. package/dist/version.cjs.js.map +1 -1
  86. package/dist/version.esm.js +1 -1
  87. package/package.json +1 -1
  88. package/plop-templates/lit/lit.test.ts.hbs +22 -0
  89. package/plop-templates/lit/lit.ts.hbs +10 -5
  90. package/plopfile.js +12 -0
  91. package/src/internal/app-shell-utility-control-styles.ts +30 -0
  92. package/src/nile-app-shell/nile-app-shell-regions.test.ts +248 -0
  93. package/src/nile-app-shell/nile-app-shell.css.ts +270 -99
  94. package/src/nile-app-shell/nile-app-shell.test.ts +1120 -29
  95. package/src/nile-app-shell/nile-app-shell.ts +241 -148
  96. package/src/nile-app-shell/shell-controller.ts +2 -14
  97. package/src/nile-app-shell-main/nile-app-shell-main.ts +2 -6
  98. package/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.css.ts +7 -5
  99. package/src/nile-app-shell-nav-toggle/nile-app-shell-nav-toggle.ts +7 -11
  100. package/src/nile-app-shell-panel/nile-app-shell-panel.css.ts +28 -5
  101. package/src/nile-app-shell-panel/nile-app-shell-panel.ts +44 -16
  102. package/src/nile-app-shell-side-nav/nile-app-shell-side-nav.css.ts +1 -4
  103. package/src/nile-app-shell-side-nav/nile-app-shell-side-nav.ts +4 -12
  104. package/vscode-html-custom-data.json +114 -37
@@ -13,10 +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
+ /** What sits before the page title in the top bar. */
17
+ export type NileAppShellLeading = 'none' | 'back' | 'app-icon';
16
18
  /**
17
- * @summary The application frame every route inherits: a side nav, a content
18
- * container, an optional aside and an AI assistant panel. It holds anything —
19
- * the shell owns the boxes, the page owns what goes in them.
19
+ * @summary The application frame every route inherits: a side nav, a content container, an optional aside and an AI assistant panel.
20
20
  *
21
21
  * @status stable
22
22
  * @since 2.0
@@ -28,29 +28,22 @@ export type NileAppShellContentAlign = 'fluid' | 'centered';
28
28
  *
29
29
  * @slot - The page body, inside the content container.
30
30
  * @slot banner - A full-width strip above every other region.
31
- * @slot top-bar - The page-title bar. Mounted inside the container by default,
32
- * or spanning the shell when `top-bar-placement="shell"`. The nav toggle is
33
- * rendered before whatever is slotted here.
31
+ * @slot top-bar - The page-title bar, mounted inside the container by default or spanning the shell when `top-bar-placement="shell"`.
34
32
  * @slot top-bar-actions - Controls pinned to the end of the top bar.
35
- * @slot tabs - A hoisted second-level tab strip, flush under the top bar and
36
- * outside `<main>`'s scroller, so it never scrolls away. The region carries
37
- * the strip's height, padding and rule, so slot a `<nile-tab-group>` or the
38
- * tab controls themselves.
33
+ * @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 when `leading="app-icon"`, clipped to the shell's box.
39
35
  * @slot side-nav - The navigation track. Works best with `<nile-side-bar>`.
40
36
  * @slot aside - A secondary column between the content container and the panel.
41
- * @slot panel - The AI panel's body. When nothing is slotted here the panel is
42
- * unmounted and `openPanel()` is a no-op.
37
+ * @slot panel - The AI panel's body. When empty the panel is unmounted and `openPanel()` is a no-op.
43
38
  * @slot panel-header - Replaces the default panel heading (mark plus title).
44
39
  * @slot panel-actions - Controls added before the panel's close button.
45
- * @slot panel-footer - A bar docked below the panel's scroll region, for a
46
- * composer.
40
+ * @slot panel-footer - A bar docked below the panel's scroll region, for a composer.
47
41
  *
48
- * @event nile-nav-toggle - Emitted after the nav's collapsed state or its
49
- * forced-rail lock changes. `detail: { collapsed, locked }`.
50
- * @event nile-panel-toggle - Emitted after the panel opens or closes.
51
- * `detail: { open, mode }`.
52
- * @event nile-panel-mode-change - Emitted when the panel flips between docked
53
- * and overlay. `detail: { mode }`.
42
+ * @event nile-nav-toggle - Emitted after the nav's collapsed state or forced-rail lock changes. `detail: { collapsed, locked }`.
43
+ * @event nile-panel-toggle - Emitted after the panel opens or closes. `detail: { open, mode }`.
44
+ * @event nile-panel-mode-change - Emitted when the panel flips between docked and overlay. `detail: { mode }`.
45
+ * @event nile-header-back - Emitted when the header's back control is pressed.
46
+ * @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.
54
47
  *
55
48
  * @csspart skip-link - The skip-to-content link.
56
49
  * @csspart banner - The banner region.
@@ -58,12 +51,15 @@ export type NileAppShellContentAlign = 'fluid' | 'centered';
58
51
  * @csspart top-bar - The top bar, in either placement.
59
52
  * @csspart nav-toggle - The built-in nav toggle button.
60
53
  * @csspart rule - The vertical rule after the nav toggle.
61
- * @csspart top-bar-actions - The end-aligned top bar action group. Unmounted
62
- * when it holds neither slotted actions nor the Ask button, so it reserves
63
- * no gap.
54
+ * @csspart top-bar-actions - The end-aligned top bar action group.
64
55
  * @csspart ask - The built-in Ask button, the shell's single door to the panel.
65
- * A `<nile-button>`; its inner surface and label are exported as
66
- * `ask__base` and `ask__label`.
56
+ * @csspart title-area - The header's own title block: leading, title, badge and description.
57
+ * @csspart page-title - The title text, exposed as a heading whose level `headingLevel` sets.
58
+ * @csspart description - The second line under the title.
59
+ * @csspart badge - The pill after the title.
60
+ * @csspart leading - The line box holding the leading control.
61
+ * @csspart back - The back control shown by `leading="back"`.
62
+ * @csspart app-icon - The block shown by `leading="app-icon"`, sized by `--nile-app-shell-app-icon-size`.
67
63
  * @csspart tabs - The hoisted tab-strip region, under the top bar.
68
64
  * @csspart side-nav - The navigation track.
69
65
  * @csspart content-section - The flex row holding container, aside and panel.
@@ -72,42 +68,32 @@ export type NileAppShellContentAlign = 'fluid' | 'centered';
72
68
  * @csspart aside - The aside region.
73
69
  * @csspart panel - The AI panel.
74
70
  * @csspart panel-header - The panel's header bar.
71
+ * @csspart panel-back - The panel's back control, shown by `panelBack`.
75
72
  * @csspart panel-title - The panel's title text.
76
73
  * @csspart panel-actions - The panel's header action group.
77
74
  * @csspart panel-close - The panel's close button.
78
75
  * @csspart panel-body - The panel's scroll region.
79
76
  * @csspart panel-footer - The panel's footer.
80
77
  *
81
- * @cssproperty [--nile-app-shell-side-nav-width=260px] - Expanded nav track.
82
- * @cssproperty [--nile-app-shell-side-nav-rail-width=64px] - Collapsed track.
83
- * @cssproperty [--nile-app-shell-side-nav-bg=transparent] - Surface behind a
84
- * slotted side nav. Transparent by default: the nav and the page share one
85
- * surface.
86
- * @cssproperty [--nile-app-shell-side-nav-border=0] - Edge on a slotted side
87
- * nav.
88
- * @cssproperty [--nile-app-shell-gutter=8px] - Content-section padding, and the
89
- * gap between container, aside and panel.
90
- * @cssproperty [--nile-app-shell-content-padding=24px] - Container inner
91
- * padding. The origin every top bar starts at.
92
- * @cssproperty [--nile-app-shell-top-bar-height=56px] - Top bar and panel
93
- * header height. Drops to 48px under 600px of viewport height.
94
- * @cssproperty [--nile-app-shell-tabs-height=48px] - Tab strip height.
95
- * @cssproperty [--nile-app-shell-panel-width=480px] - Docked panel width, and
96
- * the `min()` ceiling for the overlay drawer.
97
- * @cssproperty [--nile-app-shell-panel-min-width=360px] - How far a docked
98
- * panel shrinks to keep pushing rather than covering the page.
78
+ * @cssproperty [--nile-app-shell-side-nav-width=240px] - Expanded nav track.
79
+ * @cssproperty [--nile-app-shell-side-nav-rail-width=70px] - Collapsed track.
80
+ * @cssproperty [--nile-app-shell-side-nav-bg=transparent] - Surface behind a slotted side nav.
81
+ * @cssproperty [--nile-app-shell-side-nav-border=0] - Edge on a slotted side nav.
82
+ * @cssproperty [--nile-app-shell-gutter=4px] - Content-section padding, and the gap between container, aside and panel.
83
+ * @cssproperty [--nile-app-shell-content-padding=24px] - Container inner padding.
84
+ * @cssproperty [--nile-app-shell-top-bar-height=68px] - Top bar height.
85
+ * @cssproperty [--nile-app-shell-panel-header-height=56px] - The panel header's own height.
86
+ * @cssproperty [--nile-app-shell-tabs-height=33px] - Tab strip height.
87
+ * @cssproperty [--nile-app-shell-panel-width=480px] - Docked panel width, and the `min()` ceiling for the overlay drawer.
88
+ * @cssproperty [--nile-app-shell-panel-min-width=360px] - How far a docked panel shrinks to keep pushing rather than covering the page.
99
89
  * @cssproperty [--nile-app-shell-aside-width=320px] - Aside width.
100
- * @cssproperty [--nile-app-shell-aside-min-width=240px] - How far the aside
101
- * shrinks before the page is asked for room.
90
+ * @cssproperty [--nile-app-shell-aside-min-width=240px] - How far the aside shrinks before the page is asked for room.
102
91
  * @cssproperty [--nile-app-shell-content-min-width=640px] - Container floor.
103
- * @cssproperty [--nile-app-shell-min-width=768px] - Below this the window
104
- * scrolls rather than the shell compressing.
105
- * @cssproperty [--nile-app-shell-centered-width=824px] - Column width under
106
- * `content-align="centered"`.
107
- * @cssproperty [--nile-app-shell-utility-size=32px] - Height of the Ask
108
- * button. The toggle and close controls are nile-buttons and size themselves.
109
- * @cssproperty [--nile-app-shell-radius=16px] - Container, aside and panel
110
- * radius.
92
+ * @cssproperty [--nile-app-shell-min-width=768px] - Below this the window scrolls rather than the shell compressing.
93
+ * @cssproperty [--nile-app-shell-centered-width=824px] - Column width under `content-align="centered"`.
94
+ * @cssproperty [--nile-app-shell-app-icon-size=20px] - The leading app icon's box.
95
+ * @cssproperty [--nile-app-shell-utility-size=32px] - Box the shell's own icon controls sit in.
96
+ * @cssproperty [--nile-app-shell-radius=16px] - Container, aside and panel radius.
111
97
  * @cssproperty [--nile-app-shell-duration=250ms] - Track and panel motion.
112
98
  * @cssproperty [--nile-app-shell-ease] - Easing for moves and resizes.
113
99
  *
@@ -117,23 +103,33 @@ export type NileAppShellContentAlign = 'fluid' | 'centered';
117
103
  * @method expandNav() - Expand the side nav.
118
104
  * @method collapseNav() - Collapse the side nav to a rail.
119
105
  * @method toggleNav(force?) - Toggle, or force a specific collapsed state.
106
+ * @method goBackHeader() - Emit `nile-header-back`, as the header's back control does.
107
+ * @method goBackPanel() - Emit `nile-panel-back`, as the panel's back control does.
108
+ * @method goBackPage() - Deprecated alias of `goBackHeader()`.
109
+ * @method goBack() - Deprecated alias of `goBackPanel()`.
120
110
  */
121
111
  export declare class NileAppShell extends NileElement {
122
112
  static get styles(): CSSResultArray;
123
- /**
124
- * The user's nav preference. The nav can still render as a rail while this is
125
- * false — see `navLocked`.
126
- */
113
+ /** The user's nav preference. The nav can still render as a rail while this is false — see `navLocked`. */
127
114
  navCollapsed: boolean;
128
115
  /** Whether the AI panel is open. */
129
116
  panelOpen: boolean;
130
- /**
131
- * Unmounts the AI panel for this route even when the `panel` slot is filled.
132
- * `openPanel()` becomes a no-op.
133
- */
117
+ /** Unmounts the AI panel for this route even when the `panel` slot is filled; `openPanel()` becomes a no-op. */
134
118
  noPanel: boolean;
135
119
  /** The default panel heading. Ignored when `panel-header` is slotted. */
136
120
  panelLabel: string;
121
+ /** The page title, rendered as the top bar's own heading (`role="heading"`, level from `headingLevel`) before anything slotted into `top-bar`; leave unset and no title block renders. */
122
+ pageTitle?: string;
123
+ /** 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. */
124
+ headingLevel: number;
125
+ /** A second line under the page title; a modifier on `pageTitle` that renders nothing with no title, and takes the bar to 76px. */
126
+ description?: string;
127
+ /** A pill after the page title; a modifier on `pageTitle` like `description`, so with no title there is no badge. */
128
+ badge?: string;
129
+ /** What sits before the page title: `back` draws a breadcrumb and emits `nile-header-back`; `app-icon` draws a 20px block for the `app-icon` slot. */
130
+ leading: NileAppShellLeading;
131
+ /** The previous-page label drawn by `leading="back"`. */
132
+ backLabel: string;
137
133
  /** Hides the built-in nav toggle. Mount `nile-app-shell-nav-toggle` yourself. */
138
134
  noNavToggle: boolean;
139
135
  /** Drops the Cmd/Ctrl+J and Escape panel shortcuts. */
@@ -146,53 +142,29 @@ export declare class NileAppShell extends NileElement {
146
142
  topBarPlacement: NileAppShellTopBarPlacement;
147
143
  /** `centered` caps the page body at `--nile-app-shell-centered-width`. */
148
144
  contentAlign: NileAppShellContentAlign;
149
- /**
150
- * Makes the slotted page root a size query container, so page CSS can size
151
- * against the content container instead of the viewport. Query it unnamed —
152
- * `@container (min-width: 720px)` — because a container name declared inside
153
- * the shell's shadow tree is not visible to page CSS. Opt-in, because it
154
- * also applies layout containment to that element.
155
- */
145
+ /** Makes the slotted page root a size query container, so page CSS can size against the content container instead of the viewport. */
156
146
  contentContainer: boolean;
157
147
  /** Drops the container's card chrome for a full-bleed page. */
158
148
  flat: boolean;
159
149
  /** Removes the container's inner padding. */
160
150
  noPadding: boolean;
161
- /**
162
- * The label on the built-in Ask button.
163
- *
164
- * The button is the shell's, not the app's: it is the one control that has
165
- * to know whether a panel is mounted for this route and how to open it, and
166
- * slotted content can see neither. Everything else in the bar — the
167
- * breadcrumb, the page actions, the tab strip — is slotted markup.
168
- */
151
+ /** The label on the built-in Ask button. */
169
152
  askLabel: string;
170
153
  /** Drops the built-in Ask button, for a bar that renders its own. */
171
154
  noAsk: boolean;
155
+ /** Shows a back control at the start of the panel header for a panel sub-view; emits `nile-panel-back`. */
156
+ panelBack: boolean;
157
+ /** Accessible name of the panel's back control. */
158
+ panelBackLabel: string;
159
+ /** Hides the tab strip for this route even when the `tabs` slot is filled. */
160
+ noTabs: boolean;
172
161
  /** Sizes the shell to the viewport instead of its parent. */
173
162
  fullHeight: boolean;
174
- /**
175
- * Below this shell width the panel overlays the content instead of pushing
176
- * it, and the nav is forced to a rail.
177
- *
178
- * Zero — the default — means never: the panel is furniture that squeezes the
179
- * page, at every width. It earns its room from the nav rail first and from
180
- * its own width next (see `--nile-app-shell-panel-min-width`), so it does
181
- * not have to cover the page to fit. Set a width here to opt back into an
182
- * overlay drawer below it.
183
- */
163
+ /** Below this shell width the panel overlays the content instead of pushing it, and the nav is forced to a rail; zero (default) means never. */
184
164
  overlayBreakpoint: number;
185
- /**
186
- * Below this shell width an open docked panel forces the nav to a rail.
187
- * A floor, not the whole rule: the nav also rails as soon as the expanded
188
- * track is what stops the row from fitting. This is the first thing the
189
- * panel takes room from, so it can push rather than cover.
190
- */
165
+ /** Below this shell width an open docked panel forces the nav to a rail. */
191
166
  dockedRailBreakpoint: number;
192
- /**
193
- * Persists the nav preference and the docked panel state under this key.
194
- * Overlay panel state is never persisted — a reload opens closed.
195
- */
167
+ /** Persists the nav preference and docked panel state under this key. Overlay panel state is never persisted. */
196
168
  persistKey?: string;
197
169
  /** The panel's current mode. Derived from the shell's width. */
198
170
  private _panelMode;
@@ -205,12 +177,7 @@ export declare class NileAppShell extends NileElement {
205
177
  private _hasTabs;
206
178
  private _hasPanel;
207
179
  private _hasPanelFooter;
208
- /**
209
- * True when a `nile-app-shell-panel` is slotted. That component owns the
210
- * panel's heading, actions, close button and footer, so the shell renders a
211
- * bare region and keeps only the geometry and the open state — the same
212
- * hand-off as `no-nav-toggle` plus `nile-app-shell-nav-toggle`.
213
- */
180
+ /** True when a `nile-app-shell-panel` is slotted, owning the panel's own chrome so the shell renders a bare region. */
214
181
  private _panelOwnsChrome;
215
182
  private _hasAside;
216
183
  private _main?;
@@ -223,6 +190,8 @@ export declare class NileAppShell extends NileElement {
223
190
  get navLocked(): boolean;
224
191
  /** Whether a panel is mounted for this route. */
225
192
  get panelAvailable(): boolean;
193
+ /** Whether the tab strip is rendered: something slotted, and not switched off. */
194
+ get tabsVisible(): boolean;
226
195
  /** Whether the built-in Ask button is rendered. */
227
196
  get askVisible(): boolean;
228
197
  /** Whether the nav renders as a rail right now, preference or lock. */
@@ -235,12 +204,16 @@ export declare class NileAppShell extends NileElement {
235
204
  openPanel(): void;
236
205
  /** Close the AI panel. */
237
206
  closePanel(): void;
238
- /**
239
- * Toggle the panel, or force a state. Call `openPanel()` from a page action —
240
- * a page action that toggles closes the panel for a user who already had it
241
- * open.
242
- */
207
+ /** Toggle the panel, or force a state. */
243
208
  togglePanel(force?: boolean): void;
209
+ /** Emit `nile-header-back`, as the header's back control does; the page owns the history. */
210
+ goBackHeader(): void;
211
+ /** Emit `nile-panel-back`, as the panel's back control does; the page owns the view stack. */
212
+ goBackPanel(): void;
213
+ /** @deprecated Use `goBackHeader()`; kept as an alias that emits `nile-header-back`. */
214
+ goBackPage(): void;
215
+ /** @deprecated Use `goBackPanel()`; kept as an alias that emits `nile-panel-back`. */
216
+ goBack(): void;
244
217
  /** Expand the side nav. */
245
218
  expandNav(): void;
246
219
  /** Collapse the side nav to a rail. */
@@ -253,22 +226,9 @@ export declare class NileAppShell extends NileElement {
253
226
  private _setNavCollapsed;
254
227
  /** Records the shell's width and re-derives everything that depends on it. */
255
228
  private _measure;
256
- /**
257
- * The shell's geometry, read off its own custom properties so a consumer's
258
- * overrides are part of the sum. Falls back to the stylesheet's defaults
259
- * before the element has a computed style.
260
- */
229
+ /** The shell's geometry, read off its own custom properties, falling back to defaults before a computed style exists. */
261
230
  private _geometry;
262
- /**
263
- * The shell width a docked panel needs to sit beside the content floor, over
264
- * a side-nav `track` wide.
265
- *
266
- * A fixed breakpoint cannot answer this: what shares the row changes per
267
- * route. An aside alone adds 328px, so a shell wide enough to hold the
268
- * expanded nav beside a docked panel on one route is 328px short on the
269
- * next. Summing what is actually mounted rails the nav exactly when the
270
- * track is what the row cannot afford.
271
- */
231
+ /** The shell width a docked panel needs to sit beside the content floor, over a side-nav `track` wide. */
272
232
  private _dockRequirement;
273
233
  private _recompute;
274
234
  /** Mirrors the effective rail state onto a slotted `nile-side-bar`. */
@@ -281,6 +241,14 @@ export declare class NileAppShell extends NileElement {
281
241
  private _persist;
282
242
  private _onSlotChange;
283
243
  private _renderNavToggle;
244
+ /** Whether the header has a title block of its own to draw: only a title or a leading control mounts it. */
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
+ /** `headingLevel` as a safe `aria-level`: a whole number clamped to 1–6, and 1 for anything non-numeric. */
249
+ private get _headingLevel();
250
+ private _renderLeading;
251
+ private _renderTitleBlock;
284
252
  private _renderTopBar;
285
253
  render(): TemplateResult;
286
254
  }