@radix-ng/primitives 1.0.0-beta.5 → 1.0.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.
Files changed (50) hide show
  1. package/composite/README.md +3 -0
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +12 -36
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-composite.mjs +515 -0
  5. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -0
  6. package/fesm2022/radix-ng-primitives-drawer.mjs +442 -2
  7. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-menu.mjs +38 -16
  9. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-menubar.mjs +68 -36
  11. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +281 -88
  13. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-popover.mjs +40 -15
  15. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-popper.mjs +73 -65
  17. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-radio.mjs +63 -27
  19. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-roving-focus.mjs +40 -8
  21. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-scroll-area.mjs +56 -25
  23. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-select.mjs +3 -0
  25. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-tabs.mjs +50 -21
  27. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-toggle-group.mjs +66 -21
  29. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-toggle.mjs +29 -11
  31. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-toolbar.mjs +50 -24
  33. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  34. package/navigation-menu/README.md +5 -2
  35. package/package.json +5 -1
  36. package/types/radix-ng-primitives-accordion.d.ts +9 -13
  37. package/types/radix-ng-primitives-composite.d.ts +152 -0
  38. package/types/radix-ng-primitives-drawer.d.ts +40 -2
  39. package/types/radix-ng-primitives-menu.d.ts +5 -3
  40. package/types/radix-ng-primitives-menubar.d.ts +10 -5
  41. package/types/radix-ng-primitives-navigation-menu.d.ts +65 -33
  42. package/types/radix-ng-primitives-popover.d.ts +9 -5
  43. package/types/radix-ng-primitives-popper.d.ts +1 -0
  44. package/types/radix-ng-primitives-radio.d.ts +11 -9
  45. package/types/radix-ng-primitives-roving-focus.d.ts +15 -1
  46. package/types/radix-ng-primitives-scroll-area.d.ts +4 -1
  47. package/types/radix-ng-primitives-tabs.d.ts +8 -5
  48. package/types/radix-ng-primitives-toggle-group.d.ts +27 -16
  49. package/types/radix-ng-primitives-toggle.d.ts +5 -5
  50. package/types/radix-ng-primitives-toolbar.d.ts +22 -14
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-scroll-area.mjs","sources":["../../../packages/primitives/scroll-area/src/constants.ts","../../../packages/primitives/scroll-area/src/utils.ts","../../../packages/primitives/scroll-area/src/scroll-area-root.ts","../../../packages/primitives/scroll-area/src/scroll-area-viewport.ts","../../../packages/primitives/scroll-area/src/scroll-area-content.ts","../../../packages/primitives/scroll-area/src/scroll-area-corner.ts","../../../packages/primitives/scroll-area/src/scroll-area-scrollbar.ts","../../../packages/primitives/scroll-area/src/scroll-area-thumb.ts","../../../packages/primitives/scroll-area/index.ts","../../../packages/primitives/scroll-area/radix-ng-primitives-scroll-area.ts"],"sourcesContent":["/** How long (ms) the `data-scrolling` attribute stays applied after the last scroll movement. */\nexport const SCROLL_TIMEOUT = 500;\n\n/** Minimum size (px) of the thumb so it stays grabbable on very large content. */\nexport const MIN_THUMB_SIZE = 16;\n\n/** 100 ms without scroll events ≈ scroll end (mirrors the native `scrollend` heuristic). */\nexport const SCROLL_END_TIMEOUT = 100;\n\n/** Distance (px) within which a scroll offset is snapped to an edge. */\nexport const SCROLL_EDGE_TOLERANCE_PX = 1;\n","import { clamp } from '@radix-ng/primitives/core';\nimport { SCROLL_EDGE_TOLERANCE_PX } from './constants';\n\n/**\n * Returns the combined start/end `margin` or `padding` of an element along an axis,\n * resolving logical (inline/block) properties so RTL layouts compute correctly.\n */\nexport function getOffset(element: Element | null, prop: 'margin' | 'padding', axis: 'x' | 'y'): number {\n if (!element) {\n return 0;\n }\n\n const styles = getComputedStyle(element);\n const propAxis = axis === 'x' ? 'Inline' : 'Block';\n\n // Safari misreports `marginInlineEnd` in RTL. We have to assume the start/end\n // values are symmetrical, which is likely.\n if (axis === 'x' && prop === 'margin') {\n return parseFloat(styles[`${prop}InlineStart` as keyof CSSStyleDeclaration] as string) * 2;\n }\n\n return (\n parseFloat(styles[`${prop}${propAxis}Start` as keyof CSSStyleDeclaration] as string) +\n parseFloat(styles[`${prop}${propAxis}End` as keyof CSSStyleDeclaration] as string)\n );\n}\n\n/**\n * Snaps a scroll offset that is within {@link SCROLL_EDGE_TOLERANCE_PX} of either end\n * to that boundary, giving the overflow edge attributes a \"sticky\" feel at scroll limits.\n */\nexport function normalizeScrollOffset(value: number, max: number): number {\n if (max <= 0) {\n return 0;\n }\n\n const clamped = clamp(value, 0, max);\n const startDistance = clamped;\n const endDistance = max - clamped;\n const withinStartTolerance = startDistance <= SCROLL_EDGE_TOLERANCE_PX;\n const withinEndTolerance = endDistance <= SCROLL_EDGE_TOLERANCE_PX;\n\n if (withinStartTolerance && withinEndTolerance) {\n return startDistance <= endDistance ? 0 : max;\n }\n if (withinStartTolerance) {\n return 0;\n }\n if (withinEndTolerance) {\n return max;\n }\n\n return clamped;\n}\n\nlet scrollbarHideStylesInjected = false;\n\n/**\n * Injects (once per document) the CSS that hides the native scrollbars of the viewport.\n * Headless directives can't hide WebKit scrollbars via inline styles, so a small\n * stylesheet keyed by the `[rdxScrollAreaViewport]` selector is appended to `<head>`.\n */\nexport function injectScrollbarHideStyles(document: Document): void {\n if (scrollbarHideStylesInjected || typeof document === 'undefined') {\n return;\n }\n scrollbarHideStylesInjected = true;\n\n const style = document.createElement('style');\n style.setAttribute('data-rdx-scroll-area', '');\n style.textContent = `[rdxScrollAreaViewport]{scrollbar-width:none;-ms-overflow-style:none}[rdxScrollAreaViewport]::-webkit-scrollbar{display:none}`;\n document.head.appendChild(style);\n}\n","import { computed, DestroyRef, Directive, ElementRef, inject, input, signal, Signal } from '@angular/core';\nimport { createContext, Direction } from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { SCROLL_TIMEOUT } from './constants';\nimport { getOffset } from './utils';\n\nexport type Size = { width: number; height: number };\nexport type Coords = { x: number; y: number };\nexport type OverflowEdges = { xStart: boolean; xEnd: boolean; yStart: boolean; yEnd: boolean };\nexport type HiddenState = { x: boolean; y: boolean; corner: boolean };\n\n/** A minimal, React-`ref`-like mutable holder shared through context. */\nexport type MutableRef<T> = { current: T | null };\n\nexport type OverflowEdgeThreshold = number | Partial<{ xStart: number; xEnd: number; yStart: number; yEnd: number }>;\n\nconst DEFAULT_SIZE: Size = { width: 0, height: 0 };\nconst DEFAULT_OVERFLOW_EDGES: OverflowEdges = { xStart: false, xEnd: false, yStart: false, yEnd: false };\nconst DEFAULT_HIDDEN_STATE: HiddenState = { x: true, y: true, corner: true };\n\nexport interface ScrollAreaRootContext {\n readonly rootId: string;\n readonly direction: Signal<Direction>;\n readonly overflowEdgeThreshold: Signal<{ xStart: number; xEnd: number; yStart: number; yEnd: number }>;\n\n // Reactive state\n readonly hovering: Signal<boolean>;\n readonly scrollingX: Signal<boolean>;\n readonly scrollingY: Signal<boolean>;\n readonly touchModality: Signal<boolean>;\n readonly hasMeasuredScrollbar: Signal<boolean>;\n readonly cornerSize: Signal<Size>;\n readonly thumbSize: Signal<Size>;\n readonly hiddenState: Signal<HiddenState>;\n readonly overflowEdges: Signal<OverflowEdges>;\n\n // Element references (filled in by the child parts as they mount)\n readonly rootRef: MutableRef<HTMLElement>;\n readonly viewportRef: MutableRef<HTMLElement>;\n readonly scrollbarYRef: MutableRef<HTMLElement>;\n readonly scrollbarXRef: MutableRef<HTMLElement>;\n readonly thumbYRef: MutableRef<HTMLElement>;\n readonly thumbXRef: MutableRef<HTMLElement>;\n readonly cornerRef: MutableRef<HTMLElement>;\n\n // State setters used by the viewport's measurement pass\n setHovering(value: boolean): void;\n setHasMeasuredScrollbar(value: boolean): void;\n setScrollingX(value: boolean): void;\n setScrollingY(value: boolean): void;\n setThumbSize(value: Size): void;\n setCornerSize(value: Size): void;\n setHiddenState(value: HiddenState): void;\n setOverflowEdges(value: OverflowEdges): void;\n\n // Pointer/scroll handlers shared with the scrollbar and thumb\n handleScroll(position: Coords): void;\n handlePointerDown(event: PointerEvent): void;\n handlePointerMove(event: PointerEvent): void;\n handlePointerUp(event: PointerEvent): void;\n}\n\nexport const [injectScrollAreaRootContext, provideScrollAreaRootContext] = createContext<ScrollAreaRootContext>(\n 'ScrollAreaRootContext',\n 'components/scroll-area'\n);\n\nconst rootContext = (): ScrollAreaRootContext => {\n const root = inject(RdxScrollAreaRoot);\n return {\n rootId: root.rootId,\n direction: root.direction,\n overflowEdgeThreshold: root.normalizedThreshold,\n hovering: root.hovering,\n scrollingX: root.scrollingX,\n scrollingY: root.scrollingY,\n touchModality: root.touchModality,\n hasMeasuredScrollbar: root.hasMeasuredScrollbar,\n cornerSize: root.cornerSize,\n thumbSize: root.thumbSize,\n hiddenState: root.hiddenState,\n overflowEdges: root.overflowEdges,\n rootRef: root.rootRef,\n viewportRef: root.viewportRef,\n scrollbarYRef: root.scrollbarYRef,\n scrollbarXRef: root.scrollbarXRef,\n thumbYRef: root.thumbYRef,\n thumbXRef: root.thumbXRef,\n cornerRef: root.cornerRef,\n setHovering: (v) => root.hovering.set(v),\n setHasMeasuredScrollbar: (v) => root.hasMeasuredScrollbar.set(v),\n setScrollingX: (v) => root.setScrollingX(v),\n setScrollingY: (v) => root.setScrollingY(v),\n setThumbSize: (v) => root.setThumbSize(v),\n setCornerSize: (v) => root.setCornerSize(v),\n setHiddenState: (v) => root.setHiddenState(v),\n setOverflowEdges: (v) => root.setOverflowEdges(v),\n handleScroll: (p) => root.handleScroll(p),\n handlePointerDown: (e) => root.handlePointerDown(e),\n handlePointerMove: (e) => root.handlePointerMove(e),\n handlePointerUp: (e) => root.handlePointerUp(e)\n };\n};\n\nlet idCounter = 0;\n\n/**\n * Groups all parts of the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaRoot]',\n exportAs: 'rdxScrollAreaRoot',\n providers: [provideScrollAreaRootContext(rootContext)],\n host: {\n role: 'presentation',\n '[style.position]': '\"relative\"',\n '[style.--scroll-area-corner-height]': 'cornerSize().height + \"px\"',\n '[style.--scroll-area-corner-width]': 'cornerSize().width + \"px\"',\n '[attr.data-scrolling]': '(scrollingX() || scrollingY()) ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'overflowEdges().yEnd ? \"\" : undefined',\n '(pointerenter)': 'onPointerEnterOrMove($event)',\n '(pointermove)': 'onPointerEnterOrMove($event)',\n '(pointerdown)': 'onTouchModalityChange($event)',\n '(pointerleave)': 'hovering.set(false)'\n }\n})\nexport class RdxScrollAreaRoot {\n private readonly destroyRef = inject(DestroyRef);\n\n readonly rootId = `rdx-scroll-area-${idCounter++}`;\n\n /** Text direction of the scroll area. Affects horizontal (RTL) scroll math. */\n readonly dirInput = input<Direction | undefined>(undefined, { alias: 'dir' });\n readonly direction: Signal<Direction> = injectDirection(this.dirInput);\n\n /**\n * The threshold in pixels that must be passed before the overflow edge attributes are applied.\n * Accepts a single number for all edges or an object to configure them individually.\n */\n readonly overflowEdgeThreshold = input<OverflowEdgeThreshold>(0);\n\n readonly normalizedThreshold = computed(() => normalizeOverflowEdgeThreshold(this.overflowEdgeThreshold()));\n\n readonly hovering = signal(false);\n readonly scrollingX = signal(false);\n readonly scrollingY = signal(false);\n readonly touchModality = signal(false);\n readonly hasMeasuredScrollbar = signal(false);\n readonly cornerSize = signal<Size>(DEFAULT_SIZE);\n readonly thumbSize = signal<Size>(DEFAULT_SIZE);\n readonly hiddenState = signal<HiddenState>(DEFAULT_HIDDEN_STATE);\n readonly overflowEdges = signal<OverflowEdges>(DEFAULT_OVERFLOW_EDGES);\n\n readonly rootRef: MutableRef<HTMLElement> = { current: inject(ElementRef).nativeElement };\n readonly viewportRef: MutableRef<HTMLElement> = { current: null };\n readonly scrollbarYRef: MutableRef<HTMLElement> = { current: null };\n readonly scrollbarXRef: MutableRef<HTMLElement> = { current: null };\n readonly thumbYRef: MutableRef<HTMLElement> = { current: null };\n readonly thumbXRef: MutableRef<HTMLElement> = { current: null };\n readonly cornerRef: MutableRef<HTMLElement> = { current: null };\n\n // Imperative drag state (deliberately non-reactive).\n private thumbDragging = false;\n private startY = 0;\n private startX = 0;\n private startScrollTop = 0;\n private startScrollLeft = 0;\n private currentOrientation: 'vertical' | 'horizontal' = 'vertical';\n private scrollPosition: Coords = { x: 0, y: 0 };\n\n private scrollYTimer: ReturnType<typeof setTimeout> | undefined;\n private scrollXTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n clearTimeout(this.scrollYTimer);\n clearTimeout(this.scrollXTimer);\n });\n }\n\n setScrollingX(value: boolean): void {\n this.scrollingX.set(value);\n }\n\n setScrollingY(value: boolean): void {\n this.scrollingY.set(value);\n }\n\n setThumbSize(value: Size): void {\n const prev = this.thumbSize();\n if (prev.width !== value.width || prev.height !== value.height) {\n this.thumbSize.set(value);\n }\n }\n\n setCornerSize(value: Size): void {\n const prev = this.cornerSize();\n if (prev.width !== value.width || prev.height !== value.height) {\n this.cornerSize.set(value);\n }\n }\n\n setHiddenState(value: HiddenState): void {\n const prev = this.hiddenState();\n if (prev.x !== value.x || prev.y !== value.y || prev.corner !== value.corner) {\n this.hiddenState.set(value);\n }\n }\n\n setOverflowEdges(value: OverflowEdges): void {\n const prev = this.overflowEdges();\n if (\n prev.xStart !== value.xStart ||\n prev.xEnd !== value.xEnd ||\n prev.yStart !== value.yStart ||\n prev.yEnd !== value.yEnd\n ) {\n this.overflowEdges.set(value);\n }\n }\n\n handleScroll(scrollPosition: Coords): void {\n const offsetX = scrollPosition.x - this.scrollPosition.x;\n const offsetY = scrollPosition.y - this.scrollPosition.y;\n this.scrollPosition = scrollPosition;\n\n if (offsetY !== 0) {\n this.scrollingY.set(true);\n clearTimeout(this.scrollYTimer);\n this.scrollYTimer = setTimeout(() => this.scrollingY.set(false), SCROLL_TIMEOUT);\n }\n\n if (offsetX !== 0) {\n this.scrollingX.set(true);\n clearTimeout(this.scrollXTimer);\n this.scrollXTimer = setTimeout(() => this.scrollingX.set(false), SCROLL_TIMEOUT);\n }\n }\n\n handlePointerDown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n\n this.thumbDragging = true;\n this.startY = event.clientY;\n this.startX = event.clientX;\n this.currentOrientation =\n ((event.currentTarget as Element | null)?.getAttribute('data-orientation') as 'vertical' | 'horizontal') ??\n 'vertical';\n\n const viewport = this.viewportRef.current;\n if (viewport) {\n this.startScrollTop = viewport.scrollTop;\n this.startScrollLeft = viewport.scrollLeft;\n }\n if (this.thumbYRef.current && this.currentOrientation === 'vertical') {\n this.thumbYRef.current.setPointerCapture(event.pointerId);\n }\n if (this.thumbXRef.current && this.currentOrientation === 'horizontal') {\n this.thumbXRef.current.setPointerCapture(event.pointerId);\n }\n }\n\n handlePointerMove(event: PointerEvent): void {\n if (!this.thumbDragging) {\n return;\n }\n\n const deltaY = event.clientY - this.startY;\n const deltaX = event.clientX - this.startX;\n\n const viewport = this.viewportRef.current;\n if (!viewport) {\n return;\n }\n\n const scrollableContentHeight = viewport.scrollHeight;\n const viewportHeight = viewport.clientHeight;\n const scrollableContentWidth = viewport.scrollWidth;\n const viewportWidth = viewport.clientWidth;\n\n if (this.thumbYRef.current && this.scrollbarYRef.current && this.currentOrientation === 'vertical') {\n const scrollbarYOffset = getOffset(this.scrollbarYRef.current, 'padding', 'y');\n const thumbYOffset = getOffset(this.thumbYRef.current, 'margin', 'y');\n const thumbHeight = this.thumbYRef.current.offsetHeight;\n const maxThumbOffsetY =\n this.scrollbarYRef.current.offsetHeight - thumbHeight - scrollbarYOffset - thumbYOffset;\n const scrollRatioY = deltaY / maxThumbOffsetY;\n\n viewport.scrollTop = this.startScrollTop + scrollRatioY * (scrollableContentHeight - viewportHeight);\n event.preventDefault();\n\n this.scrollingY.set(true);\n clearTimeout(this.scrollYTimer);\n this.scrollYTimer = setTimeout(() => this.scrollingY.set(false), SCROLL_TIMEOUT);\n }\n\n if (this.thumbXRef.current && this.scrollbarXRef.current && this.currentOrientation === 'horizontal') {\n const scrollbarXOffset = getOffset(this.scrollbarXRef.current, 'padding', 'x');\n const thumbXOffset = getOffset(this.thumbXRef.current, 'margin', 'x');\n const thumbWidth = this.thumbXRef.current.offsetWidth;\n const maxThumbOffsetX =\n this.scrollbarXRef.current.offsetWidth - thumbWidth - scrollbarXOffset - thumbXOffset;\n const scrollRatioX = deltaX / maxThumbOffsetX;\n\n viewport.scrollLeft = this.startScrollLeft + scrollRatioX * (scrollableContentWidth - viewportWidth);\n event.preventDefault();\n\n this.scrollingX.set(true);\n clearTimeout(this.scrollXTimer);\n this.scrollXTimer = setTimeout(() => this.scrollingX.set(false), SCROLL_TIMEOUT);\n }\n }\n\n handlePointerUp(event: PointerEvent): void {\n this.thumbDragging = false;\n\n // `pointercancel` releases capture implicitly, so guard against releasing a\n // capture we no longer hold (which would throw).\n if (\n this.thumbYRef.current &&\n this.currentOrientation === 'vertical' &&\n this.thumbYRef.current.hasPointerCapture(event.pointerId)\n ) {\n this.thumbYRef.current.releasePointerCapture(event.pointerId);\n }\n if (\n this.thumbXRef.current &&\n this.currentOrientation === 'horizontal' &&\n this.thumbXRef.current.hasPointerCapture(event.pointerId)\n ) {\n this.thumbXRef.current.releasePointerCapture(event.pointerId);\n }\n }\n\n onTouchModalityChange(event: PointerEvent): void {\n this.touchModality.set(event.pointerType === 'touch');\n }\n\n onPointerEnterOrMove(event: PointerEvent): void {\n this.onTouchModalityChange(event);\n\n if (event.pointerType !== 'touch') {\n const root = this.rootRef.current;\n const target = event.target as Node | null;\n this.hovering.set(!!root && !!target && root.contains(target));\n }\n }\n}\n\nfunction normalizeOverflowEdgeThreshold(threshold: OverflowEdgeThreshold | undefined): {\n xStart: number;\n xEnd: number;\n yStart: number;\n yEnd: number;\n} {\n if (typeof threshold === 'number') {\n const value = Math.max(0, threshold);\n return { xStart: value, xEnd: value, yStart: value, yEnd: value };\n }\n\n return {\n xStart: Math.max(0, threshold?.xStart || 0),\n xEnd: Math.max(0, threshold?.xEnd || 0),\n yStart: Math.max(0, threshold?.yStart || 0),\n yEnd: Math.max(0, threshold?.yEnd || 0)\n };\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, DestroyRef, Directive, effect, ElementRef, inject, PLATFORM_ID } from '@angular/core';\nimport { clamp, createContext } from '@radix-ng/primitives/core';\nimport { MIN_THUMB_SIZE, SCROLL_END_TIMEOUT } from './constants';\nimport { HiddenState, injectScrollAreaRootContext } from './scroll-area-root';\nimport { getOffset, injectScrollbarHideStyles, normalizeScrollOffset } from './utils';\n\nexport interface ScrollAreaViewportContext {\n /** Re-measures the viewport and repositions the thumbs. Called by the content's ResizeObserver. */\n computeThumbPosition(): void;\n}\n\nexport const [injectScrollAreaViewportContext, provideScrollAreaViewportContext] =\n createContext<ScrollAreaViewportContext>('ScrollAreaViewportContext', 'components/scroll-area');\n\nconst viewportContext = (): ScrollAreaViewportContext => {\n const viewport = inject(RdxScrollAreaViewport);\n return {\n computeThumbPosition: () => viewport.computeThumbPosition()\n };\n};\n\n/**\n * The actual scrollable container of the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaViewport]',\n exportAs: 'rdxScrollAreaViewport',\n providers: [provideScrollAreaViewportContext(viewportContext)],\n host: {\n role: 'presentation',\n '[style.overflow]': '\"scroll\"',\n '[attr.tabindex]': '(rootContext.hiddenState().x && rootContext.hiddenState().y) ? -1 : 0',\n '[attr.data-id]': 'rootContext.rootId + \"-viewport\"',\n '[attr.data-scrolling]': '(rootContext.scrollingX() || rootContext.scrollingY()) ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!rootContext.hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!rootContext.hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'rootContext.overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'rootContext.overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'rootContext.overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? \"\" : undefined',\n '(scroll)': 'onScroll()',\n '(wheel)': 'onUserInteraction()',\n '(touchmove)': 'onUserInteraction()',\n '(pointermove)': 'onUserInteraction()',\n '(pointerenter)': 'onUserInteraction()',\n '(keydown)': 'onUserInteraction()'\n }\n})\nexport class RdxScrollAreaViewport {\n protected readonly rootContext = injectScrollAreaRootContext();\n\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private programmaticScroll = true;\n private lastMeasuredMetrics: [number, number, number, number] = [NaN, NaN, NaN, NaN];\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined;\n private animationsTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n this.rootContext.viewportRef.current = this.element;\n\n if (this.isBrowser) {\n injectScrollbarHideStyles(document);\n }\n\n // Recompute after hidden-state toggles (so newly shown scrollbars get measured),\n // on direction flips, and when the overflow-edge threshold changes.\n const hiddenState = this.rootContext.hiddenState;\n const direction = this.rootContext.direction;\n const threshold = this.rootContext.overflowEdgeThreshold;\n effect(() => {\n hiddenState();\n direction();\n threshold();\n queueMicrotask(() => this.computeThumbPosition());\n });\n\n afterNextRender(() => {\n this.computeThumbPosition();\n this.observeViewport();\n\n if (this.element.matches(':hover')) {\n this.rootContext.setHovering(true);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n clearTimeout(this.scrollEndTimer);\n clearTimeout(this.animationsTimer);\n });\n }\n\n computeThumbPosition(): void {\n const viewportEl = this.rootContext.viewportRef.current;\n const scrollbarYEl = this.rootContext.scrollbarYRef.current;\n const scrollbarXEl = this.rootContext.scrollbarXRef.current;\n const thumbYEl = this.rootContext.thumbYRef.current;\n const thumbXEl = this.rootContext.thumbXRef.current;\n const cornerEl = this.rootContext.cornerRef.current;\n\n if (!viewportEl) {\n return;\n }\n\n const direction = this.rootContext.direction();\n const threshold = this.rootContext.overflowEdgeThreshold();\n const cornerSize = this.rootContext.cornerSize();\n\n const scrollableContentHeight = viewportEl.scrollHeight;\n const scrollableContentWidth = viewportEl.scrollWidth;\n const viewportHeight = viewportEl.clientHeight;\n const viewportWidth = viewportEl.clientWidth;\n const scrollTop = viewportEl.scrollTop;\n const scrollLeft = viewportEl.scrollLeft;\n\n const isFirstMeasurement = Number.isNaN(this.lastMeasuredMetrics[0]);\n this.lastMeasuredMetrics = [viewportHeight, scrollableContentHeight, viewportWidth, scrollableContentWidth];\n\n if (isFirstMeasurement) {\n this.rootContext.setHasMeasuredScrollbar(true);\n }\n\n if (scrollableContentHeight === 0 || scrollableContentWidth === 0) {\n return;\n }\n\n const nextHiddenState = getHiddenState(viewportEl);\n const scrollbarYHidden = nextHiddenState.y;\n const scrollbarXHidden = nextHiddenState.x;\n const ratioX = viewportWidth / scrollableContentWidth;\n const ratioY = viewportHeight / scrollableContentHeight;\n const maxScrollLeft = Math.max(0, scrollableContentWidth - viewportWidth);\n const maxScrollTop = Math.max(0, scrollableContentHeight - viewportHeight);\n\n let scrollLeftFromStart = 0;\n let scrollLeftFromEnd = 0;\n if (!scrollbarXHidden) {\n const rawScrollLeftFromStart =\n direction === 'rtl' ? clamp(-scrollLeft, 0, maxScrollLeft) : clamp(scrollLeft, 0, maxScrollLeft);\n scrollLeftFromStart = normalizeScrollOffset(rawScrollLeftFromStart, maxScrollLeft);\n scrollLeftFromEnd = maxScrollLeft - scrollLeftFromStart;\n }\n\n const rawScrollTopFromStart = !scrollbarYHidden ? clamp(scrollTop, 0, maxScrollTop) : 0;\n const scrollTopFromStart = !scrollbarYHidden ? normalizeScrollOffset(rawScrollTopFromStart, maxScrollTop) : 0;\n const scrollTopFromEnd = !scrollbarYHidden ? maxScrollTop - scrollTopFromStart : 0;\n const nextWidth = scrollbarXHidden ? 0 : viewportWidth;\n const nextHeight = scrollbarYHidden ? 0 : viewportHeight;\n\n let nextCornerWidth = 0;\n let nextCornerHeight = 0;\n if (!scrollbarXHidden && !scrollbarYHidden) {\n nextCornerWidth = scrollbarYEl?.offsetWidth || 0;\n nextCornerHeight = scrollbarXEl?.offsetHeight || 0;\n }\n\n // Only subtract corner size from scrollbar dimensions if the corner hasn't been sized yet.\n const cornerNotYetSized = cornerSize.width === 0 && cornerSize.height === 0;\n const cornerWidthOffset = cornerNotYetSized ? nextCornerWidth : 0;\n const cornerHeightOffset = cornerNotYetSized ? nextCornerHeight : 0;\n\n const scrollbarXOffset = getOffset(scrollbarXEl, 'padding', 'x');\n const scrollbarYOffset = getOffset(scrollbarYEl, 'padding', 'y');\n const thumbXOffset = getOffset(thumbXEl, 'margin', 'x');\n const thumbYOffset = getOffset(thumbYEl, 'margin', 'y');\n\n const idealNextWidth = nextWidth - scrollbarXOffset - thumbXOffset;\n const idealNextHeight = nextHeight - scrollbarYOffset - thumbYOffset;\n\n const maxNextWidth = scrollbarXEl\n ? Math.min(scrollbarXEl.offsetWidth - cornerWidthOffset, idealNextWidth)\n : idealNextWidth;\n const maxNextHeight = scrollbarYEl\n ? Math.min(scrollbarYEl.offsetHeight - cornerHeightOffset, idealNextHeight)\n : idealNextHeight;\n\n const clampedNextWidth = Math.max(MIN_THUMB_SIZE, maxNextWidth * ratioX);\n const clampedNextHeight = Math.max(MIN_THUMB_SIZE, maxNextHeight * ratioY);\n\n this.rootContext.setThumbSize({ width: clampedNextWidth, height: clampedNextHeight });\n\n // Handle Y (vertical) scroll\n if (scrollbarYEl && thumbYEl) {\n const maxThumbOffsetY = scrollbarYEl.offsetHeight - clampedNextHeight - scrollbarYOffset - thumbYOffset;\n const scrollRangeY = scrollableContentHeight - viewportHeight;\n const scrollRatioY = scrollRangeY === 0 ? 0 : scrollTop / scrollRangeY;\n // In Safari, don't allow it to go negative or too far as `scrollTop` considers the rubber band effect.\n const thumbOffsetY = Math.min(maxThumbOffsetY, Math.max(0, scrollRatioY * maxThumbOffsetY));\n thumbYEl.style.transform = `translate3d(0,${thumbOffsetY}px,0)`;\n }\n\n // Handle X (horizontal) scroll\n if (scrollbarXEl && thumbXEl) {\n const maxThumbOffsetX = scrollbarXEl.offsetWidth - clampedNextWidth - scrollbarXOffset - thumbXOffset;\n const scrollRangeX = scrollableContentWidth - viewportWidth;\n const scrollRatioX = scrollRangeX === 0 ? 0 : scrollLeft / scrollRangeX;\n const thumbOffsetX =\n direction === 'rtl'\n ? clamp(scrollRatioX * maxThumbOffsetX, -maxThumbOffsetX, 0)\n : clamp(scrollRatioX * maxThumbOffsetX, 0, maxThumbOffsetX);\n thumbXEl.style.transform = `translate3d(${thumbOffsetX}px,0,0)`;\n }\n\n viewportEl.style.setProperty('--scroll-area-overflow-x-start', `${scrollLeftFromStart}px`);\n viewportEl.style.setProperty('--scroll-area-overflow-x-end', `${scrollLeftFromEnd}px`);\n viewportEl.style.setProperty('--scroll-area-overflow-y-start', `${scrollTopFromStart}px`);\n viewportEl.style.setProperty('--scroll-area-overflow-y-end', `${scrollTopFromEnd}px`);\n\n if (cornerEl) {\n if (scrollbarXHidden || scrollbarYHidden) {\n this.rootContext.setCornerSize({ width: 0, height: 0 });\n } else {\n this.rootContext.setCornerSize({ width: nextCornerWidth, height: nextCornerHeight });\n }\n }\n\n this.rootContext.setHiddenState(nextHiddenState);\n\n this.rootContext.setOverflowEdges({\n xStart: !scrollbarXHidden && scrollLeftFromStart > threshold.xStart,\n xEnd: !scrollbarXHidden && scrollLeftFromEnd > threshold.xEnd,\n yStart: !scrollbarYHidden && scrollTopFromStart > threshold.yStart,\n yEnd: !scrollbarYHidden && scrollTopFromEnd > threshold.yEnd\n });\n }\n\n onScroll(): void {\n const viewportEl = this.rootContext.viewportRef.current;\n if (!viewportEl) {\n return;\n }\n\n this.computeThumbPosition();\n\n if (!this.programmaticScroll) {\n this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });\n }\n\n // Debounce restoring the programmatic flag so momentum scrolling (no further\n // user-interaction events) is still treated as user-driven.\n clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => {\n this.programmaticScroll = true;\n }, SCROLL_END_TIMEOUT);\n }\n\n onUserInteraction(): void {\n this.programmaticScroll = false;\n }\n\n private observeViewport(): void {\n const viewport = this.element;\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n let hasInitialized = false;\n const resizeObserver = new ResizeObserver(() => {\n if (!hasInitialized) {\n hasInitialized = true;\n const m = this.lastMeasuredMetrics;\n if (\n m[0] === viewport.clientHeight &&\n m[1] === viewport.scrollHeight &&\n m[2] === viewport.clientWidth &&\n m[3] === viewport.scrollWidth\n ) {\n return;\n }\n }\n this.computeThumbPosition();\n });\n resizeObserver.observe(viewport);\n\n // Wait for subtree animations to finish, then recompute geometry that may have\n // been affected by transform-based animations.\n this.animationsTimer = setTimeout(() => {\n const animations = viewport.getAnimations({ subtree: true });\n if (animations.length === 0) {\n return;\n }\n Promise.allSettled(animations.map((animation) => animation.finished))\n .then(() => this.computeThumbPosition())\n .catch(() => {});\n }, 0);\n\n this.destroyRef.onDestroy(() => resizeObserver.disconnect());\n }\n}\n\nfunction getHiddenState(viewport: HTMLElement): HiddenState {\n const y = viewport.clientHeight >= viewport.scrollHeight;\n const x = viewport.clientWidth >= viewport.scrollWidth;\n return { y, x, corner: y || x };\n}\n","import { afterNextRender, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\nimport { injectScrollAreaViewportContext } from './scroll-area-viewport';\n\n/**\n * A container for the content of the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaContent]',\n exportAs: 'rdxScrollAreaContent',\n host: {\n role: 'presentation',\n '[style.min-width]': '\"fit-content\"',\n '[attr.data-scrolling]': '(rootContext.scrollingX() || rootContext.scrollingY()) ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!rootContext.hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!rootContext.hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'rootContext.overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'rootContext.overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'rootContext.overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? \"\" : undefined'\n }\n})\nexport class RdxScrollAreaContent {\n protected readonly rootContext = injectScrollAreaRootContext();\n private readonly viewportContext = injectScrollAreaViewportContext();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n // Whether the content mounted after the viewport's first measurement; if so the\n // initial ResizeObserver fire is what brings the overflow state in sync.\n const computeOnInitialResize = this.rootContext.hasMeasuredScrollbar();\n\n afterNextRender(() => {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n let hasInitialized = false;\n const resizeObserver = new ResizeObserver(() => {\n if (!hasInitialized) {\n hasInitialized = true;\n // ResizeObserver fires once upon observing. Skip that initial call to avoid\n // double-calculating the thumb position on mount, unless the content mounted\n // after the viewport's initial measurement.\n if (!computeOnInitialResize) {\n return;\n }\n }\n this.viewportContext.computeThumbPosition();\n });\n resizeObserver.observe(this.element);\n this.destroyRef.onDestroy(() => resizeObserver.disconnect());\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\n\n/**\n * A small rectangular area that appears at the intersection of horizontal and vertical scrollbars.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaCorner]',\n exportAs: 'rdxScrollAreaCorner',\n host: {\n '[style.position]': '\"absolute\"',\n '[style.bottom]': '\"0\"',\n '[style.inset-inline-end]': '\"0\"',\n '[style.width]': 'rootContext.cornerSize().width + \"px\"',\n '[style.height]': 'rootContext.cornerSize().height + \"px\"',\n '[style.display]': 'rootContext.hiddenState().corner ? \"none\" : null'\n }\n})\nexport class RdxScrollAreaCorner {\n protected readonly rootContext = injectScrollAreaRootContext();\n\n constructor() {\n this.rootContext.cornerRef.current = inject(ElementRef).nativeElement;\n }\n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { BooleanInput, createContext } from '@radix-ng/primitives/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\nimport { getOffset } from './utils';\n\nexport type ScrollbarOrientation = 'vertical' | 'horizontal';\n\nexport interface ScrollAreaScrollbarContext {\n orientation: () => ScrollbarOrientation;\n}\n\nexport const [injectScrollAreaScrollbarContext, provideScrollAreaScrollbarContext] =\n createContext<ScrollAreaScrollbarContext>('ScrollAreaScrollbarContext', 'components/scroll-area');\n\nconst scrollbarContext = (): ScrollAreaScrollbarContext => {\n const scrollbar = inject(RdxScrollAreaScrollbar);\n return { orientation: () => scrollbar.orientation() };\n};\n\n/**\n * A vertical or horizontal scrollbar for the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaScrollbar]',\n exportAs: 'rdxScrollAreaScrollbar',\n providers: [provideScrollAreaScrollbarContext(scrollbarContext)],\n host: {\n '[attr.data-id]': 'rootContext.rootId + \"-scrollbar\"',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-hovering]': 'rootContext.hovering() ? \"\" : undefined',\n '[attr.data-scrolling]': 'scrolling() ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!rootContext.hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!rootContext.hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'rootContext.overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'rootContext.overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'rootContext.overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? \"\" : undefined',\n '[style.position]': '\"absolute\"',\n '[style.touch-action]': '\"none\"',\n '[style.user-select]': '\"none\"',\n '[style.display]': 'shouldRender() ? null : \"none\"',\n '[style.visibility]': 'hideTrackUntilMeasured() ? \"hidden\" : null',\n '[style.top]': 'orientation() === \"vertical\" ? \"0\" : null',\n '[style.bottom]': 'orientation() === \"vertical\" ? \"var(--scroll-area-corner-height)\" : \"0\"',\n '[style.inset-inline-start]': 'orientation() === \"horizontal\" ? \"0\" : null',\n '[style.inset-inline-end]': 'orientation() === \"vertical\" ? \"0\" : \"var(--scroll-area-corner-width)\"',\n '[style.--scroll-area-thumb-height]':\n 'orientation() === \"vertical\" ? rootContext.thumbSize().height + \"px\" : null',\n '[style.--scroll-area-thumb-width]':\n 'orientation() === \"horizontal\" ? rootContext.thumbSize().width + \"px\" : null',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerup)': 'rootContext.handlePointerUp($event)',\n '(pointercancel)': 'rootContext.handlePointerUp($event)',\n '(wheel)': 'onWheel($event)'\n }\n})\nexport class RdxScrollAreaScrollbar {\n protected readonly rootContext = injectScrollAreaRootContext();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n\n /** Whether the scrollbar controls vertical or horizontal scroll. */\n readonly orientation = input<ScrollbarOrientation>('vertical');\n\n /** Whether to keep the element rendered when the viewport isn't scrollable. */\n readonly keepMounted = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly scrolling = computed(() =>\n this.orientation() === 'horizontal' ? this.rootContext.scrollingX() : this.rootContext.scrollingY()\n );\n\n private readonly isHidden = computed(() =>\n this.orientation() === 'vertical' ? this.rootContext.hiddenState().y : this.rootContext.hiddenState().x\n );\n\n protected readonly shouldRender = computed(() => this.keepMounted() || !this.isHidden());\n\n protected readonly hideTrackUntilMeasured = computed(\n () => !this.rootContext.hasMeasuredScrollbar() && !this.keepMounted()\n );\n\n constructor() {\n // Register this element as the vertical or horizontal scrollbar ref.\n // Runs as an effect so the bound `orientation` input is available.\n effect(() => {\n if (this.orientation() === 'vertical') {\n this.rootContext.scrollbarYRef.current = this.element;\n } else {\n this.rootContext.scrollbarXRef.current = this.element;\n }\n });\n }\n\n onWheel(event: WheelEvent): void {\n const viewportEl = this.rootContext.viewportRef.current;\n if (!viewportEl || event.ctrlKey) {\n return;\n }\n\n const horizontal = this.orientation() === 'horizontal';\n const delta = horizontal ? event.deltaX : event.deltaY;\n if (delta === 0) {\n return;\n }\n\n const direction = this.rootContext.direction();\n const maxScroll = horizontal\n ? viewportEl.scrollWidth - viewportEl.clientWidth\n : viewportEl.scrollHeight - viewportEl.clientHeight;\n // RTL horizontal scrolling uses a negative `scrollLeft` range, from 0 to `-maxScroll`.\n const minScroll = horizontal && direction === 'rtl' ? -maxScroll : 0;\n const maxScrollValue = horizontal && direction === 'rtl' ? 0 : maxScroll;\n const scrollValue = horizontal ? viewportEl.scrollLeft : viewportEl.scrollTop;\n\n // At an edge (or with no overflow), let the wheel chain to the parent/page.\n if ((scrollValue <= minScroll && delta < 0) || (scrollValue >= maxScrollValue && delta > 0)) {\n return;\n }\n\n event.preventDefault();\n\n const next = Math.min(maxScrollValue, Math.max(minScroll, scrollValue + delta));\n if (horizontal) {\n viewportEl.scrollLeft = next;\n } else {\n viewportEl.scrollTop = next;\n }\n\n this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });\n }\n\n onPointerDown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n\n const orientation = this.orientation();\n const target = event.target as Node | null;\n const thumb =\n orientation === 'vertical' ? this.rootContext.thumbYRef.current : this.rootContext.thumbXRef.current;\n\n // Ignore clicks on the thumb itself.\n if (thumb && target && thumb.contains(target)) {\n return;\n }\n\n const viewportEl = this.rootContext.viewportRef.current;\n if (!viewportEl) {\n return;\n }\n\n const direction = this.rootContext.direction();\n\n if (\n orientation === 'vertical' &&\n this.rootContext.thumbYRef.current &&\n this.rootContext.scrollbarYRef.current\n ) {\n const thumbEl = this.rootContext.thumbYRef.current;\n const scrollbarEl = this.rootContext.scrollbarYRef.current;\n const thumbYOffset = getOffset(thumbEl, 'margin', 'y');\n const scrollbarYOffset = getOffset(scrollbarEl, 'padding', 'y');\n const thumbHeight = thumbEl.offsetHeight;\n const trackRectY = scrollbarEl.getBoundingClientRect();\n const clickY = event.clientY - trackRectY.top - thumbHeight / 2 - scrollbarYOffset + thumbYOffset / 2;\n\n const maxThumbOffsetY = scrollbarEl.offsetHeight - thumbHeight - scrollbarYOffset - thumbYOffset;\n const scrollRatioY = clickY / maxThumbOffsetY;\n viewportEl.scrollTop = scrollRatioY * (viewportEl.scrollHeight - viewportEl.clientHeight);\n }\n\n if (\n orientation === 'horizontal' &&\n this.rootContext.thumbXRef.current &&\n this.rootContext.scrollbarXRef.current\n ) {\n const thumbEl = this.rootContext.thumbXRef.current;\n const scrollbarEl = this.rootContext.scrollbarXRef.current;\n const thumbXOffset = getOffset(thumbEl, 'margin', 'x');\n const scrollbarXOffset = getOffset(scrollbarEl, 'padding', 'x');\n const thumbWidth = thumbEl.offsetWidth;\n const trackRectX = scrollbarEl.getBoundingClientRect();\n const clickX = event.clientX - trackRectX.left - thumbWidth / 2 - scrollbarXOffset + thumbXOffset / 2;\n\n const maxThumbOffsetX = scrollbarEl.offsetWidth - thumbWidth - scrollbarXOffset - thumbXOffset;\n const scrollRatioX = clickX / maxThumbOffsetX;\n const scrollRange = viewportEl.scrollWidth - viewportEl.clientWidth;\n\n let newScrollLeft: number;\n if (direction === 'rtl') {\n newScrollLeft = (1 - scrollRatioX) * scrollRange;\n // Adjust for browsers that use negative scrollLeft in RTL.\n if (viewportEl.scrollLeft <= 0) {\n newScrollLeft = -newScrollLeft;\n }\n } else {\n newScrollLeft = scrollRatioX * scrollRange;\n }\n viewportEl.scrollLeft = newScrollLeft;\n }\n\n this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });\n this.rootContext.handlePointerDown(event);\n }\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\nimport { injectScrollAreaScrollbarContext } from './scroll-area-scrollbar';\n\n/**\n * The draggable part of the scrollbar that indicates the current scroll position.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaThumb]',\n exportAs: 'rdxScrollAreaThumb',\n host: {\n '[attr.data-orientation]': 'scrollbarContext.orientation()',\n '[style.visibility]': 'rootContext.hasMeasuredScrollbar() ? null : \"hidden\"',\n '[style.height]': 'scrollbarContext.orientation() === \"vertical\" ? \"var(--scroll-area-thumb-height)\" : null',\n '[style.width]': 'scrollbarContext.orientation() === \"horizontal\" ? \"var(--scroll-area-thumb-width)\" : null',\n '(pointerdown)': 'rootContext.handlePointerDown($event)',\n '(pointermove)': 'rootContext.handlePointerMove($event)',\n '(pointerup)': 'endDrag($event)',\n '(pointercancel)': 'endDrag($event)'\n }\n})\nexport class RdxScrollAreaThumb {\n protected readonly rootContext = injectScrollAreaRootContext();\n protected readonly scrollbarContext = injectScrollAreaScrollbarContext();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n\n constructor() {\n effect(() => {\n if (this.scrollbarContext.orientation() === 'vertical') {\n this.rootContext.thumbYRef.current = this.element;\n } else {\n this.rootContext.thumbXRef.current = this.element;\n }\n });\n }\n\n endDrag(event: PointerEvent): void {\n if (this.scrollbarContext.orientation() === 'vertical') {\n this.rootContext.setScrollingY(false);\n } else {\n this.rootContext.setScrollingX(false);\n }\n this.rootContext.handlePointerUp(event);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxScrollAreaContent } from './src/scroll-area-content';\nimport { RdxScrollAreaCorner } from './src/scroll-area-corner';\nimport { RdxScrollAreaRoot } from './src/scroll-area-root';\nimport { RdxScrollAreaScrollbar } from './src/scroll-area-scrollbar';\nimport { RdxScrollAreaThumb } from './src/scroll-area-thumb';\nimport { RdxScrollAreaViewport } from './src/scroll-area-viewport';\n\nexport * from './src/scroll-area-content';\nexport * from './src/scroll-area-corner';\nexport * from './src/scroll-area-root';\nexport * from './src/scroll-area-scrollbar';\nexport * from './src/scroll-area-thumb';\nexport * from './src/scroll-area-viewport';\n\nconst _imports = [\n RdxScrollAreaRoot,\n RdxScrollAreaViewport,\n RdxScrollAreaContent,\n RdxScrollAreaScrollbar,\n RdxScrollAreaThumb,\n RdxScrollAreaCorner\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxScrollAreaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAAA;AACO,MAAM,cAAc,GAAG,GAAG;AAEjC;AACO,MAAM,cAAc,GAAG,EAAE;AAEhC;AACO,MAAM,kBAAkB,GAAG,GAAG;AAErC;AACO,MAAM,wBAAwB,GAAG,CAAC;;ACPzC;;;AAGG;SACa,SAAS,CAAC,OAAuB,EAAE,IAA0B,EAAE,IAAe,EAAA;IAC1F,IAAI,CAAC,OAAO,EAAE;AACV,QAAA,OAAO,CAAC;IACZ;AAEA,IAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC;AACxC,IAAA,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,GAAG,QAAQ,GAAG,OAAO;;;IAIlD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ,EAAE;QACnC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,WAAA,CAA0C,CAAW,CAAC,GAAG,CAAC;IAC9F;IAEA,QACI,UAAU,CAAC,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAoC,CAAW,CAAC;QACpF,UAAU,CAAC,MAAM,CAAC,CAAA,EAAG,IAAI,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAkC,CAAW,CAAC;AAE1F;AAEA;;;AAGG;AACG,SAAU,qBAAqB,CAAC,KAAa,EAAE,GAAW,EAAA;AAC5D,IAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACV,QAAA,OAAO,CAAC;IACZ;IAEA,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO;AAC7B,IAAA,MAAM,WAAW,GAAG,GAAG,GAAG,OAAO;AACjC,IAAA,MAAM,oBAAoB,GAAG,aAAa,IAAI,wBAAwB;AACtE,IAAA,MAAM,kBAAkB,GAAG,WAAW,IAAI,wBAAwB;AAElE,IAAA,IAAI,oBAAoB,IAAI,kBAAkB,EAAE;QAC5C,OAAO,aAAa,IAAI,WAAW,GAAG,CAAC,GAAG,GAAG;IACjD;IACA,IAAI,oBAAoB,EAAE;AACtB,QAAA,OAAO,CAAC;IACZ;IACA,IAAI,kBAAkB,EAAE;AACpB,QAAA,OAAO,GAAG;IACd;AAEA,IAAA,OAAO,OAAO;AAClB;AAEA,IAAI,2BAA2B,GAAG,KAAK;AAEvC;;;;AAIG;AACG,SAAU,yBAAyB,CAAC,QAAkB,EAAA;AACxD,IAAA,IAAI,2BAA2B,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;QAChE;IACJ;IACA,2BAA2B,GAAG,IAAI;IAElC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,IAAA,KAAK,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,CAAC;AAC9C,IAAA,KAAK,CAAC,WAAW,GAAG,CAAA,6HAAA,CAA+H;AACnJ,IAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACpC;;ACxDA,MAAM,YAAY,GAAS,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;AAClD,MAAM,sBAAsB,GAAkB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACxG,MAAM,oBAAoB,GAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;AA4CrE,MAAM,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,GAAG,aAAa,CACpF,uBAAuB,EACvB,wBAAwB;AAG5B,MAAM,WAAW,GAAG,MAA4B;AAC5C,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;IACtC,OAAO;QACH,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,qBAAqB,EAAE,IAAI,CAAC,mBAAmB;QAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;QAC/C,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,QAAA,WAAW,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,QAAA,uBAAuB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,aAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3C,aAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3C,YAAY,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,aAAa,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QAC3C,cAAc,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC7C,gBAAgB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjD,YAAY,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,iBAAiB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,iBAAiB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnD,eAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC;KACjD;AACL,CAAC;AAED,IAAI,SAAS,GAAG,CAAC;AAEjB;;;;;AAKG;MAuBU,iBAAiB,CAAA;AA+C1B,IAAA,WAAA,GAAA;AA9CiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEvC,QAAA,IAAA,CAAA,MAAM,GAAG,CAAA,gBAAA,EAAmB,SAAS,EAAE,EAAE;;QAGzC,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAwB,SAAS,gFAAI,KAAK,EAAE,KAAK,EAAA,CAAG;AACpE,QAAA,IAAA,CAAA,SAAS,GAAsB,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;AAEtE;;;AAGG;AACM,QAAA,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAwB,CAAC,4FAAC;AAEvD,QAAA,IAAA,CAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAM,8BAA8B,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,0FAAC;AAElG,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,KAAK,iFAAC;AAC1B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,KAAK,oFAAC;AAC7B,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,KAAK,2FAAC;AACpC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAO,YAAY,iFAAC;AACvC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAO,YAAY,gFAAC;AACtC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAc,oBAAoB,kFAAC;AACvD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAgB,sBAAsB,oFAAC;QAE7D,IAAA,CAAA,OAAO,GAA4B,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE;AAChF,QAAA,IAAA,CAAA,WAAW,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;AACxD,QAAA,IAAA,CAAA,aAAa,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1D,QAAA,IAAA,CAAA,aAAa,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1D,QAAA,IAAA,CAAA,SAAS,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;AACtD,QAAA,IAAA,CAAA,SAAS,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;AACtD,QAAA,IAAA,CAAA,SAAS,GAA4B,EAAE,OAAO,EAAE,IAAI,EAAE;;QAGvD,IAAA,CAAA,aAAa,GAAG,KAAK;QACrB,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,cAAc,GAAG,CAAC;QAClB,IAAA,CAAA,eAAe,GAAG,CAAC;QACnB,IAAA,CAAA,kBAAkB,GAA8B,UAAU;QAC1D,IAAA,CAAA,cAAc,GAAW,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAM3C,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AACnC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,aAAa,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,aAAa,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,YAAY,CAAC,KAAW,EAAA;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;AAC7B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AAC5D,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;QAC7B;IACJ;AAEA,IAAA,aAAa,CAAC,KAAW,EAAA;AACrB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AAC5D,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;QAC9B;IACJ;AAEA,IAAA,cAAc,CAAC,KAAkB,EAAA;AAC7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE;QAC/B,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AAC1E,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;QAC/B;IACJ;AAEA,IAAA,gBAAgB,CAAC,KAAoB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,IACI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAC5B,YAAA,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI;AACxB,YAAA,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;AAC5B,YAAA,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAC1B;AACE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;QACjC;IACJ;AAEA,IAAA,YAAY,CAAC,cAAsB,EAAA;QAC/B,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AAEpC,QAAA,IAAI,OAAO,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;QACpF;AAEA,QAAA,IAAI,OAAO,KAAK,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;QACpF;IACJ;AAEA,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACjC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB;QACJ;AAEA,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO;AAC3B,QAAA,IAAI,CAAC,kBAAkB;AACjB,YAAA,KAAK,CAAC,aAAgC,EAAE,YAAY,CAAC,kBAAkB,CAA+B;AACxG,gBAAA,UAAU;AAEd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;QACzC,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,SAAS;AACxC,YAAA,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,UAAU;QAC9C;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,KAAK,UAAU,EAAE;YAClE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7D;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,KAAK,YAAY,EAAE;YACpE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7D;IACJ;AAEA,IAAA,iBAAiB,CAAC,KAAmB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACrB;QACJ;QAEA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;AAE1C,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO;QACzC,IAAI,CAAC,QAAQ,EAAE;YACX;QACJ;AAEA,QAAA,MAAM,uBAAuB,GAAG,QAAQ,CAAC,YAAY;AACrD,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY;AAC5C,QAAA,MAAM,sBAAsB,GAAG,QAAQ,CAAC,WAAW;AACnD,QAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW;AAE1C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,KAAK,UAAU,EAAE;AAChG,YAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC;AAC9E,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC;YACrE,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY;AACvD,YAAA,MAAM,eAAe,GACjB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,GAAG,WAAW,GAAG,gBAAgB,GAAG,YAAY;AAC3F,YAAA,MAAM,YAAY,GAAG,MAAM,GAAG,eAAe;AAE7C,YAAA,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,YAAY,IAAI,uBAAuB,GAAG,cAAc,CAAC;YACpG,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;QACpF;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,KAAK,YAAY,EAAE;AAClG,YAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC;AAC9E,YAAA,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC;YACrE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW;AACrD,YAAA,MAAM,eAAe,GACjB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU,GAAG,gBAAgB,GAAG,YAAY;AACzF,YAAA,MAAM,YAAY,GAAG,MAAM,GAAG,eAAe;AAE7C,YAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,GAAG,YAAY,IAAI,sBAAsB,GAAG,aAAa,CAAC;YACpG,KAAK,CAAC,cAAc,EAAE;AAEtB,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;QACpF;IACJ;AAEA,IAAA,eAAe,CAAC,KAAmB,EAAA;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;;;AAI1B,QAAA,IACI,IAAI,CAAC,SAAS,CAAC,OAAO;YACtB,IAAI,CAAC,kBAAkB,KAAK,UAAU;AACtC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAC3D;YACE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QACjE;AACA,QAAA,IACI,IAAI,CAAC,SAAS,CAAC,OAAO;YACtB,IAAI,CAAC,kBAAkB,KAAK,YAAY;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAC3D;YACE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;QACjE;IACJ;AAEA,IAAA,qBAAqB,CAAC,KAAmB,EAAA;QACrC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,OAAO,CAAC;IACzD;AAEA,IAAA,oBAAoB,CAAC,KAAmB,EAAA;AACpC,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAEjC,QAAA,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO,EAAE;AAC/B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;AACjC,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;YAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClE;IACJ;8GA9NS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,yxCAnBf,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAmB7C,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,SAAS,EAAE,CAAC,4BAA4B,CAAC,WAAW,CAAC,CAAC;AACtD,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,qCAAqC,EAAE,4BAA4B;AACnE,wBAAA,oCAAoC,EAAE,2BAA2B;AACjE,wBAAA,uBAAuB,EAAE,iDAAiD;AAC1E,wBAAA,4BAA4B,EAAE,mCAAmC;AACjE,wBAAA,4BAA4B,EAAE,mCAAmC;AACjE,wBAAA,8BAA8B,EAAE,yCAAyC;AACzE,wBAAA,4BAA4B,EAAE,uCAAuC;AACrE,wBAAA,8BAA8B,EAAE,yCAAyC;AACzE,wBAAA,4BAA4B,EAAE,uCAAuC;AACrE,wBAAA,gBAAgB,EAAE,8BAA8B;AAChD,wBAAA,eAAe,EAAE,8BAA8B;AAC/C,wBAAA,eAAe,EAAE,+BAA+B;AAChD,wBAAA,gBAAgB,EAAE;AACrB;AACJ,iBAAA;;AAkOD,SAAS,8BAA8B,CAAC,SAA4C,EAAA;AAMhF,IAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC;AACpC,QAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;IACrE;IAEA,OAAO;AACH,QAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC;AACvC,QAAA,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC;KACzC;AACL;;AC5WO,MAAM,CAAC,+BAA+B,EAAE,gCAAgC,CAAC,GAC5E,aAAa,CAA4B,2BAA2B,EAAE,wBAAwB;AAElG,MAAM,eAAe,GAAG,MAAgC;AACpD,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;IAC9C,OAAO;AACH,QAAA,oBAAoB,EAAE,MAAM,QAAQ,CAAC,oBAAoB;KAC5D;AACL,CAAC;AAED;;;;;AAKG;MAyBU,qBAAqB,CAAA;AAY9B,IAAA,WAAA,GAAA;QAXmB,IAAA,CAAA,WAAW,GAAG,2BAA2B,EAAE;AAE7C,QAAA,IAAA,CAAA,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AACvD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC/B,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAE3D,IAAA,CAAA,kBAAkB,GAAG,IAAI;QACzB,IAAA,CAAA,mBAAmB,GAAqC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;QAKhF,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AAEnD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,yBAAyB,CAAC,QAAQ,CAAC;QACvC;;;AAIA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW;AAChD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS;AAC5C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB;QACxD,MAAM,CAAC,MAAK;AACR,YAAA,WAAW,EAAE;AACb,YAAA,SAAS,EAAE;AACX,YAAA,SAAS,EAAE;YACX,cAAc,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACrD,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;YACjB,IAAI,CAAC,oBAAoB,EAAE;YAC3B,IAAI,CAAC,eAAe,EAAE;YAEtB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC;YACtC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;AAC3B,YAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,YAAA,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC;AACtC,QAAA,CAAC,CAAC;IACN;IAEA,oBAAoB,GAAA;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO;QAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;QAEnD,IAAI,CAAC,UAAU,EAAE;YACb;QACJ;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;AAEhD,QAAA,MAAM,uBAAuB,GAAG,UAAU,CAAC,YAAY;AACvD,QAAA,MAAM,sBAAsB,GAAG,UAAU,CAAC,WAAW;AACrD,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY;AAC9C,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW;AAC5C,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS;AACtC,QAAA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU;AAExC,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC,cAAc,EAAE,uBAAuB,EAAE,aAAa,EAAE,sBAAsB,CAAC;QAE3G,IAAI,kBAAkB,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,IAAI,CAAC;QAClD;QAEA,IAAI,uBAAuB,KAAK,CAAC,IAAI,sBAAsB,KAAK,CAAC,EAAE;YAC/D;QACJ;AAEA,QAAA,MAAM,eAAe,GAAG,cAAc,CAAC,UAAU,CAAC;AAClD,QAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAC1C,QAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,aAAa,GAAG,sBAAsB;AACrD,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,uBAAuB;AACvD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,GAAG,aAAa,CAAC;AACzE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,uBAAuB,GAAG,cAAc,CAAC;QAE1E,IAAI,mBAAmB,GAAG,CAAC;QAC3B,IAAI,iBAAiB,GAAG,CAAC;QACzB,IAAI,CAAC,gBAAgB,EAAE;AACnB,YAAA,MAAM,sBAAsB,GACxB,SAAS,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,aAAa,CAAC;AACpG,YAAA,mBAAmB,GAAG,qBAAqB,CAAC,sBAAsB,EAAE,aAAa,CAAC;AAClF,YAAA,iBAAiB,GAAG,aAAa,GAAG,mBAAmB;QAC3D;AAEA,QAAA,MAAM,qBAAqB,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC;AACvF,QAAA,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,GAAG,qBAAqB,CAAC,qBAAqB,EAAE,YAAY,CAAC,GAAG,CAAC;AAC7G,QAAA,MAAM,gBAAgB,GAAG,CAAC,gBAAgB,GAAG,YAAY,GAAG,kBAAkB,GAAG,CAAC;QAClF,MAAM,SAAS,GAAG,gBAAgB,GAAG,CAAC,GAAG,aAAa;QACtD,MAAM,UAAU,GAAG,gBAAgB,GAAG,CAAC,GAAG,cAAc;QAExD,IAAI,eAAe,GAAG,CAAC;QACvB,IAAI,gBAAgB,GAAG,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,EAAE;AACxC,YAAA,eAAe,GAAG,YAAY,EAAE,WAAW,IAAI,CAAC;AAChD,YAAA,gBAAgB,GAAG,YAAY,EAAE,YAAY,IAAI,CAAC;QACtD;;AAGA,QAAA,MAAM,iBAAiB,GAAG,UAAU,CAAC,KAAK,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAC3E,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,eAAe,GAAG,CAAC;QACjE,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,CAAC;QAEnE,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC;QAChE,MAAM,gBAAgB,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC;QAChE,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC;QACvD,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC;AAEvD,QAAA,MAAM,cAAc,GAAG,SAAS,GAAG,gBAAgB,GAAG,YAAY;AAClE,QAAA,MAAM,eAAe,GAAG,UAAU,GAAG,gBAAgB,GAAG,YAAY;QAEpE,MAAM,YAAY,GAAG;AACjB,cAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,GAAG,iBAAiB,EAAE,cAAc;cACrE,cAAc;QACpB,MAAM,aAAa,GAAG;AAClB,cAAE,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,GAAG,kBAAkB,EAAE,eAAe;cACxE,eAAe;AAErB,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,GAAG,MAAM,CAAC;AACxE,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,aAAa,GAAG,MAAM,CAAC;AAE1E,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;;AAGrF,QAAA,IAAI,YAAY,IAAI,QAAQ,EAAE;YAC1B,MAAM,eAAe,GAAG,YAAY,CAAC,YAAY,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,YAAY;AACvG,YAAA,MAAM,YAAY,GAAG,uBAAuB,GAAG,cAAc;AAC7D,YAAA,MAAM,YAAY,GAAG,YAAY,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY;;AAEtE,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;YAC3F,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,cAAA,EAAiB,YAAY,OAAO;QACnE;;AAGA,QAAA,IAAI,YAAY,IAAI,QAAQ,EAAE;YAC1B,MAAM,eAAe,GAAG,YAAY,CAAC,WAAW,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,YAAY;AACrG,YAAA,MAAM,YAAY,GAAG,sBAAsB,GAAG,aAAa;AAC3D,YAAA,MAAM,YAAY,GAAG,YAAY,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,GAAG,YAAY;AACvE,YAAA,MAAM,YAAY,GACd,SAAS,KAAK;kBACR,KAAK,CAAC,YAAY,GAAG,eAAe,EAAE,CAAC,eAAe,EAAE,CAAC;kBACzD,KAAK,CAAC,YAAY,GAAG,eAAe,EAAE,CAAC,EAAE,eAAe,CAAC;YACnE,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,CAAA,YAAA,EAAe,YAAY,SAAS;QACnE;QAEA,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,CAAA,EAAG,mBAAmB,CAAA,EAAA,CAAI,CAAC;QAC1F,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,CAAA,EAAG,iBAAiB,CAAA,EAAA,CAAI,CAAC;QACtF,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,EAAE,CAAA,EAAG,kBAAkB,CAAA,EAAA,CAAI,CAAC;QACzF,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,EAAE,CAAA,EAAG,gBAAgB,CAAA,EAAA,CAAI,CAAC;QAErF,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,gBAAgB,IAAI,gBAAgB,EAAE;AACtC,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAC3D;iBAAO;AACH,gBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;YACxF;QACJ;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC;AAEhD,QAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;YAC9B,MAAM,EAAE,CAAC,gBAAgB,IAAI,mBAAmB,GAAG,SAAS,CAAC,MAAM;YACnE,IAAI,EAAE,CAAC,gBAAgB,IAAI,iBAAiB,GAAG,SAAS,CAAC,IAAI;YAC7D,MAAM,EAAE,CAAC,gBAAgB,IAAI,kBAAkB,GAAG,SAAS,CAAC,MAAM;YAClE,IAAI,EAAE,CAAC,gBAAgB,IAAI,gBAAgB,GAAG,SAAS,CAAC;AAC3D,SAAA,CAAC;IACN;IAEA,QAAQ,GAAA;QACJ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO;QACvD,IAAI,CAAC,UAAU,EAAE;YACb;QACJ;QAEA,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC;QACxF;;;AAIA,QAAA,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI;QAClC,CAAC,EAAE,kBAAkB,CAAC;IAC1B;IAEA,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK;IACnC;IAEQ,eAAe,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO;AAC7B,QAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;YACvC;QACJ;QAEA,IAAI,cAAc,GAAG,KAAK;AAC1B,QAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;YAC3C,IAAI,CAAC,cAAc,EAAE;gBACjB,cAAc,GAAG,IAAI;AACrB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB;AAClC,gBAAA,IACI,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,YAAY;AAC9B,oBAAA,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,YAAY;AAC9B,oBAAA,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,WAAW;oBAC7B,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,WAAW,EAC/B;oBACE;gBACJ;YACJ;YACA,IAAI,CAAC,oBAAoB,EAAE;AAC/B,QAAA,CAAC,CAAC;AACF,QAAA,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;;;AAIhC,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5D,YAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB;YACJ;AACA,YAAA,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,CAAC;iBAC/D,IAAI,CAAC,MAAM,IAAI,CAAC,oBAAoB,EAAE;AACtC,iBAAA,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QACxB,CAAC,EAAE,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;IAChE;8GAjPS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,wmCArBnB,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAqBrD,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxBjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,yBAAyB;AACnC,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,SAAS,EAAE,CAAC,gCAAgC,CAAC,eAAe,CAAC,CAAC;AAC9D,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,kBAAkB,EAAE,UAAU;AAC9B,wBAAA,iBAAiB,EAAE,uEAAuE;AAC1F,wBAAA,gBAAgB,EAAE,kCAAkC;AACpD,wBAAA,uBAAuB,EAAE,yEAAyE;AAClG,wBAAA,4BAA4B,EAAE,+CAA+C;AAC7E,wBAAA,4BAA4B,EAAE,+CAA+C;AAC7E,wBAAA,8BAA8B,EAAE,qDAAqD;AACrF,wBAAA,4BAA4B,EAAE,mDAAmD;AACjF,wBAAA,8BAA8B,EAAE,qDAAqD;AACrF,wBAAA,4BAA4B,EAAE,mDAAmD;AACjF,wBAAA,UAAU,EAAE,YAAY;AACxB,wBAAA,SAAS,EAAE,qBAAqB;AAChC,wBAAA,aAAa,EAAE,qBAAqB;AACpC,wBAAA,eAAe,EAAE,qBAAqB;AACtC,wBAAA,gBAAgB,EAAE,qBAAqB;AACvC,wBAAA,WAAW,EAAE;AAChB;AACJ,iBAAA;;AAqPD,SAAS,cAAc,CAAC,QAAqB,EAAA;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;IACxD,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;IACtD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACnC;;ACxSA;;;;;AAKG;MAgBU,oBAAoB,CAAA;AAM7B,IAAA,WAAA,GAAA;QALmB,IAAA,CAAA,WAAW,GAAG,2BAA2B,EAAE;QAC7C,IAAA,CAAA,eAAe,GAAG,+BAA+B,EAAE;AACnD,QAAA,IAAA,CAAA,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AACvD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;;;QAK5C,MAAM,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;QAEtE,eAAe,CAAC,MAAK;AACjB,YAAA,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;gBACvC;YACJ;YAEA,IAAI,cAAc,GAAG,KAAK;AAC1B,YAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC3C,IAAI,CAAC,cAAc,EAAE;oBACjB,cAAc,GAAG,IAAI;;;;oBAIrB,IAAI,CAAC,sBAAsB,EAAE;wBACzB;oBACJ;gBACJ;AACA,gBAAA,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;AAC/C,YAAA,CAAC,CAAC;AACF,YAAA,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;AAChE,QAAA,CAAC,CAAC;IACN;8GAhCS,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,2EAAA,EAAA,0BAAA,EAAA,iDAAA,EAAA,0BAAA,EAAA,iDAAA,EAAA,4BAAA,EAAA,uDAAA,EAAA,0BAAA,EAAA,qDAAA,EAAA,4BAAA,EAAA,uDAAA,EAAA,0BAAA,EAAA,qDAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAfhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,IAAI,EAAE;AACF,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,mBAAmB,EAAE,eAAe;AACpC,wBAAA,uBAAuB,EAAE,yEAAyE;AAClG,wBAAA,4BAA4B,EAAE,+CAA+C;AAC7E,wBAAA,4BAA4B,EAAE,+CAA+C;AAC7E,wBAAA,8BAA8B,EAAE,qDAAqD;AACrF,wBAAA,4BAA4B,EAAE,mDAAmD;AACjF,wBAAA,8BAA8B,EAAE,qDAAqD;AACrF,wBAAA,4BAA4B,EAAE;AACjC;AACJ,iBAAA;;;ACrBD;;;;;AAKG;MAaU,mBAAmB,CAAA;AAG5B,IAAA,WAAA,GAAA;QAFmB,IAAA,CAAA,WAAW,GAAG,2BAA2B,EAAE;AAG1D,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;IACzE;8GALS,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,cAAA,EAAA,OAAA,EAAA,wBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,yCAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,eAAA,EAAA,oDAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAZ/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,IAAI,EAAE;AACF,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,gBAAgB,EAAE,KAAK;AACvB,wBAAA,0BAA0B,EAAE,KAAK;AACjC,wBAAA,eAAe,EAAE,uCAAuC;AACxD,wBAAA,gBAAgB,EAAE,wCAAwC;AAC1D,wBAAA,iBAAiB,EAAE;AACtB;AACJ,iBAAA;;;ACTM,MAAM,CAAC,gCAAgC,EAAE,iCAAiC,CAAC,GAC9E,aAAa,CAA6B,4BAA4B,EAAE,wBAAwB;AAEpG,MAAM,gBAAgB,GAAG,MAAiC;AACtD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,sBAAsB,CAAC;IAChD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE;AACzD,CAAC;AAED;;;;;AAKG;MAmCU,sBAAsB,CAAA;AAwB/B,IAAA,WAAA,GAAA;QAvBmB,IAAA,CAAA,WAAW,GAAG,2BAA2B,EAAE;AAC7C,QAAA,IAAA,CAAA,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;;AAG/D,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAuB,UAAU,kFAAC;;QAGrD,IAAA,CAAA,WAAW,GAAG,KAAK,CAAwB,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExE,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,gFACtG;AAEgB,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,+EAC1G;AAEkB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mFAAC;QAErE,IAAA,CAAA,sBAAsB,GAAG,QAAQ,CAChD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,6FACxE;;;QAKG,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;gBACnC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;YACzD;iBAAO;gBACH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;YACzD;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,CAAC,KAAiB,EAAA;QACrB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO;AACvD,QAAA,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE;YAC9B;QACJ;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY;AACtD,QAAA,MAAM,KAAK,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM;AACtD,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;YACb;QACJ;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAC9C,MAAM,SAAS,GAAG;AACd,cAAE,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC;cACpC,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY;;AAEvD,QAAA,MAAM,SAAS,GAAG,UAAU,IAAI,SAAS,KAAK,KAAK,GAAG,CAAC,SAAS,GAAG,CAAC;AACpE,QAAA,MAAM,cAAc,GAAG,UAAU,IAAI,SAAS,KAAK,KAAK,GAAG,CAAC,GAAG,SAAS;AACxE,QAAA,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,SAAS;;QAG7E,IAAI,CAAC,WAAW,IAAI,SAAS,IAAI,KAAK,GAAG,CAAC,MAAM,WAAW,IAAI,cAAc,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACzF;QACJ;QAEA,KAAK,CAAC,cAAc,EAAE;AAEtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;QAC/E,IAAI,UAAU,EAAE;AACZ,YAAA,UAAU,CAAC,UAAU,GAAG,IAAI;QAChC;aAAO;AACH,YAAA,UAAU,CAAC,SAAS,GAAG,IAAI;QAC/B;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC;IACxF;AAEA,IAAA,aAAa,CAAC,KAAmB,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YACpB;QACJ;AAEA,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAC1C,MAAM,KAAK,GACP,WAAW,KAAK,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;;QAGxG,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC3C;QACJ;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO;QACvD,IAAI,CAAC,UAAU,EAAE;YACb;QACJ;QAEA,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAE9C,IACI,WAAW,KAAK,UAAU;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EACxC;YACE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;YAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO;YAC1D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC;YACtD,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC;AAC/D,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY;AACxC,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,qBAAqB,EAAE;AACtD,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,GAAG,WAAW,GAAG,CAAC,GAAG,gBAAgB,GAAG,YAAY,GAAG,CAAC;YAErG,MAAM,eAAe,GAAG,WAAW,CAAC,YAAY,GAAG,WAAW,GAAG,gBAAgB,GAAG,YAAY;AAChG,YAAA,MAAM,YAAY,GAAG,MAAM,GAAG,eAAe;AAC7C,YAAA,UAAU,CAAC,SAAS,GAAG,YAAY,IAAI,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAC7F;QAEA,IACI,WAAW,KAAK,YAAY;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EACxC;YACE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO;YAClD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO;YAC1D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC;YACtD,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,CAAC;AAC/D,YAAA,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW;AACtC,YAAA,MAAM,UAAU,GAAG,WAAW,CAAC,qBAAqB,EAAE;AACtD,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,GAAG,CAAC,GAAG,gBAAgB,GAAG,YAAY,GAAG,CAAC;YAErG,MAAM,eAAe,GAAG,WAAW,CAAC,WAAW,GAAG,UAAU,GAAG,gBAAgB,GAAG,YAAY;AAC9F,YAAA,MAAM,YAAY,GAAG,MAAM,GAAG,eAAe;YAC7C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW;AAEnE,YAAA,IAAI,aAAqB;AACzB,YAAA,IAAI,SAAS,KAAK,KAAK,EAAE;gBACrB,aAAa,GAAG,CAAC,CAAC,GAAG,YAAY,IAAI,WAAW;;AAEhD,gBAAA,IAAI,UAAU,CAAC,UAAU,IAAI,CAAC,EAAE;oBAC5B,aAAa,GAAG,CAAC,aAAa;gBAClC;YACJ;iBAAO;AACH,gBAAA,aAAa,GAAG,YAAY,GAAG,WAAW;YAC9C;AACA,YAAA,UAAU,CAAC,UAAU,GAAG,aAAa;QACzC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC;AACpF,QAAA,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,CAAC;IAC7C;8GAlJS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,mjEA/BpB,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,CAAC,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FA+BvD,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlClC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE,wBAAwB;AAClC,oBAAA,SAAS,EAAE,CAAC,iCAAiC,CAAC,gBAAgB,CAAC,CAAC;AAChE,oBAAA,IAAI,EAAE;AACF,wBAAA,gBAAgB,EAAE,mCAAmC;AACrD,wBAAA,yBAAyB,EAAE,eAAe;AAC1C,wBAAA,sBAAsB,EAAE,yCAAyC;AACjE,wBAAA,uBAAuB,EAAE,8BAA8B;AACvD,wBAAA,4BAA4B,EAAE,+CAA+C;AAC7E,wBAAA,4BAA4B,EAAE,+CAA+C;AAC7E,wBAAA,8BAA8B,EAAE,qDAAqD;AACrF,wBAAA,4BAA4B,EAAE,mDAAmD;AACjF,wBAAA,8BAA8B,EAAE,qDAAqD;AACrF,wBAAA,4BAA4B,EAAE,mDAAmD;AACjF,wBAAA,kBAAkB,EAAE,YAAY;AAChC,wBAAA,sBAAsB,EAAE,QAAQ;AAChC,wBAAA,qBAAqB,EAAE,QAAQ;AAC/B,wBAAA,iBAAiB,EAAE,gCAAgC;AACnD,wBAAA,oBAAoB,EAAE,4CAA4C;AAClE,wBAAA,aAAa,EAAE,2CAA2C;AAC1D,wBAAA,gBAAgB,EAAE,yEAAyE;AAC3F,wBAAA,4BAA4B,EAAE,6CAA6C;AAC3E,wBAAA,0BAA0B,EAAE,wEAAwE;AACpG,wBAAA,oCAAoC,EAChC,6EAA6E;AACjF,wBAAA,mCAAmC,EAC/B,8EAA8E;AAClF,wBAAA,eAAe,EAAE,uBAAuB;AACxC,wBAAA,aAAa,EAAE,qCAAqC;AACpD,wBAAA,iBAAiB,EAAE,qCAAqC;AACxD,wBAAA,SAAS,EAAE;AACd;AACJ,iBAAA;;;ACtDD;;;;;AAKG;MAeU,kBAAkB,CAAA;AAK3B,IAAA,WAAA,GAAA;QAJmB,IAAA,CAAA,WAAW,GAAG,2BAA2B,EAAE;QAC3C,IAAA,CAAA,gBAAgB,GAAG,gCAAgC,EAAE;AACvD,QAAA,IAAA,CAAA,OAAO,GAAgB,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;QAGpE,MAAM,CAAC,MAAK;YACR,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;gBACpD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;YACrD;iBAAO;gBACH,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;YACrD;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,CAAC,KAAmB,EAAA;QACvB,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,UAAU,EAAE;AACpD,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;QACzC;aAAO;AACH,YAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC;QACzC;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;IAC3C;8GAtBS,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,uCAAA,EAAA,aAAA,EAAA,uCAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,uBAAA,EAAA,gCAAA,EAAA,kBAAA,EAAA,wDAAA,EAAA,cAAA,EAAA,8FAAA,EAAA,aAAA,EAAA,+FAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACF,wBAAA,yBAAyB,EAAE,gCAAgC;AAC3D,wBAAA,oBAAoB,EAAE,sDAAsD;AAC5E,wBAAA,gBAAgB,EAAE,0FAA0F;AAC5G,wBAAA,eAAe,EAAE,2FAA2F;AAC5G,wBAAA,eAAe,EAAE,uCAAuC;AACxD,wBAAA,eAAe,EAAE,uCAAuC;AACxD,wBAAA,aAAa,EAAE,iBAAiB;AAChC,wBAAA,iBAAiB,EAAE;AACtB;AACJ,iBAAA;;;ACRD,MAAM,QAAQ,GAAG;IACb,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,kBAAkB;IAClB;CACH;MAMY,mBAAmB,CAAA;8GAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAZ5B,iBAAiB;YACjB,qBAAqB;YACrB,oBAAoB;YACpB,sBAAsB;YACtB,kBAAkB;AAClB,YAAA,mBAAmB,aALnB,iBAAiB;YACjB,qBAAqB;YACrB,oBAAoB;YACpB,sBAAsB;YACtB,kBAAkB;YAClB,mBAAmB,CAAA,EAAA,CAAA,CAAA;+GAOV,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC;AACtB,oBAAA,OAAO,EAAE,CAAC,GAAG,QAAQ;AACxB,iBAAA;;;AC3BD;;AAEG;;;;"}
1
+ {"version":3,"file":"radix-ng-primitives-scroll-area.mjs","sources":["../../../packages/primitives/scroll-area/src/constants.ts","../../../packages/primitives/scroll-area/src/utils.ts","../../../packages/primitives/scroll-area/src/scroll-area-root.ts","../../../packages/primitives/scroll-area/src/scroll-area-viewport.ts","../../../packages/primitives/scroll-area/src/scroll-area-content.ts","../../../packages/primitives/scroll-area/src/scroll-area-corner.ts","../../../packages/primitives/scroll-area/src/scroll-area-scrollbar.ts","../../../packages/primitives/scroll-area/src/scroll-area-thumb.ts","../../../packages/primitives/scroll-area/index.ts","../../../packages/primitives/scroll-area/radix-ng-primitives-scroll-area.ts"],"sourcesContent":["/** How long (ms) the `data-scrolling` attribute stays applied after the last scroll movement. */\nexport const SCROLL_TIMEOUT = 500;\n\n/** Minimum size (px) of the thumb so it stays grabbable on very large content. */\nexport const MIN_THUMB_SIZE = 16;\n\n/** 100 ms without scroll events ≈ scroll end (mirrors the native `scrollend` heuristic). */\nexport const SCROLL_END_TIMEOUT = 100;\n\n/** Distance (px) within which a scroll offset is snapped to an edge. */\nexport const SCROLL_EDGE_TOLERANCE_PX = 1;\n","import { clamp } from '@radix-ng/primitives/core';\nimport { SCROLL_EDGE_TOLERANCE_PX } from './constants';\n\n/**\n * Returns the combined start/end `margin` or `padding` of an element along an axis,\n * resolving logical (inline/block) properties so RTL layouts compute correctly.\n */\nexport function getOffset(element: Element | null, prop: 'margin' | 'padding', axis: 'x' | 'y'): number {\n if (!element) {\n return 0;\n }\n\n const styles = getComputedStyle(element);\n const propAxis = axis === 'x' ? 'Inline' : 'Block';\n\n // Safari misreports `marginInlineEnd` in RTL. We have to assume the start/end\n // values are symmetrical, which is likely.\n if (axis === 'x' && prop === 'margin') {\n return parseFloat(styles[`${prop}InlineStart` as keyof CSSStyleDeclaration] as string) * 2;\n }\n\n return (\n parseFloat(styles[`${prop}${propAxis}Start` as keyof CSSStyleDeclaration] as string) +\n parseFloat(styles[`${prop}${propAxis}End` as keyof CSSStyleDeclaration] as string)\n );\n}\n\n/**\n * Snaps a scroll offset that is within {@link SCROLL_EDGE_TOLERANCE_PX} of either end\n * to that boundary, giving the overflow edge attributes a \"sticky\" feel at scroll limits.\n */\nexport function normalizeScrollOffset(value: number, max: number): number {\n if (max <= 0) {\n return 0;\n }\n\n const clamped = clamp(value, 0, max);\n const startDistance = clamped;\n const endDistance = max - clamped;\n const withinStartTolerance = startDistance <= SCROLL_EDGE_TOLERANCE_PX;\n const withinEndTolerance = endDistance <= SCROLL_EDGE_TOLERANCE_PX;\n\n if (withinStartTolerance && withinEndTolerance) {\n return startDistance <= endDistance ? 0 : max;\n }\n if (withinStartTolerance) {\n return 0;\n }\n if (withinEndTolerance) {\n return max;\n }\n\n return clamped;\n}\n\n/**\n * Injects (once per document) the CSS that hides the native scrollbars of the viewport.\n * Headless directives can't hide WebKit scrollbars via inline styles, so a small\n * stylesheet keyed by the `[rdxScrollAreaViewport]` selector is appended to `<head>`.\n */\nexport function injectScrollbarHideStyles(document: Document, nonce?: string | null): void {\n if (typeof document === 'undefined' || document.head.querySelector('style[data-rdx-scroll-area]')) {\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute('data-rdx-scroll-area', '');\n if (nonce) {\n style.nonce = nonce;\n }\n style.textContent = `[rdxScrollAreaViewport]{scrollbar-width:none;-ms-overflow-style:none}[rdxScrollAreaViewport]::-webkit-scrollbar{display:none}`;\n document.head.appendChild(style);\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n signal,\n Signal\n} from '@angular/core';\nimport { BooleanInput, createContext, Direction } from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { SCROLL_TIMEOUT } from './constants';\nimport { getOffset } from './utils';\n\nexport type Size = { width: number; height: number };\nexport type Coords = { x: number; y: number };\nexport type OverflowEdges = { xStart: boolean; xEnd: boolean; yStart: boolean; yEnd: boolean };\nexport type HiddenState = { x: boolean; y: boolean; corner: boolean };\n\n/** A minimal, React-`ref`-like mutable holder shared through context. */\nexport type MutableRef<T> = { current: T | null };\n\nexport type OverflowEdgeThreshold = number | Partial<{ xStart: number; xEnd: number; yStart: number; yEnd: number }>;\n\nconst DEFAULT_SIZE: Size = { width: 0, height: 0 };\nconst DEFAULT_OVERFLOW_EDGES: OverflowEdges = { xStart: false, xEnd: false, yStart: false, yEnd: false };\nconst DEFAULT_HIDDEN_STATE: HiddenState = { x: true, y: true, corner: true };\n\nexport interface ScrollAreaRootContext {\n readonly rootId: string;\n readonly direction: Signal<Direction>;\n readonly overflowEdgeThreshold: Signal<{ xStart: number; xEnd: number; yStart: number; yEnd: number }>;\n readonly disableStyleElements: Signal<boolean>;\n\n // Reactive state\n readonly hovering: Signal<boolean>;\n readonly scrollingX: Signal<boolean>;\n readonly scrollingY: Signal<boolean>;\n readonly touchModality: Signal<boolean>;\n readonly hasMeasuredScrollbar: Signal<boolean>;\n readonly cornerSize: Signal<Size>;\n readonly thumbSize: Signal<Size>;\n readonly hiddenState: Signal<HiddenState>;\n readonly overflowEdges: Signal<OverflowEdges>;\n\n // Element references (filled in by the child parts as they mount)\n readonly rootRef: MutableRef<HTMLElement>;\n readonly viewportRef: MutableRef<HTMLElement>;\n readonly scrollbarYRef: MutableRef<HTMLElement>;\n readonly scrollbarXRef: MutableRef<HTMLElement>;\n readonly thumbYRef: MutableRef<HTMLElement>;\n readonly thumbXRef: MutableRef<HTMLElement>;\n readonly cornerRef: MutableRef<HTMLElement>;\n\n // State setters used by the viewport's measurement pass\n setHovering(value: boolean): void;\n setHasMeasuredScrollbar(value: boolean): void;\n setScrollingX(value: boolean): void;\n setScrollingY(value: boolean): void;\n setThumbSize(value: Size): void;\n setCornerSize(value: Size): void;\n setHiddenState(value: HiddenState): void;\n setOverflowEdges(value: OverflowEdges): void;\n\n // Pointer/scroll handlers shared with the scrollbar and thumb\n handleScroll(position: Coords): void;\n handlePointerDown(event: PointerEvent): void;\n handlePointerMove(event: PointerEvent): void;\n handlePointerUp(event: PointerEvent): void;\n}\n\nexport const [injectScrollAreaRootContext, provideScrollAreaRootContext] = createContext<ScrollAreaRootContext>(\n 'ScrollAreaRootContext',\n 'components/scroll-area'\n);\n\nconst rootContext = (): ScrollAreaRootContext => {\n const root = inject(RdxScrollAreaRoot);\n return {\n rootId: root.rootId,\n direction: root.direction,\n overflowEdgeThreshold: root.normalizedThreshold,\n disableStyleElements: root.disableStyleElements,\n hovering: root.hovering,\n scrollingX: root.scrollingX,\n scrollingY: root.scrollingY,\n touchModality: root.touchModality,\n hasMeasuredScrollbar: root.hasMeasuredScrollbar,\n cornerSize: root.cornerSize,\n thumbSize: root.thumbSize,\n hiddenState: root.hiddenState,\n overflowEdges: root.overflowEdges,\n rootRef: root.rootRef,\n viewportRef: root.viewportRef,\n scrollbarYRef: root.scrollbarYRef,\n scrollbarXRef: root.scrollbarXRef,\n thumbYRef: root.thumbYRef,\n thumbXRef: root.thumbXRef,\n cornerRef: root.cornerRef,\n setHovering: (v) => root.hovering.set(v),\n setHasMeasuredScrollbar: (v) => root.hasMeasuredScrollbar.set(v),\n setScrollingX: (v) => root.setScrollingX(v),\n setScrollingY: (v) => root.setScrollingY(v),\n setThumbSize: (v) => root.setThumbSize(v),\n setCornerSize: (v) => root.setCornerSize(v),\n setHiddenState: (v) => root.setHiddenState(v),\n setOverflowEdges: (v) => root.setOverflowEdges(v),\n handleScroll: (p) => root.handleScroll(p),\n handlePointerDown: (e) => root.handlePointerDown(e),\n handlePointerMove: (e) => root.handlePointerMove(e),\n handlePointerUp: (e) => root.handlePointerUp(e)\n };\n};\n\nlet idCounter = 0;\n\n/**\n * Groups all parts of the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaRoot]',\n exportAs: 'rdxScrollAreaRoot',\n providers: [provideScrollAreaRootContext(rootContext)],\n host: {\n role: 'presentation',\n '[style.position]': '\"relative\"',\n '[style.--scroll-area-corner-height]': 'cornerSize().height + \"px\"',\n '[style.--scroll-area-corner-width]': 'cornerSize().width + \"px\"',\n '[attr.data-scrolling]': '(scrollingX() || scrollingY()) ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'overflowEdges().yEnd ? \"\" : undefined',\n '(pointerenter)': 'onPointerEnterOrMove($event)',\n '(pointermove)': 'onPointerEnterOrMove($event)',\n '(pointerdown)': 'onTouchModalityChange($event)',\n '(pointerleave)': 'hovering.set(false)'\n }\n})\nexport class RdxScrollAreaRoot {\n private readonly destroyRef = inject(DestroyRef);\n\n readonly rootId = `rdx-scroll-area-${idCounter++}`;\n\n /** Text direction of the scroll area. Affects horizontal (RTL) scroll math. */\n readonly dirInput = input<Direction | undefined>(undefined, { alias: 'dir' });\n readonly direction: Signal<Direction> = injectDirection(this.dirInput);\n\n /**\n * The threshold in pixels that must be passed before the overflow edge attributes are applied.\n * Accepts a single number for all edges or an object to configure them individually.\n */\n readonly overflowEdgeThreshold = input<OverflowEdgeThreshold>(0);\n readonly disableStyleElements = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n readonly normalizedThreshold = computed(() => normalizeOverflowEdgeThreshold(this.overflowEdgeThreshold()));\n\n readonly hovering = signal(false);\n readonly scrollingX = signal(false);\n readonly scrollingY = signal(false);\n readonly touchModality = signal(false);\n readonly hasMeasuredScrollbar = signal(false);\n readonly cornerSize = signal<Size>(DEFAULT_SIZE);\n readonly thumbSize = signal<Size>(DEFAULT_SIZE);\n readonly hiddenState = signal<HiddenState>(DEFAULT_HIDDEN_STATE);\n readonly overflowEdges = signal<OverflowEdges>(DEFAULT_OVERFLOW_EDGES);\n\n readonly rootRef: MutableRef<HTMLElement> = { current: inject(ElementRef).nativeElement };\n readonly viewportRef: MutableRef<HTMLElement> = { current: null };\n readonly scrollbarYRef: MutableRef<HTMLElement> = { current: null };\n readonly scrollbarXRef: MutableRef<HTMLElement> = { current: null };\n readonly thumbYRef: MutableRef<HTMLElement> = { current: null };\n readonly thumbXRef: MutableRef<HTMLElement> = { current: null };\n readonly cornerRef: MutableRef<HTMLElement> = { current: null };\n\n // Imperative drag state (deliberately non-reactive).\n private thumbDragging = false;\n private startY = 0;\n private startX = 0;\n private startScrollTop = 0;\n private startScrollLeft = 0;\n private currentOrientation: 'vertical' | 'horizontal' = 'vertical';\n private scrollPosition: Coords = { x: 0, y: 0 };\n\n private scrollYTimer: ReturnType<typeof setTimeout> | undefined;\n private scrollXTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n clearTimeout(this.scrollYTimer);\n clearTimeout(this.scrollXTimer);\n });\n }\n\n setScrollingX(value: boolean): void {\n this.scrollingX.set(value);\n }\n\n setScrollingY(value: boolean): void {\n this.scrollingY.set(value);\n }\n\n setThumbSize(value: Size): void {\n const prev = this.thumbSize();\n if (prev.width !== value.width || prev.height !== value.height) {\n this.thumbSize.set(value);\n }\n }\n\n setCornerSize(value: Size): void {\n const prev = this.cornerSize();\n if (prev.width !== value.width || prev.height !== value.height) {\n this.cornerSize.set(value);\n }\n }\n\n setHiddenState(value: HiddenState): void {\n const prev = this.hiddenState();\n if (prev.x !== value.x || prev.y !== value.y || prev.corner !== value.corner) {\n this.hiddenState.set(value);\n }\n }\n\n setOverflowEdges(value: OverflowEdges): void {\n const prev = this.overflowEdges();\n if (\n prev.xStart !== value.xStart ||\n prev.xEnd !== value.xEnd ||\n prev.yStart !== value.yStart ||\n prev.yEnd !== value.yEnd\n ) {\n this.overflowEdges.set(value);\n }\n }\n\n handleScroll(scrollPosition: Coords): void {\n const offsetX = scrollPosition.x - this.scrollPosition.x;\n const offsetY = scrollPosition.y - this.scrollPosition.y;\n this.scrollPosition = scrollPosition;\n\n if (offsetY !== 0) {\n this.scrollingY.set(true);\n clearTimeout(this.scrollYTimer);\n this.scrollYTimer = setTimeout(() => this.scrollingY.set(false), SCROLL_TIMEOUT);\n }\n\n if (offsetX !== 0) {\n this.scrollingX.set(true);\n clearTimeout(this.scrollXTimer);\n this.scrollXTimer = setTimeout(() => this.scrollingX.set(false), SCROLL_TIMEOUT);\n }\n }\n\n handlePointerDown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n\n this.thumbDragging = true;\n this.startY = event.clientY;\n this.startX = event.clientX;\n this.currentOrientation =\n ((event.currentTarget as Element | null)?.getAttribute('data-orientation') as 'vertical' | 'horizontal') ??\n 'vertical';\n\n const viewport = this.viewportRef.current;\n if (viewport) {\n this.startScrollTop = viewport.scrollTop;\n this.startScrollLeft = viewport.scrollLeft;\n }\n if (this.thumbYRef.current && this.currentOrientation === 'vertical') {\n this.thumbYRef.current.setPointerCapture(event.pointerId);\n }\n if (this.thumbXRef.current && this.currentOrientation === 'horizontal') {\n this.thumbXRef.current.setPointerCapture(event.pointerId);\n }\n }\n\n handlePointerMove(event: PointerEvent): void {\n if (!this.thumbDragging) {\n return;\n }\n\n const deltaY = event.clientY - this.startY;\n const deltaX = event.clientX - this.startX;\n\n const viewport = this.viewportRef.current;\n if (!viewport) {\n return;\n }\n\n const scrollableContentHeight = viewport.scrollHeight;\n const viewportHeight = viewport.clientHeight;\n const scrollableContentWidth = viewport.scrollWidth;\n const viewportWidth = viewport.clientWidth;\n\n if (this.thumbYRef.current && this.scrollbarYRef.current && this.currentOrientation === 'vertical') {\n const scrollbarYOffset = getOffset(this.scrollbarYRef.current, 'padding', 'y');\n const thumbYOffset = getOffset(this.thumbYRef.current, 'margin', 'y');\n const thumbHeight = this.thumbYRef.current.offsetHeight;\n const maxThumbOffsetY =\n this.scrollbarYRef.current.offsetHeight - thumbHeight - scrollbarYOffset - thumbYOffset;\n const scrollRatioY = deltaY / maxThumbOffsetY;\n\n viewport.scrollTop = this.startScrollTop + scrollRatioY * (scrollableContentHeight - viewportHeight);\n event.preventDefault();\n\n this.scrollingY.set(true);\n clearTimeout(this.scrollYTimer);\n this.scrollYTimer = setTimeout(() => this.scrollingY.set(false), SCROLL_TIMEOUT);\n }\n\n if (this.thumbXRef.current && this.scrollbarXRef.current && this.currentOrientation === 'horizontal') {\n const scrollbarXOffset = getOffset(this.scrollbarXRef.current, 'padding', 'x');\n const thumbXOffset = getOffset(this.thumbXRef.current, 'margin', 'x');\n const thumbWidth = this.thumbXRef.current.offsetWidth;\n const maxThumbOffsetX =\n this.scrollbarXRef.current.offsetWidth - thumbWidth - scrollbarXOffset - thumbXOffset;\n const scrollRatioX = deltaX / maxThumbOffsetX;\n\n viewport.scrollLeft = this.startScrollLeft + scrollRatioX * (scrollableContentWidth - viewportWidth);\n event.preventDefault();\n\n this.scrollingX.set(true);\n clearTimeout(this.scrollXTimer);\n this.scrollXTimer = setTimeout(() => this.scrollingX.set(false), SCROLL_TIMEOUT);\n }\n }\n\n handlePointerUp(event: PointerEvent): void {\n this.thumbDragging = false;\n\n // `pointercancel` releases capture implicitly, so guard against releasing a\n // capture we no longer hold (which would throw).\n if (\n this.thumbYRef.current &&\n this.currentOrientation === 'vertical' &&\n this.thumbYRef.current.hasPointerCapture(event.pointerId)\n ) {\n this.thumbYRef.current.releasePointerCapture(event.pointerId);\n }\n if (\n this.thumbXRef.current &&\n this.currentOrientation === 'horizontal' &&\n this.thumbXRef.current.hasPointerCapture(event.pointerId)\n ) {\n this.thumbXRef.current.releasePointerCapture(event.pointerId);\n }\n }\n\n onTouchModalityChange(event: PointerEvent): void {\n this.touchModality.set(event.pointerType === 'touch');\n }\n\n onPointerEnterOrMove(event: PointerEvent): void {\n this.onTouchModalityChange(event);\n\n if (event.pointerType !== 'touch') {\n const root = this.rootRef.current;\n const target = event.target as Node | null;\n this.hovering.set(!!root && !!target && root.contains(target));\n }\n }\n}\n\nfunction normalizeOverflowEdgeThreshold(threshold: OverflowEdgeThreshold | undefined): {\n xStart: number;\n xEnd: number;\n yStart: number;\n yEnd: number;\n} {\n if (typeof threshold === 'number') {\n const value = Math.max(0, threshold);\n return { xStart: value, xEnd: value, yStart: value, yEnd: value };\n }\n\n return {\n xStart: Math.max(0, threshold?.xStart || 0),\n xEnd: Math.max(0, threshold?.xEnd || 0),\n yStart: Math.max(0, threshold?.yStart || 0),\n yEnd: Math.max(0, threshold?.yEnd || 0)\n };\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n CSP_NONCE,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { clamp, createContext } from '@radix-ng/primitives/core';\nimport { MIN_THUMB_SIZE, SCROLL_END_TIMEOUT } from './constants';\nimport { HiddenState, injectScrollAreaRootContext } from './scroll-area-root';\nimport { getOffset, injectScrollbarHideStyles, normalizeScrollOffset } from './utils';\n\nexport interface ScrollAreaViewportContext {\n /** Re-measures the viewport and repositions the thumbs. Called by the content's ResizeObserver. */\n computeThumbPosition(): void;\n}\n\nexport const [injectScrollAreaViewportContext, provideScrollAreaViewportContext] =\n createContext<ScrollAreaViewportContext>('ScrollAreaViewportContext', 'components/scroll-area');\n\nconst viewportContext = (): ScrollAreaViewportContext => {\n const viewport = inject(RdxScrollAreaViewport);\n return {\n computeThumbPosition: () => viewport.computeThumbPosition()\n };\n};\n\n/**\n * The actual scrollable container of the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaViewport]',\n exportAs: 'rdxScrollAreaViewport',\n providers: [provideScrollAreaViewportContext(viewportContext)],\n host: {\n role: 'presentation',\n '[style.overflow]': '\"scroll\"',\n '[attr.tabindex]': '(rootContext.hiddenState().x && rootContext.hiddenState().y) ? -1 : 0',\n '[attr.data-id]': 'rootContext.rootId + \"-viewport\"',\n '[attr.data-scrolling]': '(rootContext.scrollingX() || rootContext.scrollingY()) ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!rootContext.hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!rootContext.hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'rootContext.overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'rootContext.overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'rootContext.overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? \"\" : undefined',\n '(scroll)': 'onScroll()',\n '(wheel)': 'onUserInteraction()',\n '(touchmove)': 'onUserInteraction()',\n '(pointermove)': 'onUserInteraction()',\n '(pointerenter)': 'onUserInteraction()',\n '(keydown)': 'onUserInteraction()'\n }\n})\nexport class RdxScrollAreaViewport {\n protected readonly rootContext = injectScrollAreaRootContext();\n\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly cspNonce = inject(CSP_NONCE, { optional: true });\n\n private programmaticScroll = true;\n private lastMeasuredMetrics: [number, number, number, number] = [NaN, NaN, NaN, NaN];\n private scrollEndTimer: ReturnType<typeof setTimeout> | undefined;\n private animationsTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n this.rootContext.viewportRef.current = this.element;\n\n if (this.isBrowser) {\n effect(() => {\n if (!this.rootContext.disableStyleElements()) {\n injectScrollbarHideStyles(this.element.ownerDocument, this.cspNonce);\n }\n });\n }\n\n // Recompute after hidden-state toggles (so newly shown scrollbars get measured),\n // on direction flips, and when the overflow-edge threshold changes.\n const hiddenState = this.rootContext.hiddenState;\n const direction = this.rootContext.direction;\n const threshold = this.rootContext.overflowEdgeThreshold;\n effect(() => {\n hiddenState();\n direction();\n threshold();\n queueMicrotask(() => this.computeThumbPosition());\n });\n\n afterNextRender(() => {\n this.computeThumbPosition();\n this.observeViewport();\n\n if (this.element.matches(':hover')) {\n this.rootContext.setHovering(true);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n if (this.rootContext.viewportRef.current === this.element) {\n this.rootContext.viewportRef.current = null;\n }\n clearTimeout(this.scrollEndTimer);\n clearTimeout(this.animationsTimer);\n });\n }\n\n computeThumbPosition(): void {\n const viewportEl = this.rootContext.viewportRef.current;\n const scrollbarYEl = this.rootContext.scrollbarYRef.current;\n const scrollbarXEl = this.rootContext.scrollbarXRef.current;\n const thumbYEl = this.rootContext.thumbYRef.current;\n const thumbXEl = this.rootContext.thumbXRef.current;\n const cornerEl = this.rootContext.cornerRef.current;\n\n if (!viewportEl) {\n return;\n }\n\n const direction = this.rootContext.direction();\n const threshold = this.rootContext.overflowEdgeThreshold();\n const cornerSize = this.rootContext.cornerSize();\n\n const scrollableContentHeight = viewportEl.scrollHeight;\n const scrollableContentWidth = viewportEl.scrollWidth;\n const viewportHeight = viewportEl.clientHeight;\n const viewportWidth = viewportEl.clientWidth;\n const scrollTop = viewportEl.scrollTop;\n const scrollLeft = viewportEl.scrollLeft;\n\n const isFirstMeasurement = Number.isNaN(this.lastMeasuredMetrics[0]);\n this.lastMeasuredMetrics = [viewportHeight, scrollableContentHeight, viewportWidth, scrollableContentWidth];\n\n if (isFirstMeasurement) {\n this.rootContext.setHasMeasuredScrollbar(true);\n }\n\n if (scrollableContentHeight === 0 || scrollableContentWidth === 0) {\n return;\n }\n\n const nextHiddenState = getHiddenState(viewportEl);\n const scrollbarYHidden = nextHiddenState.y;\n const scrollbarXHidden = nextHiddenState.x;\n const ratioX = viewportWidth / scrollableContentWidth;\n const ratioY = viewportHeight / scrollableContentHeight;\n const maxScrollLeft = Math.max(0, scrollableContentWidth - viewportWidth);\n const maxScrollTop = Math.max(0, scrollableContentHeight - viewportHeight);\n\n let scrollLeftFromStart = 0;\n let scrollLeftFromEnd = 0;\n if (!scrollbarXHidden) {\n const rawScrollLeftFromStart =\n direction === 'rtl' ? clamp(-scrollLeft, 0, maxScrollLeft) : clamp(scrollLeft, 0, maxScrollLeft);\n scrollLeftFromStart = normalizeScrollOffset(rawScrollLeftFromStart, maxScrollLeft);\n scrollLeftFromEnd = maxScrollLeft - scrollLeftFromStart;\n }\n\n const rawScrollTopFromStart = !scrollbarYHidden ? clamp(scrollTop, 0, maxScrollTop) : 0;\n const scrollTopFromStart = !scrollbarYHidden ? normalizeScrollOffset(rawScrollTopFromStart, maxScrollTop) : 0;\n const scrollTopFromEnd = !scrollbarYHidden ? maxScrollTop - scrollTopFromStart : 0;\n const nextWidth = scrollbarXHidden ? 0 : viewportWidth;\n const nextHeight = scrollbarYHidden ? 0 : viewportHeight;\n\n let nextCornerWidth = 0;\n let nextCornerHeight = 0;\n if (!scrollbarXHidden && !scrollbarYHidden) {\n nextCornerWidth = scrollbarYEl?.offsetWidth || 0;\n nextCornerHeight = scrollbarXEl?.offsetHeight || 0;\n }\n\n // Only subtract corner size from scrollbar dimensions if the corner hasn't been sized yet.\n const cornerNotYetSized = cornerSize.width === 0 && cornerSize.height === 0;\n const cornerWidthOffset = cornerNotYetSized ? nextCornerWidth : 0;\n const cornerHeightOffset = cornerNotYetSized ? nextCornerHeight : 0;\n\n const scrollbarXOffset = getOffset(scrollbarXEl, 'padding', 'x');\n const scrollbarYOffset = getOffset(scrollbarYEl, 'padding', 'y');\n const thumbXOffset = getOffset(thumbXEl, 'margin', 'x');\n const thumbYOffset = getOffset(thumbYEl, 'margin', 'y');\n\n const idealNextWidth = nextWidth - scrollbarXOffset - thumbXOffset;\n const idealNextHeight = nextHeight - scrollbarYOffset - thumbYOffset;\n\n const maxNextWidth = scrollbarXEl\n ? Math.min(scrollbarXEl.offsetWidth - cornerWidthOffset, idealNextWidth)\n : idealNextWidth;\n const maxNextHeight = scrollbarYEl\n ? Math.min(scrollbarYEl.offsetHeight - cornerHeightOffset, idealNextHeight)\n : idealNextHeight;\n\n const clampedNextWidth = Math.max(MIN_THUMB_SIZE, maxNextWidth * ratioX);\n const clampedNextHeight = Math.max(MIN_THUMB_SIZE, maxNextHeight * ratioY);\n\n this.rootContext.setThumbSize({ width: clampedNextWidth, height: clampedNextHeight });\n\n // Handle Y (vertical) scroll\n if (scrollbarYEl && thumbYEl) {\n const maxThumbOffsetY = scrollbarYEl.offsetHeight - clampedNextHeight - scrollbarYOffset - thumbYOffset;\n const scrollRangeY = scrollableContentHeight - viewportHeight;\n const scrollRatioY = scrollRangeY === 0 ? 0 : scrollTop / scrollRangeY;\n // In Safari, don't allow it to go negative or too far as `scrollTop` considers the rubber band effect.\n const thumbOffsetY = Math.min(maxThumbOffsetY, Math.max(0, scrollRatioY * maxThumbOffsetY));\n thumbYEl.style.transform = `translate3d(0,${thumbOffsetY}px,0)`;\n }\n\n // Handle X (horizontal) scroll\n if (scrollbarXEl && thumbXEl) {\n const maxThumbOffsetX = scrollbarXEl.offsetWidth - clampedNextWidth - scrollbarXOffset - thumbXOffset;\n const scrollRangeX = scrollableContentWidth - viewportWidth;\n const scrollRatioX = scrollRangeX === 0 ? 0 : scrollLeft / scrollRangeX;\n const thumbOffsetX =\n direction === 'rtl'\n ? clamp(scrollRatioX * maxThumbOffsetX, -maxThumbOffsetX, 0)\n : clamp(scrollRatioX * maxThumbOffsetX, 0, maxThumbOffsetX);\n thumbXEl.style.transform = `translate3d(${thumbOffsetX}px,0,0)`;\n }\n\n viewportEl.style.setProperty('--scroll-area-overflow-x-start', `${scrollLeftFromStart}px`);\n viewportEl.style.setProperty('--scroll-area-overflow-x-end', `${scrollLeftFromEnd}px`);\n viewportEl.style.setProperty('--scroll-area-overflow-y-start', `${scrollTopFromStart}px`);\n viewportEl.style.setProperty('--scroll-area-overflow-y-end', `${scrollTopFromEnd}px`);\n\n if (cornerEl) {\n if (scrollbarXHidden || scrollbarYHidden) {\n this.rootContext.setCornerSize({ width: 0, height: 0 });\n } else {\n this.rootContext.setCornerSize({ width: nextCornerWidth, height: nextCornerHeight });\n }\n }\n\n this.rootContext.setHiddenState(nextHiddenState);\n\n this.rootContext.setOverflowEdges({\n xStart: !scrollbarXHidden && scrollLeftFromStart > threshold.xStart,\n xEnd: !scrollbarXHidden && scrollLeftFromEnd > threshold.xEnd,\n yStart: !scrollbarYHidden && scrollTopFromStart > threshold.yStart,\n yEnd: !scrollbarYHidden && scrollTopFromEnd > threshold.yEnd\n });\n }\n\n onScroll(): void {\n const viewportEl = this.rootContext.viewportRef.current;\n if (!viewportEl) {\n return;\n }\n\n this.computeThumbPosition();\n\n if (!this.programmaticScroll) {\n this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });\n }\n\n // Debounce restoring the programmatic flag so momentum scrolling (no further\n // user-interaction events) is still treated as user-driven.\n clearTimeout(this.scrollEndTimer);\n this.scrollEndTimer = setTimeout(() => {\n this.programmaticScroll = true;\n }, SCROLL_END_TIMEOUT);\n }\n\n onUserInteraction(): void {\n this.programmaticScroll = false;\n }\n\n private observeViewport(): void {\n const viewport = this.element;\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n let hasInitialized = false;\n const resizeObserver = new ResizeObserver(() => {\n if (!hasInitialized) {\n hasInitialized = true;\n const m = this.lastMeasuredMetrics;\n if (\n m[0] === viewport.clientHeight &&\n m[1] === viewport.scrollHeight &&\n m[2] === viewport.clientWidth &&\n m[3] === viewport.scrollWidth\n ) {\n return;\n }\n }\n this.computeThumbPosition();\n });\n resizeObserver.observe(viewport);\n\n // Wait for subtree animations to finish, then recompute geometry that may have\n // been affected by transform-based animations.\n this.animationsTimer = setTimeout(() => {\n const animations = viewport.getAnimations({ subtree: true });\n if (animations.length === 0) {\n return;\n }\n Promise.allSettled(animations.map((animation) => animation.finished))\n .then(() => this.computeThumbPosition())\n .catch(() => {});\n }, 0);\n\n this.destroyRef.onDestroy(() => resizeObserver.disconnect());\n }\n}\n\nfunction getHiddenState(viewport: HTMLElement): HiddenState {\n const y = viewport.clientHeight >= viewport.scrollHeight;\n const x = viewport.clientWidth >= viewport.scrollWidth;\n return { y, x, corner: y || x };\n}\n","import { afterNextRender, DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\nimport { injectScrollAreaViewportContext } from './scroll-area-viewport';\n\n/**\n * A container for the content of the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaContent]',\n exportAs: 'rdxScrollAreaContent',\n host: {\n role: 'presentation',\n '[style.min-width]': '\"fit-content\"',\n '[attr.data-scrolling]': '(rootContext.scrollingX() || rootContext.scrollingY()) ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!rootContext.hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!rootContext.hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'rootContext.overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'rootContext.overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'rootContext.overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? \"\" : undefined'\n }\n})\nexport class RdxScrollAreaContent {\n protected readonly rootContext = injectScrollAreaRootContext();\n private readonly viewportContext = injectScrollAreaViewportContext();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n // Whether the content mounted after the viewport's first measurement; if so the\n // initial ResizeObserver fire is what brings the overflow state in sync.\n const computeOnInitialResize = this.rootContext.hasMeasuredScrollbar();\n\n afterNextRender(() => {\n if (typeof ResizeObserver === 'undefined') {\n return;\n }\n\n let hasInitialized = false;\n const resizeObserver = new ResizeObserver(() => {\n if (!hasInitialized) {\n hasInitialized = true;\n // ResizeObserver fires once upon observing. Skip that initial call to avoid\n // double-calculating the thumb position on mount, unless the content mounted\n // after the viewport's initial measurement.\n if (!computeOnInitialResize) {\n return;\n }\n }\n this.viewportContext.computeThumbPosition();\n });\n resizeObserver.observe(this.element);\n this.destroyRef.onDestroy(() => resizeObserver.disconnect());\n });\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject } from '@angular/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\n\n/**\n * A small rectangular area that appears at the intersection of horizontal and vertical scrollbars.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaCorner]',\n exportAs: 'rdxScrollAreaCorner',\n host: {\n '[style.position]': '\"absolute\"',\n '[style.bottom]': '\"0\"',\n '[style.inset-inline-end]': '\"0\"',\n '[style.width]': 'rootContext.cornerSize().width + \"px\"',\n '[style.height]': 'rootContext.cornerSize().height + \"px\"',\n '[style.display]': 'rootContext.hiddenState().corner ? \"none\" : null'\n }\n})\nexport class RdxScrollAreaCorner {\n protected readonly rootContext = injectScrollAreaRootContext();\n\n constructor() {\n const element: HTMLElement = inject(ElementRef).nativeElement;\n const destroyRef = inject(DestroyRef);\n this.rootContext.cornerRef.current = element;\n destroyRef.onDestroy(() => {\n if (this.rootContext.cornerRef.current === element) {\n this.rootContext.cornerRef.current = null;\n }\n });\n }\n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { BooleanInput, createContext } from '@radix-ng/primitives/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\nimport { getOffset } from './utils';\n\nexport type ScrollbarOrientation = 'vertical' | 'horizontal';\n\nexport interface ScrollAreaScrollbarContext {\n orientation: () => ScrollbarOrientation;\n}\n\nexport const [injectScrollAreaScrollbarContext, provideScrollAreaScrollbarContext] =\n createContext<ScrollAreaScrollbarContext>('ScrollAreaScrollbarContext', 'components/scroll-area');\n\nconst scrollbarContext = (): ScrollAreaScrollbarContext => {\n const scrollbar = inject(RdxScrollAreaScrollbar);\n return { orientation: () => scrollbar.orientation() };\n};\n\n/**\n * A vertical or horizontal scrollbar for the scroll area.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaScrollbar]',\n exportAs: 'rdxScrollAreaScrollbar',\n providers: [provideScrollAreaScrollbarContext(scrollbarContext)],\n host: {\n '[attr.data-id]': 'rootContext.rootId + \"-scrollbar\"',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-hovering]': 'rootContext.hovering() ? \"\" : undefined',\n '[attr.data-scrolling]': 'scrolling() ? \"\" : undefined',\n '[attr.data-has-overflow-x]': '!rootContext.hiddenState().x ? \"\" : undefined',\n '[attr.data-has-overflow-y]': '!rootContext.hiddenState().y ? \"\" : undefined',\n '[attr.data-overflow-x-start]': 'rootContext.overflowEdges().xStart ? \"\" : undefined',\n '[attr.data-overflow-x-end]': 'rootContext.overflowEdges().xEnd ? \"\" : undefined',\n '[attr.data-overflow-y-start]': 'rootContext.overflowEdges().yStart ? \"\" : undefined',\n '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? \"\" : undefined',\n '[style.position]': '\"absolute\"',\n '[style.touch-action]': '\"none\"',\n '[style.user-select]': '\"none\"',\n '[style.display]': 'shouldRender() ? null : \"none\"',\n '[style.visibility]': 'hideTrackUntilMeasured() ? \"hidden\" : null',\n '[style.top]': 'orientation() === \"vertical\" ? \"0\" : null',\n '[style.bottom]': 'orientation() === \"vertical\" ? \"var(--scroll-area-corner-height)\" : \"0\"',\n '[style.inset-inline-start]': 'orientation() === \"horizontal\" ? \"0\" : null',\n '[style.inset-inline-end]': 'orientation() === \"vertical\" ? \"0\" : \"var(--scroll-area-corner-width)\"',\n '[style.--scroll-area-thumb-height]':\n 'orientation() === \"vertical\" ? rootContext.thumbSize().height + \"px\" : null',\n '[style.--scroll-area-thumb-width]':\n 'orientation() === \"horizontal\" ? rootContext.thumbSize().width + \"px\" : null',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointerup)': 'rootContext.handlePointerUp($event)',\n '(pointercancel)': 'rootContext.handlePointerUp($event)',\n '(wheel)': 'onWheel($event)'\n }\n})\nexport class RdxScrollAreaScrollbar {\n protected readonly rootContext = injectScrollAreaRootContext();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n\n /** Whether the scrollbar controls vertical or horizontal scroll. */\n readonly orientation = input<ScrollbarOrientation>('vertical');\n\n /** Whether to keep the element rendered when the viewport isn't scrollable. */\n readonly keepMounted = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\n\n protected readonly scrolling = computed(() =>\n this.orientation() === 'horizontal' ? this.rootContext.scrollingX() : this.rootContext.scrollingY()\n );\n\n private readonly isHidden = computed(() =>\n this.orientation() === 'vertical' ? this.rootContext.hiddenState().y : this.rootContext.hiddenState().x\n );\n\n protected readonly shouldRender = computed(() => this.keepMounted() || !this.isHidden());\n\n protected readonly hideTrackUntilMeasured = computed(\n () => !this.rootContext.hasMeasuredScrollbar() && !this.keepMounted()\n );\n\n constructor() {\n // Register this element as the vertical or horizontal scrollbar ref.\n // Runs as an effect so the bound `orientation` input is available.\n effect((onCleanup) => {\n const ref =\n this.orientation() === 'vertical' ? this.rootContext.scrollbarYRef : this.rootContext.scrollbarXRef;\n ref.current = this.element;\n onCleanup(() => {\n if (ref.current === this.element) {\n ref.current = null;\n }\n });\n });\n }\n\n onWheel(event: WheelEvent): void {\n const viewportEl = this.rootContext.viewportRef.current;\n if (!viewportEl || event.ctrlKey) {\n return;\n }\n\n const horizontal = this.orientation() === 'horizontal';\n const delta = horizontal ? event.deltaX : event.deltaY;\n if (delta === 0) {\n return;\n }\n\n const direction = this.rootContext.direction();\n const maxScroll = horizontal\n ? viewportEl.scrollWidth - viewportEl.clientWidth\n : viewportEl.scrollHeight - viewportEl.clientHeight;\n // RTL horizontal scrolling uses a negative `scrollLeft` range, from 0 to `-maxScroll`.\n const minScroll = horizontal && direction === 'rtl' ? -maxScroll : 0;\n const maxScrollValue = horizontal && direction === 'rtl' ? 0 : maxScroll;\n const scrollValue = horizontal ? viewportEl.scrollLeft : viewportEl.scrollTop;\n\n // At an edge (or with no overflow), let the wheel chain to the parent/page.\n if ((scrollValue <= minScroll && delta < 0) || (scrollValue >= maxScrollValue && delta > 0)) {\n return;\n }\n\n event.preventDefault();\n\n const next = Math.min(maxScrollValue, Math.max(minScroll, scrollValue + delta));\n if (horizontal) {\n viewportEl.scrollLeft = next;\n } else {\n viewportEl.scrollTop = next;\n }\n\n this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });\n }\n\n onPointerDown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n\n const orientation = this.orientation();\n const thumb =\n orientation === 'vertical' ? this.rootContext.thumbYRef.current : this.rootContext.thumbXRef.current;\n\n // Ignore clicks on the thumb itself.\n if (thumb && eventTargetsElement(event, thumb)) {\n return;\n }\n\n const viewportEl = this.rootContext.viewportRef.current;\n if (!viewportEl) {\n return;\n }\n\n const direction = this.rootContext.direction();\n\n if (\n orientation === 'vertical' &&\n this.rootContext.thumbYRef.current &&\n this.rootContext.scrollbarYRef.current\n ) {\n const thumbEl = this.rootContext.thumbYRef.current;\n const scrollbarEl = this.rootContext.scrollbarYRef.current;\n const thumbYOffset = getOffset(thumbEl, 'margin', 'y');\n const scrollbarYOffset = getOffset(scrollbarEl, 'padding', 'y');\n const thumbHeight = thumbEl.offsetHeight;\n const trackRectY = scrollbarEl.getBoundingClientRect();\n const clickY = event.clientY - trackRectY.top - thumbHeight / 2 - scrollbarYOffset + thumbYOffset / 2;\n\n const maxThumbOffsetY = scrollbarEl.offsetHeight - thumbHeight - scrollbarYOffset - thumbYOffset;\n const scrollRatioY = clickY / maxThumbOffsetY;\n viewportEl.scrollTop = scrollRatioY * (viewportEl.scrollHeight - viewportEl.clientHeight);\n }\n\n if (\n orientation === 'horizontal' &&\n this.rootContext.thumbXRef.current &&\n this.rootContext.scrollbarXRef.current\n ) {\n const thumbEl = this.rootContext.thumbXRef.current;\n const scrollbarEl = this.rootContext.scrollbarXRef.current;\n const thumbXOffset = getOffset(thumbEl, 'margin', 'x');\n const scrollbarXOffset = getOffset(scrollbarEl, 'padding', 'x');\n const thumbWidth = thumbEl.offsetWidth;\n const trackRectX = scrollbarEl.getBoundingClientRect();\n const clickX = event.clientX - trackRectX.left - thumbWidth / 2 - scrollbarXOffset + thumbXOffset / 2;\n\n const maxThumbOffsetX = scrollbarEl.offsetWidth - thumbWidth - scrollbarXOffset - thumbXOffset;\n const scrollRatioX = clickX / maxThumbOffsetX;\n const scrollRange = viewportEl.scrollWidth - viewportEl.clientWidth;\n\n let newScrollLeft: number;\n if (direction === 'rtl') {\n newScrollLeft = (1 - scrollRatioX) * scrollRange;\n // Adjust for browsers that use negative scrollLeft in RTL.\n if (viewportEl.scrollLeft <= 0) {\n newScrollLeft = -newScrollLeft;\n }\n } else {\n newScrollLeft = scrollRatioX * scrollRange;\n }\n viewportEl.scrollLeft = newScrollLeft;\n }\n\n this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });\n this.rootContext.handlePointerDown(event);\n }\n}\n\nfunction eventTargetsElement(event: Event, element: Element): boolean {\n if (event.composedPath().includes(element)) {\n return true;\n }\n\n const target = event.target;\n return isNode(target) && element.contains(target);\n}\n\nfunction isNode(value: EventTarget | null): value is Node {\n return !!value && 'nodeType' in value;\n}\n","import { Directive, effect, ElementRef, inject } from '@angular/core';\nimport { injectScrollAreaRootContext } from './scroll-area-root';\nimport { injectScrollAreaScrollbarContext } from './scroll-area-scrollbar';\n\n/**\n * The draggable part of the scrollbar that indicates the current scroll position.\n * Renders a `<div>` element.\n *\n * @group Components\n */\n@Directive({\n selector: '[rdxScrollAreaThumb]',\n exportAs: 'rdxScrollAreaThumb',\n host: {\n '[attr.data-orientation]': 'scrollbarContext.orientation()',\n '[style.visibility]': 'rootContext.hasMeasuredScrollbar() ? null : \"hidden\"',\n '[style.height]': 'scrollbarContext.orientation() === \"vertical\" ? \"var(--scroll-area-thumb-height)\" : null',\n '[style.width]': 'scrollbarContext.orientation() === \"horizontal\" ? \"var(--scroll-area-thumb-width)\" : null',\n '(pointerdown)': 'rootContext.handlePointerDown($event)',\n '(pointermove)': 'rootContext.handlePointerMove($event)',\n '(pointerup)': 'endDrag($event)',\n '(pointercancel)': 'endDrag($event)'\n }\n})\nexport class RdxScrollAreaThumb {\n protected readonly rootContext = injectScrollAreaRootContext();\n protected readonly scrollbarContext = injectScrollAreaScrollbarContext();\n private readonly element: HTMLElement = inject(ElementRef).nativeElement;\n\n constructor() {\n effect((onCleanup) => {\n const ref =\n this.scrollbarContext.orientation() === 'vertical'\n ? this.rootContext.thumbYRef\n : this.rootContext.thumbXRef;\n ref.current = this.element;\n onCleanup(() => {\n if (ref.current === this.element) {\n ref.current = null;\n }\n });\n });\n }\n\n endDrag(event: PointerEvent): void {\n if (this.scrollbarContext.orientation() === 'vertical') {\n this.rootContext.setScrollingY(false);\n } else {\n this.rootContext.setScrollingX(false);\n }\n this.rootContext.handlePointerUp(event);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxScrollAreaContent } from './src/scroll-area-content';\nimport { RdxScrollAreaCorner } from './src/scroll-area-corner';\nimport { RdxScrollAreaRoot } from './src/scroll-area-root';\nimport { RdxScrollAreaScrollbar } from './src/scroll-area-scrollbar';\nimport { RdxScrollAreaThumb } from './src/scroll-area-thumb';\nimport { RdxScrollAreaViewport } from './src/scroll-area-viewport';\n\nexport * from './src/scroll-area-content';\nexport * from './src/scroll-area-corner';\nexport * from './src/scroll-area-root';\nexport * from './src/scroll-area-scrollbar';\nexport * from './src/scroll-area-thumb';\nexport * from './src/scroll-area-viewport';\n\nconst _imports = [\n RdxScrollAreaRoot,\n RdxScrollAreaViewport,\n RdxScrollAreaContent,\n RdxScrollAreaScrollbar,\n RdxScrollAreaThumb,\n RdxScrollAreaCorner\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxScrollAreaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1040,6 +1040,9 @@ class RdxSelectTrigger {
1040
1040
  // We force `focus` in this case. Note: this doesn't create any other side-effect
1041
1041
  // because we are preventing default in `onPointerDown` so effectively
1042
1042
  // this only runs for a label 'click'
1043
+ if (this.rootContext.open()) {
1044
+ return;
1045
+ }
1043
1046
  event?.currentTarget?.focus();
1044
1047
  }
1045
1048
  onPointerDown(event) {