@verbb/plugin-kit-web 2.0.6 → 2.0.8

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 (83) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/a11y/scroll-lock.d.ts +13 -7
  3. package/dist/a11y/scroll-lock.d.ts.map +1 -1
  4. package/dist/chunks/{autoloader-DXK9MVuw.js → autoloader-hkX3zcAt.js} +2 -21
  5. package/dist/chunks/autoloader-hkX3zcAt.js.map +1 -0
  6. package/dist/chunks/{pk-combobox-DtkXaX67.js → pk-combobox-BqaSsLJb.js} +2 -2
  7. package/dist/chunks/{pk-combobox-DtkXaX67.js.map → pk-combobox-BqaSsLJb.js.map} +1 -1
  8. package/dist/chunks/{pk-dialog-DZZd1Tzb.js → pk-dialog-BXJr3iEo.js} +17 -6
  9. package/dist/chunks/pk-dialog-BXJr3iEo.js.map +1 -0
  10. package/dist/chunks/{pk-editable-table-DVqOEz3W.js → pk-editable-table-sZO9JwiR.js} +4 -4
  11. package/dist/chunks/{pk-editable-table-DVqOEz3W.js.map → pk-editable-table-sZO9JwiR.js.map} +1 -1
  12. package/dist/chunks/{pk-select-odSNU1tN.js → pk-select-BPnO9qgj.js} +2 -2
  13. package/dist/chunks/{pk-select-odSNU1tN.js.map → pk-select-BPnO9qgj.js.map} +1 -1
  14. package/dist/chunks/{pk-time-picker-DtX0LtID.js → pk-time-picker-CZGr2dI2.js} +2 -2
  15. package/dist/chunks/{pk-time-picker-DtX0LtID.js.map → pk-time-picker-CZGr2dI2.js.map} +1 -1
  16. package/dist/chunks/{pk-tiptap-editor-CdoutapZ.js → pk-tiptap-editor-HemVPILE.js} +2 -2
  17. package/dist/chunks/{pk-tiptap-editor-CdoutapZ.js.map → pk-tiptap-editor-HemVPILE.js.map} +1 -1
  18. package/dist/chunks/{register-BYPBQHrq.js → register-BCiqL-PO.js} +7 -7
  19. package/dist/chunks/{register-BYPBQHrq.js.map → register-BCiqL-PO.js.map} +1 -1
  20. package/dist/chunks/scroll-lock-Bbh3Sc5g.js +160 -0
  21. package/dist/chunks/scroll-lock-Bbh3Sc5g.js.map +1 -0
  22. package/dist/components/combobox/pk-combobox.js +1 -1
  23. package/dist/components/combobox.js +1 -1
  24. package/dist/components/dialog/pk-dialog.d.ts +5 -0
  25. package/dist/components/dialog/pk-dialog.d.ts.map +1 -1
  26. package/dist/components/dialog/pk-dialog.js +1 -1
  27. package/dist/components/dialog/pk-dialog.styles.d.ts.map +1 -1
  28. package/dist/components/dialog.js +1 -1
  29. package/dist/components/editable-table/pk-editable-table.js +1 -1
  30. package/dist/components/editable-table.js +1 -1
  31. package/dist/components/select/pk-select.js +1 -1
  32. package/dist/components/select.js +1 -1
  33. package/dist/components/time-picker/pk-time-picker.js +1 -1
  34. package/dist/components/time-picker.js +1 -1
  35. package/dist/components/tiptap/pk-tiptap-editor.js +1 -1
  36. package/dist/components/tiptap-editor.js +1 -1
  37. package/dist/index.js +9 -9
  38. package/dist/plugin-kit.css +2 -5
  39. package/dist/plugin-kit.js +2 -2
  40. package/dist/register.js +7 -7
  41. package/dist/tokens.css +2 -5
  42. package/dist/utils/config.d.ts +2 -2
  43. package/dist/utils/config.d.ts.map +1 -1
  44. package/dist/utils/documentScrollStability.d.ts +3 -7
  45. package/dist/utils/documentScrollStability.d.ts.map +1 -1
  46. package/dist-loader/chunks/{pk-a11y-Cx5RZvhu.js → pk-a11y-CjB4-U-R.js} +61 -94
  47. package/dist-loader/chunks/{pk-combobox-fXGaY4L0.js → pk-combobox-IyQd9a1s.js} +1 -1
  48. package/dist-loader/chunks/{pk-date-picker-CE4TlRRZ.js → pk-date-picker-38hUgJ2-.js} +1 -1
  49. package/dist-loader/chunks/{pk-dialog-CP1YT85H.js → pk-dialog-DNAhdVbM.js} +16 -5
  50. package/dist-loader/chunks/{pk-dropdown-menu-CajQAobW.js → pk-dropdown-menu-DsHJ-4Ys.js} +1 -1
  51. package/dist-loader/chunks/{pk-field-BbKmQmTF.js → pk-field-tDfxz4Fd.js} +1 -1
  52. package/dist-loader/chunks/{pk-input-CXE7_rTQ.js → pk-input-88DVgoVz.js} +1 -1
  53. package/dist-loader/chunks/{pk-select-CbmPJCx8.js → pk-select-ClUdE4yB.js} +1 -1
  54. package/dist-loader/chunks/{pk-textarea-Ch8JpP83.js → pk-textarea-LC_CPUav.js} +1 -1
  55. package/dist-loader/chunks/{pk-time-picker-DZljwJn9.js → pk-time-picker-Bc6UkCYG.js} +1 -1
  56. package/dist-loader/chunks/{pk-tooltip-DHiCn33o.js → pk-tooltip-DRU95AZ6.js} +1 -1
  57. package/dist-loader/chunks/{tiptap.styles-CDjt6Iz4.js → tiptap.styles-gpE_nQ_B.js} +1 -1
  58. package/dist-loader/components/code-editor/code-editor.js +5 -5
  59. package/dist-loader/components/combobox/combobox.js +1 -1
  60. package/dist-loader/components/date-picker/date-picker.js +1 -1
  61. package/dist-loader/components/dialog/dialog.js +1 -1
  62. package/dist-loader/components/dropdown-menu/dropdown-menu.js +1 -1
  63. package/dist-loader/components/editable-table/editable-table.js +7 -7
  64. package/dist-loader/components/field/field.js +1 -1
  65. package/dist-loader/components/input/input.js +1 -1
  66. package/dist-loader/components/popover/popover.js +1 -1
  67. package/dist-loader/components/select/option-group.js +1 -1
  68. package/dist-loader/components/select/select.js +1 -1
  69. package/dist-loader/components/tabs/tabs.js +1 -1
  70. package/dist-loader/components/textarea/textarea.js +1 -1
  71. package/dist-loader/components/time-picker/time-picker.js +1 -1
  72. package/dist-loader/components/tiptap/tiptap-content.js +1 -1
  73. package/dist-loader/components/tiptap/tiptap-editor.js +7 -7
  74. package/dist-loader/components/tiptap/tiptap-input.js +1 -1
  75. package/dist-loader/components/tooltip/tooltip.js +1 -1
  76. package/dist-loader/plugin-kit.css +2 -5
  77. package/dist-loader/plugin-kit.loader.js +2 -22
  78. package/dist-loader/tokens.css +2 -5
  79. package/package.json +8 -7
  80. package/dist/chunks/autoloader-DXK9MVuw.js.map +0 -1
  81. package/dist/chunks/pk-dialog-DZZd1Tzb.js.map +0 -1
  82. package/dist/chunks/scroll-lock-B4o9vdzJ.js +0 -193
  83. package/dist/chunks/scroll-lock-B4o9vdzJ.js.map +0 -1
