@nldd/design-system 0.8.87 → 0.8.88

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 (32) hide show
  1. package/custom-elements.json +2 -2
  2. package/dist/components/components.js +123 -30
  3. package/dist/components/layout/page/page.d.ts +23 -5
  4. package/dist/components/layout/page/page.d.ts.map +1 -1
  5. package/dist/components/layout/page/page.js +39 -34
  6. package/dist/components/layout/page/page.js.map +1 -1
  7. package/dist/components/layout/page/page.styles.d.ts.map +1 -1
  8. package/dist/components/layout/page/page.styles.js +2 -0
  9. package/dist/components/layout/page/page.styles.js.map +1 -1
  10. package/dist/components/layout/sheet/sheet.template.d.ts.map +1 -1
  11. package/dist/components/layout/sheet/sheet.template.js +3 -0
  12. package/dist/components/layout/sheet/sheet.template.js.map +1 -1
  13. package/dist/components/layout/window/window.template.d.ts.map +1 -1
  14. package/dist/components/layout/window/window.template.js +3 -0
  15. package/dist/components/layout/window/window.template.js.map +1 -1
  16. package/dist/components/navigation/menu-bar/menu-bar.d.ts +4 -2
  17. package/dist/components/navigation/menu-bar/menu-bar.d.ts.map +1 -1
  18. package/dist/components/navigation/menu-bar/menu-bar.js +4 -2
  19. package/dist/components/navigation/menu-bar/menu-bar.js.map +1 -1
  20. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.d.ts.map +1 -1
  21. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.js +3 -0
  22. package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.js.map +1 -1
  23. package/dist/components/status-and-feedback/notification/notification-region.d.ts.map +1 -1
  24. package/dist/components/status-and-feedback/notification/notification-region.js +74 -1
  25. package/dist/components/status-and-feedback/notification/notification-region.js.map +1 -1
  26. package/dist/components/status-and-feedback/notification/notification.d.ts +11 -0
  27. package/dist/components/status-and-feedback/notification/notification.d.ts.map +1 -1
  28. package/dist/components/status-and-feedback/notification/notification.js +13 -0
  29. package/dist/components/status-and-feedback/notification/notification.js.map +1 -1
  30. package/dist/nldd.min.js +33 -22
  31. package/dist/types/vue.d.ts +2 -2
  32. package/package.json +1 -1
