@raqm/ui 0.1.0 → 0.1.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-drawer.mjs","names":[],"sources":["../../../projects/ui/drawer/drawer-swipe.ts","../../../projects/ui/drawer/drawer.component.ts","../../../projects/ui/drawer/drawer.component.html","../../../projects/ui/drawer/drawer.directive.ts","../../../projects/ui/drawer/public-api.ts"],"sourcesContent":["import { DestroyRef, Directive, ElementRef, inject, input } from '@angular/core';\r\nimport { DialogRef } from '@angular/cdk/dialog';\r\nimport { RAQM_DIALOG } from '@raqm/ui/dialog';\r\n\r\nexport type RaqmDrawerDirection = 'down' | 'up' | 'left' | 'right';\r\n\r\n// Movement (px) before a gesture becomes a drag; below it the interaction stays a click.\r\nconst DRAG_THRESHOLD = 8;\r\n\r\n// Release past this fraction of the drawer's own size dismisses it.\r\nconst DISMISS_RATIO = 0.35;\r\n\r\n// Release faster than this (px per ms) dismisses it regardless of distance.\r\nconst DISMISS_VELOCITY = 0.5;\r\n\r\nconst SETTLE_MS = 200;\r\n\r\n// Controls that keep their own interaction: a drag never starts on them.\r\nconst INTERACTIVE_SELECTOR =\r\n 'input, textarea, select, button, a[href], [contenteditable=\"true\"], [data-raqm-drawer-no-swipe]';\r\n\r\nfunction prefersReducedMotion(): boolean {\r\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n}\r\n\r\n@Directive({\r\n selector: '[raqm-drawer-swipe]',\r\n})\r\nexport class RaqmDrawerSwipeDirective {\r\n private readonly surface = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private readonly dialog = inject(RAQM_DIALOG, { optional: true });\r\n // The CDK dialog ref reaches the panel's view, exposing this drawer's own backdrop.\r\n private readonly dialogRef = inject<DialogRef<unknown, unknown> | null>(DialogRef, {\r\n optional: true,\r\n });\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n /** The drawer's dismiss direction; it mirrors the surface placement. */\r\n readonly direction = input<RaqmDrawerDirection>('down');\r\n\r\n // Detaches the in-flight pointer listeners; `undefined` while idle.\r\n private release: (() => void) | undefined;\r\n private settleTimer: ReturnType<typeof setTimeout> | undefined;\r\n // The backdrop of this drawer, resolved once per gesture.\r\n private backdrop: HTMLElement | null = null;\r\n\r\n private readonly onPointerDown = (event: PointerEvent): void => {\r\n if (!event.isPrimary) {\r\n return;\r\n }\r\n if (event.pointerType === 'mouse' && event.button !== 0) {\r\n return;\r\n }\r\n // One gesture at a time, and never while the outgoing surface is settling.\r\n if (this.release !== undefined || this.settleTimer !== undefined) {\r\n return;\r\n }\r\n if (this.dialog !== null && !this.dialog.open()) {\r\n return;\r\n }\r\n const target = event.target;\r\n if (!(target instanceof Element)) {\r\n return;\r\n }\r\n if (target.closest(INTERACTIVE_SELECTOR)) {\r\n return;\r\n }\r\n const direction = this.direction();\r\n const vertical = direction === 'down' || direction === 'up';\r\n if (this.hasScrollableAncestor(target, vertical)) {\r\n return;\r\n }\r\n // Touch scrolling is native: a touch drag may only start on the handle, which sets\r\n // `touch-action: none`.\r\n if (event.pointerType === 'touch' && !target.closest('[data-raqm-drawer-swipe-handle]')) {\r\n return;\r\n }\r\n\r\n const surface = this.surface;\r\n const rect = surface.getBoundingClientRect();\r\n const size = vertical ? rect.height : rect.width;\r\n if (size <= 0) {\r\n return;\r\n }\r\n const rtl = getComputedStyle(surface).direction === 'rtl';\r\n // `+1` means the surface travels toward larger client coordinates.\r\n const positive =\r\n direction === 'down' ? true : direction === 'up' ? false : (direction === 'right') !== rtl;\r\n const sign = positive ? 1 : -1;\r\n const startX = event.clientX;\r\n const startY = event.clientY;\r\n const startedAt = performance.now();\r\n const pointerId = event.pointerId;\r\n let active = false;\r\n let distance = 0;\r\n\r\n const along = (move: PointerEvent): number =>\r\n (vertical ? move.clientY - startY : move.clientX - startX) * sign;\r\n\r\n const activate = (): void => {\r\n active = true;\r\n surface.setAttribute('data-raqm-swiping', '');\r\n this.backdrop = this.dialogRef?.overlayRef.backdropElement ?? null;\r\n if (this.backdrop) {\r\n this.backdrop.style.transitionDuration = '0ms';\r\n }\r\n try {\r\n surface.setPointerCapture(pointerId);\r\n } catch {\r\n // The pointer may already be gone; the gesture still works without capture.\r\n }\r\n };\r\n\r\n const render = (value: number): void => {\r\n const offset = Math.max(0, Math.min(size, value));\r\n distance = offset;\r\n surface.style.transition = 'none';\r\n surface.style.transform = `translate3d(${vertical ? 0 : offset * sign}px, ${\r\n vertical ? offset * sign : 0\r\n }px, 0)`;\r\n if (this.backdrop) {\r\n this.backdrop.style.opacity = String(Math.max(0, 1 - offset / size));\r\n }\r\n };\r\n\r\n const onMove = (move: PointerEvent): void => {\r\n if (move.pointerId !== pointerId) {\r\n return;\r\n }\r\n const raw = along(move);\r\n if (!active) {\r\n const cross = vertical ? move.clientX - startX : move.clientY - startY;\r\n if (raw <= DRAG_THRESHOLD || Math.abs(raw) <= Math.abs(cross)) {\r\n return;\r\n }\r\n // A drag is taking over: never leave a half-started text selection behind.\r\n move.preventDefault();\r\n window.getSelection()?.removeAllRanges();\r\n activate();\r\n }\r\n render(raw);\r\n };\r\n\r\n const finish = (end: PointerEvent, cancelled: boolean): void => {\r\n if (end.pointerId !== pointerId) {\r\n return;\r\n }\r\n this.release?.();\r\n this.release = undefined;\r\n surface.removeAttribute('data-raqm-swiping');\r\n if (surface.hasPointerCapture(pointerId)) {\r\n surface.releasePointerCapture(pointerId);\r\n }\r\n if (!active) {\r\n return;\r\n }\r\n const elapsed = Math.max(1, performance.now() - startedAt);\r\n const dismiss =\r\n !cancelled && (distance >= size * DISMISS_RATIO || distance / elapsed >= DISMISS_VELOCITY);\r\n this.settle(dismiss, size, vertical, sign);\r\n };\r\n\r\n const onUp = (up: PointerEvent): void => finish(up, false);\r\n const onCancel = (cancel: PointerEvent): void => finish(cancel, true);\r\n\r\n // Move/up are observed on the document so a drag finishes without pointer capture.\r\n const doc = surface.ownerDocument;\r\n doc.addEventListener('pointermove', onMove);\r\n doc.addEventListener('pointerup', onUp);\r\n doc.addEventListener('pointercancel', onCancel);\r\n surface.addEventListener('lostpointercapture', onCancel);\r\n this.release = () => {\r\n doc.removeEventListener('pointermove', onMove);\r\n doc.removeEventListener('pointerup', onUp);\r\n doc.removeEventListener('pointercancel', onCancel);\r\n surface.removeEventListener('lostpointercapture', onCancel);\r\n };\r\n };\r\n\r\n constructor() {\r\n this.surface.addEventListener('pointerdown', this.onPointerDown);\r\n this.destroyRef.onDestroy(() => {\r\n this.surface.removeEventListener('pointerdown', this.onPointerDown);\r\n this.release?.();\r\n this.release = undefined;\r\n this.clearSettleTimer();\r\n this.resetSurface();\r\n });\r\n }\r\n\r\n // Either slides the surface out and asks the root to close, or settles it back.\r\n private settle(dismiss: boolean, size: number, vertical: boolean, sign: number): void {\r\n const surface = this.surface;\r\n const reduced = prefersReducedMotion();\r\n if (dismiss) {\r\n if (this.dialog === null) {\r\n this.resetSurface();\r\n return;\r\n }\r\n if (reduced) {\r\n this.resetSurface();\r\n this.dialog.closeFromUser();\r\n return;\r\n }\r\n const target = size + 2;\r\n surface.style.transition = `transform ${SETTLE_MS}ms var(--raqm-ease-out), opacity ${SETTLE_MS}ms var(--raqm-ease-out)`;\r\n surface.style.transform = `translate3d(${vertical ? 0 : target * sign}px, ${\r\n vertical ? target * sign : 0\r\n }px, 0)`;\r\n surface.style.opacity = '0';\r\n if (this.backdrop) {\r\n this.backdrop.style.transitionDuration = `${SETTLE_MS}ms`;\r\n this.backdrop.style.opacity = '0';\r\n }\r\n // The close path disposes this pane, so the outgoing surface is left off-screen.\r\n this.settleTimer = setTimeout(() => {\r\n this.settleTimer = undefined;\r\n this.dialog?.closeFromUser();\r\n }, SETTLE_MS);\r\n return;\r\n }\r\n\r\n surface.style.transition = reduced ? 'none' : `transform ${SETTLE_MS}ms var(--raqm-ease-out)`;\r\n surface.style.transform = 'translate3d(0, 0, 0)';\r\n if (this.backdrop) {\r\n this.backdrop.style.transitionDuration = reduced ? '0ms' : `${SETTLE_MS}ms`;\r\n this.backdrop.style.opacity = '1';\r\n }\r\n this.settleTimer = setTimeout(\r\n () => {\r\n this.settleTimer = undefined;\r\n this.resetSurface();\r\n },\r\n reduced ? 0 : SETTLE_MS,\r\n );\r\n }\r\n\r\n // Regions that scroll along the dismiss axis own the gesture.\r\n private hasScrollableAncestor(target: Element, vertical: boolean): boolean {\r\n let node: Element | null = target;\r\n while (node && node !== this.surface) {\r\n const style = getComputedStyle(node);\r\n const overflow = vertical ? style.overflowY : style.overflowX;\r\n if (overflow === 'auto' || overflow === 'scroll') {\r\n const hidden = vertical\r\n ? node.scrollHeight - node.clientHeight\r\n : node.scrollWidth - node.clientWidth;\r\n if (hidden > 1) {\r\n return true;\r\n }\r\n }\r\n node = node.parentElement;\r\n }\r\n return false;\r\n }\r\n\r\n // Clears every inline gesture style so the stylesheet owns the surface again.\r\n private resetSurface(): void {\r\n const surface = this.surface;\r\n surface.style.transform = '';\r\n surface.style.transition = '';\r\n surface.style.opacity = '';\r\n surface.removeAttribute('data-raqm-swiping');\r\n if (this.backdrop) {\r\n this.backdrop.style.opacity = '';\r\n this.backdrop.style.transitionDuration = '';\r\n this.backdrop = null;\r\n }\r\n }\r\n\r\n private clearSettleTimer(): void {\r\n if (this.settleTimer !== undefined) {\r\n clearTimeout(this.settleTimer);\r\n this.settleTimer = undefined;\r\n }\r\n }\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n effect,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { RaqmButton } from '@raqm/ui/button';\r\nimport {\r\n RAQM_DIALOG,\r\n RAQM_DIALOG_POLICY,\r\n RaqmDialogBaseComponent,\r\n type RaqmDialogPolicy,\r\n} from '@raqm/ui/dialog';\r\n\r\nimport { RaqmDrawerSwipeDirective, type RaqmDrawerDirection } from './drawer-swipe';\r\n\r\n// The drawer direction and the edge its surface is attached to. `right`/`left` are\r\n// logical (inline-end/inline-start), matching the library's RTL convention.\r\nconst SIDE: Readonly<Record<RaqmDrawerDirection, 'top' | 'right' | 'bottom' | 'left'>> = {\r\n down: 'bottom',\r\n up: 'top',\r\n right: 'right',\r\n left: 'left',\r\n};\r\n\r\n@Component({\r\n selector: 'raqm-drawer',\r\n imports: [NgTemplateOutlet, RaqmButton, RaqmDrawerSwipeDirective],\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['../dialog/dialog.component.scss', './drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'raqmDrawer',\r\n providers: [\r\n { provide: RAQM_DIALOG, useExisting: RaqmDrawerComponent },\r\n {\r\n provide: RAQM_DIALOG_POLICY,\r\n useFactory: (): RaqmDialogPolicy => ({\r\n role: 'dialog',\r\n contentClass: 'raqm-drawer-content',\r\n touchOpening: signal(false),\r\n dismissOnBackdrop: true,\r\n side: signal('bottom'),\r\n paneClass: 'raqm-drawer-overlay-pane',\r\n backdropClass: 'raqm-drawer-overlay-backdrop',\r\n // Matches the 300ms slide in `drawer.component.scss`.\r\n exitAnimationMs: 300,\r\n }),\r\n },\r\n ],\r\n})\r\nexport class RaqmDrawerComponent extends RaqmDialogBaseComponent {\r\n /** The edge the drawer is attached to; also the direction that dismisses it. */\r\n readonly swipeDirection = input<RaqmDrawerDirection>('down');\r\n\r\n /** Whether the decorative grab handle is rendered above the content. */\r\n readonly showSwipeHandle = input(false, { transform: booleanAttribute });\r\n\r\n /** Floating presentation: an 8px-inset, rounded, shadowed surface instead of the edge panel. */\r\n readonly floating = input(false, { transform: booleanAttribute });\r\n\r\n /** Whether the root renders its own close control; opt-in, defaults to `false`. */\r\n readonly showCloseButton = input(false, { transform: booleanAttribute });\r\n\r\n /** The accessible name of the close control; supplied by the application. */\r\n readonly closeLabel = input<string | undefined>(undefined);\r\n\r\n protected readonly closeButtonVisible = this.showCloseButton;\r\n protected readonly closeLabelText = this.closeLabel;\r\n\r\n constructor() {\r\n super();\r\n // Placement follows the gesture direction through the policy, so Dialog owns one placement.\r\n effect(() => {\r\n this.policy?.side?.set(SIDE[this.swipeDirection()]);\r\n });\r\n }\r\n}\r\n","<ng-content />\r\n\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.data-raqm-swipe-direction]=\"swipeDirection()\"\r\n [attr.data-raqm-floating]=\"floating() ? '' : null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n raqm-drawer-swipe\r\n [direction]=\"swipeDirection()\"\r\n >\r\n @if (showSwipeHandle()) {\r\n <!-- Decorative grab affordance; the gesture itself is on the surface. -->\r\n <div class=\"raqm-drawer-swipe-handle\" data-raqm-drawer-swipe-handle aria-hidden=\"true\"></div>\r\n }\r\n\r\n <div class=\"raqm-drawer-body\">\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n </div>\r\n\r\n <!-- Opt-in close control; the library ships none by default. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Directive } from '@angular/core';\r\nimport {\r\n RaqmDialogCloseDirective,\r\n RaqmDialogContentDirective,\r\n RaqmDialogDescriptionDirective,\r\n RaqmDialogTitleDirective,\r\n RaqmDialogTriggerDirective,\r\n} from '@raqm/ui/dialog';\r\n\r\n/** Native opener reusing Dialog registration and disclosure ARIA; compose raqm-button. */\r\n@Directive({\r\n selector: 'button[raqm-drawer-trigger]',\r\n host: { class: 'raqm-drawer-trigger' },\r\n})\r\nexport class RaqmDrawerTriggerDirective extends RaqmDialogTriggerDirective {}\r\n\r\n/** Native close control using Dialog's single animated user-close path. */\r\n@Directive({\r\n selector: 'button[raqm-drawer-close]',\r\n hostDirectives: [RaqmDialogCloseDirective],\r\n host: { class: 'raqm-drawer-close-control' },\r\n})\r\nexport class RaqmDrawerCloseDirective {}\r\n\r\n/** Portal body template; the root owns placement and the opt-in close control. */\r\n@Directive({\r\n selector: 'ng-template[raqm-drawer-content]',\r\n exportAs: 'raqmDrawerContent',\r\n})\r\nexport class RaqmDrawerContentDirective extends RaqmDialogContentDirective {}\r\n\r\n/** Passive drawer header, stacking the title and description. */\r\n@Directive({\r\n selector: '[raqm-drawer-header]',\r\n host: { class: 'raqm-drawer-header' },\r\n})\r\nexport class RaqmDrawerHeaderDirective {}\r\n\r\n/** Passive action footer, pushed to the end of the drawer surface. */\r\n@Directive({\r\n selector: '[raqm-drawer-footer]',\r\n host: { class: 'raqm-drawer-footer' },\r\n})\r\nexport class RaqmDrawerFooterDirective {}\r\n\r\n/** Accessible title registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-drawer-title]',\r\n hostDirectives: [RaqmDialogTitleDirective],\r\n host: { class: 'raqm-drawer-title' },\r\n})\r\nexport class RaqmDrawerTitleDirective {}\r\n\r\n/** Accessible description registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-drawer-description]',\r\n hostDirectives: [RaqmDialogDescriptionDirective],\r\n host: { class: 'raqm-drawer-description' },\r\n})\r\nexport class RaqmDrawerDescriptionDirective {}\r\n","// Public API for `@raqm/ui/drawer`; the root entry point re-exports these symbols.\r\nimport { RaqmDrawerComponent } from './drawer.component';\r\nimport {\r\n RaqmDrawerCloseDirective,\r\n RaqmDrawerContentDirective,\r\n RaqmDrawerDescriptionDirective,\r\n RaqmDrawerFooterDirective,\r\n RaqmDrawerHeaderDirective,\r\n RaqmDrawerTitleDirective,\r\n RaqmDrawerTriggerDirective,\r\n} from './drawer.directive';\r\n\r\nexport { RaqmDrawerComponent };\r\nexport type { RaqmDrawerDirection } from './drawer-swipe';\r\nexport {\r\n RaqmDrawerTriggerDirective,\r\n RaqmDrawerCloseDirective,\r\n RaqmDrawerContentDirective,\r\n RaqmDrawerHeaderDirective,\r\n RaqmDrawerFooterDirective,\r\n RaqmDrawerTitleDirective,\r\n RaqmDrawerDescriptionDirective,\r\n};\r\n\r\nexport const RaqmDrawer = [\r\n RaqmDrawerComponent,\r\n RaqmDrawerTriggerDirective,\r\n RaqmDrawerCloseDirective,\r\n RaqmDrawerContentDirective,\r\n RaqmDrawerHeaderDirective,\r\n RaqmDrawerFooterDirective,\r\n RaqmDrawerTitleDirective,\r\n RaqmDrawerDescriptionDirective,\r\n] as const;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-drawer.mjs","names":[],"sources":["../../../projects/ui/drawer/drawer-swipe.ts","../../../projects/ui/drawer/drawer.component.ts","../../../projects/ui/drawer/drawer.component.html","../../../projects/ui/drawer/drawer.directive.ts","../../../projects/ui/drawer/public-api.ts"],"sourcesContent":["import { DestroyRef, Directive, ElementRef, inject, input } from '@angular/core';\r\nimport { DialogRef } from '@angular/cdk/dialog';\r\nimport { RAQM_DIALOG } from '@raqm/ui/dialog';\r\n\r\nexport type RaqmDrawerDirection = 'down' | 'up' | 'left' | 'right';\r\n\r\n// Movement (px) before a gesture becomes a drag; below it the interaction stays a click.\r\nconst DRAG_THRESHOLD = 8;\r\n\r\n// Release past this fraction of the drawer's own size dismisses it.\r\nconst DISMISS_RATIO = 0.35;\r\n\r\n// Release faster than this (px per ms) dismisses it regardless of distance.\r\nconst DISMISS_VELOCITY = 0.5;\r\n\r\nconst SETTLE_MS = 200;\r\n\r\n// Controls that keep their own interaction: a drag never starts on them.\r\nconst INTERACTIVE_SELECTOR =\r\n 'input, textarea, select, button, a[href], [contenteditable=\"true\"], [data-raqm-drawer-no-swipe]';\r\n\r\nfunction prefersReducedMotion(): boolean {\r\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n}\r\n\r\n@Directive({\r\n selector: '[raqm-drawer-swipe]',\r\n})\r\nexport class RaqmDrawerSwipeDirective {\r\n private readonly surface = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private readonly dialog = inject(RAQM_DIALOG, { optional: true });\r\n // The CDK dialog ref reaches the panel's view, exposing this drawer's own backdrop.\r\n private readonly dialogRef = inject<DialogRef<unknown, unknown> | null>(DialogRef, {\r\n optional: true,\r\n });\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n /** The drawer's dismiss direction; it mirrors the surface placement. */\r\n readonly direction = input<RaqmDrawerDirection>('down');\r\n\r\n // Detaches the in-flight pointer listeners; `undefined` while idle.\r\n private release: (() => void) | undefined;\r\n private settleTimer: ReturnType<typeof setTimeout> | undefined;\r\n // The backdrop of this drawer, resolved once per gesture.\r\n private backdrop: HTMLElement | null = null;\r\n\r\n private readonly onPointerDown = (event: PointerEvent): void => {\r\n if (!event.isPrimary) {\r\n return;\r\n }\r\n if (event.pointerType === 'mouse' && event.button !== 0) {\r\n return;\r\n }\r\n // One gesture at a time, and never while the outgoing surface is settling.\r\n if (this.release !== undefined || this.settleTimer !== undefined) {\r\n return;\r\n }\r\n if (this.dialog !== null && !this.dialog.open()) {\r\n return;\r\n }\r\n const target = event.target;\r\n if (!(target instanceof Element)) {\r\n return;\r\n }\r\n if (target.closest(INTERACTIVE_SELECTOR)) {\r\n return;\r\n }\r\n const direction = this.direction();\r\n const vertical = direction === 'down' || direction === 'up';\r\n if (this.hasScrollableAncestor(target, vertical)) {\r\n return;\r\n }\r\n // Touch scrolling is native: a touch drag may only start on the handle, which sets\r\n // `touch-action: none`.\r\n if (event.pointerType === 'touch' && !target.closest('[data-raqm-drawer-swipe-handle]')) {\r\n return;\r\n }\r\n\r\n const surface = this.surface;\r\n const rect = surface.getBoundingClientRect();\r\n const size = vertical ? rect.height : rect.width;\r\n if (size <= 0) {\r\n return;\r\n }\r\n const rtl = getComputedStyle(surface).direction === 'rtl';\r\n // `+1` means the surface travels toward larger client coordinates.\r\n const positive =\r\n direction === 'down' ? true : direction === 'up' ? false : (direction === 'right') !== rtl;\r\n const sign = positive ? 1 : -1;\r\n const startX = event.clientX;\r\n const startY = event.clientY;\r\n const startedAt = performance.now();\r\n const pointerId = event.pointerId;\r\n let active = false;\r\n let distance = 0;\r\n\r\n const along = (move: PointerEvent): number =>\r\n (vertical ? move.clientY - startY : move.clientX - startX) * sign;\r\n\r\n const activate = (): void => {\r\n active = true;\r\n surface.setAttribute('data-raqm-swiping', '');\r\n this.backdrop = this.dialogRef?.overlayRef.backdropElement ?? null;\r\n if (this.backdrop) {\r\n this.backdrop.style.transitionDuration = '0ms';\r\n }\r\n try {\r\n surface.setPointerCapture(pointerId);\r\n } catch {\r\n // The pointer may already be gone; the gesture still works without capture.\r\n }\r\n };\r\n\r\n const render = (value: number): void => {\r\n const offset = Math.max(0, Math.min(size, value));\r\n distance = offset;\r\n surface.style.transition = 'none';\r\n surface.style.transform = `translate3d(${vertical ? 0 : offset * sign}px, ${\r\n vertical ? offset * sign : 0\r\n }px, 0)`;\r\n if (this.backdrop) {\r\n this.backdrop.style.opacity = String(Math.max(0, 1 - offset / size));\r\n }\r\n };\r\n\r\n const onMove = (move: PointerEvent): void => {\r\n if (move.pointerId !== pointerId) {\r\n return;\r\n }\r\n const raw = along(move);\r\n if (!active) {\r\n const cross = vertical ? move.clientX - startX : move.clientY - startY;\r\n if (raw <= DRAG_THRESHOLD || Math.abs(raw) <= Math.abs(cross)) {\r\n return;\r\n }\r\n // A drag is taking over: never leave a half-started text selection behind.\r\n move.preventDefault();\r\n window.getSelection()?.removeAllRanges();\r\n activate();\r\n }\r\n render(raw);\r\n };\r\n\r\n const finish = (end: PointerEvent, cancelled: boolean): void => {\r\n if (end.pointerId !== pointerId) {\r\n return;\r\n }\r\n this.release?.();\r\n this.release = undefined;\r\n surface.removeAttribute('data-raqm-swiping');\r\n if (surface.hasPointerCapture(pointerId)) {\r\n surface.releasePointerCapture(pointerId);\r\n }\r\n if (!active) {\r\n return;\r\n }\r\n const elapsed = Math.max(1, performance.now() - startedAt);\r\n const dismiss =\r\n !cancelled && (distance >= size * DISMISS_RATIO || distance / elapsed >= DISMISS_VELOCITY);\r\n this.settle(dismiss, size, vertical, sign);\r\n };\r\n\r\n const onUp = (up: PointerEvent): void => finish(up, false);\r\n const onCancel = (cancel: PointerEvent): void => finish(cancel, true);\r\n\r\n // Move/up are observed on the document so a drag finishes without pointer capture.\r\n const doc = surface.ownerDocument;\r\n doc.addEventListener('pointermove', onMove);\r\n doc.addEventListener('pointerup', onUp);\r\n doc.addEventListener('pointercancel', onCancel);\r\n surface.addEventListener('lostpointercapture', onCancel);\r\n this.release = () => {\r\n doc.removeEventListener('pointermove', onMove);\r\n doc.removeEventListener('pointerup', onUp);\r\n doc.removeEventListener('pointercancel', onCancel);\r\n surface.removeEventListener('lostpointercapture', onCancel);\r\n };\r\n };\r\n\r\n constructor() {\r\n this.surface.addEventListener('pointerdown', this.onPointerDown);\r\n this.destroyRef.onDestroy(() => {\r\n this.surface.removeEventListener('pointerdown', this.onPointerDown);\r\n this.release?.();\r\n this.release = undefined;\r\n this.clearSettleTimer();\r\n this.resetSurface();\r\n });\r\n }\r\n\r\n // Either slides the surface out and asks the root to close, or settles it back.\r\n private settle(dismiss: boolean, size: number, vertical: boolean, sign: number): void {\r\n const surface = this.surface;\r\n const reduced = prefersReducedMotion();\r\n if (dismiss) {\r\n if (this.dialog === null) {\r\n this.resetSurface();\r\n return;\r\n }\r\n if (reduced) {\r\n this.resetSurface();\r\n this.dialog.closeFromUser();\r\n return;\r\n }\r\n const target = size + 2;\r\n surface.style.transition = `transform ${SETTLE_MS}ms var(--raqm-ease-out), opacity ${SETTLE_MS}ms var(--raqm-ease-out)`;\r\n surface.style.transform = `translate3d(${vertical ? 0 : target * sign}px, ${\r\n vertical ? target * sign : 0\r\n }px, 0)`;\r\n surface.style.opacity = '0';\r\n if (this.backdrop) {\r\n this.backdrop.style.transitionDuration = `${SETTLE_MS}ms`;\r\n this.backdrop.style.opacity = '0';\r\n }\r\n // The close path disposes this pane, so the outgoing surface is left off-screen.\r\n this.settleTimer = setTimeout(() => {\r\n this.settleTimer = undefined;\r\n this.dialog?.closeFromUser();\r\n }, SETTLE_MS);\r\n return;\r\n }\r\n\r\n surface.style.transition = reduced ? 'none' : `transform ${SETTLE_MS}ms var(--raqm-ease-out)`;\r\n surface.style.transform = 'translate3d(0, 0, 0)';\r\n if (this.backdrop) {\r\n this.backdrop.style.transitionDuration = reduced ? '0ms' : `${SETTLE_MS}ms`;\r\n this.backdrop.style.opacity = '1';\r\n }\r\n this.settleTimer = setTimeout(\r\n () => {\r\n this.settleTimer = undefined;\r\n this.resetSurface();\r\n },\r\n reduced ? 0 : SETTLE_MS,\r\n );\r\n }\r\n\r\n // Regions that scroll along the dismiss axis own the gesture.\r\n private hasScrollableAncestor(target: Element, vertical: boolean): boolean {\r\n let node: Element | null = target;\r\n while (node && node !== this.surface) {\r\n const style = getComputedStyle(node);\r\n const overflow = vertical ? style.overflowY : style.overflowX;\r\n if (overflow === 'auto' || overflow === 'scroll') {\r\n const hidden = vertical\r\n ? node.scrollHeight - node.clientHeight\r\n : node.scrollWidth - node.clientWidth;\r\n if (hidden > 1) {\r\n return true;\r\n }\r\n }\r\n node = node.parentElement;\r\n }\r\n return false;\r\n }\r\n\r\n // Clears every inline gesture style so the stylesheet owns the surface again.\r\n private resetSurface(): void {\r\n const surface = this.surface;\r\n surface.style.transform = '';\r\n surface.style.transition = '';\r\n surface.style.opacity = '';\r\n surface.removeAttribute('data-raqm-swiping');\r\n if (this.backdrop) {\r\n this.backdrop.style.opacity = '';\r\n this.backdrop.style.transitionDuration = '';\r\n this.backdrop = null;\r\n }\r\n }\r\n\r\n private clearSettleTimer(): void {\r\n if (this.settleTimer !== undefined) {\r\n clearTimeout(this.settleTimer);\r\n this.settleTimer = undefined;\r\n }\r\n }\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n effect,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { RaqmButton } from '@raqm/ui/button';\r\nimport {\r\n RAQM_DIALOG,\r\n RAQM_DIALOG_POLICY,\r\n RaqmDialogBaseComponent,\r\n type RaqmDialogPolicy,\r\n} from '@raqm/ui/dialog';\r\n\r\nimport { RaqmDrawerSwipeDirective, type RaqmDrawerDirection } from './drawer-swipe';\r\n\r\n// The drawer direction and the edge its surface is attached to. `right`/`left` are\r\n// logical (inline-end/inline-start), matching the library's RTL convention.\r\nconst SIDE: Readonly<Record<RaqmDrawerDirection, 'top' | 'right' | 'bottom' | 'left'>> = {\r\n down: 'bottom',\r\n up: 'top',\r\n right: 'right',\r\n left: 'left',\r\n};\r\n\r\n@Component({\r\n selector: 'raqm-drawer',\r\n imports: [NgTemplateOutlet, RaqmButton, RaqmDrawerSwipeDirective],\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['../dialog/dialog.component.scss', './drawer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'raqmDrawer',\r\n providers: [\r\n { provide: RAQM_DIALOG, useExisting: RaqmDrawerComponent },\r\n {\r\n provide: RAQM_DIALOG_POLICY,\r\n useFactory: (): RaqmDialogPolicy => ({\r\n role: 'dialog',\r\n contentClass: 'raqm-drawer-content',\r\n touchOpening: signal(false),\r\n dismissOnBackdrop: true,\r\n side: signal('bottom'),\r\n paneClass: 'raqm-drawer-overlay-pane',\r\n backdropClass: 'raqm-drawer-overlay-backdrop',\r\n // Matches the 300ms slide in `drawer.component.scss`.\r\n exitAnimationMs: 300,\r\n }),\r\n },\r\n ],\r\n})\r\nexport class RaqmDrawerComponent extends RaqmDialogBaseComponent {\r\n /** The edge the drawer is attached to; also the direction that dismisses it. */\r\n readonly swipeDirection = input<RaqmDrawerDirection>('down');\r\n\r\n /** Whether the decorative grab handle is rendered above the content. */\r\n readonly showSwipeHandle = input(false, { transform: booleanAttribute });\r\n\r\n /** Floating presentation: an 8px-inset, rounded, shadowed surface instead of the edge panel. */\r\n readonly floating = input(false, { transform: booleanAttribute });\r\n\r\n /** Whether the root renders its own close control; opt-in, defaults to `false`. */\r\n readonly showCloseButton = input(false, { transform: booleanAttribute });\r\n\r\n /** The accessible name of the close control; supplied by the application. */\r\n readonly closeLabel = input<string | undefined>(undefined);\r\n\r\n protected readonly closeButtonVisible = this.showCloseButton;\r\n protected readonly closeLabelText = this.closeLabel;\r\n\r\n constructor() {\r\n super();\r\n // Placement follows the gesture direction through the policy, so Dialog owns one placement.\r\n effect(() => {\r\n this.policy?.side?.set(SIDE[this.swipeDirection()]);\r\n });\r\n }\r\n}\r\n","<ng-content />\r\n\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.data-raqm-swipe-direction]=\"swipeDirection()\"\r\n [attr.data-raqm-floating]=\"floating() ? '' : null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n raqm-drawer-swipe\r\n [direction]=\"swipeDirection()\"\r\n >\r\n @if (showSwipeHandle()) {\r\n <!-- Decorative grab affordance; the gesture itself is on the surface. -->\r\n <div class=\"raqm-drawer-swipe-handle\" data-raqm-drawer-swipe-handle aria-hidden=\"true\"></div>\r\n }\r\n\r\n <div class=\"raqm-drawer-body\">\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n </div>\r\n\r\n <!-- Opt-in close control; the library ships none by default. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Directive } from '@angular/core';\r\nimport {\r\n RaqmDialogCloseDirective,\r\n RaqmDialogContentDirective,\r\n RaqmDialogDescriptionDirective,\r\n RaqmDialogTitleDirective,\r\n RaqmDialogTriggerDirective,\r\n} from '@raqm/ui/dialog';\r\n\r\n/** Native opener reusing Dialog registration and disclosure ARIA; compose raqm-button. */\r\n@Directive({\r\n selector: 'button[raqm-drawer-trigger]',\r\n host: { class: 'raqm-drawer-trigger' },\r\n})\r\nexport class RaqmDrawerTriggerDirective extends RaqmDialogTriggerDirective {}\r\n\r\n/** Native close control using Dialog's single animated user-close path. */\r\n@Directive({\r\n selector: 'button[raqm-drawer-close]',\r\n hostDirectives: [RaqmDialogCloseDirective],\r\n host: { class: 'raqm-drawer-close-control' },\r\n})\r\nexport class RaqmDrawerCloseDirective {}\r\n\r\n/** Portal body template; the root owns placement and the opt-in close control. */\r\n@Directive({\r\n selector: 'ng-template[raqm-drawer-content]',\r\n exportAs: 'raqmDrawerContent',\r\n})\r\nexport class RaqmDrawerContentDirective extends RaqmDialogContentDirective {}\r\n\r\n/** Passive drawer header, stacking the title and description. */\r\n@Directive({\r\n selector: '[raqm-drawer-header]',\r\n host: { class: 'raqm-drawer-header' },\r\n})\r\nexport class RaqmDrawerHeaderDirective {}\r\n\r\n/** Passive action footer, pushed to the end of the drawer surface. */\r\n@Directive({\r\n selector: '[raqm-drawer-footer]',\r\n host: { class: 'raqm-drawer-footer' },\r\n})\r\nexport class RaqmDrawerFooterDirective {}\r\n\r\n/** Accessible title registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-drawer-title]',\r\n hostDirectives: [RaqmDialogTitleDirective],\r\n host: { class: 'raqm-drawer-title' },\r\n})\r\nexport class RaqmDrawerTitleDirective {}\r\n\r\n/** Accessible description registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-drawer-description]',\r\n hostDirectives: [RaqmDialogDescriptionDirective],\r\n host: { class: 'raqm-drawer-description' },\r\n})\r\nexport class RaqmDrawerDescriptionDirective {}\r\n","// Public API for `@raqm/ui/drawer`; the root entry point re-exports these symbols.\r\nimport { RaqmDrawerComponent } from './drawer.component';\r\nimport {\r\n RaqmDrawerCloseDirective,\r\n RaqmDrawerContentDirective,\r\n RaqmDrawerDescriptionDirective,\r\n RaqmDrawerFooterDirective,\r\n RaqmDrawerHeaderDirective,\r\n RaqmDrawerTitleDirective,\r\n RaqmDrawerTriggerDirective,\r\n} from './drawer.directive';\r\n\r\nexport { RaqmDrawerComponent };\r\nexport type { RaqmDrawerDirection } from './drawer-swipe';\r\nexport {\r\n RaqmDrawerTriggerDirective,\r\n RaqmDrawerCloseDirective,\r\n RaqmDrawerContentDirective,\r\n RaqmDrawerHeaderDirective,\r\n RaqmDrawerFooterDirective,\r\n RaqmDrawerTitleDirective,\r\n RaqmDrawerDescriptionDirective,\r\n};\r\n\r\nexport const RaqmDrawer = [\r\n RaqmDrawerComponent,\r\n RaqmDrawerTriggerDirective,\r\n RaqmDrawerCloseDirective,\r\n RaqmDrawerContentDirective,\r\n RaqmDrawerHeaderDirective,\r\n RaqmDrawerFooterDirective,\r\n RaqmDrawerTitleDirective,\r\n RaqmDrawerDescriptionDirective,\r\n] as const;\r\n"],"mappings":"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"}
@@ -74,7 +74,7 @@ var RaqmSheetComponent = class RaqmSheetComponent extends RaqmDialogBaseComponen
74
74
  usesInheritance: true,