@@ -1,193 +0,0 @@
1
- //#region src/a11y/offset.ts
2
- /**
3
- * Element offset relative to a parent — adapted from internal/offset.ts.
4
- * Works around shadow-DOM offsetParent quirks in Chromium.
5
- */
6
- function getOffset(element, parent) {
7
- return {
8
- top: Math.round(element.getBoundingClientRect().top - parent.getBoundingClientRect().top),
9
- left: Math.round(element.getBoundingClientRect().left - parent.getBoundingClientRect().left)
10
- };
11
- }
12
- //#endregion
13
- //#region src/a11y/scroll-lock.ts
14
- /**
15
- * Document scroll lock for overlays (dialog, etc.).
16
- *
17
- * Ref-counted so nested overlays unlock only when all close.
18
- *
19
- * Avoids the classic “fixed chrome jumps” bug from `padding-right` compensation:
20
- * Craft CP / playground fixed sidebars & tip bars do not inherit body padding, so
21
- * `body { padding-right: scrollbar }` shifts them when the scrollbar goes
22
- * away. v1 (Base UI) did not jump — follow that model instead:
23
- *
24
- * 1. Prefer a real `scrollbar-gutter: stable` lock (width unchanged under overflow:hidden).
25
- * 2. Otherwise keep `overflow-y: scroll` on `<html>` so the gutter stays painted, and
26
- * constrain `<body>` so the page cannot scroll.
27
- */
28
- var locks = /* @__PURE__ */ new Set();
29
- /** Undo for the currently applied lock (only while locks.size > 0). */
30
- var restoreLock = null;
31
- function isOverflowScrollContainer(element) {
32
- const overflowY = getComputedStyle(element).overflowY;
33
- return overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay";
34
- }
35
- /** True when setting gutter + toggling overflow does not change layout width. */
36
- function supportsStableScrollbarGutterLock() {
37
- if (typeof CSS === "undefined" || !CSS.supports?.("scrollbar-gutter", "stable")) return false;
38
- const html = document.documentElement;
39
- const body = document.body;
40
- const scrollContainer = isOverflowScrollContainer(html) ? html : body;
41
- const prevOverflowY = scrollContainer.style.overflowY;
42
- const prevGutter = html.style.scrollbarGutter;
43
- html.style.scrollbarGutter = "stable";
44
- scrollContainer.style.overflowY = "scroll";
45
- const before = scrollContainer.offsetWidth;
46
- scrollContainer.style.overflowY = "hidden";
47
- const after = scrollContainer.offsetWidth;
48
- scrollContainer.style.overflowY = prevOverflowY;
49
- html.style.scrollbarGutter = prevGutter;
50
- return before === after;
51
- }
52
- function getInsetScrollbarWidth() {
53
- return Math.max(0, window.innerWidth - document.documentElement.clientWidth);
54
- }
55
- /**
56
- * Apply a lock that does not use body padding-right (fixed elements stay put).
57
- * Returns a restore function.
58
- */
59
- function applyScrollLock() {
60
- const html = document.documentElement;
61
- const body = document.body;
62
- const htmlStyles = getComputedStyle(html);
63
- const bodyStyles = getComputedStyle(body);
64
- if (getInsetScrollbarWidth() < 2) {
65
- const prevHtmlOverflow = html.style.overflow;
66
- const prevBodyOverflow = body.style.overflow;
67
- html.style.overflow = "hidden";
68
- body.style.overflow = "hidden";
69
- return () => {
70
- html.style.overflow = prevHtmlOverflow;
71
- body.style.overflow = prevBodyOverflow;
72
- };
73
- }
74
- const elementToLock = isOverflowScrollContainer(html) ? html : body;
75
- if (supportsStableScrollbarGutterLock()) {
76
- const prevGutter = html.style.scrollbarGutter;
77
- const prevOverflowY = elementToLock.style.overflowY;
78
- const prevOverflowX = elementToLock.style.overflowX;
79
- html.style.scrollbarGutter = htmlStyles.scrollbarGutter?.includes("both-edges") ? "stable both-edges" : "stable";
80
- elementToLock.style.overflowY = "hidden";
81
- elementToLock.style.overflowX = "hidden";
82
- return () => {
83
- html.style.scrollbarGutter = prevGutter;
84
- elementToLock.style.overflowY = prevOverflowY;
85
- elementToLock.style.overflowX = prevOverflowX;
86
- };
87
- }
88
- const scrollTop = html.scrollTop;
89
- const scrollLeft = html.scrollLeft;
90
- const scrollbarWidth = Math.max(0, window.innerWidth - body.clientWidth);
91
- const scrollbarHeight = Math.max(0, window.innerHeight - body.clientHeight);
92
- const marginY = parseFloat(bodyStyles.marginTop) + parseFloat(bodyStyles.marginBottom);
93
- const marginX = parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight);
94
- const prevHtml = {
95
- scrollbarGutter: html.style.scrollbarGutter,
96
- overflowY: html.style.overflowY,
97
- overflowX: html.style.overflowX,
98
- scrollBehavior: html.style.scrollBehavior
99
- };
100
- const prevBody = {
101
- position: body.style.position,
102
- height: body.style.height,
103
- width: body.style.width,
104
- boxSizing: body.style.boxSizing,
105
- overflow: body.style.overflow,
106
- overflowY: body.style.overflowY,
107
- overflowX: body.style.overflowX,
108
- scrollBehavior: body.style.scrollBehavior
109
- };
110
- html.style.scrollbarGutter = "stable";
111
- html.style.overflowY = "scroll";
112
- html.style.overflowX = "hidden";
113
- html.style.scrollBehavior = "unset";
114
- body.style.position = "relative";
115
- body.style.boxSizing = "border-box";
116
- body.style.overflow = "hidden";
117
- body.style.scrollBehavior = "unset";
118
- body.style.width = marginX || scrollbarWidth ? `calc(100vw - ${marginX + scrollbarWidth}px)` : "100vw";
119
- body.style.height = marginY || scrollbarHeight ? `calc(100dvh - ${marginY + scrollbarHeight}px)` : "100dvh";
120
- body.scrollTop = scrollTop;
121
- body.scrollLeft = scrollLeft;
122
- return () => {
123
- Object.assign(html.style, prevHtml);
124
- Object.assign(body.style, prevBody);
125
- html.scrollTop = scrollTop;
126
- html.scrollLeft = scrollLeft;
127
- };
128
- }
129
- function lockBodyScrolling(lockingEl) {
130
- locks.add(lockingEl);
131
- if (locks.size === 1) {
132
- document.documentElement.classList.add("pk-scroll-lock");
133
- document.documentElement.style.setProperty("--pk-scroll-lock-size", "0px");
134
- restoreLock = applyScrollLock();
135
- }
136
- }
137
- function unlockBodyScrolling(lockingEl) {
138
- locks.delete(lockingEl);
139
- if (locks.size === 0) {
140
- restoreLock?.();
141
- restoreLock = null;
142
- document.documentElement.classList.remove("pk-scroll-lock");
143
- document.documentElement.style.removeProperty("--pk-scroll-lock-size");
144
- document.documentElement.style.removeProperty("--pk-scroll-lock-gutter");
145
- }
146
- }
147
- /** Dev/diagnostic — how many overlay hosts currently hold the scroll lock. */
148
- function getScrollLockDepth() {
149
- return locks.size;
150
- }
151
- /** Emergency clear when lock ref-count and html class drift out of sync. */
152
- function forceClearScrollLock() {
153
- locks.clear();
154
- restoreLock?.();
155
- restoreLock = null;
156
- document.documentElement.classList.remove("pk-scroll-lock");
157
- document.documentElement.style.removeProperty("--pk-scroll-lock-size");
158
- document.documentElement.style.removeProperty("--pk-scroll-lock-gutter");
159
- }
160
- /** Scroll an element into view of its scroll container if needed. */
161
- function scrollIntoView(element, container, direction = "vertical", behavior = "smooth") {
162
- const offset = getOffset(element, container);
163
- const offsetTop = offset.top + container.scrollTop;
164
- const offsetLeft = offset.left + container.scrollLeft;
165
- const minX = container.scrollLeft;
166
- const maxX = container.scrollLeft + container.offsetWidth;
167
- const minY = container.scrollTop;
168
- const maxY = container.scrollTop + container.offsetHeight;
169
- if (direction === "horizontal" || direction === "both") {
170
- if (offsetLeft < minX) container.scrollTo({
171
- left: offsetLeft,
172
- behavior
173
- });
174
- else if (offsetLeft + element.clientWidth > maxX) container.scrollTo({
175
- left: offsetLeft - container.offsetWidth + element.clientWidth,
176
- behavior
177
- });
178
- }
179
- if (direction === "vertical" || direction === "both") {
180
- if (offsetTop < minY) container.scrollTo({
181
- top: offsetTop,
182
- behavior
183
- });
184
- else if (offsetTop + element.clientHeight > maxY) container.scrollTo({
185
- top: offsetTop - container.offsetHeight + element.clientHeight,
186
- behavior
187
- });
188
- }
189
- }
190
- //#endregion
191
- export { unlockBodyScrolling as a, scrollIntoView as i, getScrollLockDepth as n, getOffset as o, lockBodyScrolling as r, forceClearScrollLock as t };
192
-
193
- //# sourceMappingURL=scroll-lock-B4o9vdzJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scroll-lock-B4o9vdzJ.js","names":[],"sources":["../../src/a11y/offset.ts","../../src/a11y/scroll-lock.ts"],"sourcesContent":["/**\n * Element offset relative to a parent — adapted from internal/offset.ts.\n * Works around shadow-DOM offsetParent quirks in Chromium.\n */\nexport function getOffset(element: HTMLElement, parent: HTMLElement): { top: number; left: number } {\n return {\n top: Math.round(element.getBoundingClientRect().top - parent.getBoundingClientRect().top),\n left: Math.round(element.getBoundingClientRect().left - parent.getBoundingClientRect().left),\n };\n}\n","/**\n * Document scroll lock for overlays (dialog, etc.).\n *\n * Ref-counted so nested overlays unlock only when all close.\n *\n * Avoids the classic “fixed chrome jumps” bug from `padding-right` compensation:\n * Craft CP / playground fixed sidebars & tip bars do not inherit body padding, so\n * `body { padding-right: scrollbar }` shifts them when the scrollbar goes\n * away. v1 (Base UI) did not jump — follow that model instead:\n *\n * 1. Prefer a real `scrollbar-gutter: stable` lock (width unchanged under overflow:hidden).\n * 2. Otherwise keep `overflow-y: scroll` on `<html>` so the gutter stays painted, and\n * constrain `<body>` so the page cannot scroll.\n */\n\nimport { getOffset } from './offset.js';\n\nconst locks = new Set<HTMLElement>();\n\n/** Undo for the currently applied lock (only while locks.size > 0). */\nlet restoreLock: (() => void) | null = null;\n\nfunction isOverflowScrollContainer(element: Element): boolean {\n const style = getComputedStyle(element);\n const overflowY = style.overflowY;\n\n return overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay';\n}\n\n/** True when setting gutter + toggling overflow does not change layout width. */\nfunction supportsStableScrollbarGutterLock(): boolean {\n if (typeof CSS === 'undefined' || !CSS.supports?.('scrollbar-gutter', 'stable')) {\n return false;\n }\n\n const html = document.documentElement;\n const body = document.body;\n const scrollContainer = isOverflowScrollContainer(html) ? html : body;\n const prevOverflowY = scrollContainer.style.overflowY;\n const prevGutter = html.style.scrollbarGutter;\n\n html.style.scrollbarGutter = 'stable';\n scrollContainer.style.overflowY = 'scroll';\n const before = scrollContainer.offsetWidth;\n scrollContainer.style.overflowY = 'hidden';\n const after = scrollContainer.offsetWidth;\n\n scrollContainer.style.overflowY = prevOverflowY;\n html.style.scrollbarGutter = prevGutter;\n\n return before === after;\n}\n\nfunction getInsetScrollbarWidth(): number {\n return Math.max(0, window.innerWidth - document.documentElement.clientWidth);\n}\n\n/**\n * Apply a lock that does not use body padding-right (fixed elements stay put).\n * Returns a restore function.\n */\nfunction applyScrollLock(): () => void {\n const html = document.documentElement;\n const body = document.body;\n const htmlStyles = getComputedStyle(html);\n const bodyStyles = getComputedStyle(body);\n\n // Overlay / floating scrollbars (macOS “show when scrolling”): hiding overflow\n // does not change layout width — nothing to compensate.\n if (getInsetScrollbarWidth() < 2) {\n const prevHtmlOverflow = html.style.overflow;\n const prevBodyOverflow = body.style.overflow;\n html.style.overflow = 'hidden';\n body.style.overflow = 'hidden';\n return () => {\n html.style.overflow = prevHtmlOverflow;\n body.style.overflow = prevBodyOverflow;\n };\n }\n\n const elementToLock = isOverflowScrollContainer(html) ? html : body;\n\n // Path A — gutter stays stable under overflow:hidden (Firefox; some Chrome builds).\n if (supportsStableScrollbarGutterLock()) {\n const prevGutter = html.style.scrollbarGutter;\n const prevOverflowY = elementToLock.style.overflowY;\n const prevOverflowX = elementToLock.style.overflowX;\n\n html.style.scrollbarGutter = htmlStyles.scrollbarGutter?.includes('both-edges')\n ? 'stable both-edges'\n : 'stable';\n elementToLock.style.overflowY = 'hidden';\n elementToLock.style.overflowX = 'hidden';\n\n return () => {\n html.style.scrollbarGutter = prevGutter;\n elementToLock.style.overflowY = prevOverflowY;\n elementToLock.style.overflowX = prevOverflowX;\n };\n }\n\n // Path B — keep the inset scrollbar painted (`overflow-y: scroll`) so layout\n // width never changes, then freeze body scrolling. Matches Base UI inset lock.\n const scrollTop = html.scrollTop;\n const scrollLeft = html.scrollLeft;\n const scrollbarWidth = Math.max(0, window.innerWidth - body.clientWidth);\n const scrollbarHeight = Math.max(0, window.innerHeight - body.clientHeight);\n const marginY = parseFloat(bodyStyles.marginTop) + parseFloat(bodyStyles.marginBottom);\n const marginX = parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight);\n\n const prevHtml = {\n scrollbarGutter: html.style.scrollbarGutter,\n overflowY: html.style.overflowY,\n overflowX: html.style.overflowX,\n scrollBehavior: html.style.scrollBehavior,\n };\n const prevBody = {\n position: body.style.position,\n height: body.style.height,\n width: body.style.width,\n boxSizing: body.style.boxSizing,\n overflow: body.style.overflow,\n overflowY: body.style.overflowY,\n overflowX: body.style.overflowX,\n scrollBehavior: body.style.scrollBehavior,\n };\n\n html.style.scrollbarGutter = 'stable';\n html.style.overflowY = 'scroll';\n html.style.overflowX = 'hidden';\n html.style.scrollBehavior = 'unset';\n\n body.style.position = 'relative';\n body.style.boxSizing = 'border-box';\n body.style.overflow = 'hidden';\n body.style.scrollBehavior = 'unset';\n body.style.width = marginX || scrollbarWidth\n ? `calc(100vw - ${marginX + scrollbarWidth}px)`\n : '100vw';\n body.style.height = marginY || scrollbarHeight\n ? `calc(100dvh - ${marginY + scrollbarHeight}px)`\n : '100dvh';\n\n body.scrollTop = scrollTop;\n body.scrollLeft = scrollLeft;\n\n return () => {\n Object.assign(html.style, prevHtml);\n Object.assign(body.style, prevBody);\n html.scrollTop = scrollTop;\n html.scrollLeft = scrollLeft;\n };\n}\n\nexport function lockBodyScrolling(lockingEl: HTMLElement): void {\n locks.add(lockingEl);\n\n if (locks.size === 1) {\n document.documentElement.classList.add('pk-scroll-lock');\n // Keep the CSS variable for any consumer that opts in; always 0 now that we\n // no longer pad the body (fixed chrome must not shift).\n document.documentElement.style.setProperty('--pk-scroll-lock-size', '0px');\n restoreLock = applyScrollLock();\n }\n}\n\nexport function unlockBodyScrolling(lockingEl: HTMLElement): void {\n locks.delete(lockingEl);\n\n if (locks.size === 0) {\n restoreLock?.();\n restoreLock = null;\n document.documentElement.classList.remove('pk-scroll-lock');\n document.documentElement.style.removeProperty('--pk-scroll-lock-size');\n document.documentElement.style.removeProperty('--pk-scroll-lock-gutter');\n }\n}\n\n/** Dev/diagnostic — how many overlay hosts currently hold the scroll lock. */\nexport function getScrollLockDepth(): number {\n return locks.size;\n}\n\n/** Emergency clear when lock ref-count and html class drift out of sync. */\nexport function forceClearScrollLock(): void {\n locks.clear();\n restoreLock?.();\n restoreLock = null;\n document.documentElement.classList.remove('pk-scroll-lock');\n document.documentElement.style.removeProperty('--pk-scroll-lock-size');\n document.documentElement.style.removeProperty('--pk-scroll-lock-gutter');\n}\n\n/** Scroll an element into view of its scroll container if needed. */\nexport function scrollIntoView(\n element: HTMLElement,\n container: HTMLElement,\n direction: 'horizontal' | 'vertical' | 'both' = 'vertical',\n behavior: ScrollBehavior = 'smooth',\n): void {\n const offset = getOffset(element, container);\n const offsetTop = offset.top + container.scrollTop;\n const offsetLeft = offset.left + container.scrollLeft;\n const minX = container.scrollLeft;\n const maxX = container.scrollLeft + container.offsetWidth;\n const minY = container.scrollTop;\n const maxY = container.scrollTop + container.offsetHeight;\n\n if (direction === 'horizontal' || direction === 'both') {\n if (offsetLeft < minX) {\n container.scrollTo({ left: offsetLeft, behavior });\n } else if (offsetLeft + element.clientWidth > maxX) {\n container.scrollTo({\n left: offsetLeft - container.offsetWidth + element.clientWidth,\n behavior,\n });\n }\n }\n\n if (direction === 'vertical' || direction === 'both') {\n if (offsetTop < minY) {\n container.scrollTo({ top: offsetTop, behavior });\n } else if (offsetTop + element.clientHeight > maxY) {\n container.scrollTo({\n top: offsetTop - container.offsetHeight + element.clientHeight,\n behavior,\n });\n }\n }\n}\n"],"mappings":"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"}