@@ -27275,7 +27275,7 @@
27275
27275
  "declarations": [
27276
27276
  {
27277
27277
  "kind": "class",
27278
- "description": "A page layout with optional sticky header and footer. Without sticky-header, the host is the scroll container and the header is in normal flow. With sticky-header, the header becomes absolute and .page__scroll takes over scrolling. A ResizeObserver on the header sets padding-top on the scroll wrapper (only when not scrolled). In root-scroll mode (--context-scroll-mode: root, derived upstream by nldd-app-view) the page stops owning a scroller: the document scrolls and the sticky header/footer stick against the document, offset by --context-inset-top/bottom. The mode is read on connect/resize and reflected to [data-scroll] so the CSS can branch. The page passes those insets on to its own content, with its sticky header and footer added: anything sticky inside (an nldd-sidebar-section, a sticky table head) reads --context-inset-top / --context-inset-bottom and clears every bar above and below it without being told a number. The heights are measured, because a top title bar shrinks as you scroll past its anchor. While the page owns the scroller, only its own bars count: the chrome above the page sits outside that scroller and does not push sticky content down.",
27278
+ "description": "A page layout with optional sticky header and footer. Without sticky-header, the host is the scroll container and the header is in normal flow. With sticky-header, the header becomes absolute and .page__scroll takes over scrolling, padded by the measured header height. That padding freezes once you scroll, so a collapsing bar cannot drag the content up under the cursor. In root-scroll mode (--context-scroll-mode: root, derived upstream by nldd-app-view) the page stops owning a scroller: the document scrolls and the sticky header/footer stick against the document, offset by --context-inset-top/bottom. The mode is read on connect/resize and reflected to [data-scroll] so the CSS can branch. The page passes those insets on to its own content, with its sticky header and footer added: anything sticky inside (an nldd-sidebar-section, a sticky table head) reads --context-inset-top / --context-inset-bottom and clears every bar above and below it without being told a number. The heights are measured, because a top title bar shrinks as you scroll past its anchor. While the page owns the scroller, only its own bars count: the chrome above the page sits outside that scroller and does not push sticky content down.",
27279
27279
  "name": "NLDDPage",
27280
27280
  "members": [
27281
27281
  {
@@ -35430,7 +35430,7 @@
35430
35430
  "declarations": [
35431
35431
  {
35432
35432
  "kind": "class",
35433
- "description": "A short message that arrives over the interface and leaves on its own: a save that worked, a request that failed. Not a banner, which stands in the page and stays there — this one floats, stacks, and goes away. It places itself. Write it wherever it belongs in your code and it moves to one shared region: top right from md, full width across the top below that. Nothing about the position is settable, so notifications from anywhere in an application land in the same place and stack in the same order. More than one is a deck, not a list: the front one is readable and the older ones peek out below it, so a burst of messages takes the room of roughly one. The newest is in front. Behind it a notification is a bare surface, cut to the height of the one in front; dismiss the front and it slides up into the place that came free while its message fades in, because it was standing there all along. Under the front notification sits a strip as wide as the deck and as tall as the deck is when it fans out. Pointing at it fans the deck out to fill it, which is the only hint that there is more here than the message you can read; clicking it, or moving focus into the region, lays the whole deck out as a list. Clicking or tabbing away puts it back. The notification itself is not a button: a click on the message you are reading does nothing. Only the front of the deck counts down, and only while the deck is closed: open means someone is reading. The rest wait, so nothing disappears from under the one you are reading. `critical` never leaves on its own: a failure is worth reading, and the count-down would take it away while you were. That also keeps this within WCAG 2.2.1, which allows a time limit when what disappears is not essential. The clock pauses while a pointer moves over the notification and while focus is inside it, and resumes where it left off rather than starting over. A pointer that merely happens to rest where the notification appears does not count: it never moved, so nobody is reading. role follows the variant: `critical` becomes role=\"alert\", the rest role=\"status\". Focus never moves on its own. Escape dismisses the notification that focus is in.",
35433
+ "description": "A short message that arrives over the interface and leaves on its own: a save that worked, a request that failed. Not a banner, which stands in the page and stays there — this one floats, stacks, and goes away. It places itself. Write it wherever it belongs in your code and it moves to one shared region: top right from md, full width across the top below that. Nothing about the position is settable, so notifications from anywhere in an application land in the same place and stack in the same order. A modal overlay is the one thing that moves it. An nldd-sheet, nldd-window or nldd-modal-dialog paints in the browser's top layer, above the whole page and out of reach of any z-index, and while one is open everything outside it is inert. So the region goes in: into the topmost overlay that is open, and back down as they close. A notification already on screen travels with it, and one raised from inside a sheet is readable and reachable where it is raised. More than one is a deck, not a list: the front one is readable and the older ones peek out below it, so a burst of messages takes the room of roughly one. The newest is in front. Behind it a notification is a bare surface, cut to the height of the one in front; dismiss the front and it slides up into the place that came free while its message fades in, because it was standing there all along. Under the front notification sits a strip as wide as the deck and as tall as the deck is when it fans out. Pointing at it fans the deck out to fill it, which is the only hint that there is more here than the message you can read; clicking it, or moving focus into the region, lays the whole deck out as a list. Clicking or tabbing away puts it back. The notification itself is not a button: a click on the message you are reading does nothing. Only the front of the deck counts down, and only while the deck is closed: open means someone is reading. The rest wait, so nothing disappears from under the one you are reading. `critical` never leaves on its own: a failure is worth reading, and the count-down would take it away while you were. That also keeps this within WCAG 2.2.1, which allows a time limit when what disappears is not essential. The clock pauses while a pointer moves over the notification and while focus is inside it, and resumes where it left off rather than starting over. A pointer that merely happens to rest where the notification appears does not count: it never moved, so nobody is reading. role follows the variant: `critical` becomes role=\"alert\", the rest role=\"status\". Focus never moves on its own. Escape dismisses the notification that focus is in.",
35434
35434
  "name": "NLDDNotification",
35435
35435
  "members": [
35436
35436
  {
@@ -38398,6 +38398,7 @@ var pageStyles = css`
38398
38398
  --_outer-inset-bottom: var(--context-inset-bottom, 0px);
38399
38399
  --_header-height: 0px;
38400
38400
  --_footer-height: 0px;
38401
+ --_header-full-height: 0px;
38401
38402
  /* Set from JS while the page owns the scroller. initial, not a length, so
38402
38403
  the fallback stands when the document scrolls instead. */
38403
38404
  --_scroll-height: initial;
@@ -38551,6 +38552,7 @@ var pageStyles = css`
38551
38552
  :host(:not([data-scroll="root"])) .page__scroll {
38552
38553
  --context-inset-top: var(--_header-height);
38553
38554
  --context-inset-bottom: var(--_footer-height);
38555
+ padding-top: var(--_header-full-height);
38554
38556
  }
38555
38557
 
38556
38558
  :host([sticky-header]) .page__scroll {
@@ -38626,8 +38628,9 @@ function pageTemplate(component) {
38626
38628
  * A page layout with optional sticky header and footer.
38627
38629
  * Without sticky-header, the host is the scroll container and the header
38628
38630
  * is in normal flow. With sticky-header, the header becomes absolute and
38629
- * .page__scroll takes over scrolling. A ResizeObserver on the header
38630
- * sets padding-top on the scroll wrapper (only when not scrolled).
38631
+ * .page__scroll takes over scrolling, padded by the measured header height.
38632
+ * That padding freezes once you scroll, so a collapsing bar cannot drag the
38633
+ * content up under the cursor.
38631
38634
  *
38632
38635
  * In root-scroll mode (--context-scroll-mode: root, derived upstream by
38633
38636
  * nldd-app-view) the page stops owning a scroller: the document scrolls and the
@@ -38665,8 +38668,8 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38665
38668
  this._scrollMode = "nested";
38666
38669
  this._scrollTarget = null;
38667
38670
  this._scrollProvider = null;
38668
- this._headerObserver = null;
38669
38671
  this._insetObserver = null;
38672
+ this._headerFullHeight = 0;
38670
38673
  this._mainSlot = null;
38671
38674
  this._resizeRaf = 0;
38672
38675
  this._onResize = () => {
@@ -38741,7 +38744,6 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38741
38744
  this._scrollProvider = null;
38742
38745
  if (this._resizeRaf) cancelAnimationFrame(this._resizeRaf);
38743
38746
  this._teardownScrollListener();
38744
- this._teardownHeaderObserver();
38745
38747
  this._teardownInsetObserver();
38746
38748
  this._teardownMainSlotListener();
38747
38749
  }
@@ -38769,10 +38771,8 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38769
38771
  }
38770
38772
  _configureScroll() {
38771
38773
  this._teardownScrollListener();
38772
- this._teardownHeaderObserver();
38773
- if (this._scrollEl) this._scrollEl.style.paddingTop = "";
38774
38774
  this._setupScrollListener();
38775
- if (this.stickyHeader && !this._isRoot) this._setupHeaderObserver();
38775
+ this._headerFullHeight = 0;
38776
38776
  this._setupInsetObserver();
38777
38777
  this._onScroll();
38778
38778
  }
@@ -38784,6 +38784,11 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38784
38784
  * its anchor, and a consumer that had written the number down would be wrong
38785
38785
  * from that moment on. A bar that is not sticky scrolls away and adds
38786
38786
  * nothing, so it stays at zero.
38787
+ *
38788
+ * It also measures the padding the scroll wrapper reserves for an absolute
38789
+ * sticky header. One observer owns both, because two of them writing styles
38790
+ * that resize what the other watches is what leaves ResizeObserver
38791
+ * notifications undelivered.
38787
38792
  */
38788
38793
  _setupInsetObserver() {
38789
38794
  this._teardownInsetObserver();
@@ -38791,10 +38796,11 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38791
38796
  const footer = this._footerEl;
38792
38797
  if (!header || !footer) return;
38793
38798
  const publish = () => {
38794
- this.style.setProperty("--_header-height", `${this.stickyHeader ? header.offsetHeight : 0}px`);
38795
- this.style.setProperty("--_footer-height", `${this.stickyFooter ? footer.offsetHeight : 0}px`);
38799
+ this._publish("--_header-height", `${this.stickyHeader ? header.offsetHeight : 0}px`);
38800
+ this._publish("--_footer-height", `${this.stickyFooter ? footer.offsetHeight : 0}px`);
38801
+ this._publish("--_header-full-height", `${this._measureHeaderFullHeight(header)}px`);
38796
38802
  if (this._isRoot) this.style.removeProperty("--_scroll-height");
38797
- else this.style.setProperty("--_scroll-height", `${this._scrollEl?.clientHeight ?? 0}px`);
38803
+ else this._publish("--_scroll-height", `${this._scrollEl?.clientHeight ?? 0}px`);
38798
38804
  };
38799
38805
  publish();
38800
38806
  this._insetObserver = new ResizeObserver(publish);
@@ -38808,6 +38814,27 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38808
38814
  this._insetObserver = null;
38809
38815
  }
38810
38816
  }
38817
+ /**
38818
+ * Writes a published variable only when it changes. These values size the
38819
+ * elements the observer watches, so a rewrite feeds the callback its own
38820
+ * next notification, which is what Chromium reports as "ResizeObserver
38821
+ * loop completed with undelivered notifications".
38822
+ */
38823
+ _publish(name, value) {
38824
+ if (this.style.getPropertyValue(name) === value) return;
38825
+ this.style.setProperty(name, value);
38826
+ }
38827
+ /**
38828
+ * The header at its full height: the last measurement taken at scroll top.
38829
+ * A top title bar shrinks as you pass its anchor, and the space reserved for
38830
+ * it must not shrink along, or the content it starts under is dragged up
38831
+ * from under the cursor. Which mode reserves that space is the CSS's call.
38832
+ */
38833
+ _measureHeaderFullHeight(header) {
38834
+ if (!this.stickyHeader) return 0;
38835
+ if (this.scrollTarget.scrollTop === 0) this._headerFullHeight = header.offsetHeight;
38836
+ return this._headerFullHeight;
38837
+ }
38811
38838
  _setupScrollListener() {
38812
38839
  const target = this.scrollEventTarget;
38813
38840
  target.addEventListener("scroll", this._onScroll, { passive: true });
@@ -38819,23 +38846,6 @@ var NLDDPage = (_NLDDPage = class NLDDPage extends LitElement {
38819
38846
  this._scrollTarget = null;
38820
38847
  }
38821
38848
  }
38822
- _setupHeaderObserver() {
38823
- this._teardownHeaderObserver();
38824
- const header = this._headerEl;
38825
- const scroll = this._scrollEl;
38826
- if (!header || !scroll) return;
38827
- this._headerObserver = new ResizeObserver(() => {
38828
- if (scroll.scrollTop > 0) return;
38829
- scroll.style.paddingTop = `${header.offsetHeight}px`;
38830
- });
38831
- this._headerObserver.observe(header);
38832
- }
38833
- _teardownHeaderObserver() {
38834
- if (this._headerObserver) {
38835
- this._headerObserver.disconnect();
38836
- this._headerObserver = null;
38837
- }
38838
- }
38839
38849
  _setupMainSlotListener() {
38840
38850
  this._teardownMainSlotListener();
38841
38851
  const slot = this.shadowRoot?.querySelector("slot:not([name])") ?? null;
@@ -41155,6 +41165,9 @@ function sheetTemplate(component) {
41155
41165
  <div class="sheet__body">
41156
41166
  <slot></slot>
41157
41167
  </div>
41168
+ <!-- Inside the dialog, so it escapes the inertness a modal imposes on
41169
+ everything outside it. Plumbing, not consumer API. -->
41170
+ <slot name="notifications"></slot>
41158
41171
  </dialog>
41159
41172
  `;
41160
41173
  }
@@ -42611,6 +42624,9 @@ function windowTemplate(component) {
42611
42624
  <div class="window__body">
42612
42625
  <slot></slot>
42613
42626
  </div>
42627
+ <!-- Inside the dialog, so it escapes the inertness a modal imposes on
42628
+ everything outside it. Plumbing, not consumer API. -->
42629
+ <slot name="notifications"></slot>
42614
42630
  </dialog>
42615
42631
  `;
42616
42632
  }
@@ -45997,8 +46013,10 @@ var NLDDMenuBar = (_NLDDMenuBar = class NLDDMenuBar extends withTranslations(Lit
45997
46013
  }
45998
46014
  /**
45999
46015
  * Calculate which slotted items overflow and hide them behind an overflow button.
46000
- * Note: not unit-tested — JSDOM lacks layout support (offsetWidth, clientWidth).
46001
- * Covered by visual/E2E testing via Storybook stories.
46016
+ * Tested both ways in menu-bar.test.ts: with real layout for the whole path, and
46017
+ * with mocked widths for the arithmetic. The space reserved for the button needs
46018
+ * the mocks — the button is a shrinkable flex item, so the rendered layout
46019
+ * absorbs whatever the arithmetic leaves over and always looks right.
46002
46020
  */
46003
46021
  _updateOverflow() {
46004
46022
  const overflowButton = this._overflowButton;
@@ -49992,6 +50010,9 @@ function modalDialogTemplate(component) {
49992
50010
  <slot></slot>
49993
50011
  <slot slot="actions" name="actions"></slot>
49994
50012
  </nldd-inline-dialog>
50013
+ <!-- Inside the dialog, so it escapes the inertness a modal imposes on
50014
+ everything outside it. Plumbing, not consumer API. -->
50015
+ <slot name="notifications"></slot>
49995
50016
  </dialog>
49996
50017
  `;
49997
50018
  }
@@ -50806,6 +50827,63 @@ var REGION_ID = "nldd-notification-region";
50806
50827
  var MAX_DEPTH = 2;
50807
50828
  var frontObserver = null;
50808
50829
  var expanded = false;
50830
+ /**
50831
+ * A modal overlay paints in the browser's top layer, above the whole document
50832
+ * and out of reach of any z-index, and while one is open everything outside it
50833
+ * is inert: a region left on the body is not merely behind the sheet, it is
50834
+ * unclickable even once you put it in the top layer yourself. So the region
50835
+ * travels. It lives in the topmost open overlay and sinks back as they close,
50836
+ * which is also what makes a notification raised before the sheet opened come
50837
+ * along rather than stay behind it.
50838
+ *
50839
+ * Innermost last. Entries are verified on read rather than trusted, so an
50840
+ * overlay torn out of the DOM without closing cannot strand the region.
50841
+ */
50842
+ var overlays = [];
50843
+ var watchingOverlays = false;
50844
+ function modalOf(host) {
50845
+ const dialog = host.shadowRoot?.querySelector("dialog") ?? null;
50846
+ return dialog?.matches(":modal") ? dialog : null;
50847
+ }
50848
+ function regionHost() {
50849
+ while (overlays.length) {
50850
+ const top = overlays[overlays.length - 1];
50851
+ if (top.isConnected && modalOf(top)) return top;
50852
+ overlays.pop();
50853
+ }
50854
+ return document.body;
50855
+ }
50856
+ function placeRegion(region) {
50857
+ const host = regionHost();
50858
+ if (region.parentElement === host) return;
50859
+ if (host === document.body) region.removeAttribute("slot");
50860
+ else region.setAttribute("slot", "notifications");
50861
+ const carried = notifications(region);
50862
+ carried.forEach((item) => item._setMoving?.(true));
50863
+ host.appendChild(region);
50864
+ carried.forEach((item) => item._setMoving?.(false));
50865
+ }
50866
+ function relocateRegion() {
50867
+ const region = document.getElementById(REGION_ID);
50868
+ if (region) placeRegion(region);
50869
+ }
50870
+ function watchOverlays() {
50871
+ if (watchingOverlays) return;
50872
+ watchingOverlays = true;
50873
+ document.addEventListener("open", (event) => {
50874
+ const host = event.target;
50875
+ if (!host?.shadowRoot || !modalOf(host)) return;
50876
+ if (!overlays.includes(host)) overlays.push(host);
50877
+ relocateRegion();
50878
+ });
50879
+ document.addEventListener("close", (event) => {
50880
+ const host = event.target;
50881
+ const at = host ? overlays.indexOf(host) : -1;
50882
+ if (at === -1) return;
50883
+ overlays.splice(at, 1);
50884
+ relocateRegion();
50885
+ }, true);
50886
+ }
50809
50887
  function notifications(region) {
50810
50888
  return Array.from(region.querySelectorAll(":scope > nldd-notification"));
50811
50889
  }
@@ -50838,7 +50916,7 @@ function ensureRegion(label) {
50838
50916
  region.setAttribute("role", "region");
50839
50917
  region.setAttribute("aria-label", label);
50840
50918
  region.appendChild(makeExpander(region));
50841
- document.body.appendChild(region);
50919
+ placeRegion(region);
50842
50920
  return region;
50843
50921
  }
50844
50922
  /**
@@ -50868,7 +50946,9 @@ function makeExpander(region) {
50868
50946
  /** Newest in front: what just happened is what you want to read, and the older
50869
50947
  * ones slide back and downwards behind it. */
50870
50948
  function joinRegion(notification, label) {
50949
+ watchOverlays();
50871
50950
  const region = ensureRegion(label);
50951
+ placeRegion(region);
50872
50952
  notification.style.pointerEvents = "auto";
50873
50953
  region.prepend(notification);
50874
50954
  syncStack(region);
@@ -51003,6 +51083,13 @@ var nlddNotificationTranslations = {
51003
51083
  * Nothing about the position is settable, so notifications from anywhere in an
51004
51084
  * application land in the same place and stack in the same order.
51005
51085
  *
51086
+ * A modal overlay is the one thing that moves it. An nldd-sheet, nldd-window or
51087
+ * nldd-modal-dialog paints in the browser's top layer, above the whole page and
51088
+ * out of reach of any z-index, and while one is open everything outside it is
51089
+ * inert. So the region goes in: into the topmost overlay that is open, and back
51090
+ * down as they close. A notification already on screen travels with it, and one
51091
+ * raised from inside a sheet is readable and reachable where it is raised.
51092
+ *
51006
51093
  * ## The stack
51007
51094
  * More than one is a deck, not a list: the front one is readable and the older
51008
51095
  * ones peek out below it, so a burst of messages takes the room of roughly one.
@@ -51155,6 +51242,12 @@ var NLDDNotification = (_NLDDNotification = class NLDDNotification extends withT
51155
51242
  if (changed.has("variant")) this.setAttribute("role", this.variant === "critical" ? "alert" : "status");
51156
51243
  if (changed.has("duration")) this._remainingDuration = this.duration;
51157
51244
  }
51245
+ /** Called by the region while it carries this notification to another
51246
+ * parent. A move disconnects the element, and without this the
51247
+ * notification would read its own disconnect as having been dismissed. */
51248
+ _setMoving(moving) {
51249
+ this._moving = moving;
51250
+ }
51158
51251
  /** Called by the region. Starting the clock here rather than on connect is
51159
51252
  * the whole point: a notification three deep in the deck is not counting. */
51160
51253
  _setFront(isFront) {
@@ -4,8 +4,9 @@
4
4
  * A page layout with optional sticky header and footer.
5
5
  * Without sticky-header, the host is the scroll container and the header
6
6
  * is in normal flow. With sticky-header, the header becomes absolute and
7
- * .page__scroll takes over scrolling. A ResizeObserver on the header
8
- * sets padding-top on the scroll wrapper (only when not scrolled).
7
+ * .page__scroll takes over scrolling, padded by the measured header height.
8
+ * That padding freezes once you scroll, so a collapsing bar cannot drag the
9
+ * content up under the cursor.
9
10
  *
10
11
  * In root-scroll mode (--context-scroll-mode: root, derived upstream by
11
12
  * nldd-app-view) the page stops owning a scroller: the document scrolls and the
@@ -42,8 +43,8 @@ export declare class NLDDPage extends LitElement implements ScrollModeConsumer {
42
43
  private _scrollMode;
43
44
  private _scrollTarget;
44
45
  private _scrollProvider;
45
- private _headerObserver;
46
46
  private _insetObserver;
47
+ private _headerFullHeight;
47
48
  private _mainSlot;
48
49
  private _resizeRaf;
49
50
  private get _isRoot();
@@ -82,13 +83,30 @@ export declare class NLDDPage extends LitElement implements ScrollModeConsumer {
82
83
  * its anchor, and a consumer that had written the number down would be wrong
83
84
  * from that moment on. A bar that is not sticky scrolls away and adds
84
85
  * nothing, so it stays at zero.
86
+ *
87
+ * It also measures the padding the scroll wrapper reserves for an absolute
88
+ * sticky header. One observer owns both, because two of them writing styles
89
+ * that resize what the other watches is what leaves ResizeObserver
90
+ * notifications undelivered.
85
91
  */
86
92
  private _setupInsetObserver;
87
93
  private _teardownInsetObserver;
94
+ /**
95
+ * Writes a published variable only when it changes. These values size the
96
+ * elements the observer watches, so a rewrite feeds the callback its own
97
+ * next notification, which is what Chromium reports as "ResizeObserver
98
+ * loop completed with undelivered notifications".
99
+ */
100
+ private _publish;
101
+ /**
102
+ * The header at its full height: the last measurement taken at scroll top.
103
+ * A top title bar shrinks as you pass its anchor, and the space reserved for
104
+ * it must not shrink along, or the content it starts under is dragged up
105
+ * from under the cursor. Which mode reserves that space is the CSS's call.
106
+ */
107
+ private _measureHeaderFullHeight;
88
108
  private _setupScrollListener;
89
109
  private _teardownScrollListener;
90
- private _setupHeaderObserver;
91
- private _teardownHeaderObserver;
92
110
  private _onScroll;
93
111
  private _setupMainSlotListener;
94
112
  private _teardownMainSlotListener;
@@ -1 +1 @@
1
- {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAsB,MAAM,8CAA8C,CAAC;AAIvH,qBACa,QAAS,SAAQ,UAAW,YAAW,kBAAkB;IACrE,OAAgB,MAAM,0BAAc;IAGpC,YAAY,UAAS;IAGrB,YAAY,UAAS;IAGrB,UAAU,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAa;IAGtD,SAAS,UAAS;IAElB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,KAAK,OAAO,GAElB;IAED,IAAI,YAAY,IAAI,WAAW,CAG9B;IAED;;;;;;;;;OASG;IACH,IAAI,iBAAiB,IAAI,WAAW,CAGnC;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,SAAS,GAEpB;IAEQ,iBAAiB;IA6BjB,oBAAoB;IAYpB,YAAY;IAQZ,OAAO,CAAC,OAAO,EAAE,cAAc;IAIxC;;;OAGG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAQvC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,SAAS,CAMf;IAGF,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,SAAS,CAIf;IAOF,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,gBAAgB,CAOtB;IAEO,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,WAAW,EAAE,QAAQ,CAAC;KACtB;CACD"}
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page/page.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAsB,MAAM,8CAA8C,CAAC;AAIvH,qBACa,QAAS,SAAQ,UAAW,YAAW,kBAAkB;IACrE,OAAgB,MAAM,0BAAc;IAGpC,YAAY,UAAS;IAGrB,YAAY,UAAS;IAGrB,UAAU,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAa;IAGtD,SAAS,UAAS;IAElB,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,eAAe,CAAmC;IAC1D,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,KAAK,OAAO,GAElB;IAED,IAAI,YAAY,IAAI,WAAW,CAG9B;IAED;;;;;;;;;OASG;IACH,IAAI,iBAAiB,IAAI,WAAW,CAGnC;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,KAAK,SAAS,GAEpB;IAEQ,iBAAiB;IA6BjB,oBAAoB;IAWpB,YAAY;IAQZ,OAAO,CAAC,OAAO,EAAE,cAAc;IAIxC;;;OAGG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI;IAQvC,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,SAAS,CAMf;IAGF,OAAO,CAAC,gBAAgB;IAQxB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,sBAAsB;IAO9B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAMhC,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,SAAS,CAIf;IAOF,OAAO,CAAC,sBAAsB;IAS9B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,gBAAgB,CAOtB;IAEO,MAAM;CAGf;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,WAAW,EAAE,QAAQ,CAAC;KACtB;CACD"}
@@ -10,8 +10,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
10
10
  * A page layout with optional sticky header and footer.
11
11
  * Without sticky-header, the host is the scroll container and the header
12
12
  * is in normal flow. With sticky-header, the header becomes absolute and
13
- * .page__scroll takes over scrolling. A ResizeObserver on the header
14
- * sets padding-top on the scroll wrapper (only when not scrolled).
13
+ * .page__scroll takes over scrolling, padded by the measured header height.
14
+ * That padding freezes once you scroll, so a collapsing bar cannot drag the
15
+ * content up under the cursor.
15
16
  *
16
17
  * In root-scroll mode (--context-scroll-mode: root, derived upstream by
17
18
  * nldd-app-view) the page stops owning a scroller: the document scrolls and the
@@ -52,8 +53,8 @@ let NLDDPage = class NLDDPage extends LitElement {
52
53
  this._scrollMode = 'nested';
53
54
  this._scrollTarget = null;
54
55
  this._scrollProvider = null;
55
- this._headerObserver = null;
56
56
  this._insetObserver = null;
57
+ this._headerFullHeight = 0;
57
58
  this._mainSlot = null;
58
59
  this._resizeRaf = 0;
59
60
  this._onResize = () => {
@@ -150,7 +151,6 @@ let NLDDPage = class NLDDPage extends LitElement {
150
151
  if (this._resizeRaf)
151
152
  cancelAnimationFrame(this._resizeRaf);
152
153
  this._teardownScrollListener();
153
- this._teardownHeaderObserver();
154
154
  this._teardownInsetObserver();
155
155
  this._teardownMainSlotListener();
156
156
  }
@@ -187,17 +187,11 @@ let NLDDPage = class NLDDPage extends LitElement {
187
187
  this.dataset.scroll = next;
188
188
  return true;
189
189
  }
190
- // (Re)wire the scroll listener + header observer for the current mode.
190
+ // (Re)wire the scroll listener + inset observer for the current mode.
191
191
  _configureScroll() {
192
192
  this._teardownScrollListener();
193
- this._teardownHeaderObserver();
194
- if (this._scrollEl)
195
- this._scrollEl.style.paddingTop = '';
196
193
  this._setupScrollListener();
197
- // The absolute-header padding hack is nested-mode only; a root-mode
198
- // sticky header sits in flow and reserves its own space.
199
- if (this.stickyHeader && !this._isRoot)
200
- this._setupHeaderObserver();
194
+ this._headerFullHeight = 0;
201
195
  this._setupInsetObserver();
202
196
  this._onScroll();
203
197
  }
@@ -209,6 +203,11 @@ let NLDDPage = class NLDDPage extends LitElement {
209
203
  * its anchor, and a consumer that had written the number down would be wrong
210
204
  * from that moment on. A bar that is not sticky scrolls away and adds
211
205
  * nothing, so it stays at zero.
206
+ *
207
+ * It also measures the padding the scroll wrapper reserves for an absolute
208
+ * sticky header. One observer owns both, because two of them writing styles
209
+ * that resize what the other watches is what leaves ResizeObserver
210
+ * notifications undelivered.
212
211
  */
213
212
  _setupInsetObserver() {
214
213
  this._teardownInsetObserver();
@@ -217,8 +216,9 @@ let NLDDPage = class NLDDPage extends LitElement {
217
216
  if (!header || !footer)
218
217
  return;
219
218
  const publish = () => {
220
- this.style.setProperty('--_header-height', `${this.stickyHeader ? header.offsetHeight : 0}px`);
221
- this.style.setProperty('--_footer-height', `${this.stickyFooter ? footer.offsetHeight : 0}px`);
219
+ this._publish('--_header-height', `${this.stickyHeader ? header.offsetHeight : 0}px`);
220
+ this._publish('--_footer-height', `${this.stickyFooter ? footer.offsetHeight : 0}px`);
221
+ this._publish('--_header-full-height', `${this._measureHeaderFullHeight(header)}px`);
222
222
  // How tall the scroller actually is. Sticky content inside it caps its
223
223
  // height on what it can see, and while the page owns the scroller that
224
224
  // is not the viewport: the chrome around the page eats into it. In root
@@ -226,7 +226,7 @@ let NLDDPage = class NLDDPage extends LitElement {
226
226
  if (this._isRoot)
227
227
  this.style.removeProperty('--_scroll-height');
228
228
  else
229
- this.style.setProperty('--_scroll-height', `${this._scrollEl?.clientHeight ?? 0}px`);
229
+ this._publish('--_scroll-height', `${this._scrollEl?.clientHeight ?? 0}px`);
230
230
  };
231
231
  publish();
232
232
  this._insetObserver = new ResizeObserver(publish);
@@ -241,6 +241,30 @@ let NLDDPage = class NLDDPage extends LitElement {
241
241
  this._insetObserver = null;
242
242
  }
243
243
  }
244
+ /**
245
+ * Writes a published variable only when it changes. These values size the
246
+ * elements the observer watches, so a rewrite feeds the callback its own
247
+ * next notification, which is what Chromium reports as "ResizeObserver
248
+ * loop completed with undelivered notifications".
249
+ */
250
+ _publish(name, value) {
251
+ if (this.style.getPropertyValue(name) === value)
252
+ return;
253
+ this.style.setProperty(name, value);
254
+ }
255
+ /**
256
+ * The header at its full height: the last measurement taken at scroll top.
257
+ * A top title bar shrinks as you pass its anchor, and the space reserved for
258
+ * it must not shrink along, or the content it starts under is dragged up
259
+ * from under the cursor. Which mode reserves that space is the CSS's call.
260
+ */
261
+ _measureHeaderFullHeight(header) {
262
+ if (!this.stickyHeader)
263
+ return 0;
264
+ if (this.scrollTarget.scrollTop === 0)
265
+ this._headerFullHeight = header.offsetHeight;
266
+ return this._headerFullHeight;
267
+ }
244
268
  _setupScrollListener() {
245
269
  // Root mode scrolls the document (listen on window); nested mode scrolls
246
270
  // the host, or .page__scroll with a sticky header. See scrollEventTarget.
@@ -254,25 +278,6 @@ let NLDDPage = class NLDDPage extends LitElement {
254
278
  this._scrollTarget = null;
255
279
  }
256
280
  }
257
- _setupHeaderObserver() {
258
- this._teardownHeaderObserver();
259
- const header = this._headerEl;
260
- const scroll = this._scrollEl;
261
- if (!header || !scroll)
262
- return;
263
- this._headerObserver = new ResizeObserver(() => {
264
- if (scroll.scrollTop > 0)
265
- return;
266
- scroll.style.paddingTop = `${header.offsetHeight}px`;
267
- });
268
- this._headerObserver.observe(header);
269
- }
270
- _teardownHeaderObserver() {
271
- if (this._headerObserver) {
272
- this._headerObserver.disconnect();
273
- this._headerObserver = null;
274
- }
275
- }
276
281
  // Mark the last visible main-slot child with `is-last`, so section-style
277
282
  // components can grow to fill remaining vertical space without coupling
278
283
  // to specific tag types or relying on light-DOM `:last-child` (which
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/components/layout/page/page.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../src/components/layout/page/page.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"page.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page/page.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,yBAyNtB,CAAC"}
1
+ {"version":3,"file":"page.styles.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/page/page.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,yBA2NtB,CAAC"}
@@ -16,6 +16,7 @@ export const pageStyles = css `
16
16
  --_outer-inset-bottom: var(--context-inset-bottom, 0px);
17
17
  --_header-height: 0px;
18
18
  --_footer-height: 0px;
19
+ --_header-full-height: 0px;
19
20
  /* Set from JS while the page owns the scroller. initial, not a length, so
20
21
  the fallback stands when the document scrolls instead. */
21
22
  --_scroll-height: initial;
@@ -169,6 +170,7 @@ export const pageStyles = css `
169
170
  :host(:not([data-scroll="root"])) .page__scroll {
170
171
  --context-inset-top: var(--_header-height);
171
172
  --context-inset-bottom: var(--_footer-height);
173
+ padding-top: var(--_header-full-height);
172
174
  }
173
175
 
174
176
  :host([sticky-header]) .page__scroll {
@@ -1 +1 @@
1
- {"version":3,"file":"page.styles.js","sourceRoot":"","sources":["../../../../src/components/layout/page/page.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyN5B,CAAC"}
1
+ {"version":3,"file":"page.styles.js","sourceRoot":"","sources":["../../../../src/components/layout/page/page.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2N5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.template.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/sheet/sheet.template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,wCAejD"}
1
+ {"version":3,"file":"sheet.template.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/sheet/sheet.template.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,wCAkBjD"}
@@ -13,6 +13,9 @@ export function sheetTemplate(component) {
13
13
  <div class="sheet__body">
14
14
  <slot></slot>
15
15
  </div>
16
+ <!-- Inside the dialog, so it escapes the inertness a modal imposes on
17
+ everything outside it. Plumbing, not consumer API. -->
18
+ <slot name="notifications"></slot>
16
19
  </dialog>
17
20
  `;
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.template.js","sourceRoot":"","sources":["../../../../src/components/layout/sheet/sheet.template.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAG3B,MAAM,UAAU,aAAa,CAAC,SAAoB;IACjD,OAAO,IAAI,CAAA;;gBAEI,SAAS,CAAC,eAAe;;kBAEvB,SAAS,CAAC,wBAAwB;YACxC,SAAS,CAAC,kBAAkB;aAC3B,SAAS,CAAC,aAAa;YACxB,SAAS,CAAC,kBAAkB;;;;;;EAMtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sheet.template.js","sourceRoot":"","sources":["../../../../src/components/layout/sheet/sheet.template.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAG3B,MAAM,UAAU,aAAa,CAAC,SAAoB;IACjD,OAAO,IAAI,CAAA;;gBAEI,SAAS,CAAC,eAAe;;kBAEvB,SAAS,CAAC,wBAAwB;YACxC,SAAS,CAAC,kBAAkB;aAC3B,SAAS,CAAC,aAAa;YACxB,SAAS,CAAC,kBAAkB;;;;;;;;;EAStC,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"window.template.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/window/window.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,CAepE"}
1
+ {"version":3,"file":"window.template.d.ts","sourceRoot":"","sources":["../../../../src/components/layout/window/window.template.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,cAAc,CAAC,SAAS,EAAE,UAAU,GAAG,cAAc,CAkBpE"}
@@ -13,6 +13,9 @@ export function windowTemplate(component) {
13
13
  <div class="window__body">
14
14
  <slot></slot>
15
15
  </div>
16
+ <!-- Inside the dialog, so it escapes the inertness a modal imposes on
17
+ everything outside it. Plumbing, not consumer API. -->
18
+ <slot name="notifications"></slot>
16
19
  </dialog>
17
20
  `;
18
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"window.template.js","sourceRoot":"","sources":["../../../../src/components/layout/window/window.template.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAG3C,MAAM,UAAU,cAAc,CAAC,SAAqB;IACnD,OAAO,IAAI,CAAA;;gBAEI,SAAS,CAAC,wBAAwB;;kBAEhC,SAAS,CAAC,wBAAwB;YACxC,SAAS,CAAC,kBAAkB;aAC3B,SAAS,CAAC,aAAa;YACxB,SAAS,CAAC,kBAAkB;;;;;;EAMtC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"window.template.js","sourceRoot":"","sources":["../../../../src/components/layout/window/window.template.ts"],"names":[],"mappings":"AAAA,wGAAwG;AACxG,OAAO,EAAE,IAAI,EAAkB,MAAM,KAAK,CAAC;AAG3C,MAAM,UAAU,cAAc,CAAC,SAAqB;IACnD,OAAO,IAAI,CAAA;;gBAEI,SAAS,CAAC,wBAAwB;;kBAEhC,SAAS,CAAC,wBAAwB;YACxC,SAAS,CAAC,kBAAkB;aAC3B,SAAS,CAAC,aAAa;YACxB,SAAS,CAAC,kBAAkB;;;;;;;;;EAStC,CAAC;AACH,CAAC"}