@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.
Files changed (38) hide show
  1. package/dist/angular/index.js +68 -12
  2. package/dist/angular/index.js.map +1 -1
  3. package/dist/angular/index.mjs +68 -12
  4. package/dist/angular/index.mjs.map +1 -1
  5. package/dist/{chunk-AXGC7BLW.mjs → chunk-75SRJO4V.mjs} +69 -13
  6. package/dist/chunk-75SRJO4V.mjs.map +1 -0
  7. package/dist/{components-STHKYCFN.mjs → components-6FNKBOX7.mjs} +2 -2
  8. package/dist/index.d.mts +3 -2
  9. package/dist/index.d.ts +3 -2
  10. package/dist/index.js +69 -13
  11. package/dist/index.js.map +1 -1
  12. package/dist/index.mjs +2 -2
  13. package/dist/react/index.js +68 -12
  14. package/dist/react/index.js.map +1 -1
  15. package/dist/react/index.mjs +68 -12
  16. package/dist/react/index.mjs.map +1 -1
  17. package/dist/solid/index.js +68 -12
  18. package/dist/solid/index.js.map +1 -1
  19. package/dist/solid/index.mjs +68 -12
  20. package/dist/solid/index.mjs.map +1 -1
  21. package/dist/svelte/index.js +68 -12
  22. package/dist/svelte/index.js.map +1 -1
  23. package/dist/svelte/index.mjs +68 -12
  24. package/dist/svelte/index.mjs.map +1 -1
  25. package/dist/vue/index.js +68 -12
  26. package/dist/vue/index.js.map +1 -1
  27. package/dist/vue/index.mjs +68 -12
  28. package/dist/vue/index.mjs.map +1 -1
  29. package/docs/screenshots/issue-38-detached-spacing-simulator.webp +0 -0
  30. package/docs/screenshots/issue-38-keyboard-sheet-simulator.webp +0 -0
  31. package/docs/screenshots/issue-38-long-sheet-safe-area-simulator.webp +0 -0
  32. package/docs/screenshots/issue-38-page-from-bottom-simulator.webp +0 -0
  33. package/docs/screenshots/issue-38-page-right-simulator.webp +0 -0
  34. package/docs/screenshots/issue-38-persistent-expanded-simulator.webp +0 -0
  35. package/docs/screenshots/issue-38-persistent-mini-simulator.webp +0 -0
  36. package/package.json +1 -1
  37. package/dist/chunk-AXGC7BLW.mjs.map +0 -1
  38. /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
- view.style.setProperty("--cap-sheet-keyboard-offset", "0em");
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
- view.style.setProperty("--cap-sheet-keyboard-offset", `${toEm(view, keyboardOffset)}em`);
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 body = this.root.ownerDocument.body;
1094
- this.previousBodyOverflow = body.style.overflow;
1095
- this.previousBodyTouchAction = body.style.touchAction;
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 body = this.root.ownerDocument.body;
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
- body.style.overflow = this.previousBodyOverflow;
1106
- body.style.touchAction = this.previousBodyTouchAction;
1107
- this.previousBodyOverflow = "";
1108
- this.previousBodyTouchAction = "";
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-AXGC7BLW.mjs.map
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-AXGC7BLW.mjs";
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-STHKYCFN.mjs.map
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;