75
75
  ngImport: i0,
76
76
  template: "<ng-content />\r\n\r\n<!-- The CDK container, not this wrapper, is the role=dialog element. -->\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-small]=\"policy?.small?.() ? '' : null\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n\r\n <!-- showCloseButton=false hides only this control; Escape and backdrop dismissal still close. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n",
77
- styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 4);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 4);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;top:calc(var(--raqm-spacing) * 2);inset-inline-end:calc(var(--raqm-spacing) * 2)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"],
77
+ styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 6);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 6);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;inset-block-start:calc(var(--raqm-spacing) * 4.5);inset-inline-end:calc(var(--raqm-spacing) * 4.5)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"],
78
78
  dependencies: [{
79
79
  kind: "directive",
80
80
  type: NgTemplateOutlet,
@@ -133,7 +133,7 @@ i0.ɵɵngDeclareClassMetadata({
133
133
  })
134
134
  }],
135
135
  template: "<ng-content />\r\n\r\n<!-- The CDK container, not this wrapper, is the role=dialog element. -->\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-small]=\"policy?.small?.() ? '' : null\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n\r\n <!-- showCloseButton=false hides only this control; Escape and backdrop dismissal still close. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n",
136
- styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 4);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 4);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;top:calc(var(--raqm-spacing) * 2);inset-inline-end:calc(var(--raqm-spacing) * 2)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"]
136
+ styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 6);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 6);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;inset-block-start:calc(var(--raqm-spacing) * 4.5);inset-inline-end:calc(var(--raqm-spacing) * 4.5)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"]
137
137
  }]
