@capgo/capacitor-sheets 8.0.14 → 8.0.15
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/angular/index.js +68 -12
- package/dist/angular/index.js.map +1 -1
- package/dist/angular/index.mjs +68 -12
- package/dist/angular/index.mjs.map +1 -1
- package/dist/{chunk-AXGC7BLW.mjs → chunk-75SRJO4V.mjs} +69 -13
- package/dist/chunk-75SRJO4V.mjs.map +1 -0
- package/dist/{components-STHKYCFN.mjs → components-6FNKBOX7.mjs} +2 -2
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +69 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/react/index.js +68 -12
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +68 -12
- package/dist/react/index.mjs.map +1 -1
- package/dist/solid/index.js +68 -12
- package/dist/solid/index.js.map +1 -1
- package/dist/solid/index.mjs +68 -12
- package/dist/solid/index.mjs.map +1 -1
- package/dist/svelte/index.js +68 -12
- package/dist/svelte/index.js.map +1 -1
- package/dist/svelte/index.mjs +68 -12
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/vue/index.js +68 -12
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/index.mjs +68 -12
- package/dist/vue/index.mjs.map +1 -1
- package/docs/screenshots/issue-38-detached-spacing-simulator.webp +0 -0
- package/docs/screenshots/issue-38-keyboard-sheet-simulator.webp +0 -0
- package/docs/screenshots/issue-38-long-sheet-safe-area-simulator.webp +0 -0
- package/docs/screenshots/issue-38-page-from-bottom-simulator.webp +0 -0
- package/docs/screenshots/issue-38-page-right-simulator.webp +0 -0
- package/docs/screenshots/issue-38-persistent-expanded-simulator.webp +0 -0
- package/docs/screenshots/issue-38-persistent-mini-simulator.webp +0 -0
- package/package.json +1 -1
- package/dist/chunk-AXGC7BLW.mjs.map +0 -1
- /package/dist/{components-STHKYCFN.mjs.map → components-6FNKBOX7.mjs.map} +0 -0
|
@@ -274,6 +274,8 @@ var defaultAnimation = {
|
|
|
274
274
|
contentMove: true
|
|
275
275
|
};
|
|
276
276
|
var stackRegistry = /* @__PURE__ */ new Map();
|
|
277
|
+
var documentLockDepth = /* @__PURE__ */ new WeakMap();
|
|
278
|
+
var documentLockSnapshot = /* @__PURE__ */ new WeakMap();
|
|
277
279
|
function parseNumber(value) {
|
|
278
280
|
if (value === null) return void 0;
|
|
279
281
|
const parsed = Number.parseInt(value, 10);
|
|
@@ -431,8 +433,6 @@ var SheetController = class {
|
|
|
431
433
|
pointerTravel = null;
|
|
432
434
|
connected = false;
|
|
433
435
|
lockedScroll = false;
|
|
434
|
-
previousBodyOverflow = "";
|
|
435
|
-
previousBodyTouchAction = "";
|
|
436
436
|
inertedElements = /* @__PURE__ */ new Map();
|
|
437
437
|
previousFocus = null;
|
|
438
438
|
hasThemeDimmer = false;
|
|
@@ -445,12 +445,20 @@ var SheetController = class {
|
|
|
445
445
|
const visualViewport = this.root.ownerDocument.defaultView?.visualViewport;
|
|
446
446
|
if (!view) return;
|
|
447
447
|
if (!visualViewport || this.options.nativeFocusScrollPrevention === false) {
|
|
448
|
-
|
|
448
|
+
this.setKeyboardOffset("0em");
|
|
449
449
|
return;
|
|
450
450
|
}
|
|
451
451
|
const layoutHeight = this.root.ownerDocument.documentElement.clientHeight;
|
|
452
452
|
const keyboardOffset = Math.max(0, layoutHeight - visualViewport.height - visualViewport.offsetTop);
|
|
453
|
-
|
|
453
|
+
this.setKeyboardOffset(`${toEm(view, keyboardOffset)}em`);
|
|
454
|
+
};
|
|
455
|
+
handleFocusIn = (event) => {
|
|
456
|
+
if (!this.presented || this.options.nativeFocusScrollPrevention === false) return;
|
|
457
|
+
const target = event.target;
|
|
458
|
+
const content = this.parts.content;
|
|
459
|
+
if (!(target instanceof HTMLElement) || !content?.contains(target)) return;
|
|
460
|
+
if (!["input", "select", "textarea"].includes(target.localName) && !target.isContentEditable) return;
|
|
461
|
+
requestAnimationFrame(() => target.scrollIntoView({ block: "nearest", inline: "nearest" }));
|
|
454
462
|
};
|
|
455
463
|
handleDocumentKeyDown = (event) => {
|
|
456
464
|
if (!this.presented) return;
|
|
@@ -667,6 +675,7 @@ var SheetController = class {
|
|
|
667
675
|
this.previousFocus = this.root.ownerDocument.activeElement;
|
|
668
676
|
this.presented = true;
|
|
669
677
|
this.activeDetent = clamp(options.detent ?? this.resolveInitialDetent(), 1, this.detentOffsetsPx.length - 1);
|
|
678
|
+
this.updateDetentState();
|
|
670
679
|
this.updateDomState(true);
|
|
671
680
|
this.lockPage();
|
|
672
681
|
this.applyInert();
|
|
@@ -690,6 +699,7 @@ var SheetController = class {
|
|
|
690
699
|
const previous = this.activeDetent;
|
|
691
700
|
this.presented = false;
|
|
692
701
|
this.activeDetent = 0;
|
|
702
|
+
this.updateDetentState();
|
|
693
703
|
this.setStatus("exiting");
|
|
694
704
|
dispatch(this.root, "cap-sheet-dismiss", this.getTravelEvent());
|
|
695
705
|
await this.animateTo(this.detentOffsetsPx[0] || this.hiddenOffsetPx, {
|
|
@@ -728,6 +738,7 @@ var SheetController = class {
|
|
|
728
738
|
}
|
|
729
739
|
const previous = this.activeDetent;
|
|
730
740
|
this.activeDetent = target;
|
|
741
|
+
this.updateDetentState();
|
|
731
742
|
this.setStatus("settling");
|
|
732
743
|
await this.animateTo(this.detentOffsetsPx[target] || 0, {
|
|
733
744
|
...this.options.steppingAnimationSettings || {},
|
|
@@ -999,6 +1010,7 @@ var SheetController = class {
|
|
|
999
1010
|
view.addEventListener("pointermove", this.handlePointerMove, { passive: false });
|
|
1000
1011
|
view.addEventListener("pointerup", this.handlePointerUp);
|
|
1001
1012
|
view.addEventListener("pointercancel", this.handlePointerUp);
|
|
1013
|
+
view.addEventListener("focusin", this.handleFocusIn);
|
|
1002
1014
|
view.addEventListener("wheel", this.handleWheel, { passive: false });
|
|
1003
1015
|
this.viewListenersElement = view;
|
|
1004
1016
|
}
|
|
@@ -1010,6 +1022,7 @@ var SheetController = class {
|
|
|
1010
1022
|
view.removeEventListener("pointermove", this.handlePointerMove);
|
|
1011
1023
|
view.removeEventListener("pointerup", this.handlePointerUp);
|
|
1012
1024
|
view.removeEventListener("pointercancel", this.handlePointerUp);
|
|
1025
|
+
view.removeEventListener("focusin", this.handleFocusIn);
|
|
1013
1026
|
view.removeEventListener("wheel", this.handleWheel);
|
|
1014
1027
|
this.viewListenersElement = null;
|
|
1015
1028
|
}
|
|
@@ -1042,6 +1055,7 @@ var SheetController = class {
|
|
|
1042
1055
|
content.setAttribute("tabindex", content.getAttribute("tabindex") || "-1");
|
|
1043
1056
|
}
|
|
1044
1057
|
this.root.toggleAttribute("presented", presented);
|
|
1058
|
+
this.updateDetentState();
|
|
1045
1059
|
}
|
|
1046
1060
|
linkAccessibleNames() {
|
|
1047
1061
|
if (!this.parts.content) return;
|
|
@@ -1090,24 +1104,60 @@ var SheetController = class {
|
|
|
1090
1104
|
}
|
|
1091
1105
|
lockPage() {
|
|
1092
1106
|
if (this.lockedScroll) return;
|
|
1093
|
-
const
|
|
1094
|
-
|
|
1095
|
-
|
|
1107
|
+
const doc = this.root.ownerDocument;
|
|
1108
|
+
const documentElement = doc.documentElement;
|
|
1109
|
+
const body = doc.body;
|
|
1110
|
+
const depth = documentLockDepth.get(doc) ?? 0;
|
|
1111
|
+
if (depth === 0) {
|
|
1112
|
+
documentLockSnapshot.set(doc, {
|
|
1113
|
+
htmlOverflow: documentElement.style.overflow,
|
|
1114
|
+
htmlTouchAction: documentElement.style.touchAction,
|
|
1115
|
+
bodyOverflow: body.style.overflow,
|
|
1116
|
+
bodyTouchAction: body.style.touchAction
|
|
1117
|
+
});
|
|
1118
|
+
}
|
|
1119
|
+
documentElement.style.overflow = "hidden";
|
|
1120
|
+
documentElement.style.touchAction = "none";
|
|
1096
1121
|
body.dataset.capSheetScrollLocked = "true";
|
|
1097
1122
|
body.style.overflow = "hidden";
|
|
1098
1123
|
body.style.touchAction = "none";
|
|
1124
|
+
documentLockDepth.set(doc, depth + 1);
|
|
1099
1125
|
this.lockedScroll = true;
|
|
1100
1126
|
}
|
|
1101
1127
|
unlockPage() {
|
|
1102
1128
|
if (!this.lockedScroll) return;
|
|
1103
|
-
const
|
|
1129
|
+
const doc = this.root.ownerDocument;
|
|
1130
|
+
const documentElement = doc.documentElement;
|
|
1131
|
+
const body = doc.body;
|
|
1132
|
+
const depth = Math.max((documentLockDepth.get(doc) ?? 1) - 1, 0);
|
|
1133
|
+
if (depth > 0) {
|
|
1134
|
+
documentLockDepth.set(doc, depth);
|
|
1135
|
+
this.lockedScroll = false;
|
|
1136
|
+
return;
|
|
1137
|
+
}
|
|
1138
|
+
const snapshot = documentLockSnapshot.get(doc);
|
|
1104
1139
|
delete body.dataset.capSheetScrollLocked;
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1140
|
+
documentElement.style.overflow = snapshot?.htmlOverflow ?? "";
|
|
1141
|
+
documentElement.style.touchAction = snapshot?.htmlTouchAction ?? "";
|
|
1142
|
+
body.style.overflow = snapshot?.bodyOverflow ?? "";
|
|
1143
|
+
body.style.touchAction = snapshot?.bodyTouchAction ?? "";
|
|
1144
|
+
documentLockDepth.delete(doc);
|
|
1145
|
+
documentLockSnapshot.delete(doc);
|
|
1109
1146
|
this.lockedScroll = false;
|
|
1110
1147
|
}
|
|
1148
|
+
setKeyboardOffset(value) {
|
|
1149
|
+
const view = this.parts.view;
|
|
1150
|
+
if (!view) return;
|
|
1151
|
+
if (view.style.getPropertyValue("--cap-sheet-keyboard-offset") !== value) {
|
|
1152
|
+
view.style.setProperty("--cap-sheet-keyboard-offset", value);
|
|
1153
|
+
}
|
|
1154
|
+
if (!this.presented) return;
|
|
1155
|
+
requestAnimationFrame(() => {
|
|
1156
|
+
if (!this.presented) return;
|
|
1157
|
+
this.remeasure();
|
|
1158
|
+
this.applyOffset(this.detentOffsetsPx[this.activeDetent] || 0, this.status);
|
|
1159
|
+
});
|
|
1160
|
+
}
|
|
1111
1161
|
applyInert() {
|
|
1112
1162
|
if (this.options.inertOutside === false || !this.parts.view) return;
|
|
1113
1163
|
const body = this.root.ownerDocument.body;
|
|
@@ -1186,6 +1236,12 @@ var SheetController = class {
|
|
|
1186
1236
|
const detail = { activeDetent, previousActiveDetent };
|
|
1187
1237
|
dispatch(this.root, "cap-sheet-active-detent-change", detail);
|
|
1188
1238
|
}
|
|
1239
|
+
updateDetentState() {
|
|
1240
|
+
const activeDetent = String(this.activeDetent);
|
|
1241
|
+
this.root.dataset.activeDetent = activeDetent;
|
|
1242
|
+
if (this.parts.view) this.parts.view.dataset.activeDetent = activeDetent;
|
|
1243
|
+
if (this.parts.content) this.parts.content.dataset.activeDetent = activeDetent;
|
|
1244
|
+
}
|
|
1189
1245
|
registerStack() {
|
|
1190
1246
|
const nextStack = this.options.stack || this.root.closest("cap-sheet-stack")?.id || null;
|
|
1191
1247
|
if (this.stackId === nextStack) return;
|
|
@@ -1803,4 +1859,4 @@ export {
|
|
|
1803
1859
|
CapAutoFocusTarget,
|
|
1804
1860
|
CapSheetPortal
|
|
1805
1861
|
};
|
|
1806
|
-
//# sourceMappingURL=chunk-
|
|
1862
|
+
//# sourceMappingURL=chunk-75SRJO4V.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/utils.ts","../src/components/cap-scroll.ts","../src/core/theme-color.ts","../src/core/sheet-controller.ts","../src/components/cap-sheet.ts","../src/components/sheet-actions.ts","../src/components/sheet-context.ts","../src/components/sheet-parts.ts","../src/components/sheet-portal.ts","../src/components/index.ts"],"sourcesContent":["import type { SheetPlacement, SheetTrack } from './types';\n\nconst focusableSelector = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])',\n 'cap-sheet-handle',\n 'cap-sheet-trigger',\n].join(',');\n\n/** Clamp a number between a minimum and maximum value. */\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/** Convert an attribute string to boolean with a safe default. */\nexport function parseBoolean(value: string | null, defaultValue: boolean): boolean {\n if (value === null) return defaultValue;\n if (value === '' || value === 'true') return true;\n if (value === 'false') return false;\n return defaultValue;\n}\n\n/** Convert a comma/space separated attribute to an array. */\nexport function parseList(value: string | null): string[] {\n return value\n ? value\n .split(/[,\\s]+/)\n .map((item) => item.trim())\n .filter(Boolean)\n : [];\n}\n\n/** Parse sheet tracks from an attribute value. */\nexport function parseTracks(value: string | null, fallback: SheetTrack): SheetTrack[] {\n const tracks = parseList(value).filter((item): item is SheetTrack =>\n ['top', 'bottom', 'left', 'right'].includes(item),\n );\n return tracks.length > 0 ? tracks : [fallback];\n}\n\n/** Resolve a placement value from an attribute. */\nexport function parsePlacement(value: string | null): SheetPlacement {\n return ['top', 'bottom', 'left', 'right', 'center'].includes(value || '') ? (value as SheetPlacement) : 'bottom';\n}\n\n/** Resolve the primary track used for travel. */\nexport function trackForPlacement(placement: SheetPlacement, tracks: SheetTrack[]): SheetTrack {\n if (placement !== 'center' && tracks.includes(placement)) return placement;\n return tracks[0] || (placement === 'center' ? 'bottom' : placement);\n}\n\n/** Returns true when a placement travels vertically. */\nexport function isVerticalTrack(track: SheetTrack): boolean {\n return track === 'top' || track === 'bottom';\n}\n\n/** Returns the travel sign for an edge track. */\nexport function trackSign(track: SheetTrack): 1 | -1 {\n return track === 'bottom' || track === 'right' ? 1 : -1;\n}\n\n/** Read the CSS `em` size for an element. */\nexport function getEmPx(element: Element | null): number {\n if (!element?.ownerDocument.defaultView) return 16;\n const fontSize = element.ownerDocument.defaultView.getComputedStyle(element).fontSize;\n const parsed = Number.parseFloat(fontSize);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 16;\n}\n\n/** Convert a measured layout value to `em` units for a given element. */\nexport function toEm(element: Element | null, value: number): number {\n return value / getEmPx(element);\n}\n\n/** Measure a CSS length against a context element. */\nexport function measureCssLength(length: string, context: HTMLElement, axis: 'x' | 'y'): number {\n const doc = context.ownerDocument;\n const probe = doc.createElement('div');\n probe.style.position = 'absolute';\n probe.style.visibility = 'hidden';\n probe.style.pointerEvents = 'none';\n probe.style.inset = '0';\n if (axis === 'x') {\n probe.style.width = length;\n probe.style.height = '0';\n } else {\n probe.style.height = length;\n probe.style.width = '0';\n }\n context.appendChild(probe);\n const rect = probe.getBoundingClientRect();\n probe.remove();\n return axis === 'x' ? rect.width : rect.height;\n}\n\n/** Query focusable descendants in DOM order. */\nexport function getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(focusableSelector)).filter((element) => {\n if (element.hasAttribute('disabled')) return false;\n if (element.getAttribute('aria-hidden') === 'true') return false;\n const rects = element.getClientRects();\n return rects.length > 0;\n });\n}\n\n/** Dispatch a bubbling custom event with typed detail. */\nexport function dispatch<T>(target: EventTarget, type: string, detail: T): void {\n target.dispatchEvent(new CustomEvent(type, { bubbles: true, composed: true, detail }));\n}\n\n/** Define a custom element if it has not been registered yet. */\nexport function defineElement(name: string, constructor: CustomElementConstructor): void {\n if (typeof customElements === 'undefined') return;\n if (!customElements.get(name)) {\n customElements.define(name, constructor);\n }\n}\n\n/** Prefer reduced motion helper. */\nexport function shouldSkipMotion(settingsSkip?: boolean | 'auto'): boolean {\n if (settingsSkip === true) return true;\n if (settingsSkip === 'auto' && typeof matchMedia !== 'undefined') {\n return matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n return false;\n}\n\n/** Creates a stable id with a readable prefix. */\nexport function createId(prefix: string): string {\n return `${prefix}-${Math.random().toString(36).slice(2, 10)}`;\n}\n","import { injectCapSheetStyles } from '../core/styles';\nimport type { ScrollByTravelOptions, ScrollToTravelOptions } from '../core/types';\nimport { clamp, dispatch } from '../core/utils';\n\n/** Framework-agnostic scroll primitive with progress helpers. */\nexport class CapScroll extends HTMLElement {\n private scrollTarget: HTMLElement = this;\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.scrollTarget = this;\n this.addEventListener('scroll', this.handleScroll, { passive: true });\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('scroll', this.handleScroll);\n }\n\n /** Return scroll progress from `0` to `1`. */\n getProgress(): number {\n return this.getAvailableDistance() === 0 ? 0 : clamp(this.getDistance() / this.getAvailableDistance(), 0, 1);\n }\n\n /** Return traveled distance in CSS pixels. */\n getDistance(): number {\n return this.axis === 'x' ? this.scrollTarget.scrollLeft : this.scrollTarget.scrollTop;\n }\n\n /** Return available travel distance in CSS pixels. */\n getAvailableDistance(): number {\n return this.axis === 'x'\n ? Math.max(0, this.scrollTarget.scrollWidth - this.scrollTarget.clientWidth)\n : Math.max(0, this.scrollTarget.scrollHeight - this.scrollTarget.clientHeight);\n }\n\n /** Scroll to an absolute progress or distance. Also supports the native HTMLElement overloads. */\n scrollTo(options?: ScrollToOptions | ScrollToTravelOptions): void;\n scrollTo(x: number, y: number): void;\n scrollTo(optionsOrX?: ScrollToOptions | ScrollToTravelOptions | number, y?: number): void {\n if (typeof optionsOrX === 'number') {\n super.scrollTo(optionsOrX, y ?? 0);\n return;\n }\n if (!optionsOrX || 'top' in optionsOrX || 'left' in optionsOrX) {\n super.scrollTo(optionsOrX);\n return;\n }\n\n const travelOptions = optionsOrX as ScrollToTravelOptions;\n const distance = this.resolveDistance(travelOptions.progress, travelOptions.distance);\n this.scrollTarget.scrollTo({\n left: this.axis === 'x' ? distance : undefined,\n top: this.axis === 'y' ? distance : undefined,\n behavior: travelOptions.behavior,\n });\n }\n\n /** Scroll by a relative progress or distance. Also supports the native HTMLElement overloads. */\n scrollBy(options?: ScrollToOptions | ScrollByTravelOptions): void;\n scrollBy(x: number, y: number): void;\n scrollBy(optionsOrX?: ScrollToOptions | ScrollByTravelOptions | number, y?: number): void {\n if (typeof optionsOrX === 'number') {\n super.scrollBy(optionsOrX, y ?? 0);\n return;\n }\n if (!optionsOrX || 'top' in optionsOrX || 'left' in optionsOrX) {\n super.scrollBy(optionsOrX);\n return;\n }\n\n const travelOptions = optionsOrX as ScrollByTravelOptions;\n const distance = this.resolveDistance(travelOptions.progress, travelOptions.distance);\n this.scrollTarget.scrollBy({\n left: this.axis === 'x' ? distance : undefined,\n top: this.axis === 'y' ? distance : undefined,\n behavior: travelOptions.behavior,\n });\n }\n\n private get axis(): 'x' | 'y' {\n return this.getAttribute('axis') === 'x' ? 'x' : 'y';\n }\n\n private resolveDistance(progress?: number, distance?: number): number {\n if (distance !== undefined) return distance;\n return clamp(progress ?? 0, 0, 1) * this.getAvailableDistance();\n }\n\n private readonly handleScroll = (): void => {\n dispatch(this, 'cap-scroll', {\n progress: this.getProgress(),\n distance: this.getDistance(),\n availableDistance: this.getAvailableDistance(),\n });\n };\n}\n\n/** Structural content wrapper for `<cap-scroll>`. */\nexport class CapScrollContent extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n }\n}\n","let baseThemeColor: string | null = null;\nlet activeDimmerCount = 0;\n\nfunction getThemeMeta(documentRef: Document): HTMLMetaElement | null {\n return documentRef.querySelector<HTMLMetaElement>('meta[name=\"theme-color\"]');\n}\n\nfunction parseHexColor(color: string): [number, number, number] | null {\n const normalized = color.trim().replace('#', '');\n if (![3, 6].includes(normalized.length)) return null;\n\n const expanded =\n normalized.length === 3\n ? normalized\n .split('')\n .map((char) => `${char}${char}`)\n .join('')\n : normalized;\n const value = Number.parseInt(expanded, 16);\n if (!Number.isFinite(value)) return null;\n\n return [(value >> 16) & 255, (value >> 8) & 255, value & 255];\n}\n\nfunction parseRgbColor(color: string): [number, number, number] | null {\n const match = color.match(/rgba?\\(([^)]+)\\)/i);\n if (!match) return null;\n\n const values = match[1]\n .split(/[\\s,/]+/)\n .map((item) => Number.parseFloat(item))\n .filter((item) => Number.isFinite(item));\n\n if (values.length < 3) return null;\n return [values[0], values[1], values[2]];\n}\n\nfunction toHex(channel: number): string {\n return Math.round(channel).toString(16).padStart(2, '0');\n}\n\nfunction blend(base: string, overlay: string, alpha: number): string | null {\n const baseRgb = parseHexColor(base) || parseRgbColor(base);\n const overlayRgb = parseHexColor(overlay) || parseRgbColor(overlay);\n if (!baseRgb || !overlayRgb) return null;\n\n const [r, g, b] = baseRgb.map((channel, index) => channel * (1 - alpha) + overlayRgb[index] * alpha);\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n/** Updates the browser theme color while preserving sheet dimming overlays. */\nexport function updateThemeColor(color: string, documentRef: Document = document): void {\n const meta = getThemeMeta(documentRef);\n if (!meta) return;\n\n if (activeDimmerCount > 0) {\n baseThemeColor = color;\n return;\n }\n\n meta.content = color;\n}\n\n/** Applies a dimmed theme color for presented modal sheets. */\nexport function setThemeColorDimming(documentRef: Document, alpha: number, overlayColor = 'rgb(0 0 0)'): void {\n const meta = getThemeMeta(documentRef);\n if (!meta) return;\n\n if (baseThemeColor === null) {\n baseThemeColor = meta.content;\n }\n\n const next = blend(baseThemeColor, overlayColor, alpha);\n if (next) {\n meta.content = next;\n }\n}\n\n/** Registers an active theme-color dimmer. */\nexport function retainThemeColorDimmer(): void {\n activeDimmerCount += 1;\n}\n\n/** Releases a theme-color dimmer and restores the base color when possible. */\nexport function releaseThemeColorDimmer(documentRef: Document): void {\n activeDimmerCount = Math.max(0, activeDimmerCount - 1);\n if (activeDimmerCount === 0 && baseThemeColor !== null) {\n const meta = getThemeMeta(documentRef);\n if (meta) {\n meta.content = baseThemeColor;\n }\n baseThemeColor = null;\n }\n}\n","import { releaseThemeColorDimmer, retainThemeColorDimmer, setThemeColorDimming } from './theme-color';\nimport type {\n SheetActiveDetentChangeEvent,\n SheetAnimationSettings,\n SheetInsetValue,\n SheetOptions,\n SheetPlacement,\n SheetPresentedChangeEvent,\n SheetProgressAnimation,\n SheetSafeAreaEdge,\n SheetSafeAreaMode,\n SheetTrack,\n SheetTravelEvent,\n SheetTravelStatus,\n} from './types';\nimport {\n clamp,\n createId,\n dispatch,\n getFocusable,\n isVerticalTrack,\n measureCssLength,\n parseBoolean,\n parseList,\n parsePlacement,\n parseTracks,\n shouldSkipMotion,\n toEm,\n trackForPlacement,\n trackSign,\n} from './utils';\n\ntype Source = SheetPresentedChangeEvent['source'];\n\ninterface SheetParts {\n view?: HTMLElement;\n backdrop?: HTMLElement;\n content?: HTMLElement;\n title?: HTMLElement;\n description?: HTMLElement;\n outlets: Set<HTMLElement>;\n islands: Set<HTMLElement>;\n externalOverlays: Set<HTMLElement>;\n autoFocusTarget?: HTMLElement;\n}\n\ninterface PointerTravel {\n id: number;\n startOffsetPx: number;\n startX: number;\n startY: number;\n lastX: number;\n lastY: number;\n lastTime: number;\n velocity: number;\n dragging: boolean;\n}\n\nconst defaultOptions: Required<\n Pick<\n SheetOptions,\n | 'contentPlacement'\n | 'sheetRole'\n | 'safeArea'\n | 'detached'\n | 'swipe'\n | 'swipeDismissal'\n | 'swipeOvershoot'\n | 'swipeTrap'\n | 'inertOutside'\n | 'nativeEdgeSwipePrevention'\n | 'nativeFocusScrollPrevention'\n | 'closeOnOutsideClick'\n | 'closeOnEscape'\n | 'focusTrap'\n | 'restoreFocus'\n | 'themeColorDimming'\n >\n> = {\n contentPlacement: 'bottom',\n sheetRole: 'dialog',\n detached: false,\n safeArea: 'auto',\n swipe: true,\n swipeDismissal: true,\n swipeOvershoot: true,\n swipeTrap: true,\n inertOutside: true,\n nativeEdgeSwipePrevention: true,\n nativeFocusScrollPrevention: true,\n closeOnOutsideClick: true,\n closeOnEscape: true,\n focusTrap: true,\n restoreFocus: true,\n themeColorDimming: 'auto',\n};\n\nconst defaultAnimation: Required<Pick<SheetAnimationSettings, 'duration' | 'easing' | 'skip' | 'contentMove'>> = {\n duration: 420,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n skip: 'auto',\n contentMove: true,\n};\n\nconst stackRegistry = new Map<string, Set<SheetController>>();\n\ninterface DocumentLockSnapshot {\n htmlOverflow: string;\n htmlTouchAction: string;\n bodyOverflow: string;\n bodyTouchAction: string;\n}\n\nconst documentLockDepth = new WeakMap<Document, number>();\nconst documentLockSnapshot = new WeakMap<Document, DocumentLockSnapshot>();\n\nfunction parseNumber(value: string | null): number | undefined {\n if (value === null) return undefined;\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction normalizeDetents(value: string | string[] | undefined): string[] {\n if (Array.isArray(value)) return value.filter(Boolean);\n return parseList(value || null);\n}\n\nconst unitlessInsetPattern = /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/;\n\nfunction normalizeInsetValue(value: string): string {\n return unitlessInsetPattern.test(value) ? `${value}px` : value;\n}\n\nfunction parseInset(value: string | null): SheetInsetValue | undefined {\n const normalized = value?.trim();\n return normalized ? normalizeInsetValue(normalized) : undefined;\n}\n\nfunction formatInsetValue(value: SheetInsetValue | undefined): string {\n if (typeof value === 'number') return Number.isFinite(value) ? `${value}px` : '0em';\n const normalized = value?.trim();\n return normalized ? normalizeInsetValue(normalized) : '0em';\n}\n\nfunction explicitInsetForEdge(options: SheetOptions, edge: SheetSafeAreaEdge): SheetInsetValue | undefined {\n switch (edge) {\n case 'top':\n return options.topInset;\n case 'bottom':\n return options.bottomInset;\n case 'left':\n return options.leftInset;\n case 'right':\n return options.rightInset;\n }\n}\n\nfunction containerInsetForEdge(options: SheetOptions, edge: SheetSafeAreaEdge): string {\n const values = [options.containerOffset?.[edge], explicitInsetForEdge(options, edge)]\n .map(formatInsetValue)\n .filter((value) => value !== '0em');\n if (values.length === 0) return '0em';\n if (values.length === 1) return values[0];\n return `calc(${values.join(' + ')})`;\n}\n\nfunction hasOwnOption(options: Partial<SheetOptions>, key: keyof SheetOptions): boolean {\n return Object.prototype.hasOwnProperty.call(options, key);\n}\n\nfunction affectsDismissedOffset(options: Partial<SheetOptions>): boolean {\n return (\n hasOwnOption(options, 'contentPlacement') ||\n hasOwnOption(options, 'tracks') ||\n hasOwnOption(options, 'detents') ||\n hasOwnOption(options, 'safeArea') ||\n hasOwnOption(options, 'topInset') ||\n hasOwnOption(options, 'bottomInset') ||\n hasOwnOption(options, 'leftInset') ||\n hasOwnOption(options, 'rightInset') ||\n hasOwnOption(options, 'containerOffset')\n );\n}\n\nconst safeAreaEdges: SheetSafeAreaEdge[] = ['top', 'bottom', 'left', 'right'];\n\nfunction parseSafeArea(value: string | null): SheetSafeAreaMode | undefined {\n if (value === null) return undefined;\n\n const normalized = value.trim().toLowerCase();\n if (!normalized || normalized === 'auto') return 'auto';\n if (normalized === 'true' || normalized === 'all') return 'all';\n if (normalized === 'false' || normalized === 'none' || normalized === 'off') return 'none';\n\n const edges = parseList(normalized).filter((edge): edge is SheetSafeAreaEdge =>\n safeAreaEdges.includes(edge as SheetSafeAreaEdge),\n );\n return edges.length > 0 ? edges : 'auto';\n}\nfunction resolveAutoSafeAreaEdges(placement: SheetPlacement): SheetSafeAreaEdge[] {\n switch (placement) {\n case 'bottom':\n return ['bottom', 'left', 'right'];\n case 'top':\n return ['top', 'left', 'right'];\n case 'left':\n return ['top', 'bottom', 'left'];\n case 'right':\n return ['top', 'bottom', 'right'];\n case 'center':\n return safeAreaEdges;\n }\n}\n\nfunction resolveSafeAreaEdges(value: SheetSafeAreaMode | undefined, placement: SheetPlacement): SheetSafeAreaEdge[] {\n if (value === false || value === 'none') return [];\n if (value === true || value === 'all') return safeAreaEdges;\n if (Array.isArray(value)) return value.filter((edge) => safeAreaEdges.includes(edge));\n return resolveAutoSafeAreaEdges(placement);\n}\n\nexport function readOptionsFromElement(root: HTMLElement): SheetOptions {\n const placement = parsePlacement(root.getAttribute('content-placement'));\n const defaultActiveDetent = parseNumber(root.getAttribute('default-active-detent'));\n const activeDetent = parseNumber(root.getAttribute('active-detent'));\n\n return {\n componentId: root.getAttribute('component-id') || root.id || undefined,\n stack: root.getAttribute('stack') || undefined,\n defaultPresented: parseBoolean(root.getAttribute('default-presented'), false),\n presented: root.hasAttribute('presented') ? parseBoolean(root.getAttribute('presented'), true) : undefined,\n defaultActiveDetent,\n activeDetent,\n detents: normalizeDetents(root.getAttribute('detents') || undefined),\n sheetRole: root.getAttribute('sheet-role') || defaultOptions.sheetRole,\n contentPlacement: placement,\n safeArea: parseSafeArea(root.getAttribute('safe-area')),\n detached: parseBoolean(root.getAttribute('detached'), defaultOptions.detached),\n topInset: parseInset(root.getAttribute('top-inset')),\n bottomInset: parseInset(root.getAttribute('bottom-inset')),\n leftInset: parseInset(root.getAttribute('left-inset')),\n rightInset: parseInset(root.getAttribute('right-inset')),\n tracks: parseTracks(root.getAttribute('tracks'), placement === 'center' ? 'bottom' : placement),\n swipe: parseBoolean(root.getAttribute('swipe'), defaultOptions.swipe),\n swipeDismissal: parseBoolean(root.getAttribute('swipe-dismissal'), defaultOptions.swipeDismissal),\n swipeOvershoot: parseBoolean(root.getAttribute('swipe-overshoot'), defaultOptions.swipeOvershoot),\n swipeTrap: parseBoolean(root.getAttribute('swipe-trap'), defaultOptions.swipeTrap),\n inertOutside: parseBoolean(root.getAttribute('inert-outside'), defaultOptions.inertOutside),\n nativeEdgeSwipePrevention: parseBoolean(\n root.getAttribute('native-edge-swipe-prevention'),\n defaultOptions.nativeEdgeSwipePrevention,\n ),\n nativeFocusScrollPrevention: parseBoolean(\n root.getAttribute('native-focus-scroll-prevention'),\n defaultOptions.nativeFocusScrollPrevention,\n ),\n closeOnOutsideClick: parseBoolean(root.getAttribute('close-on-outside-click'), defaultOptions.closeOnOutsideClick),\n closeOnEscape: parseBoolean(root.getAttribute('close-on-escape'), defaultOptions.closeOnEscape),\n focusTrap: parseBoolean(root.getAttribute('focus-trap'), defaultOptions.focusTrap),\n restoreFocus: parseBoolean(root.getAttribute('restore-focus'), defaultOptions.restoreFocus),\n themeColorDimming:\n root.getAttribute('theme-color-dimming') === 'false'\n ? false\n : root.getAttribute('theme-color-dimming') === 'auto'\n ? 'auto'\n : defaultOptions.themeColorDimming,\n };\n}\n\nfunction resolveAnimation(\n settings?: SheetAnimationSettings,\n): Required<Pick<SheetAnimationSettings, 'duration' | 'easing' | 'skip' | 'contentMove'>> {\n const preset = settings?.preset || 'smooth';\n const presetDefaults: Record<string, Pick<SheetAnimationSettings, 'duration' | 'easing'>> = {\n gentle: { duration: 520, easing: 'cubic-bezier(0.16, 1, 0.3, 1)' },\n smooth: { duration: defaultAnimation.duration, easing: defaultAnimation.easing },\n snappy: { duration: 260, easing: 'cubic-bezier(0.2, 0, 0, 1)' },\n };\n\n return {\n ...defaultAnimation,\n ...presetDefaults[preset],\n duration: settings?.duration ?? presetDefaults[preset]?.duration ?? defaultAnimation.duration,\n easing: settings?.easing ?? presetDefaults[preset]?.easing ?? defaultAnimation.easing,\n skip: settings?.skip ?? defaultAnimation.skip,\n contentMove: settings?.contentMove ?? defaultAnimation.contentMove,\n };\n}\n\nfunction attributeBoolean(value: boolean): string {\n return value ? 'true' : 'false';\n}\n\n/** Imperative controller backing a `<cap-sheet>` custom element. */\nexport class SheetController {\n readonly root: HTMLElement;\n readonly id: string;\n readonly parts: SheetParts = {\n outlets: new Set(),\n islands: new Set(),\n externalOverlays: new Set(),\n };\n\n options: SheetOptions;\n presented = false;\n activeDetent = 0;\n status: SheetTravelStatus = 'idle';\n\n private detentOffsetsPx: number[] = [0, 0];\n private hiddenOffsetPx = 0;\n private currentOffsetPx = 0;\n private activeTrack: SheetTrack = 'bottom';\n private pointerTravel: PointerTravel | null = null;\n private connected = false;\n private lockedScroll = false;\n private inertedElements = new Map<HTMLElement, { inert: boolean; ariaHidden: string | null }>();\n private previousFocus: Element | null = null;\n private hasThemeDimmer = false;\n private stackId: string | null = null;\n private documentListenersAttached = false;\n private viewListenersElement: HTMLElement | null = null;\n private visualViewportListenersAttached = false;\n\n private readonly handleVisualViewportResize = (): void => {\n const view = this.parts.view;\n const visualViewport = this.root.ownerDocument.defaultView?.visualViewport;\n if (!view) return;\n if (!visualViewport || this.options.nativeFocusScrollPrevention === false) {\n this.setKeyboardOffset('0em');\n return;\n }\n\n const layoutHeight = this.root.ownerDocument.documentElement.clientHeight;\n const keyboardOffset = Math.max(0, layoutHeight - visualViewport.height - visualViewport.offsetTop);\n this.setKeyboardOffset(`${toEm(view, keyboardOffset)}em`);\n };\n\n private readonly handleFocusIn = (event: FocusEvent): void => {\n if (!this.presented || this.options.nativeFocusScrollPrevention === false) return;\n const target = event.target;\n const content = this.parts.content;\n if (!(target instanceof HTMLElement) || !content?.contains(target)) return;\n if (!['input', 'select', 'textarea'].includes(target.localName) && !target.isContentEditable) return;\n\n requestAnimationFrame(() => target.scrollIntoView({ block: 'nearest', inline: 'nearest' }));\n };\n\n private readonly handleDocumentKeyDown = (event: KeyboardEvent): void => {\n if (!this.presented) return;\n if (event.key === 'Escape' && this.options.closeOnEscape !== false) {\n event.preventDefault();\n void this.dismiss({ source: 'escape' });\n return;\n }\n if (event.key === 'Tab' && this.options.focusTrap !== false) {\n this.trapFocus(event);\n }\n };\n\n private readonly handleViewClick = (event: MouseEvent): void => {\n if (!this.presented || this.options.closeOnOutsideClick === false) return;\n if (event.target === this.parts.view || event.target === this.parts.backdrop) {\n void this.dismiss({ source: 'outside' });\n }\n };\n\n private readonly handlePointerDown = (event: PointerEvent): void => {\n if (!this.presented || this.options.swipe === false || this.options.contentPlacement === 'center') return;\n if (!(event.target instanceof Element)) return;\n if (!this.parts.content?.contains(event.target) && event.target !== this.parts.backdrop) return;\n if (this.options.nativeEdgeSwipePrevention !== false && this.isNativeEdgePointer(event)) {\n event.preventDefault();\n }\n\n this.remeasure();\n this.pointerTravel = {\n id: event.pointerId,\n startOffsetPx: this.currentOffsetPx,\n startX: event.clientX,\n startY: event.clientY,\n lastX: event.clientX,\n lastY: event.clientY,\n lastTime: performance.now(),\n velocity: 0,\n dragging: false,\n };\n };\n\n private readonly handlePointerMove = (event: PointerEvent): void => {\n const travel = this.pointerTravel;\n if (travel?.id !== event.pointerId) return;\n\n const axis = isVerticalTrack(this.activeTrack) ? 'y' : 'x';\n const current = axis === 'y' ? event.clientY : event.clientX;\n const start = axis === 'y' ? travel.startY : travel.startX;\n const delta = current - start;\n const crossDelta = axis === 'y' ? event.clientX - travel.startX : event.clientY - travel.startY;\n\n if (!travel.dragging) {\n if (Math.abs(delta) < 6 || Math.abs(crossDelta) > Math.abs(delta) * 1.25) return;\n travel.dragging = true;\n (event.currentTarget as HTMLElement | null)?.setPointerCapture?.(event.pointerId);\n this.setStatus('dragging');\n dispatch(this.root, 'cap-sheet-drag-start', this.getTravelEvent());\n }\n\n if (this.options.swipeTrap !== false) {\n event.preventDefault();\n }\n\n const now = performance.now();\n const previous = axis === 'y' ? travel.lastY : travel.lastX;\n const elapsed = Math.max(now - travel.lastTime, 1);\n travel.velocity = ((current - previous) / elapsed) * 1000;\n travel.lastX = event.clientX;\n travel.lastY = event.clientY;\n travel.lastTime = now;\n\n const nextOffset = this.limitOffset(travel.startOffsetPx + delta);\n this.applyOffset(nextOffset, 'dragging');\n };\n\n private readonly handlePointerUp = (event: PointerEvent): void => {\n const travel = this.pointerTravel;\n if (travel?.id !== event.pointerId) return;\n\n const currentTarget = event.currentTarget as HTMLElement | null;\n if (currentTarget?.hasPointerCapture?.(event.pointerId)) {\n currentTarget.releasePointerCapture(event.pointerId);\n }\n\n this.pointerTravel = null;\n if (!travel.dragging) return;\n\n const nearest = this.nearestDetentForOffset(this.currentOffsetPx, travel.velocity);\n dispatch(this.root, 'cap-sheet-drag-end', this.getTravelEvent());\n\n if (nearest === 0 && this.options.swipeDismissal !== false) {\n void this.dismiss({ source: 'gesture' });\n return;\n }\n\n void this.stepTo(nearest, { source: 'gesture' });\n };\n\n private readonly handleWheel = (event: WheelEvent): void => {\n if (!this.presented || this.options.swipe === false || this.options.contentPlacement === 'center') return;\n if (!(event.target instanceof Element)) return;\n if (!this.parts.content?.contains(event.target) && event.target !== this.parts.backdrop) return;\n\n const delta = isVerticalTrack(this.activeTrack) ? event.deltaY : event.deltaX;\n if (Math.abs(delta) < 1) return;\n\n const nextOffset = this.limitOffset(this.currentOffsetPx + delta);\n if (Math.abs(nextOffset - this.currentOffsetPx) < 0.5) return;\n\n event.preventDefault();\n this.applyOffset(nextOffset, 'dragging');\n window.clearTimeout((this.root as HTMLElement & { __capWheelSettle?: number }).__capWheelSettle);\n (this.root as HTMLElement & { __capWheelSettle?: number }).__capWheelSettle = window.setTimeout(() => {\n const nearest = this.nearestDetentForOffset(this.currentOffsetPx, delta * 10);\n if (nearest === 0 && this.options.swipeDismissal !== false) {\n void this.dismiss({ source: 'gesture' });\n } else {\n void this.stepTo(nearest, { source: 'gesture' });\n }\n }, 120);\n };\n\n constructor(root: HTMLElement) {\n this.root = root;\n this.options = readOptionsFromElement(root);\n this.id = this.options.componentId || root.id || createId('cap-sheet');\n }\n\n /** Connect the controller to the DOM and initialize current state. */\n connect(): void {\n if (this.connected) return;\n this.connected = true;\n const elementOptions = readOptionsFromElement(this.root);\n (this as { id: string }).id = elementOptions.componentId || this.root.id || this.id;\n if (!this.root.id) this.root.id = this.id;\n this.configure(elementOptions);\n\n const nextPresented = this.options.presented ?? this.options.defaultPresented ?? false;\n this.activeDetent = this.resolveInitialDetent();\n this.presented = nextPresented;\n this.setStatus('idle');\n this.remeasure();\n this.applyOffset(\n nextPresented ? this.detentOffsetsPx[this.activeDetent] || 0 : this.detentOffsetsPx[0] || 0,\n 'idle',\n );\n this.updateDomState(false);\n this.addGlobalListeners();\n this.registerStack();\n }\n\n /** Disconnect listeners and restore outside DOM state. */\n disconnect(): void {\n this.connected = false;\n this.removeGlobalListeners();\n this.unlockPage();\n this.clearInert();\n this.releaseThemeDimmer();\n this.unregisterStack();\n }\n\n /** Update options from attributes or setup helpers. */\n configure(options: Partial<SheetOptions>): void {\n this.options = {\n ...defaultOptions,\n ...this.options,\n ...options,\n detents: normalizeDetents(options.detents ?? this.options.detents),\n };\n const placement = this.options.contentPlacement || defaultOptions.contentPlacement;\n const tracks = Array.isArray(this.options.tracks)\n ? this.options.tracks\n : this.options.tracks\n ? [this.options.tracks]\n : [placement === 'center' ? 'bottom' : placement];\n this.activeTrack = trackForPlacement(placement, tracks);\n\n this.parts.view?.setAttribute('content-placement', placement);\n this.parts.view?.setAttribute('role', this.options.sheetRole || 'dialog');\n this.applySafeArea();\n this.handleVisualViewportResize();\n if (this.parts.content) {\n this.parts.content.setAttribute('aria-modal', attributeBoolean(this.options.inertOutside !== false));\n }\n this.linkAccessibleNames();\n if (this.connected && !this.presented && this.parts.content && affectsDismissedOffset(options)) {\n this.remeasure();\n this.applyOffset(this.detentOffsetsPx[0] || this.hiddenOffsetPx, this.status);\n this.updateDomState(false);\n }\n this.registerStack();\n }\n\n /** Register a view, backdrop, content, or semantic part. */\n registerPart(part: keyof Omit<SheetParts, 'outlets' | 'islands' | 'externalOverlays'>, element: HTMLElement): void {\n this.parts[part] = element;\n this.configure(this.options);\n if (this.connected && part === 'view') {\n this.addViewListeners();\n this.addVisualViewportListeners();\n this.handleVisualViewportResize();\n }\n this.remeasure();\n this.applyOffset(\n this.presented ? this.detentOffsetsPx[this.activeDetent] || 0 : this.detentOffsetsPx[0] || this.hiddenOffsetPx,\n this.status,\n );\n this.updateDomState(this.presented);\n }\n\n /** Unregister a view, backdrop, content, or semantic part. */\n unregisterPart(part: keyof Omit<SheetParts, 'outlets' | 'islands' | 'externalOverlays'>, element: HTMLElement): void {\n if (this.parts[part] === element) {\n if (part === 'view') this.removeViewListeners();\n this.parts[part] = undefined;\n }\n }\n\n /** Register an outlet animated by sheet progress. */\n registerOutlet(element: HTMLElement): void {\n this.parts.outlets.add(element);\n this.updateOutletProgress();\n }\n\n /** Unregister an outlet. */\n unregisterOutlet(element: HTMLElement): void {\n this.parts.outlets.delete(element);\n }\n\n /** Register an outside island that remains interactive with inert outside enabled. */\n registerIsland(element: HTMLElement): void {\n this.parts.islands.add(element);\n if (this.presented) this.applyInert();\n }\n\n /** Unregister an outside island. */\n unregisterIsland(element: HTMLElement): void {\n this.parts.islands.delete(element);\n if (this.presented) this.applyInert();\n }\n\n /** Present the sheet. */\n async present(options: { source?: Source; animation?: SheetAnimationSettings; detent?: number } = {}): Promise<void> {\n this.remeasure();\n if (this.presented) {\n await this.stepTo(options.detent ?? this.activeDetent, options);\n return;\n }\n\n this.previousFocus = this.root.ownerDocument.activeElement;\n this.presented = true;\n this.activeDetent = clamp(options.detent ?? this.resolveInitialDetent(), 1, this.detentOffsetsPx.length - 1);\n this.updateDetentState();\n this.updateDomState(true);\n this.lockPage();\n this.applyInert();\n this.retainThemeDimmer();\n this.setStatus('entering');\n dispatch(this.root, 'cap-sheet-present', this.getTravelEvent());\n await this.animateTo(this.detentOffsetsPx[this.activeDetent] || 0, {\n ...(this.options.enteringAnimationSettings || {}),\n ...(options.animation || {}),\n });\n this.setStatus('idle');\n this.focusInitialElement();\n this.emitPresentedChange(true, options.source || 'programmatic');\n this.emitActiveDetentChange(this.activeDetent, 0);\n this.updateStack();\n }\n\n /** Dismiss the sheet. */\n async dismiss(options: { source?: Source; animation?: SheetAnimationSettings } = {}): Promise<void> {\n if (!this.presented) return;\n\n this.remeasure();\n const previous = this.activeDetent;\n this.presented = false;\n this.activeDetent = 0;\n this.updateDetentState();\n this.setStatus('exiting');\n dispatch(this.root, 'cap-sheet-dismiss', this.getTravelEvent());\n await this.animateTo(this.detentOffsetsPx[0] || this.hiddenOffsetPx, {\n ...(this.options.exitingAnimationSettings || {}),\n ...(options.animation || {}),\n });\n this.setStatus('idle');\n this.updateDomState(false);\n this.unlockPage();\n this.clearInert();\n this.releaseThemeDimmer();\n this.restoreFocus();\n this.emitPresentedChange(false, options.source || 'programmatic');\n this.emitActiveDetentChange(0, previous);\n this.updateStack();\n }\n\n /** Toggle presentation state. */\n async toggle(options: { source?: Source; animation?: SheetAnimationSettings } = {}): Promise<void> {\n if (this.presented) {\n await this.dismiss(options);\n } else {\n await this.present(options);\n }\n }\n\n /** Step to a specific detent index. */\n async stepTo(detent: number, options: { source?: Source; animation?: SheetAnimationSettings } = {}): Promise<void> {\n this.remeasure();\n const target = clamp(detent, this.options.swipeDismissal === false ? 1 : 0, this.detentOffsetsPx.length - 1);\n if (target === 0) {\n await this.dismiss(options);\n return;\n }\n if (!this.presented) {\n await this.present({ ...options, detent: target });\n return;\n }\n\n const previous = this.activeDetent;\n this.activeDetent = target;\n this.updateDetentState();\n this.setStatus('settling');\n await this.animateTo(this.detentOffsetsPx[target] || 0, {\n ...(this.options.steppingAnimationSettings || {}),\n ...(options.animation || {}),\n });\n this.setStatus('idle');\n if (previous !== target) {\n this.emitActiveDetentChange(target, previous);\n }\n }\n\n /** Step up or down one detent. */\n async step(\n direction: 'up' | 'down' = 'up',\n options: { source?: Source; animation?: SheetAnimationSettings } = {},\n ): Promise<void> {\n const delta = direction === 'up' ? 1 : -1;\n await this.stepTo(this.activeDetent + delta, options);\n }\n\n /** Recalculate content size and detent offsets. */\n remeasure(): void {\n const content = this.parts.content;\n if (!content) return;\n\n const placement = this.options.contentPlacement || 'bottom';\n if (placement === 'center') {\n this.hiddenOffsetPx = 0;\n this.detentOffsetsPx = [0, 0];\n return;\n }\n\n const view = this.parts.view;\n const shouldMeasureHiddenView = Boolean(view?.hidden);\n const previousVisibility = view?.style.visibility || '';\n const previousPointerEvents = view?.style.pointerEvents || '';\n if (view && shouldMeasureHiddenView) {\n view.hidden = false;\n view.style.visibility = 'hidden';\n view.style.pointerEvents = 'none';\n }\n\n try {\n const track = this.activeTrack;\n const sign = trackSign(track);\n const axis = isVerticalTrack(track) ? 'y' : 'x';\n const rect = content.getBoundingClientRect();\n const viewRect = view?.getBoundingClientRect();\n const size = axis === 'y' ? rect.height : rect.width;\n const transformedX = axis === 'x' ? this.currentOffsetPx : 0;\n const transformedY = axis === 'y' ? this.currentOffsetPx : 0;\n const contentRect = {\n top: rect.top - transformedY,\n right: rect.right - transformedX,\n bottom: rect.bottom - transformedY,\n left: rect.left - transformedX,\n };\n let hiddenOffsetPx = Math.max(size, 1) * sign;\n\n if (viewRect) {\n if (track === 'top') hiddenOffsetPx = viewRect.top - contentRect.bottom;\n if (track === 'bottom') hiddenOffsetPx = viewRect.bottom - contentRect.top;\n if (track === 'left') hiddenOffsetPx = viewRect.left - contentRect.right;\n if (track === 'right') hiddenOffsetPx = viewRect.right - contentRect.left;\n }\n this.hiddenOffsetPx = Math.abs(hiddenOffsetPx) > 1 ? hiddenOffsetPx : sign;\n\n const detents = normalizeDetents(this.options.detents);\n const offsets = [this.hiddenOffsetPx];\n const measureContext = content;\n for (const detent of detents) {\n const visible = measureCssLength(detent, measureContext, axis);\n const offset = Math.max(Math.abs(this.hiddenOffsetPx) - visible, 0) * sign;\n offsets.push(offset);\n }\n offsets.push(0);\n this.detentOffsetsPx = offsets;\n this.activeDetent = clamp(this.activeDetent, this.options.swipeDismissal === false ? 1 : 0, offsets.length - 1);\n dispatch(this.root, 'cap-sheet-travel-range-change', {\n offsets: offsets.map((offset) => toEm(content, offset)),\n count: offsets.length,\n });\n } finally {\n if (view && shouldMeasureHiddenView) {\n view.hidden = true;\n view.style.visibility = previousVisibility;\n view.style.pointerEvents = previousPointerEvents;\n }\n }\n }\n\n /** Read current normalized travel details. */\n getTravelEvent(): SheetTravelEvent {\n const progress = this.getProgressForOffset(this.currentOffsetPx);\n return {\n progress,\n activeDetent: this.activeDetent,\n offset: toEm(this.parts.content || this.root, this.currentOffsetPx),\n status: this.status,\n };\n }\n\n private resolveInitialDetent(): number {\n const detents = normalizeDetents(this.options.detents);\n const last = detents.length + 1;\n const configured = this.options.activeDetent ?? this.options.defaultActiveDetent;\n if (configured !== undefined) return clamp(configured, 1, last);\n return detents.length > 0 ? 1 : last;\n }\n\n private applyOffset(offsetPx: number, status: SheetTravelStatus): void {\n this.currentOffsetPx = offsetPx;\n this.setStatus(status);\n const content = this.parts.content;\n const backdrop = this.parts.backdrop;\n const view = this.parts.view;\n const placement = this.options.contentPlacement || 'bottom';\n const progress = this.getProgressForOffset(offsetPx);\n\n if (content) {\n if (placement === 'center') {\n const scale = 0.96 + progress * 0.04;\n content.style.transform = `translate3d(0, 0, 0) scale(${scale})`;\n content.style.opacity = String(progress);\n } else {\n const offsetEm = toEm(content, offsetPx);\n const x = isVerticalTrack(this.activeTrack) ? '0' : `${offsetEm}em`;\n const y = isVerticalTrack(this.activeTrack) ? `${offsetEm}em` : '0';\n content.style.transform = `translate3d(${x}, ${y}, 0)`;\n content.style.opacity = '1';\n }\n }\n\n if (backdrop) {\n backdrop.style.opacity = String(\n progress *\n Number.parseFloat(getComputedStyle(backdrop).getPropertyValue('--cap-sheet-backdrop-opacity') || '0.44'),\n );\n backdrop.style.pointerEvents = progress > 0.01 && !this.hasInteractiveOutside() ? 'auto' : 'none';\n }\n\n if (view) {\n view.style.pointerEvents = progress > 0.01 && !this.hasInteractiveOutside() ? 'auto' : 'none';\n view.dataset.presented = this.presented ? 'true' : 'false';\n view.dataset.status = status;\n view.dataset.outsideInteractive = this.hasInteractiveOutside() ? 'true' : 'false';\n }\n\n this.applyOutletAnimations(progress);\n this.updateThemeDimming(progress);\n dispatch(this.root, 'cap-sheet-travel', this.getTravelEvent());\n }\n\n private async animateTo(targetOffsetPx: number, settings?: SheetAnimationSettings): Promise<void> {\n const content = this.parts.content;\n const backdrop = this.parts.backdrop;\n const resolved = resolveAnimation(settings);\n\n if (!content || shouldSkipMotion(resolved.skip)) {\n this.applyOffset(targetOffsetPx, 'idle');\n return;\n }\n\n const startOffset = this.currentOffsetPx;\n const fromProgress = this.getProgressForOffset(startOffset);\n const toProgress = this.getProgressForOffset(targetOffsetPx);\n const duration = Math.max(0, resolved.duration);\n const axis = isVerticalTrack(this.activeTrack) ? 'y' : 'x';\n const fromEm = toEm(content, startOffset);\n const targetEm = toEm(content, targetOffsetPx);\n const fromTransform =\n this.options.contentPlacement === 'center'\n ? `translate3d(0, 0, 0) scale(${0.96 + fromProgress * 0.04})`\n : axis === 'y'\n ? `translate3d(0, ${fromEm}em, 0)`\n : `translate3d(${fromEm}em, 0, 0)`;\n const toTransform =\n this.options.contentPlacement === 'center'\n ? `translate3d(0, 0, 0) scale(${0.96 + toProgress * 0.04})`\n : axis === 'y'\n ? `translate3d(0, ${targetEm}em, 0)`\n : `translate3d(${targetEm}em, 0, 0)`;\n\n const contentAnimation = resolved.contentMove\n ? content.animate(\n [\n { transform: fromTransform, opacity: this.options.contentPlacement === 'center' ? fromProgress : 1 },\n { transform: toTransform, opacity: this.options.contentPlacement === 'center' ? toProgress : 1 },\n ],\n { duration, easing: resolved.easing, fill: 'both' },\n )\n : null;\n\n const backdropOpacity = backdrop\n ? Number.parseFloat(getComputedStyle(backdrop).getPropertyValue('--cap-sheet-backdrop-opacity') || '0.44')\n : 0;\n const backdropAnimation = backdrop?.animate(\n [{ opacity: fromProgress * backdropOpacity }, { opacity: toProgress * backdropOpacity }],\n { duration, easing: resolved.easing, fill: 'both' },\n );\n\n const started = performance.now();\n let frame: number;\n const tick = (): void => {\n const progress = duration === 0 ? 1 : clamp((performance.now() - started) / duration, 0, 1);\n const offset = startOffset + (targetOffsetPx - startOffset) * progress;\n this.currentOffsetPx = offset;\n this.applyOutletAnimations(this.getProgressForOffset(offset));\n this.updateThemeDimming(this.getProgressForOffset(offset));\n dispatch(this.root, 'cap-sheet-travel', this.getTravelEvent());\n if (progress < 1) frame = requestAnimationFrame(tick);\n };\n frame = requestAnimationFrame(tick);\n\n await Promise.allSettled([\n contentAnimation?.finished,\n backdropAnimation ? backdropAnimation.finished : Promise.resolve(),\n ]);\n cancelAnimationFrame(frame);\n contentAnimation?.cancel();\n backdropAnimation?.cancel();\n this.applyOffset(targetOffsetPx, 'idle');\n }\n\n private getProgressForOffset(offsetPx: number): number {\n if (this.options.contentPlacement === 'center') {\n return this.presented ? 1 : 0;\n }\n const hidden = Math.abs(this.hiddenOffsetPx) || 1;\n return clamp(1 - Math.abs(offsetPx) / hidden, 0, 1);\n }\n\n private limitOffset(offsetPx: number): number {\n const sign = trackSign(this.activeTrack);\n const maxAbs = Math.abs(this.hiddenOffsetPx);\n const min = sign < 0 ? -maxAbs : 0;\n const max = sign < 0 ? 0 : maxAbs;\n if (this.options.swipeOvershoot === false) return clamp(offsetPx, min, max);\n\n if (offsetPx < min) return min + (offsetPx - min) * 0.18;\n if (offsetPx > max) return max + (offsetPx - max) * 0.18;\n return offsetPx;\n }\n\n private nearestDetentForOffset(offsetPx: number, velocity: number): number {\n const sign = trackSign(this.activeTrack);\n const fling = Math.abs(velocity) > 700 ? Math.sign(velocity) * sign : 0;\n if (fling > 0) return Math.max(0, this.activeDetent - 1);\n if (fling < 0) return Math.min(this.detentOffsetsPx.length - 1, this.activeDetent + 1);\n\n let nearest = 0;\n let nearestDistance = Number.POSITIVE_INFINITY;\n this.detentOffsetsPx.forEach((offset, index) => {\n if (index === 0 && this.options.swipeDismissal === false) return;\n const distance = Math.abs(offset - offsetPx);\n if (distance < nearestDistance) {\n nearest = index;\n nearestDistance = distance;\n }\n });\n return nearest;\n }\n\n private hasInteractiveOutside(): boolean {\n return this.options.inertOutside === false && this.options.closeOnOutsideClick === false;\n }\n\n private isNativeEdgePointer(event: PointerEvent): boolean {\n const view = this.parts.view;\n if (!view) return false;\n\n const rect = view.getBoundingClientRect();\n const edgeSize = Math.max(20, rect.width * 0.04);\n return (\n event.clientX - rect.left <= edgeSize ||\n rect.right - event.clientX <= edgeSize ||\n event.clientY - rect.top <= edgeSize ||\n rect.bottom - event.clientY <= edgeSize\n );\n }\n\n private applySafeArea(): void {\n const view = this.parts.view;\n if (!view) return;\n\n const edges = new Set(\n resolveSafeAreaEdges(this.options.safeArea, this.options.contentPlacement || defaultOptions.contentPlacement),\n );\n view.dataset.safeArea = edges.size > 0 ? Array.from(edges).join(' ') : 'none';\n view.dataset.detached = this.options.detached ? 'true' : 'false';\n for (const edge of safeAreaEdges) {\n view.style.setProperty(\n `--cap-sheet-applied-safe-area-${edge}`,\n edges.has(edge) ? `var(--cap-sheet-safe-area-${edge})` : '0em',\n );\n view.style.setProperty(`--cap-sheet-container-offset-${edge}`, containerInsetForEdge(this.options, edge));\n }\n }\n\n private addGlobalListeners(): void {\n const doc = this.root.ownerDocument;\n if (!this.documentListenersAttached) {\n doc.addEventListener('keydown', this.handleDocumentKeyDown);\n this.documentListenersAttached = true;\n }\n this.addViewListeners();\n this.addVisualViewportListeners();\n }\n\n private removeGlobalListeners(): void {\n const doc = this.root.ownerDocument;\n if (this.documentListenersAttached) {\n doc.removeEventListener('keydown', this.handleDocumentKeyDown);\n this.documentListenersAttached = false;\n }\n this.removeViewListeners();\n this.removeVisualViewportListeners();\n }\n\n private addViewListeners(): void {\n const view = this.parts.view;\n if (!view || this.viewListenersElement === view) return;\n\n this.removeViewListeners();\n view.addEventListener('click', this.handleViewClick);\n view.addEventListener('pointerdown', this.handlePointerDown);\n view.addEventListener('pointermove', this.handlePointerMove, { passive: false });\n view.addEventListener('pointerup', this.handlePointerUp);\n view.addEventListener('pointercancel', this.handlePointerUp);\n view.addEventListener('focusin', this.handleFocusIn);\n view.addEventListener('wheel', this.handleWheel, { passive: false });\n this.viewListenersElement = view;\n }\n\n private removeViewListeners(): void {\n const view = this.viewListenersElement;\n if (!view) return;\n\n view.removeEventListener('click', this.handleViewClick);\n view.removeEventListener('pointerdown', this.handlePointerDown);\n view.removeEventListener('pointermove', this.handlePointerMove);\n view.removeEventListener('pointerup', this.handlePointerUp);\n view.removeEventListener('pointercancel', this.handlePointerUp);\n view.removeEventListener('focusin', this.handleFocusIn);\n view.removeEventListener('wheel', this.handleWheel);\n this.viewListenersElement = null;\n }\n\n private addVisualViewportListeners(): void {\n const visualViewport = this.root.ownerDocument.defaultView?.visualViewport;\n if (!visualViewport || this.visualViewportListenersAttached) return;\n\n visualViewport.addEventListener('resize', this.handleVisualViewportResize);\n visualViewport.addEventListener('scroll', this.handleVisualViewportResize);\n this.visualViewportListenersAttached = true;\n this.handleVisualViewportResize();\n }\n\n private removeVisualViewportListeners(): void {\n const visualViewport = this.root.ownerDocument.defaultView?.visualViewport;\n if (!visualViewport || !this.visualViewportListenersAttached) return;\n\n visualViewport.removeEventListener('resize', this.handleVisualViewportResize);\n visualViewport.removeEventListener('scroll', this.handleVisualViewportResize);\n this.visualViewportListenersAttached = false;\n }\n\n private updateDomState(presented: boolean): void {\n const view = this.parts.view;\n const content = this.parts.content;\n if (view) {\n view.hidden = !presented && Math.abs(this.currentOffsetPx) === Math.abs(this.detentOffsetsPx[0] || 0);\n view.dataset.presented = presented ? 'true' : 'false';\n view.dataset.status = this.status;\n view.style.setProperty('--cap-sheet-z-index', String(this.getStackZIndex()));\n }\n if (content) {\n content.setAttribute('aria-hidden', attributeBoolean(!presented));\n content.setAttribute('tabindex', content.getAttribute('tabindex') || '-1');\n }\n this.root.toggleAttribute('presented', presented);\n this.updateDetentState();\n }\n\n private linkAccessibleNames(): void {\n if (!this.parts.content) return;\n if (this.parts.title) {\n if (!this.parts.title.id) this.parts.title.id = createId('cap-sheet-title');\n this.parts.content.setAttribute('aria-labelledby', this.parts.title.id);\n }\n if (this.parts.description) {\n if (!this.parts.description.id) this.parts.description.id = createId('cap-sheet-description');\n this.parts.content.setAttribute('aria-describedby', this.parts.description.id);\n }\n }\n\n private focusInitialElement(): void {\n const content = this.parts.content;\n if (!content) return;\n const target =\n this.parts.autoFocusTarget || content.querySelector<HTMLElement>('cap-auto-focus-target, [autofocus]');\n const focusable = target || getFocusable(content)[0] || content;\n requestAnimationFrame(() => focusable.focus({ preventScroll: this.options.nativeFocusScrollPrevention !== false }));\n }\n\n private restoreFocus(): void {\n if (this.options.restoreFocus === false) return;\n if (this.previousFocus instanceof HTMLElement && this.previousFocus.isConnected) {\n this.previousFocus.focus({ preventScroll: true });\n }\n this.previousFocus = null;\n }\n\n private trapFocus(event: KeyboardEvent): void {\n const content = this.parts.content;\n if (!content) return;\n const focusable = getFocusable(content);\n if (focusable.length === 0) {\n event.preventDefault();\n content.focus({ preventScroll: true });\n return;\n }\n\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = this.root.ownerDocument.activeElement;\n if (event.shiftKey && active === first) {\n event.preventDefault();\n last.focus({ preventScroll: true });\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus({ preventScroll: true });\n }\n }\n\n private lockPage(): void {\n if (this.lockedScroll) return;\n const doc = this.root.ownerDocument;\n const documentElement = doc.documentElement;\n const body = doc.body;\n const depth = documentLockDepth.get(doc) ?? 0;\n\n if (depth === 0) {\n documentLockSnapshot.set(doc, {\n htmlOverflow: documentElement.style.overflow,\n htmlTouchAction: documentElement.style.touchAction,\n bodyOverflow: body.style.overflow,\n bodyTouchAction: body.style.touchAction,\n });\n }\n\n documentElement.style.overflow = 'hidden';\n documentElement.style.touchAction = 'none';\n body.dataset.capSheetScrollLocked = 'true';\n body.style.overflow = 'hidden';\n body.style.touchAction = 'none';\n documentLockDepth.set(doc, depth + 1);\n this.lockedScroll = true;\n }\n\n private unlockPage(): void {\n if (!this.lockedScroll) return;\n const doc = this.root.ownerDocument;\n const documentElement = doc.documentElement;\n const body = doc.body;\n const depth = Math.max((documentLockDepth.get(doc) ?? 1) - 1, 0);\n\n if (depth > 0) {\n documentLockDepth.set(doc, depth);\n this.lockedScroll = false;\n return;\n }\n\n const snapshot = documentLockSnapshot.get(doc);\n delete body.dataset.capSheetScrollLocked;\n documentElement.style.overflow = snapshot?.htmlOverflow ?? '';\n documentElement.style.touchAction = snapshot?.htmlTouchAction ?? '';\n body.style.overflow = snapshot?.bodyOverflow ?? '';\n body.style.touchAction = snapshot?.bodyTouchAction ?? '';\n documentLockDepth.delete(doc);\n documentLockSnapshot.delete(doc);\n this.lockedScroll = false;\n }\n\n private setKeyboardOffset(value: string): void {\n const view = this.parts.view;\n if (!view) return;\n\n if (view.style.getPropertyValue('--cap-sheet-keyboard-offset') !== value) {\n view.style.setProperty('--cap-sheet-keyboard-offset', value);\n }\n if (!this.presented) return;\n\n requestAnimationFrame(() => {\n if (!this.presented) return;\n this.remeasure();\n this.applyOffset(this.detentOffsetsPx[this.activeDetent] || 0, this.status);\n });\n }\n\n private applyInert(): void {\n if (this.options.inertOutside === false || !this.parts.view) return;\n const body = this.root.ownerDocument.body;\n const allowed = new Set<HTMLElement>([this.parts.view, ...this.parts.islands, ...this.parts.externalOverlays]);\n\n this.clearInert();\n for (const child of Array.from(body.children)) {\n if (!(child instanceof HTMLElement)) continue;\n this.inertedElements.set(child, { inert: child.inert, ariaHidden: child.getAttribute('aria-hidden') });\n const isAllowed = Array.from(allowed).some((element) => child === element || child.contains(element));\n if (isAllowed) {\n child.inert = false;\n child.removeAttribute('aria-hidden');\n continue;\n }\n child.inert = true;\n child.setAttribute('aria-hidden', 'true');\n }\n }\n\n private clearInert(): void {\n for (const [element, state] of this.inertedElements) {\n element.inert = state.inert;\n if (state.ariaHidden === null) {\n element.removeAttribute('aria-hidden');\n } else {\n element.setAttribute('aria-hidden', state.ariaHidden);\n }\n }\n this.inertedElements.clear();\n }\n\n private retainThemeDimmer(): void {\n if (this.hasThemeDimmer || this.options.themeColorDimming !== 'auto') return;\n this.hasThemeDimmer = true;\n retainThemeColorDimmer();\n }\n\n private releaseThemeDimmer(): void {\n if (!this.hasThemeDimmer) return;\n this.hasThemeDimmer = false;\n releaseThemeColorDimmer(this.root.ownerDocument);\n }\n\n private updateThemeDimming(progress: number): void {\n if (!this.hasThemeDimmer || this.options.themeColorDimming !== 'auto') return;\n const color = this.parts.backdrop\n ? getComputedStyle(this.parts.backdrop).getPropertyValue('--cap-sheet-backdrop-color') || 'rgb(0 0 0)'\n : 'rgb(0 0 0)';\n setThemeColorDimming(this.root.ownerDocument, clamp(progress * 0.44, 0, 0.7), color);\n }\n\n private applyOutletAnimations(progress: number): void {\n this.updateOutletProgress();\n for (const outlet of this.parts.outlets) {\n const animation = (outlet as HTMLElement & { travelAnimation?: SheetProgressAnimation }).travelAnimation;\n if (!animation) continue;\n for (const [property, value] of Object.entries(animation)) {\n if (value === null || value === undefined) continue;\n if (Array.isArray(value)) {\n outlet.style.setProperty(property, tween(value[0], value[1], progress));\n } else if (typeof value === 'function') {\n const next = value({ progress, tween: (start, end) => tween(start, end, progress) });\n if (next !== null && next !== undefined) outlet.style.setProperty(property, String(next));\n } else {\n outlet.style.setProperty(property, String(value));\n }\n }\n }\n }\n\n private updateOutletProgress(): void {\n const travel = this.getTravelEvent();\n for (const outlet of this.parts.outlets) {\n outlet.style.setProperty('--cap-sheet-progress', String(travel.progress));\n outlet.style.setProperty('--cap-sheet-offset', `${travel.offset}em`);\n outlet.dataset.sheetStatus = travel.status;\n }\n }\n\n private emitPresentedChange(presented: boolean, source: Source): void {\n const detail: SheetPresentedChangeEvent = { presented, source };\n dispatch(this.root, 'cap-sheet-presented-change', detail);\n }\n\n private emitActiveDetentChange(activeDetent: number, previousActiveDetent: number): void {\n const detail: SheetActiveDetentChangeEvent = { activeDetent, previousActiveDetent };\n dispatch(this.root, 'cap-sheet-active-detent-change', detail);\n }\n\n private updateDetentState(): void {\n const activeDetent = String(this.activeDetent);\n this.root.dataset.activeDetent = activeDetent;\n if (this.parts.view) this.parts.view.dataset.activeDetent = activeDetent;\n if (this.parts.content) this.parts.content.dataset.activeDetent = activeDetent;\n }\n\n private registerStack(): void {\n const nextStack = this.options.stack || this.root.closest<HTMLElement>('cap-sheet-stack')?.id || null;\n if (this.stackId === nextStack) return;\n this.unregisterStack();\n this.stackId = nextStack;\n if (!nextStack) return;\n const stack = stackRegistry.get(nextStack) || new Set<SheetController>();\n stack.add(this);\n stackRegistry.set(nextStack, stack);\n this.updateStack();\n }\n\n private unregisterStack(): void {\n if (!this.stackId) return;\n const stack = stackRegistry.get(this.stackId);\n stack?.delete(this);\n if (stack?.size === 0) stackRegistry.delete(this.stackId);\n this.stackId = null;\n }\n\n private getStackZIndex(): number {\n if (!this.stackId) return 1000;\n const stack = Array.from(stackRegistry.get(this.stackId) || []);\n const index = stack.indexOf(this);\n return 1000 + Math.max(index, 0) * 2;\n }\n\n private updateStack(): void {\n if (!this.stackId) return;\n const stack = Array.from(stackRegistry.get(this.stackId) || []);\n const presented = stack.filter((controller) => controller.presented);\n stack.forEach((controller, index) => {\n controller.parts.view?.style.setProperty('--cap-sheet-z-index', String(1000 + index * 2));\n const depth = presented.length - presented.indexOf(controller) - 1;\n const stackDepth = Math.max(depth, 0);\n controller.parts.content?.style.setProperty('--cap-sheet-stack-depth', String(stackDepth));\n controller.applyStackingAnimations(stackDepth);\n });\n }\n\n private applyStackingAnimations(depth: number): void {\n const progress = clamp(depth, 0, 4) / 4;\n for (const outlet of this.parts.outlets) {\n const animation = (outlet as HTMLElement & { stackingAnimation?: SheetProgressAnimation }).stackingAnimation;\n if (!animation) continue;\n for (const [property, value] of Object.entries(animation)) {\n if (value === null || value === undefined) continue;\n if (Array.isArray(value)) {\n outlet.style.setProperty(property, tween(value[0], value[1], progress));\n } else if (typeof value === 'function') {\n const next = value({ progress, tween: (start, end) => tween(start, end, progress) });\n if (next !== null && next !== undefined) outlet.style.setProperty(property, String(next));\n } else {\n outlet.style.setProperty(property, String(value));\n }\n }\n }\n }\n\n private setStatus(status: SheetTravelStatus): void {\n if (this.status === status) return;\n const previousStatus = this.status;\n this.status = status;\n dispatch(this.root, 'cap-sheet-travel-status-change', { previousStatus, status });\n }\n}\n\nfunction tween(start: string | number, end: string | number, progress: number): string {\n const startString = String(start);\n const endString = String(end);\n const startValue = Number.parseFloat(startString);\n const endValue = Number.parseFloat(endString);\n if (!Number.isFinite(startValue) || !Number.isFinite(endValue)) return progress < 1 ? startString : endString;\n\n const unit = endString.replace(String(endValue), '') || startString.replace(String(startValue), '');\n const next = startValue + (endValue - startValue) * progress;\n return `${next}${unit}`;\n}\n","import { readOptionsFromElement, SheetController } from '../core/sheet-controller';\nimport { injectCapSheetStyles } from '../core/styles';\nimport type { SheetAnimationSettings, SheetInsetValue, SheetOptions } from '../core/types';\nimport { parseBoolean } from '../core/utils';\n\nconst observed = [\n 'active-detent',\n 'close-on-escape',\n 'close-on-outside-click',\n 'content-placement',\n 'default-active-detent',\n 'default-presented',\n 'detents',\n 'detached',\n 'focus-trap',\n 'inert-outside',\n 'native-edge-swipe-prevention',\n 'native-focus-scroll-prevention',\n 'presented',\n 'restore-focus',\n 'top-inset',\n 'bottom-inset',\n 'left-inset',\n 'right-inset',\n 'safe-area',\n 'sheet-role',\n 'stack',\n 'swipe',\n 'swipe-dismissal',\n 'swipe-overshoot',\n 'swipe-trap',\n 'theme-color-dimming',\n 'tracks',\n];\n\n/** Root custom element coordinating sheet state, accessibility, gestures, and detents. */\nexport class CapSheet extends HTMLElement {\n readonly controller = new SheetController(this);\n private syncingAttribute = false;\n\n static get observedAttributes(): string[] {\n return observed;\n }\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.style.display ||= 'contents';\n this.controller.connect();\n }\n\n disconnectedCallback(): void {\n this.controller.disconnect();\n }\n\n attributeChangedCallback(name: string): void {\n if (this.syncingAttribute) return;\n this.controller.configure(readChangedOptionsFromElement(this, name));\n if (this.isConnected) {\n if (this.hasAttribute('presented') && !this.controller.presented) {\n void this.present({ source: 'programmatic' });\n } else if (!this.hasAttribute('presented') && this.controller.presented) {\n void this.dismiss({ source: 'programmatic' });\n }\n }\n }\n\n /** True when the sheet is currently presented. */\n get presented(): boolean {\n return this.controller.presented;\n }\n\n set presented(value: boolean) {\n if (value) {\n void this.present();\n } else {\n void this.dismiss();\n }\n }\n\n /** Current active detent index. */\n get activeDetent(): number {\n return this.controller.activeDetent;\n }\n\n set activeDetent(value: number) {\n void this.stepTo(value);\n }\n\n /** Configure the sheet imperatively without depending on a framework adapter. */\n configure(options: Partial<SheetOptions>): void {\n this.controller.configure(options);\n }\n\n /** Present the sheet. */\n async present(\n options: { source?: 'programmatic' | 'trigger'; animation?: SheetAnimationSettings; detent?: number } = {},\n ): Promise<void> {\n await this.controller.present(options);\n this.syncAttribute('presented', true);\n }\n\n /** Dismiss the sheet. */\n async dismiss(\n options: {\n source?: 'programmatic' | 'trigger' | 'gesture' | 'escape' | 'outside';\n animation?: SheetAnimationSettings;\n } = {},\n ): Promise<void> {\n await this.controller.dismiss(options);\n this.syncAttribute('presented', false);\n }\n\n /** Toggle presentation state. */\n async toggle(\n options: { source?: 'programmatic' | 'trigger'; animation?: SheetAnimationSettings } = {},\n ): Promise<void> {\n if (this.presented) {\n await this.dismiss(options);\n } else {\n await this.present(options);\n }\n }\n\n /** Step to a specific detent index. */\n async stepTo(\n detent: number,\n options: { source?: 'programmatic' | 'trigger' | 'gesture'; animation?: SheetAnimationSettings } = {},\n ): Promise<void> {\n await this.controller.stepTo(detent, options);\n if (this.controller.presented) this.syncAttribute('presented', true);\n }\n\n /** Step one detent up or down. */\n async step(\n direction: 'up' | 'down' = 'up',\n options: { source?: 'programmatic' | 'trigger'; animation?: SheetAnimationSettings } = {},\n ): Promise<void> {\n await this.controller.step(direction, options);\n }\n\n private syncAttribute(name: string, enabled: boolean): void {\n this.syncingAttribute = true;\n this.toggleAttribute(name, enabled);\n this.syncingAttribute = false;\n }\n}\n\nexport function getSheetFromElement(element: Element): CapSheet | null {\n const explicitTarget = element.getAttribute('for');\n if (explicitTarget) {\n const found = element.ownerDocument.getElementById(explicitTarget);\n return isCapSheetElement(found) ? found : null;\n }\n\n const nearest = element.closest('cap-sheet');\n return isCapSheetElement(nearest) ? nearest : null;\n}\n\nfunction isCapSheetElement(element: Element | null): element is CapSheet {\n if (element?.localName !== 'cap-sheet') return false;\n const candidate = element as Partial<CapSheet>;\n return typeof candidate.present === 'function' && typeof candidate.dismiss === 'function';\n}\n\nfunction readChangedOptionsFromElement(element: HTMLElement, name: string): Partial<SheetOptions> {\n const options = readOptionsFromElement(element);\n const keysByAttribute: Record<string, (keyof SheetOptions)[]> = {\n 'active-detent': ['activeDetent'],\n 'close-on-escape': ['closeOnEscape'],\n 'close-on-outside-click': ['closeOnOutsideClick'],\n 'content-placement': ['contentPlacement', 'tracks'],\n 'default-active-detent': ['defaultActiveDetent'],\n 'default-presented': ['defaultPresented'],\n detents: ['detents'],\n detached: ['detached'],\n 'focus-trap': ['focusTrap'],\n 'inert-outside': ['inertOutside'],\n 'native-edge-swipe-prevention': ['nativeEdgeSwipePrevention'],\n 'native-focus-scroll-prevention': ['nativeFocusScrollPrevention'],\n presented: ['presented'],\n 'restore-focus': ['restoreFocus'],\n 'top-inset': ['topInset'],\n 'bottom-inset': ['bottomInset'],\n 'left-inset': ['leftInset'],\n 'right-inset': ['rightInset'],\n 'safe-area': ['safeArea'],\n 'sheet-role': ['sheetRole'],\n stack: ['stack'],\n swipe: ['swipe'],\n 'swipe-dismissal': ['swipeDismissal'],\n 'swipe-overshoot': ['swipeOvershoot'],\n 'swipe-trap': ['swipeTrap'],\n 'theme-color-dimming': ['themeColorDimming'],\n tracks: ['tracks'],\n };\n const changed: Partial<SheetOptions> = {};\n for (const key of keysByAttribute[name] || []) {\n changed[key] = options[key] as never;\n }\n return changed;\n}\n\nfunction formatInsetAttribute(value: SheetInsetValue): string | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? `${value}px` : undefined;\n const normalized = value.trim();\n return normalized || undefined;\n}\n\nfunction combineInsetAttributes(...values: (SheetInsetValue | undefined)[]): string | undefined {\n const parts = values.flatMap((value) => {\n const attributeValue = value === undefined ? undefined : formatInsetAttribute(value);\n return attributeValue ? [attributeValue] : [];\n });\n if (parts.length === 0) return undefined;\n return parts.length === 1 ? parts[0] : `calc(${parts.join(' + ')})`;\n}\n\nexport function applySheetOptions(element: HTMLElement, options: Partial<SheetOptions>): void {\n if (options.contentPlacement) element.setAttribute('content-placement', options.contentPlacement);\n if (options.detents !== undefined) {\n element.setAttribute('detents', Array.isArray(options.detents) ? options.detents.join(' ') : options.detents);\n }\n if (options.activeDetent !== undefined) element.setAttribute('active-detent', String(options.activeDetent));\n if (options.defaultActiveDetent !== undefined) {\n element.setAttribute('default-active-detent', String(options.defaultActiveDetent));\n }\n if (options.defaultPresented !== undefined)\n element.setAttribute('default-presented', String(options.defaultPresented));\n if (options.sheetRole) element.setAttribute('sheet-role', options.sheetRole);\n if (options.safeArea !== undefined) {\n element.setAttribute(\n 'safe-area',\n Array.isArray(options.safeArea) ? options.safeArea.join(' ') : String(options.safeArea),\n );\n }\n if (options.stack) element.setAttribute('stack', options.stack);\n if (options.tracks)\n element.setAttribute('tracks', Array.isArray(options.tracks) ? options.tracks.join(' ') : options.tracks);\n for (const [key, attr, edge] of [\n ['topInset', 'top-inset', 'top'],\n ['bottomInset', 'bottom-inset', 'bottom'],\n ['leftInset', 'left-inset', 'left'],\n ['rightInset', 'right-inset', 'right'],\n ] as const) {\n const hasEdgeInset = Object.prototype.hasOwnProperty.call(options, key);\n const hasContainerOffset = Object.prototype.hasOwnProperty.call(options, 'containerOffset');\n const attributeValue = combineInsetAttributes(options[key], options.containerOffset?.[edge]);\n if (attributeValue !== undefined) {\n element.setAttribute(attr, attributeValue);\n } else if (hasEdgeInset || hasContainerOffset) {\n element.removeAttribute(attr);\n }\n }\n for (const [key, attr] of [\n ['detached', 'detached'],\n ['swipe', 'swipe'],\n ['swipeDismissal', 'swipe-dismissal'],\n ['swipeOvershoot', 'swipe-overshoot'],\n ['swipeTrap', 'swipe-trap'],\n ['inertOutside', 'inert-outside'],\n ['nativeEdgeSwipePrevention', 'native-edge-swipe-prevention'],\n ['nativeFocusScrollPrevention', 'native-focus-scroll-prevention'],\n ['closeOnOutsideClick', 'close-on-outside-click'],\n ['closeOnEscape', 'close-on-escape'],\n ['focusTrap', 'focus-trap'],\n ['restoreFocus', 'restore-focus'],\n ] as const) {\n const value = options[key as keyof SheetOptions];\n if (typeof value === 'boolean') element.setAttribute(attr, String(value));\n }\n if (options.themeColorDimming !== undefined) {\n element.setAttribute('theme-color-dimming', options.themeColorDimming === false ? 'false' : 'auto');\n }\n if (options.presented !== undefined) element.toggleAttribute('presented', options.presented);\n}\n\nexport function readPresentedAttribute(element: HTMLElement, fallback = false): boolean {\n return parseBoolean(element.getAttribute('presented'), fallback);\n}\n","import { injectCapSheetStyles } from '../core/styles';\n\nimport { getSheetFromElement } from './cap-sheet';\n\ntype Action = 'present' | 'dismiss' | 'toggle' | 'step';\n\nfunction normalizeAction(value: string | null, fallback: Action): Action {\n return ['present', 'dismiss', 'toggle', 'step'].includes(value || '') ? (value as Action) : fallback;\n}\n\nasync function runAction(element: HTMLElement, fallback: Action): Promise<void> {\n const sheet = getSheetFromElement(element);\n if (!sheet) return;\n\n const action = normalizeAction(element.getAttribute('action'), fallback);\n if (action === 'present') {\n await sheet.present({ source: 'trigger' });\n } else if (action === 'dismiss') {\n await sheet.dismiss({ source: 'trigger' });\n } else if (action === 'step') {\n const detent = Number.parseInt(element.getAttribute('detent') || '', 10);\n if (Number.isFinite(detent)) {\n await sheet.stepTo(detent, { source: 'trigger' });\n } else {\n await sheet.step((element.getAttribute('direction') as 'up' | 'down' | null) || 'up', { source: 'trigger' });\n }\n } else {\n await sheet.toggle({ source: 'trigger' });\n }\n}\n\n/** Declarative element that presents, dismisses, toggles, or steps a sheet. */\nexport class CapSheetTrigger extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.role ||= 'button';\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.addEventListener('click', this.handleClick);\n this.addEventListener('keydown', this.handleKeyDown);\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('click', this.handleClick);\n this.removeEventListener('keydown', this.handleKeyDown);\n }\n\n private readonly handleClick = (): void => {\n void runAction(this, 'toggle');\n };\n\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n void runAction(this, 'toggle');\n };\n}\n\n/** Drag handle that can also step a sheet when activated by keyboard or click. */\nexport class CapSheetHandle extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.role ||= 'button';\n if (!this.hasAttribute('tabindex')) this.tabIndex = 0;\n this.setAttribute('aria-label', this.getAttribute('aria-label') || 'Move sheet');\n this.addEventListener('click', this.handleClick);\n this.addEventListener('keydown', this.handleKeyDown);\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('click', this.handleClick);\n this.removeEventListener('keydown', this.handleKeyDown);\n }\n\n private readonly handleClick = (): void => {\n void runAction(this, 'step');\n };\n\n private readonly handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key === 'ArrowUp') {\n event.preventDefault();\n this.setAttribute('direction', 'up');\n void runAction(this, 'step');\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n this.setAttribute('direction', 'down');\n void runAction(this, 'step');\n }\n };\n}\n","import { injectCapSheetStyles } from '../core/styles';\nimport type { SheetProgressAnimation } from '../core/types';\n\nimport { getSheetFromElement } from './cap-sheet';\n\n/** Host element that identifies a sheet stack. */\nexport class CapSheetStack extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.style.display ||= 'contents';\n if (!this.id) this.id = `cap-sheet-stack-${Math.random().toString(36).slice(2, 10)}`;\n }\n}\n\n/** Element that receives `--cap-sheet-progress` and optional travel animations. */\nexport class CapSheetOutlet extends HTMLElement {\n travelAnimation?: SheetProgressAnimation;\n stackingAnimation?: SheetProgressAnimation;\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n getSheetFromElement(this)?.controller.registerOutlet(this);\n }\n\n disconnectedCallback(): void {\n getSheetFromElement(this)?.controller.unregisterOutlet(this);\n }\n}\n\n/** Composition wrapper for detached sheets, cards, pages, lightboxes, and custom nested layouts. */\nexport class CapSheetSpecialWrapper extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.style.display ||= 'contents';\n }\n}\n\n/** Content wrapper paired with `<cap-sheet-special-wrapper>`. */\nexport class CapSheetSpecialWrapperContent extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.style.display ||= 'contents';\n }\n}\n\n/** Marks a subtree as allowed while outside content is inert. */\nexport class CapIsland extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n getSheetFromElement(this)?.controller.registerIsland(this);\n }\n\n disconnectedCallback(): void {\n getSheetFromElement(this)?.controller.unregisterIsland(this);\n }\n}\n\n/** Registers third-party overlay DOM with the front sheet's inert-outside system. */\nexport class CapExternalOverlay extends HTMLElement {\n private registered: HTMLElement | null = null;\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.register();\n }\n\n disconnectedCallback(): void {\n this.unregister();\n }\n\n private register(): void {\n const sheet = getSheetFromElement(this);\n if (!sheet) return;\n\n const selector = this.getAttribute('content-getter');\n const content = selector ? this.ownerDocument.querySelector<HTMLElement>(selector) : this;\n if (!content) return;\n\n this.registered = content;\n sheet.controller.registerIsland(content);\n }\n\n private unregister(): void {\n const sheet = getSheetFromElement(this);\n if (sheet && this.registered) {\n sheet.controller.unregisterIsland(this.registered);\n }\n this.registered = null;\n }\n}\n\n/** Fixed element helper intended for sheet-aware headers, toolbars, or floating controls. */\nexport class CapFixed extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n }\n}\n\n/** Visually hides content while leaving it available to assistive technology. */\nexport class CapVisuallyHidden extends HTMLElement {\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n }\n}\n","import { injectCapSheetStyles } from '../core/styles';\nimport { createId } from '../core/utils';\n\nimport { getSheetFromElement } from './cap-sheet';\n\nabstract class SheetPartElement extends HTMLElement {\n abstract readonly partName: 'view' | 'backdrop' | 'content' | 'title' | 'description' | 'autoFocusTarget';\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n const sheet = getSheetFromElement(this);\n sheet?.controller.registerPart(this.partName, this);\n }\n\n disconnectedCallback(): void {\n const sheet = getSheetFromElement(this);\n sheet?.controller.unregisterPart(this.partName, this);\n }\n}\n\n/** Full-screen layer that hosts a sheet backdrop and content. */\nexport class CapSheetView extends SheetPartElement {\n readonly partName = 'view' as const;\n\n connectedCallback(): void {\n super.connectedCallback();\n const sheet = getSheetFromElement(this);\n const placement = this.getAttribute('content-placement') || sheet?.controller.options.contentPlacement || 'bottom';\n this.setAttribute('content-placement', placement);\n }\n}\n\n/** Modal backdrop synchronized with sheet progress. */\nexport class CapSheetBackdrop extends SheetPartElement {\n readonly partName = 'backdrop' as const;\n}\n\n/** Main sheet surface. */\nexport class CapSheetContent extends SheetPartElement {\n readonly partName = 'content' as const;\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('tabindex')) this.tabIndex = -1;\n }\n}\n\n/** Decorative background that can extend beyond rounded sheet corners. */\nexport class CapSheetBleedingBackground extends HTMLElement {\n private bleedingParent: HTMLElement | null = null;\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.setAttribute('aria-hidden', 'true');\n this.bleedingParent = this.parentElement instanceof HTMLElement ? this.parentElement : null;\n this.updateParentBleedAttribute(this.bleedingParent);\n }\n\n disconnectedCallback(): void {\n this.updateParentBleedAttribute(this.bleedingParent);\n this.bleedingParent = null;\n }\n\n private updateParentBleedAttribute(parent: HTMLElement | null): void {\n if (!parent) return;\n parent.toggleAttribute(\n 'data-cap-sheet-bleeds',\n Boolean(parent.querySelector(':scope > cap-sheet-bleeding-background')),\n );\n }\n}\n\n/** Accessible title used for `aria-labelledby`. */\nexport class CapSheetTitle extends SheetPartElement {\n readonly partName = 'title' as const;\n\n connectedCallback(): void {\n if (!this.id) this.id = createId('cap-sheet-title');\n super.connectedCallback();\n }\n}\n\n/** Accessible description used for `aria-describedby`. */\nexport class CapSheetDescription extends SheetPartElement {\n readonly partName = 'description' as const;\n\n connectedCallback(): void {\n if (!this.id) this.id = createId('cap-sheet-description');\n super.connectedCallback();\n }\n}\n\n/** Focus target used when the sheet is presented. */\nexport class CapAutoFocusTarget extends SheetPartElement {\n readonly partName = 'autoFocusTarget' as const;\n\n connectedCallback(): void {\n if (!this.hasAttribute('tabindex')) this.tabIndex = -1;\n super.connectedCallback();\n }\n}\n","import { injectCapSheetStyles } from '../core/styles';\nimport { createId } from '../core/utils';\n\nimport type { CapSheet } from './cap-sheet';\n\n/** Optional portal wrapper. Set `disabled` to keep children in place. */\nexport class CapSheetPortal extends HTMLElement {\n private host: HTMLDivElement | null = null;\n\n connectedCallback(): void {\n injectCapSheetStyles(this.ownerDocument);\n this.style.display ||= 'contents';\n if (this.hasAttribute('disabled')) return;\n\n const sheet = this.closest('cap-sheet') as CapSheet | null;\n if (!sheet) return;\n if (!sheet.id) sheet.id = createId('cap-sheet');\n\n this.host = this.ownerDocument.createElement('div');\n this.host.dataset.capSheetPortal = sheet.id;\n this.host.style.display = 'contents';\n\n for (const child of Array.from(this.children)) {\n if (child instanceof HTMLElement && !child.hasAttribute('for')) {\n child.setAttribute('for', sheet.id);\n for (const descendant of Array.from(\n child.querySelectorAll<HTMLElement>(\n 'cap-sheet-view, cap-sheet-backdrop, cap-sheet-content, cap-sheet-title, cap-sheet-description, cap-sheet-trigger, cap-sheet-handle, cap-auto-focus-target',\n ),\n )) {\n if (!descendant.hasAttribute('for')) descendant.setAttribute('for', sheet.id);\n }\n }\n this.host.appendChild(child);\n }\n\n this.ownerDocument.body.appendChild(this.host);\n }\n\n disconnectedCallback(): void {\n if (!this.host) return;\n for (const child of Array.from(this.host.children)) {\n this.appendChild(child);\n }\n this.host.remove();\n this.host = null;\n }\n}\n","import { defineElement } from '../core/utils';\n\nimport { CapScroll, CapScrollContent } from './cap-scroll';\nimport { CapSheet } from './cap-sheet';\nimport { CapSheetTrigger, CapSheetHandle } from './sheet-actions';\nimport {\n CapExternalOverlay,\n CapFixed,\n CapIsland,\n CapSheetOutlet,\n CapSheetSpecialWrapper,\n CapSheetSpecialWrapperContent,\n CapSheetStack,\n CapVisuallyHidden,\n} from './sheet-context';\nimport {\n CapAutoFocusTarget,\n CapSheetBackdrop,\n CapSheetBleedingBackground,\n CapSheetContent,\n CapSheetDescription,\n CapSheetTitle,\n CapSheetView,\n} from './sheet-parts';\nimport { CapSheetPortal } from './sheet-portal';\n\ndefineElement('cap-sheet', CapSheet);\ndefineElement('cap-sheet-trigger', CapSheetTrigger);\ndefineElement('cap-sheet-portal', CapSheetPortal);\ndefineElement('cap-sheet-view', CapSheetView);\ndefineElement('cap-sheet-backdrop', CapSheetBackdrop);\ndefineElement('cap-sheet-content', CapSheetContent);\ndefineElement('cap-sheet-bleeding-background', CapSheetBleedingBackground);\ndefineElement('cap-sheet-handle', CapSheetHandle);\ndefineElement('cap-sheet-title', CapSheetTitle);\ndefineElement('cap-sheet-description', CapSheetDescription);\ndefineElement('cap-sheet-special-wrapper', CapSheetSpecialWrapper);\ndefineElement('cap-sheet-special-wrapper-content', CapSheetSpecialWrapperContent);\ndefineElement('cap-sheet-stack', CapSheetStack);\ndefineElement('cap-sheet-outlet', CapSheetOutlet);\ndefineElement('cap-scroll', CapScroll);\ndefineElement('cap-scroll-content', CapScrollContent);\ndefineElement('cap-fixed', CapFixed);\ndefineElement('cap-island', CapIsland);\ndefineElement('cap-external-overlay', CapExternalOverlay);\ndefineElement('cap-visually-hidden', CapVisuallyHidden);\ndefineElement('cap-auto-focus-target', CapAutoFocusTarget);\n\nexport {\n CapAutoFocusTarget,\n CapExternalOverlay,\n CapFixed,\n CapIsland,\n CapScroll,\n CapScrollContent,\n CapSheet,\n CapSheetBackdrop,\n CapSheetBleedingBackground,\n CapSheetContent,\n CapSheetDescription,\n CapSheetHandle,\n CapSheetOutlet,\n CapSheetPortal,\n CapSheetSpecialWrapper,\n CapSheetSpecialWrapperContent,\n CapSheetStack,\n CapSheetTitle,\n CapSheetTrigger,\n CapSheetView,\n CapVisuallyHidden,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
CapSheetTrigger,
|
|
21
21
|
CapSheetView,
|
|
22
22
|
CapVisuallyHidden
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-75SRJO4V.mjs";
|
|
24
24
|
import "./chunk-7DYTSFX3.mjs";
|
|
25
25
|
export {
|
|
26
26
|
CapAutoFocusTarget,
|
|
@@ -45,4 +45,4 @@ export {
|
|
|
45
45
|
CapSheetView,
|
|
46
46
|
CapVisuallyHidden
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=components-
|
|
48
|
+
//# sourceMappingURL=components-6FNKBOX7.mjs.map
|
package/dist/index.d.mts
CHANGED
|
@@ -230,8 +230,6 @@ declare class SheetController {
|
|
|
230
230
|
private pointerTravel;
|
|
231
231
|
private connected;
|
|
232
232
|
private lockedScroll;
|
|
233
|
-
private previousBodyOverflow;
|
|
234
|
-
private previousBodyTouchAction;
|
|
235
233
|
private inertedElements;
|
|
236
234
|
private previousFocus;
|
|
237
235
|
private hasThemeDimmer;
|
|
@@ -240,6 +238,7 @@ declare class SheetController {
|
|
|
240
238
|
private viewListenersElement;
|
|
241
239
|
private visualViewportListenersAttached;
|
|
242
240
|
private readonly handleVisualViewportResize;
|
|
241
|
+
private readonly handleFocusIn;
|
|
243
242
|
private readonly handleDocumentKeyDown;
|
|
244
243
|
private readonly handleViewClick;
|
|
245
244
|
private readonly handlePointerDown;
|
|
@@ -317,6 +316,7 @@ declare class SheetController {
|
|
|
317
316
|
private trapFocus;
|
|
318
317
|
private lockPage;
|
|
319
318
|
private unlockPage;
|
|
319
|
+
private setKeyboardOffset;
|
|
320
320
|
private applyInert;
|
|
321
321
|
private clearInert;
|
|
322
322
|
private retainThemeDimmer;
|
|
@@ -326,6 +326,7 @@ declare class SheetController {
|
|
|
326
326
|
private updateOutletProgress;
|
|
327
327
|
private emitPresentedChange;
|
|
328
328
|
private emitActiveDetentChange;
|
|
329
|
+
private updateDetentState;
|
|
329
330
|
private registerStack;
|
|
330
331
|
private unregisterStack;
|
|
331
332
|
private getStackZIndex;
|
package/dist/index.d.ts
CHANGED
|
@@ -230,8 +230,6 @@ declare class SheetController {
|
|
|
230
230
|
private pointerTravel;
|
|
231
231
|
private connected;
|
|
232
232
|
private lockedScroll;
|
|
233
|
-
private previousBodyOverflow;
|
|
234
|
-
private previousBodyTouchAction;
|
|
235
233
|
private inertedElements;
|
|
236
234
|
private previousFocus;
|
|
237
235
|
private hasThemeDimmer;
|
|
@@ -240,6 +238,7 @@ declare class SheetController {
|
|
|
240
238
|
private viewListenersElement;
|
|
241
239
|
private visualViewportListenersAttached;
|
|
242
240
|
private readonly handleVisualViewportResize;
|
|
241
|
+
private readonly handleFocusIn;
|
|
243
242
|
private readonly handleDocumentKeyDown;
|
|
244
243
|
private readonly handleViewClick;
|
|
245
244
|
private readonly handlePointerDown;
|
|
@@ -317,6 +316,7 @@ declare class SheetController {
|
|
|
317
316
|
private trapFocus;
|
|
318
317
|
private lockPage;
|
|
319
318
|
private unlockPage;
|
|
319
|
+
private setKeyboardOffset;
|
|
320
320
|
private applyInert;
|
|
321
321
|
private clearInert;
|
|
322
322
|
private retainThemeDimmer;
|
|
@@ -326,6 +326,7 @@ declare class SheetController {
|
|
|
326
326
|
private updateOutletProgress;
|
|
327
327
|
private emitPresentedChange;
|
|
328
328
|
private emitActiveDetentChange;
|
|
329
|
+
private updateDetentState;
|
|
329
330
|
private registerStack;
|
|
330
331
|
private unregisterStack;
|
|
331
332
|
private getStackZIndex;
|