@nldd/design-system 0.8.65 → 0.8.67
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/components/actions/toolbar/toolbar.d.ts +4 -2
- package/dist/components/actions/toolbar/toolbar.d.ts.map +1 -1
- package/dist/components/actions/toolbar/toolbar.js +4 -2
- package/dist/components/actions/toolbar/toolbar.js.map +1 -1
- package/dist/components/actions/toolbar/toolbar.styles.d.ts.map +1 -1
- package/dist/components/actions/toolbar/toolbar.styles.js +32 -8
- package/dist/components/actions/toolbar/toolbar.styles.js.map +1 -1
- package/dist/components/actions/toolbar/toolbar.template.d.ts.map +1 -1
- package/dist/components/actions/toolbar/toolbar.template.js +5 -2
- package/dist/components/actions/toolbar/toolbar.template.js.map +1 -1
- package/dist/components/components.js +1 -1
- package/dist/components/content/icon/icon-aliases.d.ts.map +1 -1
- package/dist/components/content/icon/icon-aliases.js +21 -7
- package/dist/components/content/icon/icon-aliases.js.map +1 -1
- package/dist/components/content/icon/icon-registry.d.ts.map +1 -1
- package/dist/components/content/icon/icon-registry.js +16 -4
- package/dist/components/content/icon/icon-registry.js.map +1 -1
- package/dist/components/{index-D3NSlPL5.js → index-Bfw_pYWB.js} +1 -1
- package/dist/components/{index-BlMqctke.js → index-Bqf6o41r.js} +1 -1
- package/dist/components/{index-BseMFLNF.js → index-CKnwqp_9.js} +1 -1
- package/dist/components/{index-D7B3n3QJ.js → index-CXT1jMFt.js} +1 -1
- package/dist/components/{index-ChjtFo6I.js → index-DO7aT0MT.js} +1 -1
- package/dist/components/{index-BcdqzZql.js → index-DWwviobk.js} +1 -1
- package/dist/components/{index-BI4lrehT.js → index-DjsXjoZJ.js} +629 -81
- package/dist/components/inputs/text-editor/text-editor.commands.d.ts +7 -0
- package/dist/components/inputs/text-editor/text-editor.commands.d.ts.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.commands.js +44 -0
- package/dist/components/inputs/text-editor/text-editor.commands.js.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.d.ts +1 -1
- package/dist/components/inputs/text-editor/text-editor.d.ts.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.js +5 -7
- package/dist/components/inputs/text-editor/text-editor.js.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.ordered-list.d.ts.map +1 -1
- package/dist/components/inputs/text-editor/text-editor.ordered-list.js +32 -11
- package/dist/components/inputs/text-editor/text-editor.ordered-list.js.map +1 -1
- package/dist/components/inputs/token-field/token-field.d.ts +3 -3
- package/dist/components/inputs/token-field/token-field.d.ts.map +1 -1
- package/dist/components/inputs/token-field/token-field.js +17 -5
- package/dist/components/inputs/token-field/token-field.js.map +1 -1
- package/dist/components/layout/app-view/app-view.d.ts +26 -6
- package/dist/components/layout/app-view/app-view.d.ts.map +1 -1
- package/dist/components/layout/app-view/app-view.js +101 -11
- package/dist/components/layout/app-view/app-view.js.map +1 -1
- package/dist/components/layout/app-view/app-view.styles.d.ts.map +1 -1
- package/dist/components/layout/app-view/app-view.styles.js +25 -0
- package/dist/components/layout/app-view/app-view.styles.js.map +1 -1
- package/dist/components/layout/page/page.d.ts +31 -1
- package/dist/components/layout/page/page.d.ts.map +1 -1
- package/dist/components/layout/page/page.js +112 -26
- package/dist/components/layout/page/page.js.map +1 -1
- package/dist/components/layout/page/page.styles.d.ts.map +1 -1
- package/dist/components/layout/page/page.styles.js +48 -0
- package/dist/components/layout/page/page.styles.js.map +1 -1
- package/dist/components/layout/sheet/sheet.d.ts +4 -0
- package/dist/components/layout/sheet/sheet.d.ts.map +1 -1
- package/dist/components/layout/sheet/sheet.js +4 -0
- package/dist/components/layout/sheet/sheet.js.map +1 -1
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.d.ts +3 -0
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.d.ts.map +1 -1
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.js +49 -0
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.js.map +1 -1
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.d.ts.map +1 -1
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.js +55 -0
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.styles.js.map +1 -1
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.template.d.ts.map +1 -1
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.template.js +18 -9
- package/dist/components/layout/split-views/bar-split-view/bar-split-view.template.js.map +1 -1
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts +8 -0
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.d.ts.map +1 -1
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js +21 -0
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.js.map +1 -1
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.d.ts.map +1 -1
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js +34 -0
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.styles.js.map +1 -1
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.template.d.ts.map +1 -1
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.template.js +17 -7
- package/dist/components/layout/split-views/navigation-split-view/navigation-split-view.template.js.map +1 -1
- package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts +6 -0
- package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.d.ts.map +1 -1
- package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js +17 -0
- package/dist/components/layout/split-views/side-by-side-split-view/side-by-side-split-view.js.map +1 -1
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.d.ts +10 -0
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.d.ts.map +1 -1
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.js +13 -0
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.js.map +1 -1
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.d.ts.map +1 -1
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.js +19 -0
- package/dist/components/layout/split-views/split-view-pane/split-view-pane.styles.js.map +1 -1
- package/dist/components/navigation/top-title-bar/top-title-bar.d.ts +6 -1
- package/dist/components/navigation/top-title-bar/top-title-bar.d.ts.map +1 -1
- package/dist/components/navigation/top-title-bar/top-title-bar.js +42 -6
- package/dist/components/navigation/top-title-bar/top-title-bar.js.map +1 -1
- package/dist/utilities/scroll-mode-controller.d.ts +69 -0
- package/dist/utilities/scroll-mode-controller.d.ts.map +1 -0
- package/dist/utilities/scroll-mode-controller.js +101 -0
- package/dist/utilities/scroll-mode-controller.js.map +1 -0
- package/package.json +1 -1
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
* toolbar title are visible
|
|
10
10
|
*
|
|
11
11
|
* When `collapse-anchor` is set, the `is-compact` class is automatically applied
|
|
12
|
-
* as soon as the top of the anchor element reaches
|
|
12
|
+
* as soon as the top of the anchor element reaches this bar's own top edge (the
|
|
13
|
+
* sticky header line). Measuring the bar rather than the page keeps it correct in
|
|
14
|
+
* both nested and root scroll modes; it also re-points at the live scroll target
|
|
15
|
+
* when the page switches mode.
|
|
13
16
|
*
|
|
14
17
|
* Without `collapse-anchor` the bar takes a static state: compact when `text`
|
|
15
18
|
* is set (so the title shows in the title-group), non-compact otherwise (so
|
|
@@ -45,6 +48,7 @@ let NLDDTopTitleBar = class NLDDTopTitleBar extends LitElement {
|
|
|
45
48
|
this._anchorElement = null;
|
|
46
49
|
this._activeScrollTarget = null;
|
|
47
50
|
this._scrollTargetStyleObserver = null;
|
|
51
|
+
this._pageModeObserver = null;
|
|
48
52
|
this._boundOnScroll = this._onScroll.bind(this);
|
|
49
53
|
this._onToolbarSlotChange = (e) => {
|
|
50
54
|
const slot = e.target;
|
|
@@ -104,8 +108,33 @@ let NLDDTopTitleBar = class NLDDTopTitleBar extends LitElement {
|
|
|
104
108
|
?? root.querySelector(`#${this.collapseAnchor}`);
|
|
105
109
|
if (!this._anchorElement)
|
|
106
110
|
return;
|
|
111
|
+
this._wireScrollTarget();
|
|
112
|
+
// The page's scroll target flips when it switches scroll mode (nested
|
|
113
|
+
// inner scroller <-> the document, derived on resize by nldd-app-view).
|
|
114
|
+
// Re-wire onto the new target whenever the page reflects a new
|
|
115
|
+
// [data-scroll], so the collapse keeps tracking the live scroller.
|
|
116
|
+
if (this._pageElement) {
|
|
117
|
+
this._pageModeObserver = new MutationObserver(() => this._wireScrollTarget());
|
|
118
|
+
this._pageModeObserver.observe(this._pageElement, {
|
|
119
|
+
attributes: true,
|
|
120
|
+
attributeFilter: ['data-scroll'],
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Initial check after layout is complete
|
|
124
|
+
this.updateComplete.then(() => this._onScroll());
|
|
125
|
+
}
|
|
126
|
+
// (Re)attach the scroll + style listeners to the page's current scroll
|
|
127
|
+
// target — the host document in root-scroll mode, the page (or its inner
|
|
128
|
+
// scroller) in nested mode.
|
|
129
|
+
_wireScrollTarget() {
|
|
130
|
+
this._activeScrollTarget?.removeEventListener('scroll', this._boundOnScroll);
|
|
131
|
+
this._scrollTargetStyleObserver?.disconnect();
|
|
132
|
+
this._scrollTargetStyleObserver = null;
|
|
107
133
|
const page = this._pageElement;
|
|
108
|
-
|
|
134
|
+
// scrollEventTarget (not scrollTarget): in root-scroll mode the viewport's
|
|
135
|
+
// scroll event fires on `window`, not on document.scrollingElement, so a
|
|
136
|
+
// listener on the latter would never fire and the bar would never collapse.
|
|
137
|
+
this._activeScrollTarget = page ? page.scrollEventTarget : window;
|
|
109
138
|
this._activeScrollTarget.addEventListener('scroll', this._boundOnScroll, { passive: true });
|
|
110
139
|
// nldd-page sets padding-top on its scroll target asynchronously
|
|
111
140
|
// (ResizeObserver on the header). If our initial _onScroll runs
|
|
@@ -120,8 +149,7 @@ let NLDDTopTitleBar = class NLDDTopTitleBar extends LitElement {
|
|
|
120
149
|
attributeFilter: ['style'],
|
|
121
150
|
});
|
|
122
151
|
}
|
|
123
|
-
|
|
124
|
-
this.updateComplete.then(() => this._onScroll());
|
|
152
|
+
this._onScroll();
|
|
125
153
|
}
|
|
126
154
|
_teardownAnchor() {
|
|
127
155
|
this._activeScrollTarget?.removeEventListener('scroll', this._boundOnScroll);
|
|
@@ -129,13 +157,21 @@ let NLDDTopTitleBar = class NLDDTopTitleBar extends LitElement {
|
|
|
129
157
|
this._anchorElement = null;
|
|
130
158
|
this._scrollTargetStyleObserver?.disconnect();
|
|
131
159
|
this._scrollTargetStyleObserver = null;
|
|
160
|
+
this._pageModeObserver?.disconnect();
|
|
161
|
+
this._pageModeObserver = null;
|
|
132
162
|
}
|
|
133
163
|
_onScroll() {
|
|
134
164
|
if (!this._anchorElement || !this._pageElement)
|
|
135
165
|
return;
|
|
136
|
-
|
|
166
|
+
// Collapse once the anchor reaches this bar's own top edge. Measuring the
|
|
167
|
+
// bar (not the page) keeps this correct in both scroll modes: in nested
|
|
168
|
+
// scroll the bar is pinned at the page top, so its top equals the page top
|
|
169
|
+
// (unchanged behaviour); in root-scroll mode the bar is position:sticky
|
|
170
|
+
// against the document while the page element itself scrolls away, so the
|
|
171
|
+
// page top is no longer the sticky line — the bar's own top still is.
|
|
172
|
+
const barTop = this.getBoundingClientRect().top;
|
|
137
173
|
const anchorTop = this._anchorElement.getBoundingClientRect().top;
|
|
138
|
-
this.classList.toggle('is-compact', anchorTop <=
|
|
174
|
+
this.classList.toggle('is-compact', anchorTop <= barTop);
|
|
139
175
|
}
|
|
140
176
|
_handleBack() {
|
|
141
177
|
if (this.backHref)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"top-title-bar.js","sourceRoot":"","sources":["../../../../src/components/navigation/top-title-bar/top-title-bar.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"top-title-bar.js","sourceRoot":"","sources":["../../../../src/components/navigation/top-title-bar/top-title-bar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ReactiveController, ReactiveControllerHost } from 'lit';
|
|
2
|
+
export type ScrollMode = 'nested' | 'root';
|
|
3
|
+
/** Bubbling + composed event a horizontal split view fires when it collapses to
|
|
4
|
+
* (or expands out of) a single visible column. nldd-app-view listens for it to
|
|
5
|
+
* derive the document-vs-nested scroll mode. */
|
|
6
|
+
export declare const SINGLE_COLUMN_CHANGE_EVENT = "nldd-single-column-change";
|
|
7
|
+
export interface SingleColumnChangeDetail {
|
|
8
|
+
singleColumn: boolean;
|
|
9
|
+
}
|
|
10
|
+
/** A layout layer that reflects the upstream-derived scroll mode. */
|
|
11
|
+
export interface ScrollModeConsumer {
|
|
12
|
+
/**
|
|
13
|
+
* Apply the derived scroll mode. app-view passes the mode it derived so the
|
|
14
|
+
* consumer applies it directly; called with no argument (resize / no-app-view)
|
|
15
|
+
* it re-reads the inherited `--context-scroll-mode` instead.
|
|
16
|
+
*/
|
|
17
|
+
readScrollMode(mode?: ScrollMode): void;
|
|
18
|
+
}
|
|
19
|
+
/** nldd-app-view — derives the mode and pushes re-reads to its registered layers. */
|
|
20
|
+
export interface ScrollModeProvider {
|
|
21
|
+
registerScrollConsumer(consumer: ScrollModeConsumer): void;
|
|
22
|
+
unregisterScrollConsumer(consumer: ScrollModeConsumer): void;
|
|
23
|
+
}
|
|
24
|
+
/** Nearest ancestor app-view (light-DOM `closest`; slotted layers stay in the
|
|
25
|
+
* consumer's light tree so this reaches across the slot boundaries), or null
|
|
26
|
+
* when a layer is used stand-alone (e.g. a bare page in the docs). */
|
|
27
|
+
export declare function findScrollModeProvider(host: Element): ScrollModeProvider | null;
|
|
28
|
+
/**
|
|
29
|
+
* Reads the inherited `--context-scroll-mode` and reflects it to the host's
|
|
30
|
+
* `[data-scroll]` attribute so CSS can branch.
|
|
31
|
+
*
|
|
32
|
+
* In root-scroll mode the DOCUMENT scrolls (see nldd-app-view): every layout
|
|
33
|
+
* layer between the document and an nldd-page — app-view, the split views and
|
|
34
|
+
* their panes — must flow (overflow: visible) instead of clipping, so the page's
|
|
35
|
+
* sticky header/footer can stick against the document. Rather than duplicate the
|
|
36
|
+
* read-and-reflect logic in each of those components, they share this controller.
|
|
37
|
+
*
|
|
38
|
+
* The mode is derived upstream by nldd-app-view. When an app-view is present the
|
|
39
|
+
* host registers as a consumer and app-view pushes an authoritative re-read on
|
|
40
|
+
* every change (a bare `--context-scroll-mode` update would otherwise not reach
|
|
41
|
+
* the resize-polling layers in time — rAF runs before ResizeObserver). Without
|
|
42
|
+
* an app-view (a stand-alone page), it falls back to re-reading on window resize
|
|
43
|
+
* so a manual/media-query override still works. `nldd-page` keeps its own inline
|
|
44
|
+
* logic because it also has to re-wire scroll listeners.
|
|
45
|
+
*/
|
|
46
|
+
export declare class ScrollModeController implements ReactiveController, ScrollModeConsumer {
|
|
47
|
+
mode: ScrollMode;
|
|
48
|
+
private _host;
|
|
49
|
+
private _onChange?;
|
|
50
|
+
private _raf;
|
|
51
|
+
private _provider;
|
|
52
|
+
constructor(host: ReactiveControllerHost & HTMLElement, onChange?: (mode: ScrollMode) => void);
|
|
53
|
+
hostConnected(): void;
|
|
54
|
+
hostDisconnected(): void;
|
|
55
|
+
/**
|
|
56
|
+
* ScrollModeConsumer — nldd-app-view pushes the mode it derived. When a mode is
|
|
57
|
+
* passed it is applied directly; this is race-free, whereas re-reading
|
|
58
|
+
* `getComputedStyle` during a synchronous push can return a stale value for a
|
|
59
|
+
* deeply-nested host (the var may not have propagated through an ancestor's
|
|
60
|
+
* pending re-render yet). With no argument (resize / no app-view) the inherited
|
|
61
|
+
* var is re-read instead.
|
|
62
|
+
*/
|
|
63
|
+
readScrollMode(mode?: ScrollMode): void;
|
|
64
|
+
private _readVar;
|
|
65
|
+
private _onResize;
|
|
66
|
+
/** Re-read the inherited `--context-scroll-mode` (used on connect + resize). */
|
|
67
|
+
read(): void;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=scroll-mode-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-mode-controller.d.ts","sourceRoot":"","sources":["../../src/utilities/scroll-mode-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3C;;iDAEiD;AACjD,eAAO,MAAM,0BAA0B,8BAA8B,CAAC;AAEtE,MAAM,WAAW,wBAAwB;IACxC,YAAY,EAAE,OAAO,CAAC;CACtB;AAED,qEAAqE;AACrE,MAAM,WAAW,kBAAkB;IAClC;;;;OAIG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CACxC;AAED,qFAAqF;AACrF,MAAM,WAAW,kBAAkB;IAClC,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC3D,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC7D;AAED;;uEAEuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAG/E;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB,EAAE,kBAAkB;IAClF,IAAI,EAAE,UAAU,CAAY;IAE5B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,SAAS,CAAC,CAA6B;IAC/C,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,SAAS,CAAmC;gBAExC,IAAI,EAAE,sBAAsB,GAAG,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI;IAM7F,aAAa,IAAI,IAAI;IAkBrB,gBAAgB,IAAI,IAAI;IAUxB;;;;;;;OAOG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAQvC,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS,CAMf;IAEF,gFAAgF;IAChF,IAAI,IAAI,IAAI;CAGZ"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/** Bubbling + composed event a horizontal split view fires when it collapses to
|
|
2
|
+
* (or expands out of) a single visible column. nldd-app-view listens for it to
|
|
3
|
+
* derive the document-vs-nested scroll mode. */
|
|
4
|
+
export const SINGLE_COLUMN_CHANGE_EVENT = 'nldd-single-column-change';
|
|
5
|
+
/** Nearest ancestor app-view (light-DOM `closest`; slotted layers stay in the
|
|
6
|
+
* consumer's light tree so this reaches across the slot boundaries), or null
|
|
7
|
+
* when a layer is used stand-alone (e.g. a bare page in the docs). */
|
|
8
|
+
export function findScrollModeProvider(host) {
|
|
9
|
+
const el = host.closest?.('nldd-app-view');
|
|
10
|
+
return el && 'registerScrollConsumer' in el ? el : null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Reads the inherited `--context-scroll-mode` and reflects it to the host's
|
|
14
|
+
* `[data-scroll]` attribute so CSS can branch.
|
|
15
|
+
*
|
|
16
|
+
* In root-scroll mode the DOCUMENT scrolls (see nldd-app-view): every layout
|
|
17
|
+
* layer between the document and an nldd-page — app-view, the split views and
|
|
18
|
+
* their panes — must flow (overflow: visible) instead of clipping, so the page's
|
|
19
|
+
* sticky header/footer can stick against the document. Rather than duplicate the
|
|
20
|
+
* read-and-reflect logic in each of those components, they share this controller.
|
|
21
|
+
*
|
|
22
|
+
* The mode is derived upstream by nldd-app-view. When an app-view is present the
|
|
23
|
+
* host registers as a consumer and app-view pushes an authoritative re-read on
|
|
24
|
+
* every change (a bare `--context-scroll-mode` update would otherwise not reach
|
|
25
|
+
* the resize-polling layers in time — rAF runs before ResizeObserver). Without
|
|
26
|
+
* an app-view (a stand-alone page), it falls back to re-reading on window resize
|
|
27
|
+
* so a manual/media-query override still works. `nldd-page` keeps its own inline
|
|
28
|
+
* logic because it also has to re-wire scroll listeners.
|
|
29
|
+
*/
|
|
30
|
+
export class ScrollModeController {
|
|
31
|
+
constructor(host, onChange) {
|
|
32
|
+
this.mode = 'nested';
|
|
33
|
+
this._raf = 0;
|
|
34
|
+
this._provider = null;
|
|
35
|
+
this._onResize = () => {
|
|
36
|
+
if (this._raf)
|
|
37
|
+
return;
|
|
38
|
+
this._raf = requestAnimationFrame(() => {
|
|
39
|
+
this._raf = 0;
|
|
40
|
+
this.read();
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
this._host = host;
|
|
44
|
+
this._onChange = onChange;
|
|
45
|
+
host.addController(this);
|
|
46
|
+
}
|
|
47
|
+
hostConnected() {
|
|
48
|
+
this._provider = findScrollModeProvider(this._host);
|
|
49
|
+
if (this._provider) {
|
|
50
|
+
// Push-driven: the app-view pushes the authoritative mode on register
|
|
51
|
+
// and on every change. We deliberately do NOT self-read the var here —
|
|
52
|
+
// a getComputedStyle read while a freshly (re)mounted host settles can
|
|
53
|
+
// be stale (the inherited var not yet propagated), which stuck a layer
|
|
54
|
+
// re-mounted on navigation in the wrong mode until a resize.
|
|
55
|
+
this._provider.registerScrollConsumer(this);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Stand-alone (no app-view, e.g. docs): the mode comes from the
|
|
59
|
+
// inherited var; re-read on resize since it can flip at a media-query
|
|
60
|
+
// breakpoint.
|
|
61
|
+
window.addEventListener('resize', this._onResize, { passive: true });
|
|
62
|
+
this.read();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
hostDisconnected() {
|
|
66
|
+
if (this._provider) {
|
|
67
|
+
this._provider.unregisterScrollConsumer(this);
|
|
68
|
+
this._provider = null;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
window.removeEventListener('resize', this._onResize);
|
|
72
|
+
}
|
|
73
|
+
if (this._raf)
|
|
74
|
+
cancelAnimationFrame(this._raf);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* ScrollModeConsumer — nldd-app-view pushes the mode it derived. When a mode is
|
|
78
|
+
* passed it is applied directly; this is race-free, whereas re-reading
|
|
79
|
+
* `getComputedStyle` during a synchronous push can return a stale value for a
|
|
80
|
+
* deeply-nested host (the var may not have propagated through an ancestor's
|
|
81
|
+
* pending re-render yet). With no argument (resize / no app-view) the inherited
|
|
82
|
+
* var is re-read instead.
|
|
83
|
+
*/
|
|
84
|
+
readScrollMode(mode) {
|
|
85
|
+
const next = mode ?? this._readVar();
|
|
86
|
+
if (next === this.mode)
|
|
87
|
+
return;
|
|
88
|
+
this.mode = next;
|
|
89
|
+
this._host.dataset.scroll = next;
|
|
90
|
+
this._onChange?.(next);
|
|
91
|
+
}
|
|
92
|
+
_readVar() {
|
|
93
|
+
const raw = getComputedStyle(this._host).getPropertyValue('--context-scroll-mode').trim();
|
|
94
|
+
return raw === 'root' ? 'root' : 'nested';
|
|
95
|
+
}
|
|
96
|
+
/** Re-read the inherited `--context-scroll-mode` (used on connect + resize). */
|
|
97
|
+
read() {
|
|
98
|
+
this.readScrollMode();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=scroll-mode-controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scroll-mode-controller.js","sourceRoot":"","sources":["../../src/utilities/scroll-mode-controller.ts"],"names":[],"mappings":"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"}
|