@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.
- package/custom-elements.json +2 -2
- package/dist/components/components.js +123 -30
- package/dist/components/layout/page/page.d.ts +23 -5
- package/dist/components/layout/page/page.d.ts.map +1 -1
- package/dist/components/layout/page/page.js +39 -34
- 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 +2 -0
- package/dist/components/layout/page/page.styles.js.map +1 -1
- package/dist/components/layout/sheet/sheet.template.d.ts.map +1 -1
- package/dist/components/layout/sheet/sheet.template.js +3 -0
- package/dist/components/layout/sheet/sheet.template.js.map +1 -1
- package/dist/components/layout/window/window.template.d.ts.map +1 -1
- package/dist/components/layout/window/window.template.js +3 -0
- package/dist/components/layout/window/window.template.js.map +1 -1
- package/dist/components/navigation/menu-bar/menu-bar.d.ts +4 -2
- package/dist/components/navigation/menu-bar/menu-bar.d.ts.map +1 -1
- package/dist/components/navigation/menu-bar/menu-bar.js +4 -2
- package/dist/components/navigation/menu-bar/menu-bar.js.map +1 -1
- package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.d.ts.map +1 -1
- package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.js +3 -0
- package/dist/components/status-and-feedback/modal-dialog/modal-dialog.template.js.map +1 -1
- package/dist/components/status-and-feedback/notification/notification-region.d.ts.map +1 -1
- package/dist/components/status-and-feedback/notification/notification-region.js +74 -1
- package/dist/components/status-and-feedback/notification/notification-region.js.map +1 -1
- package/dist/components/status-and-feedback/notification/notification.d.ts +11 -0
- package/dist/components/status-and-feedback/notification/notification.d.ts.map +1 -1
- package/dist/components/status-and-feedback/notification/notification.js +13 -0
- package/dist/components/status-and-feedback/notification/notification.js.map +1 -1
- package/dist/nldd.min.js +33 -22
- package/dist/types/vue.d.ts +2 -2
- package/package.json +1 -1
package/custom-elements.json
CHANGED
|
@@ -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
|
|
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
|
|
38630
|
-
*
|
|
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
|
-
|
|
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.
|
|
38795
|
-
this.
|
|
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.
|
|
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
|
-
*
|
|
46001
|
-
*
|
|
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
|
-
|
|
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
|
|
8
|
-
*
|
|
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
|
|
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
|
|
14
|
-
*
|
|
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 +
|
|
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
|
-
|
|
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.
|
|
221
|
-
this.
|
|
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.
|
|
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":";;;;;;AAAA
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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"}
|