@rak200/ui 0.2.8 → 0.2.9
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/dialog.d.ts +37 -0
- package/dist/dialog.d.ts.map +1 -1
- package/dist/dialog.js +45 -10
- package/dist/dialog.js.map +1 -1
- package/package.json +1 -1
package/dist/dialog.d.ts
CHANGED
|
@@ -1,4 +1,41 @@
|
|
|
1
1
|
import { LitElement, type TemplateResult } from 'lit';
|
|
2
|
+
/**
|
|
3
|
+
* The `scrollbar-gutter` to hold while the page is locked.
|
|
4
|
+
*
|
|
5
|
+
* **The question is not whether the page scrolls**, which is what this asked first and
|
|
6
|
+
* what `tests/manual/scroll-lock.mjs` caught. A page can scroll and still have no gutter
|
|
7
|
+
* to keep — an overlay scrollbar takes no layout space — and reserving one there pulls the
|
|
8
|
+
* content in by the width of a scrollbar that was never there: the same shift, in the
|
|
9
|
+
* other direction, measured at -15px. The question is whether the scrollbar is *taking
|
|
10
|
+
* space*, and the viewport minus the content width is what answers it.
|
|
11
|
+
*
|
|
12
|
+
* **Taken as arguments rather than read from `window`, and that is the floors talking.**
|
|
13
|
+
* The suite's engine reports no scrollbar width at all, so the reserving branch is
|
|
14
|
+
* unreachable from anything this code could measure itself — and a branch no test can
|
|
15
|
+
* reach is a branch no floor can hold. As a function of two numbers it is decided here and
|
|
16
|
+
* checked directly, while the call site keeps no branch of its own.
|
|
17
|
+
*
|
|
18
|
+
* @param viewport - The viewport's width, scrollbar included.
|
|
19
|
+
* @param content - The width available to content, scrollbar excluded.
|
|
20
|
+
* @param current - What the host already had, returned untouched when there is nothing to
|
|
21
|
+
* reserve — so a page that sets its own gutter keeps it through the lock.
|
|
22
|
+
*/
|
|
23
|
+
export declare function reservedGutter(viewport: number, content: number, current: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Writes the two properties the lock is made of, and the only place either is named.
|
|
26
|
+
*
|
|
27
|
+
* **Handed an element rather than reaching for `document.documentElement`**, for the same
|
|
28
|
+
* reason {@link reservedGutter} is handed numbers. In the engine the suite runs, the root's
|
|
29
|
+
* gutter never changes: the scrollbar takes no space, so the value written is always the
|
|
30
|
+
* value already there and the write is a no-op that nothing can observe — the property name
|
|
31
|
+
* becomes a string no test compares against anything. On an element handed in, both writes
|
|
32
|
+
* are observable, and the names are checked rather than assumed.
|
|
33
|
+
*
|
|
34
|
+
* @param root - The element the lock is written on; `document.documentElement` in use.
|
|
35
|
+
* @param overflow - What to set `overflow` to; the empty string removes the declaration.
|
|
36
|
+
* @param gutter - What to set `scrollbar-gutter` to; likewise.
|
|
37
|
+
*/
|
|
38
|
+
export declare function applyLock(root: HTMLElement, overflow: string, gutter: string): void;
|
|
2
39
|
/**
|
|
3
40
|
* A modal dialog.
|
|
4
41
|
*
|
package/dist/dialog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAiBjE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnF;AAiFD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,QAAS,SAAQ,UAAU;;IACpC,gBAAyB,MAAM,0BAwG7B;IAEF,gBAAyB,UAAU;;;;;MAEjC;IAEF;;;;;;;;;;OAUG;IACH,IAAI,UAAS;;IAyCJ,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAU5B,YAAY,IAAI,IAAI;IAIpB,OAAO,IAAI,IAAI;IAiBf,MAAM,IAAI,cAAc;IAIjC;;;;;OAKG;IACH,IAAI,IAAI,IAAI;IAIZ,2FAA2F;IAC3F,KAAK,IAAI,IAAI;CA0FhB;AAQD,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,WAAW,EAAE,QAAQ,CAAC;KACzB;CACJ"}
|
package/dist/dialog.js
CHANGED
|
@@ -11,6 +11,48 @@ let locks = 0;
|
|
|
11
11
|
* initialiser here would be a value no test could ever observe.
|
|
12
12
|
*/
|
|
13
13
|
let displaced;
|
|
14
|
+
/**
|
|
15
|
+
* The `scrollbar-gutter` to hold while the page is locked.
|
|
16
|
+
*
|
|
17
|
+
* **The question is not whether the page scrolls**, which is what this asked first and
|
|
18
|
+
* what `tests/manual/scroll-lock.mjs` caught. A page can scroll and still have no gutter
|
|
19
|
+
* to keep — an overlay scrollbar takes no layout space — and reserving one there pulls the
|
|
20
|
+
* content in by the width of a scrollbar that was never there: the same shift, in the
|
|
21
|
+
* other direction, measured at -15px. The question is whether the scrollbar is *taking
|
|
22
|
+
* space*, and the viewport minus the content width is what answers it.
|
|
23
|
+
*
|
|
24
|
+
* **Taken as arguments rather than read from `window`, and that is the floors talking.**
|
|
25
|
+
* The suite's engine reports no scrollbar width at all, so the reserving branch is
|
|
26
|
+
* unreachable from anything this code could measure itself — and a branch no test can
|
|
27
|
+
* reach is a branch no floor can hold. As a function of two numbers it is decided here and
|
|
28
|
+
* checked directly, while the call site keeps no branch of its own.
|
|
29
|
+
*
|
|
30
|
+
* @param viewport - The viewport's width, scrollbar included.
|
|
31
|
+
* @param content - The width available to content, scrollbar excluded.
|
|
32
|
+
* @param current - What the host already had, returned untouched when there is nothing to
|
|
33
|
+
* reserve — so a page that sets its own gutter keeps it through the lock.
|
|
34
|
+
*/
|
|
35
|
+
export function reservedGutter(viewport, content, current) {
|
|
36
|
+
return viewport > content ? 'stable' : current;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Writes the two properties the lock is made of, and the only place either is named.
|
|
40
|
+
*
|
|
41
|
+
* **Handed an element rather than reaching for `document.documentElement`**, for the same
|
|
42
|
+
* reason {@link reservedGutter} is handed numbers. In the engine the suite runs, the root's
|
|
43
|
+
* gutter never changes: the scrollbar takes no space, so the value written is always the
|
|
44
|
+
* value already there and the write is a no-op that nothing can observe — the property name
|
|
45
|
+
* becomes a string no test compares against anything. On an element handed in, both writes
|
|
46
|
+
* are observable, and the names are checked rather than assumed.
|
|
47
|
+
*
|
|
48
|
+
* @param root - The element the lock is written on; `document.documentElement` in use.
|
|
49
|
+
* @param overflow - What to set `overflow` to; the empty string removes the declaration.
|
|
50
|
+
* @param gutter - What to set `scrollbar-gutter` to; likewise.
|
|
51
|
+
*/
|
|
52
|
+
export function applyLock(root, overflow, gutter) {
|
|
53
|
+
root.style.overflow = overflow;
|
|
54
|
+
root.style.setProperty('scrollbar-gutter', gutter);
|
|
55
|
+
}
|
|
14
56
|
/**
|
|
15
57
|
* Holds the page still behind a modal, and gives it back when the last one leaves.
|
|
16
58
|
*
|
|
@@ -24,7 +66,7 @@ let displaced;
|
|
|
24
66
|
* back as padding — and the browser this suite runs in has overlay scrollbars, so the
|
|
25
67
|
* width is `0`, every sign error in that arithmetic passes, and the check is theatre.
|
|
26
68
|
* `scrollbar-gutter: stable` asks the browser to keep the space it was already using,
|
|
27
|
-
* with no number to get wrong.
|
|
69
|
+
* with no number to get wrong — {@link reservedGutter} decides whether there is any.
|
|
28
70
|
*
|
|
29
71
|
* Counted rather than flagged, because a dialog opening a dialog is ordinary — a confirm
|
|
30
72
|
* over a form — and the second one closing must not give the page back while the first is
|
|
@@ -40,13 +82,7 @@ function hold() {
|
|
|
40
82
|
overflow: root.style.overflow,
|
|
41
83
|
gutter: root.style.getPropertyValue('scrollbar-gutter'),
|
|
42
84
|
};
|
|
43
|
-
|
|
44
|
-
// reserves space that was not there, which is the same layout shift in the other
|
|
45
|
-
// direction.
|
|
46
|
-
if (root.scrollHeight > root.clientHeight) {
|
|
47
|
-
root.style.setProperty('scrollbar-gutter', 'stable');
|
|
48
|
-
}
|
|
49
|
-
root.style.overflow = 'hidden';
|
|
85
|
+
applyLock(root, 'hidden', reservedGutter(window.innerWidth, root.clientWidth, displaced.gutter));
|
|
50
86
|
}
|
|
51
87
|
/** Gives the page back, once the last dialog has closed. */
|
|
52
88
|
function release() {
|
|
@@ -57,8 +93,7 @@ function release() {
|
|
|
57
93
|
const root = document.documentElement;
|
|
58
94
|
// What the host had, not what this module would have chosen. A page that sets its own
|
|
59
95
|
// `overflow` or reserves its own gutter gets it back rather than being cleared.
|
|
60
|
-
root.
|
|
61
|
-
root.style.setProperty('scrollbar-gutter', displaced.gutter);
|
|
96
|
+
applyLock(root, displaced.overflow, displaced.gutter);
|
|
62
97
|
}
|
|
63
98
|
/** One of the dialog's slots — named, or the default one when the name is empty. */
|
|
64
99
|
function slot(name = '') {
|
package/dist/dialog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAuB,MAAM,KAAK,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,4FAA4F;AAC5F,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,mDAAmD;AACnD,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd;;;;;GAKG;AACH,IAAI,SAA+C,CAAC;AAEpD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,IAAI;IACT,KAAK,IAAI,CAAC,CAAC;IAEX,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO;IACX,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC;IAEtC,SAAS,GAAG;QACR,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC7B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,CAAC;KAC1D,CAAC;IAEF,
|
|
1
|
+
{"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"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"}
|