138
138
  }],
139
139
  ctorParameters: () => [],
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-sheet.mjs","names":[],"sources":["../../../projects/ui/sheet/sheet.component.ts","../../../projects/ui/dialog/dialog.component.html","../../../projects/ui/sheet/sheet.directive.ts","../../../projects/ui/sheet/public-api.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n effect,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RaqmButton } from '@raqm/ui/button';\r\nimport {\r\n RaqmDialogBaseComponent,\r\n RAQM_DIALOG,\r\n RAQM_DIALOG_POLICY,\r\n RaqmDialogPolicy,\r\n} from '@raqm/ui/dialog';\r\n\r\n/** Edge modal sharing Dialog's stack, focus trap, scroll lock and teardown. */\r\n@Component({\r\n selector: 'raqm-sheet',\r\n imports: [NgTemplateOutlet, RaqmButton],\r\n templateUrl: '../dialog/dialog.component.html',\r\n styleUrls: ['../dialog/dialog.component.scss', './sheet.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'raqmSheet',\r\n providers: [\r\n { provide: RAQM_DIALOG, useExisting: RaqmSheetComponent },\r\n {\r\n provide: RAQM_DIALOG_POLICY,\r\n useFactory: (): RaqmDialogPolicy => ({\r\n role: 'dialog',\r\n contentClass: 'raqm-sheet-content',\r\n touchOpening: signal(false),\r\n dismissOnBackdrop: true,\r\n side: signal('right'),\r\n paneClass: 'raqm-sheet-overlay-pane',\r\n backdropClass: 'raqm-sheet-overlay-backdrop',\r\n exitAnimationMs: 200,\r\n }),\r\n },\r\n ],\r\n})\r\nexport class RaqmSheetComponent extends RaqmDialogBaseComponent {\r\n /** The edge the sheet is attached to; right/left are logical in RTL. */\r\n readonly side = input<'top' | 'right' | 'bottom' | 'left'>('right');\r\n\r\n readonly showCloseButton = input(true, { transform: booleanAttribute });\r\n\r\n readonly closeLabel = input<string | undefined>(undefined);\r\n\r\n protected readonly closeButtonVisible = this.showCloseButton;\r\n protected readonly closeLabelText = this.closeLabel;\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.policy?.side?.set(this.side()));\r\n }\r\n}\r\n","<ng-content />\r\n\r\n<!-- The CDK container, not this wrapper, is the role=dialog element. -->\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-small]=\"policy?.small?.() ? '' : null\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n\r\n <!-- showCloseButton=false hides only this control; Escape and backdrop dismissal still close. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Directive } from '@angular/core';\r\nimport {\r\n RaqmDialogCloseDirective,\r\n RaqmDialogContentDirective,\r\n RaqmDialogDescriptionDirective,\r\n RaqmDialogTitleDirective,\r\n RaqmDialogTriggerDirective,\r\n} from '@raqm/ui/dialog';\r\n\r\n/** Native opener reusing Dialog registration and disclosure ARIA; compose raqm-button. */\r\n@Directive({\r\n selector: 'button[raqm-sheet-trigger]',\r\n host: { class: 'raqm-sheet-trigger' },\r\n})\r\nexport class RaqmSheetTriggerDirective extends RaqmDialogTriggerDirective {}\r\n\r\n/** Native close control using Dialog's single animated user-close path. */\r\n@Directive({\r\n selector: 'button[raqm-sheet-close]',\r\n hostDirectives: [RaqmDialogCloseDirective],\r\n host: { class: 'raqm-sheet-close-control' },\r\n})\r\nexport class RaqmSheetCloseDirective {}\r\n\r\n/** Portal body template; the root owns edge placement and the close control. */\r\n@Directive({\r\n selector: 'ng-template[raqm-sheet-content]',\r\n exportAs: 'raqmSheetContent',\r\n})\r\nexport class RaqmSheetContentDirective extends RaqmDialogContentDirective {}\r\n\r\n/** Passive header, stacking the title and description. */\r\n@Directive({\r\n selector: '[raqm-sheet-header]',\r\n host: { class: 'raqm-sheet-header' },\r\n})\r\nexport class RaqmSheetHeaderDirective {}\r\n\r\n/** Passive action footer, pushed to the end of the Sheet surface. */\r\n@Directive({\r\n selector: '[raqm-sheet-footer]',\r\n host: { class: 'raqm-sheet-footer' },\r\n})\r\nexport class RaqmSheetFooterDirective {}\r\n\r\n/** Accessible title registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-sheet-title]',\r\n hostDirectives: [RaqmDialogTitleDirective],\r\n host: { class: 'raqm-sheet-title' },\r\n})\r\nexport class RaqmSheetTitleDirective {}\r\n\r\n/** Accessible description registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-sheet-description]',\r\n hostDirectives: [RaqmDialogDescriptionDirective],\r\n host: { class: 'raqm-sheet-description' },\r\n})\r\nexport class RaqmSheetDescriptionDirective {}\r\n","// Public API for `@raqm/ui/sheet`; the root entry point re-exports these symbols.\r\nimport { RaqmSheetComponent } from './sheet.component';\r\nimport {\r\n RaqmSheetCloseDirective,\r\n RaqmSheetContentDirective,\r\n RaqmSheetDescriptionDirective,\r\n RaqmSheetFooterDirective,\r\n RaqmSheetHeaderDirective,\r\n RaqmSheetTitleDirective,\r\n RaqmSheetTriggerDirective,\r\n} from './sheet.directive';\r\n\r\nexport {\r\n RaqmSheetComponent,\r\n RaqmSheetTriggerDirective,\r\n RaqmSheetCloseDirective,\r\n RaqmSheetContentDirective,\r\n RaqmSheetHeaderDirective,\r\n RaqmSheetFooterDirective,\r\n RaqmSheetTitleDirective,\r\n RaqmSheetDescriptionDirective,\r\n};\r\n\r\nexport const RaqmSheet = [\r\n RaqmSheetComponent,\r\n RaqmSheetTriggerDirective,\r\n RaqmSheetCloseDirective,\r\n RaqmSheetContentDirective,\r\n RaqmSheetHeaderDirective,\r\n RaqmSheetFooterDirective,\r\n RaqmSheetTitleDirective,\r\n RaqmSheetDescriptionDirective,\r\n] as const;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-sheet.mjs","names":[],"sources":["../../../projects/ui/sheet/sheet.component.ts","../../../projects/ui/dialog/dialog.component.html","../../../projects/ui/sheet/sheet.directive.ts","../../../projects/ui/sheet/public-api.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n effect,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { RaqmButton } from '@raqm/ui/button';\r\nimport {\r\n RaqmDialogBaseComponent,\r\n RAQM_DIALOG,\r\n RAQM_DIALOG_POLICY,\r\n RaqmDialogPolicy,\r\n} from '@raqm/ui/dialog';\r\n\r\n/** Edge modal sharing Dialog's stack, focus trap, scroll lock and teardown. */\r\n@Component({\r\n selector: 'raqm-sheet',\r\n imports: [NgTemplateOutlet, RaqmButton],\r\n templateUrl: '../dialog/dialog.component.html',\r\n styleUrls: ['../dialog/dialog.component.scss', './sheet.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n exportAs: 'raqmSheet',\r\n providers: [\r\n { provide: RAQM_DIALOG, useExisting: RaqmSheetComponent },\r\n {\r\n provide: RAQM_DIALOG_POLICY,\r\n useFactory: (): RaqmDialogPolicy => ({\r\n role: 'dialog',\r\n contentClass: 'raqm-sheet-content',\r\n touchOpening: signal(false),\r\n dismissOnBackdrop: true,\r\n side: signal('right'),\r\n paneClass: 'raqm-sheet-overlay-pane',\r\n backdropClass: 'raqm-sheet-overlay-backdrop',\r\n exitAnimationMs: 200,\r\n }),\r\n },\r\n ],\r\n})\r\nexport class RaqmSheetComponent extends RaqmDialogBaseComponent {\r\n /** The edge the sheet is attached to; right/left are logical in RTL. */\r\n readonly side = input<'top' | 'right' | 'bottom' | 'left'>('right');\r\n\r\n readonly showCloseButton = input(true, { transform: booleanAttribute });\r\n\r\n readonly closeLabel = input<string | undefined>(undefined);\r\n\r\n protected readonly closeButtonVisible = this.showCloseButton;\r\n protected readonly closeLabelText = this.closeLabel;\r\n\r\n constructor() {\r\n super();\r\n effect(() => this.policy?.side?.set(this.side()));\r\n }\r\n}\r\n","<ng-content />\r\n\r\n<!-- The CDK container, not this wrapper, is the role=dialog element. -->\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-small]=\"policy?.small?.() ? '' : null\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n\r\n <!-- showCloseButton=false hides only this control; Escape and backdrop dismissal still close. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n","import { Directive } from '@angular/core';\r\nimport {\r\n RaqmDialogCloseDirective,\r\n RaqmDialogContentDirective,\r\n RaqmDialogDescriptionDirective,\r\n RaqmDialogTitleDirective,\r\n RaqmDialogTriggerDirective,\r\n} from '@raqm/ui/dialog';\r\n\r\n/** Native opener reusing Dialog registration and disclosure ARIA; compose raqm-button. */\r\n@Directive({\r\n selector: 'button[raqm-sheet-trigger]',\r\n host: { class: 'raqm-sheet-trigger' },\r\n})\r\nexport class RaqmSheetTriggerDirective extends RaqmDialogTriggerDirective {}\r\n\r\n/** Native close control using Dialog's single animated user-close path. */\r\n@Directive({\r\n selector: 'button[raqm-sheet-close]',\r\n hostDirectives: [RaqmDialogCloseDirective],\r\n host: { class: 'raqm-sheet-close-control' },\r\n})\r\nexport class RaqmSheetCloseDirective {}\r\n\r\n/** Portal body template; the root owns edge placement and the close control. */\r\n@Directive({\r\n selector: 'ng-template[raqm-sheet-content]',\r\n exportAs: 'raqmSheetContent',\r\n})\r\nexport class RaqmSheetContentDirective extends RaqmDialogContentDirective {}\r\n\r\n/** Passive header, stacking the title and description. */\r\n@Directive({\r\n selector: '[raqm-sheet-header]',\r\n host: { class: 'raqm-sheet-header' },\r\n})\r\nexport class RaqmSheetHeaderDirective {}\r\n\r\n/** Passive action footer, pushed to the end of the Sheet surface. */\r\n@Directive({\r\n selector: '[raqm-sheet-footer]',\r\n host: { class: 'raqm-sheet-footer' },\r\n})\r\nexport class RaqmSheetFooterDirective {}\r\n\r\n/** Accessible title registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-sheet-title]',\r\n hostDirectives: [RaqmDialogTitleDirective],\r\n host: { class: 'raqm-sheet-title' },\r\n})\r\nexport class RaqmSheetTitleDirective {}\r\n\r\n/** Accessible description registered with the real modal container. */\r\n@Directive({\r\n selector: '[raqm-sheet-description]',\r\n hostDirectives: [RaqmDialogDescriptionDirective],\r\n host: { class: 'raqm-sheet-description' },\r\n})\r\nexport class RaqmSheetDescriptionDirective {}\r\n","// Public API for `@raqm/ui/sheet`; the root entry point re-exports these symbols.\r\nimport { RaqmSheetComponent } from './sheet.component';\r\nimport {\r\n RaqmSheetCloseDirective,\r\n RaqmSheetContentDirective,\r\n RaqmSheetDescriptionDirective,\r\n RaqmSheetFooterDirective,\r\n RaqmSheetHeaderDirective,\r\n RaqmSheetTitleDirective,\r\n RaqmSheetTriggerDirective,\r\n} from './sheet.directive';\r\n\r\nexport {\r\n RaqmSheetComponent,\r\n RaqmSheetTriggerDirective,\r\n RaqmSheetCloseDirective,\r\n RaqmSheetContentDirective,\r\n RaqmSheetHeaderDirective,\r\n RaqmSheetFooterDirective,\r\n RaqmSheetTitleDirective,\r\n RaqmSheetDescriptionDirective,\r\n};\r\n\r\nexport const RaqmSheet = [\r\n RaqmSheetComponent,\r\n RaqmSheetTriggerDirective,\r\n RaqmSheetCloseDirective,\r\n RaqmSheetContentDirective,\r\n RaqmSheetHeaderDirective,\r\n RaqmSheetFooterDirective,\r\n RaqmSheetTitleDirective,\r\n RaqmSheetDescriptionDirective,\r\n] as const;\r\n"],"mappings":"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"}
@@ -48,7 +48,7 @@ var RaqmSidebarMobileComponent = class RaqmSidebarMobileComponent extends RaqmSh
48
48
  usesInheritance: true,
49
49
  ngImport: i0,
50
50
  template: "<ng-content />\r\n\r\n<!-- The CDK container, not this wrapper, is the role=dialog element. -->\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-small]=\"policy?.small?.() ? '' : null\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n\r\n <!-- showCloseButton=false hides only this control; Escape and backdrop dismissal still close. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n",
51
- styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 4);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 4);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;top:calc(var(--raqm-spacing) * 2);inset-inline-end:calc(var(--raqm-spacing) * 2)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"],
51
+ styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 6);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 6);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;inset-block-start:calc(var(--raqm-spacing) * 4.5);inset-inline-end:calc(var(--raqm-spacing) * 4.5)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"],
52
52
  dependencies: [{
53
53
  kind: "directive",
54
54
  type: NgTemplateOutlet,
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({
107
107
  })
108
108
  }],
109
109
  template: "<ng-content />\r\n\r\n<!-- The CDK container, not this wrapper, is the role=dialog element. -->\r\n<ng-template #panel>\r\n <div\r\n class=\"raqm-dialog-content\"\r\n [class]=\"policy?.contentClass ?? ''\"\r\n [attr.data-raqm-small]=\"policy?.small?.() ? '' : null\"\r\n [attr.data-raqm-side]=\"policy?.side?.() ?? null\"\r\n [attr.dir]=\"panelDir()\"\r\n [class.raqm-dialog-content--entering]=\"entering()\"\r\n [class.raqm-dialog-content--closing]=\"closing()\"\r\n >\r\n <ng-container [ngTemplateOutlet]=\"contentTemplate()\" />\r\n\r\n <!-- showCloseButton=false hides only this control; Escape and backdrop dismissal still close. -->\r\n @if (closeButtonVisible()) {\r\n <button\r\n raqm-button=\"ghost\"\r\n icon-small\r\n class=\"raqm-dialog-close\"\r\n [attr.aria-label]=\"closeLabelText()\"\r\n (click)=\"onCloseButtonClick()\"\r\n >\r\n <svg\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n</ng-template>\r\n",
110
- styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 4);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 4);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;top:calc(var(--raqm-spacing) * 2);inset-inline-end:calc(var(--raqm-spacing) * 2)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"]
110
+ styles: [":host{display:contents}.raqm-dialog-content{position:relative;display:grid;gap:calc(var(--raqm-spacing) * 6);box-sizing:border-box;inline-size:calc(100vw - 2rem);inline-size:calc(100dvw - 2rem);max-inline-size:100%;max-block-size:calc(100vh - 2rem);max-block-size:calc(100dvh - 2rem);overflow:auto;padding:calc(var(--raqm-spacing) * 6);border-radius:var(--raqm-radius-xl);background-color:var(--raqm-popover);color:var(--raqm-popover-foreground);font-size:var(--raqm-font-size-sm);line-height:1.25rem;box-shadow:0 0 0 1px color-mix(in oklch,var(--raqm-foreground) 10%,transparent);outline:none}@media(min-width:40rem){.raqm-dialog-content{inline-size:24rem}}.raqm-dialog-content--entering{animation:raqm-dialog-in var(--raqm-duration-fast) var(--raqm-ease-out)}@keyframes raqm-dialog-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:none}}.raqm-dialog-content--closing{opacity:0;transform:scale(.95);transition:opacity var(--raqm-duration-fast) var(--raqm-ease-out),transform var(--raqm-duration-fast) var(--raqm-ease-out)}@media(prefers-reduced-motion:reduce){.raqm-dialog-content,.raqm-dialog-content--closing{animation:none;transition:none}}.raqm-dialog-close{position:absolute;inset-block-start:calc(var(--raqm-spacing) * 4.5);inset-inline-end:calc(var(--raqm-spacing) * 4.5)}@media(forced-colors:active){.raqm-dialog-close{border-color:ButtonText}.raqm-dialog-content{border:1px solid CanvasText}}\n", ".raqm-dialog-content.raqm-sheet-content{position:absolute;display:flex;flex-direction:column;gap:calc(var(--raqm-spacing) * 4);padding:0;border:0 solid var(--raqm-border);border-radius:0;max-inline-size:none;max-block-size:100%;background-clip:padding-box;box-shadow:var(--raqm-shadow-lg);pointer-events:auto;--raqm-sheet-enter-x: 0px;--raqm-sheet-enter-y: 0px}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-block:0;block-size:100%;inline-size:75%}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=right]{inset-inline-end:0;border-inline-start-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=left]{inset-inline-start:0;border-inline-end-width:1px;--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=right]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[dir=rtl][data-raqm-side=left]{--raqm-sheet-enter-x: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top],.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-inline:0;inline-size:100%;block-size:auto}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=top]{inset-block-start:0;border-block-end-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * -10)}.raqm-dialog-content.raqm-sheet-content[data-raqm-side=bottom]{inset-block-end:0;border-block-start-width:1px;--raqm-sheet-enter-y: calc(var(--raqm-spacing) * 10)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--entering{animation:raqm-sheet-in var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content.raqm-dialog-content--closing{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y));transition:opacity var(--raqm-duration-slow) var(--raqm-ease-in-out),transform var(--raqm-duration-slow) var(--raqm-ease-in-out)}.raqm-dialog-content.raqm-sheet-content .raqm-dialog-close{inset-block-start:calc(var(--raqm-spacing) * 3);inset-inline-end:calc(var(--raqm-spacing) * 3)}@media(min-width:40rem){.raqm-sheet-content[data-raqm-side=right],.raqm-sheet-content[data-raqm-side=left]{max-inline-size:calc(var(--raqm-spacing) * 96)}}@keyframes raqm-sheet-in{0%{opacity:0;transform:translate(var(--raqm-sheet-enter-x),var(--raqm-sheet-enter-y))}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.raqm-dialog-content.raqm-sheet-content{animation:none;transition:none}}@media(forced-colors:active){.raqm-dialog-content.raqm-sheet-content{border-color:CanvasText}}\n"]
111
111
  }]
112
112
  }]
113
113
  });