@capgo/capacitor-sheets 8.1.0 → 8.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -3
- package/dist/angular/index.js +253 -46
- package/dist/angular/index.js.map +1 -1
- package/dist/angular/index.mjs +253 -46
- package/dist/angular/index.mjs.map +1 -1
- package/dist/{chunk-75SRJO4V.mjs → chunk-VT3FZ2IC.mjs} +254 -47
- package/dist/chunk-VT3FZ2IC.mjs.map +1 -0
- package/dist/{components-6FNKBOX7.mjs → components-Y762NURC.mjs} +2 -2
- package/dist/index.d.mts +25 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +254 -47
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/react/index.js +253 -46
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +253 -46
- package/dist/react/index.mjs.map +1 -1
- package/dist/solid/index.js +253 -46
- package/dist/solid/index.js.map +1 -1
- package/dist/solid/index.mjs +253 -46
- package/dist/solid/index.mjs.map +1 -1
- package/dist/svelte/index.js +253 -46
- package/dist/svelte/index.js.map +1 -1
- package/dist/svelte/index.mjs +253 -46
- package/dist/svelte/index.mjs.map +1 -1
- package/dist/vue/index.js +253 -46
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/index.mjs +253 -46
- package/dist/vue/index.mjs.map +1 -1
- package/package.json +19 -19
- package/dist/chunk-75SRJO4V.mjs.map +0 -1
- /package/dist/{components-6FNKBOX7.mjs.map → components-Y762NURC.mjs.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/angular/index.ts","../../src/core/utils.ts","../../src/core/styles.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 '../components';\n\nimport { applySheetOptions } from '../components/cap-sheet';\nimport type {\n SheetActiveDetentChangeEvent,\n SheetContainerOffset,\n SheetInsetValue,\n SheetOptions,\n SheetPresentedChangeEvent,\n SheetSafeAreaEdge,\n SheetSafeAreaMode,\n SheetTravelEvent,\n} from '../core/types';\n\n/** Configure a `<cap-sheet>` element from Angular `ngAfterViewInit`. */\nexport function setupSheet(\n element: HTMLElement,\n options: Partial<SheetOptions> & {\n onPresentedChange?: (event: SheetPresentedChangeEvent) => void;\n onActiveDetentChange?: (event: SheetActiveDetentChangeEvent) => void;\n onTravel?: (event: SheetTravelEvent) => void;\n } = {},\n): () => void {\n applySheetOptions(element, options);\n\n const presented = (event: Event): void =>\n options.onPresentedChange?.((event as CustomEvent<SheetPresentedChangeEvent>).detail);\n const detent = (event: Event): void =>\n options.onActiveDetentChange?.((event as CustomEvent<SheetActiveDetentChangeEvent>).detail);\n const travel = (event: Event): void => options.onTravel?.((event as CustomEvent<SheetTravelEvent>).detail);\n\n element.addEventListener('cap-sheet-presented-change', presented);\n element.addEventListener('cap-sheet-active-detent-change', detent);\n element.addEventListener('cap-sheet-travel', travel);\n\n return () => {\n element.removeEventListener('cap-sheet-presented-change', presented);\n element.removeEventListener('cap-sheet-active-detent-change', detent);\n element.removeEventListener('cap-sheet-travel', travel);\n };\n}\n\nexport type {\n SheetOptions,\n SheetPresentedChangeEvent,\n SheetActiveDetentChangeEvent,\n SheetTravelEvent,\n SheetSafeAreaEdge,\n SheetSafeAreaMode,\n SheetContainerOffset,\n SheetInsetValue,\n};\n","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","const STYLE_ID = 'capgo-capacitor-sheets-styles';\n\nconst CSS = `\n:root {\n --cap-sheet-100-lvh-dvh-pct: 100%;\n --cap-sheet-backdrop-color: rgb(0 0 0);\n --cap-sheet-backdrop-opacity: 0.44;\n --cap-sheet-radius: 1.5em;\n --cap-sheet-handle-color: rgb(115 115 115);\n --cap-sheet-surface: Canvas;\n --cap-sheet-shadow: 0 0.5em 2.5em rgb(0 0 0 / 0.18);\n --cap-sheet-z-index: 1000;\n --cap-sheet-safe-area-top: max(env(safe-area-inset-top, 0em), var(--safe-area-inset-top, 0em));\n --cap-sheet-safe-area-bottom: max(env(safe-area-inset-bottom, 0em), var(--safe-area-inset-bottom, 0em));\n --cap-sheet-safe-area-left: max(env(safe-area-inset-left, 0em), var(--safe-area-inset-left, 0em));\n --cap-sheet-safe-area-right: max(env(safe-area-inset-right, 0em), var(--safe-area-inset-right, 0em));\n --cap-sheet-applied-safe-area-top: var(--cap-sheet-safe-area-top);\n --cap-sheet-applied-safe-area-bottom: var(--cap-sheet-safe-area-bottom);\n --cap-sheet-applied-safe-area-left: var(--cap-sheet-safe-area-left);\n --cap-sheet-applied-safe-area-right: var(--cap-sheet-safe-area-right);\n --cap-sheet-container-offset-top: 0em;\n --cap-sheet-container-offset-bottom: 0em;\n --cap-sheet-container-offset-left: 0em;\n --cap-sheet-container-offset-right: 0em;\n --cap-sheet-keyboard-offset: 0em;\n}\n\n@supports (height: 1dvh) {\n :root {\n --cap-sheet-100-lvh-dvh-pct: 100dvh;\n }\n}\n\ncap-sheet,\ncap-sheet-portal,\ncap-sheet-special-wrapper,\ncap-sheet-special-wrapper-content,\ncap-sheet-stack {\n display: contents;\n}\n\ncap-sheet-view {\n position: fixed;\n inset: 0;\n display: grid;\n width: 100%;\n height: var(--cap-sheet-100-lvh-dvh-pct);\n z-index: var(--cap-sheet-z-index);\n pointer-events: none;\n touch-action: none;\n overscroll-behavior: none;\n contain: layout style;\n box-sizing: border-box;\n padding-top: calc(var(--cap-sheet-applied-safe-area-top, 0em) + var(--cap-sheet-container-offset-top, 0em));\n padding-bottom: calc(\n var(--cap-sheet-applied-safe-area-bottom, 0em) + var(--cap-sheet-container-offset-bottom, 0em) +\n var(--cap-sheet-keyboard-offset, 0em)\n );\n padding-left: calc(var(--cap-sheet-applied-safe-area-left, 0em) + var(--cap-sheet-container-offset-left, 0em));\n padding-right: calc(var(--cap-sheet-applied-safe-area-right, 0em) + var(--cap-sheet-container-offset-right, 0em));\n}\n\ncap-sheet-view[hidden] {\n display: none !important;\n}\n\ncap-sheet-view[content-placement=\"top\"] {\n align-items: start;\n justify-items: center;\n}\n\ncap-sheet-view[content-placement=\"bottom\"],\ncap-sheet-view:not([content-placement]) {\n align-items: end;\n justify-items: center;\n}\n\ncap-sheet-view[content-placement=\"left\"] {\n align-items: center;\n justify-items: start;\n}\n\ncap-sheet-view[content-placement=\"right\"] {\n align-items: center;\n justify-items: end;\n}\n\ncap-sheet-view[content-placement=\"center\"] {\n align-items: center;\n justify-items: center;\n}\n\ncap-sheet-backdrop {\n position: absolute;\n inset: 0;\n display: block;\n background: var(--cap-sheet-backdrop-color);\n opacity: 0;\n pointer-events: none;\n touch-action: none;\n will-change: opacity;\n}\n\ncap-sheet-content {\n --cap-sheet-content-border-radius: var(--cap-sheet-radius) var(--cap-sheet-radius) 0 0;\n box-sizing: border-box;\n position: relative;\n display: block;\n width: min(100%, 34em);\n max-height: 100%;\n color: CanvasText;\n background: var(--cap-sheet-surface);\n border-radius: var(--cap-sheet-content-border-radius);\n box-shadow: var(--cap-sheet-shadow), var(--cap-sheet-edge-bleed-shadow, 0 0 0 0 transparent);\n overflow: auto;\n overscroll-behavior: contain;\n pointer-events: auto;\n touch-action: pan-x pan-y;\n will-change: transform, opacity;\n -webkit-overflow-scrolling: touch;\n}\n\ncap-sheet-view[content-placement=\"top\"] cap-sheet-content {\n --cap-sheet-content-border-radius: 0 0 var(--cap-sheet-radius) var(--cap-sheet-radius);\n}\n\ncap-sheet-view[content-placement=\"left\"] cap-sheet-content {\n width: min(88%, 28em);\n height: 100%;\n max-height: 100%;\n --cap-sheet-content-border-radius: 0 var(--cap-sheet-radius) var(--cap-sheet-radius) 0;\n}\n\ncap-sheet-view[content-placement=\"right\"] cap-sheet-content {\n width: min(88%, 28em);\n height: 100%;\n max-height: 100%;\n --cap-sheet-content-border-radius: var(--cap-sheet-radius) 0 0 var(--cap-sheet-radius);\n}\n\ncap-sheet-view[content-placement=\"center\"] cap-sheet-content {\n width: min(90%, 30em);\n max-height: min(90%, 42em);\n --cap-sheet-content-border-radius: var(--cap-sheet-radius);\n}\n\ncap-sheet-view[data-detached=\"true\"] cap-sheet-content {\n --cap-sheet-content-border-radius: var(--cap-sheet-detached-radius, var(--cap-sheet-radius));\n}\n\ncap-sheet-view[data-detached=\"true\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 0 0 0 0 transparent;\n}\n\ncap-sheet-bleeding-background {\n display: none;\n}\n\ncap-sheet-view[content-placement=\"bottom\"] cap-sheet-content[data-cap-sheet-bleeds],\ncap-sheet-view:not([content-placement]) cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 0 8em 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-view[content-placement=\"top\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 0 -8em 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-view[content-placement=\"left\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: -8em 0 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-view[content-placement=\"right\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 8em 0 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-handle {\n box-sizing: border-box;\n display: grid;\n place-items: center;\n width: 100%;\n height: 2.25em;\n cursor: grab;\n touch-action: none;\n}\n\ncap-sheet-handle::before {\n content: \"\";\n display: block;\n width: 2.75em;\n height: 0.3125em;\n border-radius: 999em;\n background: var(--cap-sheet-handle-color);\n opacity: 0.65;\n}\n\ncap-sheet-handle:active {\n cursor: grabbing;\n}\n\ncap-sheet-title,\ncap-sheet-description {\n display: block;\n}\n\ncap-sheet-outlet {\n display: block;\n transform-origin: center;\n will-change: transform, opacity, filter;\n}\n\ncap-scroll {\n display: block;\n overflow: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n scroll-behavior: smooth;\n}\n\ncap-scroll[axis=\"x\"] {\n overflow-x: auto;\n overflow-y: hidden;\n}\n\ncap-scroll[axis=\"y\"],\ncap-scroll:not([axis]) {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\ncap-scroll-content {\n display: block;\n min-width: 100%;\n min-height: 100%;\n}\n\ncap-fixed {\n position: fixed;\n inset-inline: 0;\n z-index: calc(var(--cap-sheet-z-index) + 1);\n}\n\ncap-island,\ncap-external-overlay {\n display: contents;\n}\n\ncap-visually-hidden,\ncap-auto-focus-target[hidden-target] {\n position: absolute;\n width: 0.0625em;\n height: 0.0625em;\n margin: -0.0625em;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n padding: 0;\n}\n`;\n\n/** Injects the structural styles required by the sheet web components. */\nexport function injectCapSheetStyles(root: Document = document): void {\n if (root.getElementById(STYLE_ID)) return;\n\n const style = root.createElement('style');\n style.id = STYLE_ID;\n style.textContent = CSS;\n root.head.appendChild(style);\n}\n\nexport { CSS as CAP_SHEETS_CSS };\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":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/angular/index.ts","../../src/core/utils.ts","../../src/core/styles.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 '../components';\n\nimport { applySheetOptions } from '../components/cap-sheet';\nimport type {\n SheetActiveDetentChangeEvent,\n SheetContainerOffset,\n SheetInsetValue,\n SheetOptions,\n SheetPresentedChangeEvent,\n SheetSafeAreaEdge,\n SheetSafeAreaMode,\n SheetTravelEvent,\n} from '../core/types';\n\n/** Configure a `<cap-sheet>` element from Angular `ngAfterViewInit`. */\nexport function setupSheet(\n element: HTMLElement,\n options: Partial<SheetOptions> & {\n onPresentedChange?: (event: SheetPresentedChangeEvent) => void;\n onActiveDetentChange?: (event: SheetActiveDetentChangeEvent) => void;\n onTravel?: (event: SheetTravelEvent) => void;\n } = {},\n): () => void {\n applySheetOptions(element, options);\n\n const presented = (event: Event): void =>\n options.onPresentedChange?.((event as CustomEvent<SheetPresentedChangeEvent>).detail);\n const detent = (event: Event): void =>\n options.onActiveDetentChange?.((event as CustomEvent<SheetActiveDetentChangeEvent>).detail);\n const travel = (event: Event): void => options.onTravel?.((event as CustomEvent<SheetTravelEvent>).detail);\n\n element.addEventListener('cap-sheet-presented-change', presented);\n element.addEventListener('cap-sheet-active-detent-change', detent);\n element.addEventListener('cap-sheet-travel', travel);\n\n return () => {\n element.removeEventListener('cap-sheet-presented-change', presented);\n element.removeEventListener('cap-sheet-active-detent-change', detent);\n element.removeEventListener('cap-sheet-travel', travel);\n };\n}\n\nexport type {\n SheetOptions,\n SheetPresentedChangeEvent,\n SheetActiveDetentChangeEvent,\n SheetTravelEvent,\n SheetSafeAreaEdge,\n SheetSafeAreaMode,\n SheetContainerOffset,\n SheetInsetValue,\n};\n","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","const STYLE_ID = 'capgo-capacitor-sheets-styles';\n\nconst CSS = `\n:root {\n --cap-sheet-100-lvh-dvh-pct: 100%;\n --cap-sheet-backdrop-color: rgb(0 0 0);\n --cap-sheet-backdrop-opacity: 0.44;\n --cap-sheet-radius: 1.5em;\n --cap-sheet-handle-color: rgb(115 115 115);\n --cap-sheet-surface: Canvas;\n --cap-sheet-shadow: 0 0.5em 2.5em rgb(0 0 0 / 0.18);\n --cap-sheet-z-index: 1000;\n --cap-sheet-safe-area-top: max(env(safe-area-inset-top, 0em), var(--safe-area-inset-top, 0em));\n --cap-sheet-safe-area-bottom: max(env(safe-area-inset-bottom, 0em), var(--safe-area-inset-bottom, 0em));\n --cap-sheet-safe-area-left: max(env(safe-area-inset-left, 0em), var(--safe-area-inset-left, 0em));\n --cap-sheet-safe-area-right: max(env(safe-area-inset-right, 0em), var(--safe-area-inset-right, 0em));\n --cap-sheet-applied-safe-area-top: var(--cap-sheet-safe-area-top);\n --cap-sheet-applied-safe-area-bottom: var(--cap-sheet-safe-area-bottom);\n --cap-sheet-applied-safe-area-left: var(--cap-sheet-safe-area-left);\n --cap-sheet-applied-safe-area-right: var(--cap-sheet-safe-area-right);\n --cap-sheet-container-offset-top: 0em;\n --cap-sheet-container-offset-bottom: 0em;\n --cap-sheet-container-offset-left: 0em;\n --cap-sheet-container-offset-right: 0em;\n --cap-sheet-keyboard-offset: 0em;\n}\n\n@supports (height: 1dvh) {\n :root {\n --cap-sheet-100-lvh-dvh-pct: 100dvh;\n }\n}\n\ncap-sheet,\ncap-sheet-portal,\ncap-sheet-special-wrapper,\ncap-sheet-special-wrapper-content,\ncap-sheet-stack {\n display: contents;\n}\n\ncap-sheet-view {\n position: fixed;\n inset: 0;\n display: grid;\n width: 100%;\n height: var(--cap-sheet-100-lvh-dvh-pct);\n z-index: var(--cap-sheet-z-index);\n pointer-events: none;\n touch-action: none;\n overscroll-behavior: none;\n contain: layout style;\n box-sizing: border-box;\n padding-top: calc(var(--cap-sheet-applied-safe-area-top, 0em) + var(--cap-sheet-container-offset-top, 0em));\n padding-bottom: calc(\n var(--cap-sheet-applied-safe-area-bottom, 0em) + var(--cap-sheet-container-offset-bottom, 0em) +\n var(--cap-sheet-keyboard-offset, 0em)\n );\n padding-left: calc(var(--cap-sheet-applied-safe-area-left, 0em) + var(--cap-sheet-container-offset-left, 0em));\n padding-right: calc(var(--cap-sheet-applied-safe-area-right, 0em) + var(--cap-sheet-container-offset-right, 0em));\n}\n\ncap-sheet-view[hidden] {\n display: none !important;\n}\n\ncap-sheet-view[content-placement=\"top\"] {\n align-items: start;\n justify-items: center;\n}\n\ncap-sheet-view[content-placement=\"bottom\"],\ncap-sheet-view:not([content-placement]) {\n align-items: end;\n justify-items: center;\n}\n\ncap-sheet-view[content-placement=\"left\"] {\n align-items: center;\n justify-items: start;\n}\n\ncap-sheet-view[content-placement=\"right\"] {\n align-items: center;\n justify-items: end;\n}\n\ncap-sheet-view[content-placement=\"center\"] {\n align-items: center;\n justify-items: center;\n}\n\ncap-sheet-backdrop {\n position: absolute;\n inset: 0;\n display: block;\n background: var(--cap-sheet-backdrop-color);\n opacity: 0;\n pointer-events: none;\n touch-action: none;\n will-change: opacity;\n}\n\ncap-sheet-content {\n --cap-sheet-content-border-radius: var(--cap-sheet-radius) var(--cap-sheet-radius) 0 0;\n box-sizing: border-box;\n position: relative;\n display: block;\n width: min(100%, 34em);\n max-height: 100%;\n color: CanvasText;\n background: var(--cap-sheet-surface);\n border-radius: var(--cap-sheet-content-border-radius);\n box-shadow: var(--cap-sheet-shadow), var(--cap-sheet-edge-bleed-shadow, 0 0 0 0 transparent);\n overflow: auto;\n overscroll-behavior: contain;\n pointer-events: auto;\n touch-action: pan-x pan-y;\n will-change: transform, opacity;\n -webkit-overflow-scrolling: touch;\n}\n\ncap-sheet-view[content-placement=\"top\"] cap-sheet-content {\n --cap-sheet-content-border-radius: 0 0 var(--cap-sheet-radius) var(--cap-sheet-radius);\n}\n\ncap-sheet-view[content-placement=\"left\"] cap-sheet-content {\n width: min(88%, 28em);\n height: 100%;\n max-height: 100%;\n --cap-sheet-content-border-radius: 0 var(--cap-sheet-radius) var(--cap-sheet-radius) 0;\n}\n\ncap-sheet-view[content-placement=\"right\"] cap-sheet-content {\n width: min(88%, 28em);\n height: 100%;\n max-height: 100%;\n --cap-sheet-content-border-radius: var(--cap-sheet-radius) 0 0 var(--cap-sheet-radius);\n}\n\ncap-sheet-view[content-placement=\"center\"] cap-sheet-content {\n width: min(90%, 30em);\n max-height: min(90%, 42em);\n --cap-sheet-content-border-radius: var(--cap-sheet-radius);\n}\n\ncap-sheet-view[data-detached=\"true\"] cap-sheet-content {\n --cap-sheet-content-border-radius: var(--cap-sheet-detached-radius, var(--cap-sheet-radius));\n}\n\ncap-sheet-view[data-detached=\"true\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 0 0 0 0 transparent;\n}\n\ncap-sheet-bleeding-background {\n display: none;\n}\n\ncap-sheet-view[content-placement=\"bottom\"] cap-sheet-content[data-cap-sheet-bleeds],\ncap-sheet-view:not([content-placement]) cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 0 8em 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-view[content-placement=\"top\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 0 -8em 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-view[content-placement=\"left\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: -8em 0 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-view[content-placement=\"right\"] cap-sheet-content[data-cap-sheet-bleeds] {\n --cap-sheet-edge-bleed-shadow: 8em 0 0 0 var(--cap-sheet-surface);\n}\n\ncap-sheet-handle {\n box-sizing: border-box;\n display: grid;\n place-items: center;\n width: 100%;\n height: 2.25em;\n cursor: grab;\n touch-action: none;\n}\n\ncap-sheet-handle::before {\n content: \"\";\n display: block;\n width: 2.75em;\n height: 0.3125em;\n border-radius: 999em;\n background: var(--cap-sheet-handle-color);\n opacity: 0.65;\n}\n\ncap-sheet-handle:active {\n cursor: grabbing;\n}\n\ncap-sheet-title,\ncap-sheet-description {\n display: block;\n}\n\ncap-sheet-outlet {\n display: block;\n transform-origin: center;\n will-change: transform, opacity, filter;\n}\n\ncap-scroll {\n display: block;\n overflow: auto;\n overscroll-behavior: contain;\n -webkit-overflow-scrolling: touch;\n scroll-behavior: smooth;\n}\n\ncap-scroll[axis=\"x\"] {\n overflow-x: auto;\n overflow-y: hidden;\n}\n\ncap-scroll[axis=\"y\"],\ncap-scroll:not([axis]) {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\ncap-scroll-content {\n display: block;\n min-width: 100%;\n min-height: 100%;\n}\n\ncap-fixed {\n position: fixed;\n inset-inline: 0;\n z-index: calc(var(--cap-sheet-z-index) + 1);\n}\n\ncap-island,\ncap-external-overlay {\n display: contents;\n}\n\ncap-visually-hidden,\ncap-auto-focus-target[hidden-target] {\n position: absolute;\n width: 0.0625em;\n height: 0.0625em;\n margin: -0.0625em;\n overflow: hidden;\n clip: rect(0 0 0 0);\n white-space: nowrap;\n border: 0;\n padding: 0;\n}\n`;\n\n/** Injects the structural styles required by the sheet web components. */\nexport function injectCapSheetStyles(root: Document = document): void {\n if (root.getElementById(STYLE_ID)) return;\n\n const style = root.createElement('style');\n style.id = STYLE_ID;\n style.textContent = CSS;\n root.head.appendChild(style);\n}\n\nexport { CSS as CAP_SHEETS_CSS };\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 getEmPx,\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 samples: { t: number; pos: number }[];\n interruptedMotion: SettleMotion | null;\n}\n\ninterface SettleMotion {\n status: 'entering' | 'settling';\n animation: SheetAnimationSettings;\n complete: () => void;\n}\n\ninterface InertElementSnapshot {\n inert: boolean;\n ariaHidden: string | null;\n}\n\nconst inertDepth = new WeakMap<HTMLElement, number>();\nconst inertOriginal = new WeakMap<HTMLElement, InertElementSnapshot>();\nconst inertHolders = new WeakMap<Document, Set<SheetController>>();\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 inertHeldElements = new Set<HTMLElement>();\n private remeasureFrame: number | null = null;\n private activeMotion: { cancel: () => void } | null = null;\n private pendingSettle: SettleMotion | null = null;\n /** Entering completion deferred by a drag that interrupted present(); runs once the sheet settles. */\n private deferredEnteringComplete: (() => void) | null = null;\n /** Resolves the in-flight present() after entering lifecycle completes or is abandoned. */\n private settlePresentPromise: (() => void) | null = 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 = (event?: Event): void => {\n const view = this.parts.view;\n const visualViewport = this.root.ownerDocument.defaultView?.visualViewport;\n if (!view) return;\n const viewportChanged = event !== undefined;\n if (!visualViewport || this.options.nativeFocusScrollPrevention === false) {\n this.setKeyboardOffset('0em', viewportChanged);\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`, viewportChanged);\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 // Additional pointers do not replace the gesture in progress (and its interrupted motion).\n // A new primary pointer means every earlier pointer was lifted, so it starts a fresh gesture.\n if (this.pointerTravel && !event.isPrimary) return;\n if (this.options.nativeEdgeSwipePrevention !== false && this.isNativeEdgePointer(event)) {\n event.preventDefault();\n }\n\n this.syncOffsetFromRenderedPosition();\n const interruptedMotion = this.activeMotion ? this.pendingSettle : null;\n this.pendingSettle = null;\n this.cancelActiveMotion();\n this.applyOffset(this.currentOffsetPx, this.status);\n this.remeasure();\n const axis = isVerticalTrack(this.activeTrack) ? 'y' : 'x';\n const startPos = axis === 'y' ? event.clientY : event.clientX;\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 samples: [{ t: performance.now(), pos: startPos }],\n interruptedMotion,\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 travel.samples.push({ t: now, pos: current });\n if (travel.samples.length > 24) travel.samples.shift();\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) {\n // A tap during an entering or settling animation cancelled the motion on pointerdown.\n // Resume it so the sheet does not stay between detents.\n if (travel.interruptedMotion && this.presented) {\n void this.runSettleMotion(travel.interruptedMotion);\n }\n return;\n }\n\n const nearest = this.nearestDetentForOffset(this.currentOffsetPx, this.releaseVelocity(travel));\n dispatch(this.root, 'cap-sheet-drag-end', this.getTravelEvent());\n\n // A drag that interrupted present() still owes the presentation lifecycle\n // (idle status, focus, presented and detent change events) once the sheet settles.\n if (travel.interruptedMotion?.status === 'entering') {\n this.deferredEnteringComplete = travel.interruptedMotion.complete;\n }\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 } else if (this.presented && affectsDismissedOffset(options)) {\n this.scheduleRemeasure();\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.abandonDeferredEntering();\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 const source = options.source || 'programmatic';\n let resolvePresent!: () => void;\n const presentLifecycleSettled = new Promise<void>((resolve) => {\n resolvePresent = resolve;\n });\n this.settlePresentPromise = () => {\n resolvePresent();\n };\n\n const complete = () => {\n this.setStatus('idle');\n this.focusInitialElement();\n this.emitPresentedChange(true, source);\n this.emitActiveDetentChange(this.activeDetent, 0);\n this.updateStack();\n this.releasePresentAwait();\n };\n\n const finished = await this.runSettleMotion({\n status: 'entering',\n animation: {\n ...(this.options.enteringAnimationSettings || {}),\n ...(options.animation || {}),\n },\n complete,\n });\n if (!finished) {\n await presentLifecycleSettled;\n }\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.pendingSettle = null;\n this.abandonDeferredEntering();\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 await this.runSettleMotion({\n status: 'settling',\n animation: {\n ...(this.options.steppingAnimationSettings || {}),\n ...(options.animation || {}),\n },\n complete: () => {\n const enteringComplete = this.deferredEnteringComplete;\n if (enteringComplete) {\n // Finish the interrupted presentation instead; it emits the detent change from 0.\n this.deferredEnteringComplete = null;\n enteringComplete();\n return;\n }\n this.setStatus('idle');\n if (previous !== target) {\n this.emitActiveDetentChange(target, previous);\n }\n },\n });\n }\n\n /**\n * Animate to the active detent and run the completion once the motion finishes.\n * When the motion is cancelled by a pointerdown, the settle stays pending so a tap\n * that never becomes a drag can resume it.\n */\n private releasePresentAwait(): void {\n if (!this.settlePresentPromise) return;\n const settle = this.settlePresentPromise;\n this.settlePresentPromise = null;\n settle();\n }\n\n private abandonDeferredEntering(): void {\n this.deferredEnteringComplete = null;\n this.releasePresentAwait();\n }\n\n private async runSettleMotion(motion: SettleMotion): Promise<boolean> {\n this.setStatus(motion.status);\n this.pendingSettle = motion;\n const finished = await this.animateTo(this.detentOffsetsPx[this.activeDetent] || 0, motion.animation);\n if (!finished) return false;\n if (this.pendingSettle === motion) this.pendingSettle = null;\n motion.complete();\n return true;\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<boolean> {\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 true;\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 let cancelled = false;\n const cancelMotion = (): void => {\n if (cancelled) return;\n cancelled = true;\n cancelAnimationFrame(frame);\n contentAnimation?.cancel();\n backdropAnimation?.cancel();\n this.activeMotion = null;\n };\n this.activeMotion = { cancel: cancelMotion };\n\n const tick = (): void => {\n if (cancelled) return;\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 if (cancelled) return false;\n\n cancelAnimationFrame(frame);\n contentAnimation?.cancel();\n backdropAnimation?.cancel();\n this.activeMotion = null;\n this.applyOffset(targetOffsetPx, 'idle');\n return true;\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, viewportChanged = false): void {\n const view = this.parts.view;\n if (!view) return;\n\n const changed = view.style.getPropertyValue('--cap-sheet-keyboard-offset') !== value;\n if (changed) view.style.setProperty('--cap-sheet-keyboard-offset', value);\n if (changed || viewportChanged) this.scheduleRemeasure();\n }\n\n private scheduleRemeasure(): void {\n if (!this.presented) return;\n if (this.remeasureFrame !== null) return;\n\n this.remeasureFrame = requestAnimationFrame(() => {\n this.remeasureFrame = null;\n if (!this.presented) return;\n this.remeasure();\n if (this.status === 'dragging') return;\n this.applyOffset(this.detentOffsetsPx[this.activeDetent] || 0, this.status);\n });\n }\n\n private cancelActiveMotion(): void {\n this.activeMotion?.cancel();\n this.activeMotion = null;\n }\n\n private syncOffsetFromRenderedPosition(): void {\n const content = this.parts.content;\n if (!content || this.options.contentPlacement === 'center') return;\n\n const offsetPx = this.readOffsetPxFromTransform(content);\n if (offsetPx === null) return;\n\n this.currentOffsetPx = offsetPx;\n }\n\n private readOffsetPxFromTransform(content: HTMLElement): number | null {\n const axis = isVerticalTrack(this.activeTrack) ? 'y' : 'x';\n const computed = this.root.ownerDocument.defaultView?.getComputedStyle(content).transform;\n const inline = content.style.transform;\n const transform = computed && computed !== 'none' ? computed : inline && inline !== 'none' ? inline : '';\n if (!transform) return this.currentOffsetPx;\n\n const translateMatch = transform.match(/translate3d\\(\\s*([^,]+)\\s*,\\s*([^,]+)\\s*,/);\n if (translateMatch) {\n const raw = axis === 'y' ? translateMatch[2] : translateMatch[1];\n const emMatch = raw.trim().match(/^(-?[\\d.]+)em$/);\n if (emMatch) return Number.parseFloat(emMatch[1]) * getEmPx(content);\n const pxMatch = raw.trim().match(/^(-?[\\d.]+)px$/);\n if (pxMatch) return Number.parseFloat(pxMatch[1]);\n }\n\n const matrixMatch = transform.match(/^matrix\\(([^)]+)\\)$/);\n if (matrixMatch) {\n const values = matrixMatch[1].split(',').map((part) => Number.parseFloat(part.trim()));\n const translation = axis === 'y' ? values[5] : values[4];\n if (Number.isFinite(translation)) return translation;\n }\n\n const matrix3dMatch = transform.match(/^matrix3d\\(([^)]+)\\)$/);\n if (matrix3dMatch) {\n const values = matrix3dMatch[1].split(',').map((part) => Number.parseFloat(part.trim()));\n const translation = axis === 'y' ? values[13] : values[12];\n if (Number.isFinite(translation)) return translation;\n }\n\n return null;\n }\n\n private releaseVelocity(travel: PointerTravel): number {\n const windowMs = 100;\n const now = performance.now();\n const samples = travel.samples.filter((sample) => now - sample.t <= windowMs);\n if (samples.length < 2) return 0;\n\n const first = samples[0];\n const last = samples[samples.length - 1];\n const elapsed = Math.max(last.t - first.t, 1);\n return ((last.pos - first.pos) / elapsed) * 1000;\n }\n\n private getAllowedOutsideElements(): Set<HTMLElement> {\n const allowed = new Set<HTMLElement>();\n if (this.parts.view) allowed.add(this.parts.view);\n for (const element of this.parts.islands) allowed.add(element);\n for (const element of this.parts.externalOverlays) allowed.add(element);\n return allowed;\n }\n\n private applyInertForElement(element: HTMLElement, allowed: Set<HTMLElement>): void {\n const isAllowed = Array.from(allowed).some((candidate) => element === candidate || element.contains(candidate));\n if (isAllowed) {\n element.inert = false;\n element.removeAttribute('aria-hidden');\n return;\n }\n element.inert = true;\n element.setAttribute('aria-hidden', 'true');\n }\n\n private applyInert(): void {\n if (this.options.inertOutside === false || !this.parts.view) return;\n const doc = this.root.ownerDocument;\n const body = doc.body;\n const allowed = this.getAllowedOutsideElements();\n\n this.releaseInertHold();\n const holders = inertHolders.get(doc) || new Set<SheetController>();\n holders.add(this);\n inertHolders.set(doc, holders);\n\n for (const child of Array.from(body.children)) {\n if (!(child instanceof HTMLElement)) continue;\n const depth = inertDepth.get(child) ?? 0;\n if (depth === 0) {\n inertOriginal.set(child, { inert: child.inert, ariaHidden: child.getAttribute('aria-hidden') });\n }\n inertDepth.set(child, depth + 1);\n this.inertHeldElements.add(child);\n this.applyInertForElement(child, allowed);\n }\n }\n\n private clearInert(): void {\n this.releaseInertHold();\n }\n\n private releaseInertHold(): void {\n if (this.inertHeldElements.size === 0) return;\n\n const doc = this.root.ownerDocument;\n const holders = inertHolders.get(doc);\n holders?.delete(this);\n if (holders?.size === 0) inertHolders.delete(doc);\n\n for (const element of this.inertHeldElements) {\n const depth = Math.max((inertDepth.get(element) ?? 1) - 1, 0);\n if (depth === 0) {\n inertDepth.delete(element);\n const snapshot = inertOriginal.get(element);\n if (snapshot) {\n element.inert = snapshot.inert;\n if (snapshot.ariaHidden === null) {\n element.removeAttribute('aria-hidden');\n } else {\n element.setAttribute('aria-hidden', snapshot.ariaHidden);\n }\n inertOriginal.delete(element);\n }\n } else {\n inertDepth.set(element, depth);\n }\n }\n this.inertHeldElements.clear();\n this.reapplyDocumentInert(doc);\n }\n\n private reapplyDocumentInert(doc: Document): void {\n const holders = inertHolders.get(doc);\n if (!holders?.size) return;\n\n const top = Array.from(holders)\n .filter((controller) => controller.presented && controller.options.inertOutside !== false)\n .sort((left, right) => right.getStackZIndex() - left.getStackZIndex())[0];\n if (!top) return;\n\n const allowed = top.getAllowedOutsideElements();\n const body = doc.body;\n for (const child of Array.from(body.children)) {\n if (!(child instanceof HTMLElement)) continue;\n if ((inertDepth.get(child) ?? 0) === 0) continue;\n top.applyInertForElement(child, allowed);\n }\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":[]}
|