@raqm/ui 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +87 -126
  3. package/fesm2022/raqm-ui-badge.mjs +3 -1
  4. package/fesm2022/raqm-ui-badge.mjs.map +1 -1
  5. package/fesm2022/raqm-ui-calendar.mjs +79 -12
  6. package/fesm2022/raqm-ui-calendar.mjs.map +1 -1
  7. package/fesm2022/raqm-ui-combobox.mjs +47 -23
  8. package/fesm2022/raqm-ui-combobox.mjs.map +1 -1
  9. package/fesm2022/raqm-ui-command.mjs +60 -12
  10. package/fesm2022/raqm-ui-command.mjs.map +1 -1
  11. package/fesm2022/raqm-ui-dialog.mjs +1 -3
  12. package/fesm2022/raqm-ui-dialog.mjs.map +1 -1
  13. package/fesm2022/raqm-ui-dropdown-menu.mjs.map +1 -1
  14. package/fesm2022/raqm-ui-hover-card.mjs.map +1 -1
  15. package/fesm2022/raqm-ui-icon.mjs +160 -0
  16. package/fesm2022/raqm-ui-icon.mjs.map +1 -0
  17. package/fesm2022/raqm-ui-input-otp.mjs +7 -4
  18. package/fesm2022/raqm-ui-input-otp.mjs.map +1 -1
  19. package/fesm2022/raqm-ui-menubar.mjs.map +1 -1
  20. package/fesm2022/raqm-ui-overlay-internal.mjs +15 -5
  21. package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -1
  22. package/fesm2022/raqm-ui-popover.mjs +51 -19
  23. package/fesm2022/raqm-ui-popover.mjs.map +1 -1
  24. package/fesm2022/raqm-ui-resizable.mjs +14 -4
  25. package/fesm2022/raqm-ui-resizable.mjs.map +1 -1
  26. package/fesm2022/raqm-ui-scroll-area.mjs +85 -29
  27. package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -1
  28. package/fesm2022/raqm-ui-select.mjs +46 -19
  29. package/fesm2022/raqm-ui-select.mjs.map +1 -1
  30. package/fesm2022/raqm-ui-sidebar.mjs +13 -3
  31. package/fesm2022/raqm-ui-sidebar.mjs.map +1 -1
  32. package/fesm2022/raqm-ui-slider.mjs +59 -12
  33. package/fesm2022/raqm-ui-slider.mjs.map +1 -1
  34. package/fesm2022/raqm-ui-toast.mjs +60 -20
  35. package/fesm2022/raqm-ui-toast.mjs.map +1 -1
  36. package/fesm2022/raqm-ui-tooltip.mjs +28 -3
  37. package/fesm2022/raqm-ui-tooltip.mjs.map +1 -1
  38. package/fesm2022/raqm-ui.mjs +1 -0
  39. package/package.json +52 -18
  40. package/styles/accordion.css +1 -0
  41. package/styles/alert-dialog.css +1 -0
  42. package/styles/alert.css +1 -0
  43. package/styles/attachment.css +1 -0
  44. package/styles/avatar.css +1 -0
  45. package/styles/badge.css +1 -0
  46. package/styles/base.css +1 -0
  47. package/styles/button-group.css +1 -0
  48. package/styles/button.css +1 -0
  49. package/styles/checkbox.css +1 -0
  50. package/styles/combobox.css +1 -0
  51. package/styles/command.css +1 -0
  52. package/styles/common.css +17 -0
  53. package/styles/context-menu.css +1 -0
  54. package/styles/dialog.css +1 -0
  55. package/styles/drawer.css +1 -0
  56. package/styles/dropdown-menu.css +1 -0
  57. package/styles/empty.css +1 -0
  58. package/styles/field-parts.css +1 -0
  59. package/styles/field-relationships.css +1 -0
  60. package/styles/input-group-button.css +1 -0
  61. package/styles/input-group-relationships.css +1 -0
  62. package/styles/input-otp.css +1 -0
  63. package/styles/input.css +1 -0
  64. package/styles/item.css +1 -0
  65. package/styles/kbd.css +1 -0
  66. package/styles/menubar.css +1 -0
  67. package/styles/native-select.css +1 -0
  68. package/styles/navigation-menu.css +1 -0
  69. package/styles/overlay.css +1 -0
  70. package/styles/pagination.css +1 -0
  71. package/styles/popover.css +1 -0
  72. package/styles/questionnaire.css +1 -0
  73. package/styles/radio-group.css +1 -0
  74. package/styles/resizable.css +1 -0
  75. package/styles/sheet.css +1 -0
  76. package/styles/sidebar.css +1 -0
  77. package/styles/spinner.css +1 -0
  78. package/styles/switch.css +1 -0
  79. package/styles/table.css +1 -0
  80. package/styles/tabs.css +1 -0
  81. package/styles/textarea.css +1 -0
  82. package/styles/theme.css +50 -4324
  83. package/styles/toggle-group.css +1 -0
  84. package/styles/toggle.css +1 -0
  85. package/styles/tooltip.css +1 -0
  86. package/types/raqm-ui-calendar.d.ts +1 -0
  87. package/types/raqm-ui-combobox.d.ts +8 -4
  88. package/types/raqm-ui-command.d.ts +4 -0
  89. package/types/raqm-ui-dialog.d.ts +7 -1
  90. package/types/raqm-ui-icon.d.ts +65 -0
  91. package/types/raqm-ui-input-otp.d.ts +1 -0
  92. package/types/raqm-ui-resizable.d.ts +4 -0
  93. package/types/raqm-ui-rolldown-runtime-C25Le4-w.d.ts +1 -0
  94. package/types/raqm-ui-scroll-area.d.ts +11 -0
  95. package/types/raqm-ui-slider.d.ts +1 -1
  96. package/types/raqm-ui-toast.d.ts +6 -0
  97. package/types/raqm-ui.d.ts +1 -0
  98. package/fesm2022/raqm-ui-carousel.mjs +0 -410
  99. package/fesm2022/raqm-ui-carousel.mjs.map +0 -1
  100. package/types/raqm-ui-carousel.d.ts +0 -81
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-resizable.mjs","names":[],"sources":["../../../projects/ui/resizable/resizable.ts","../../../projects/ui/resizable/public-api.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { _IdGenerator } from '@angular/cdk/a11y';\r\n\r\n/** Raqm resizable panel group — percentage-based panels with a draggable divider; the app supplies every accessible name. */\r\n@Component({\r\n selector: 'raqm-resizable-panel-group',\r\n template: '<ng-content />',\r\n styleUrl: './resizable.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-resizable-panel-group',\r\n '[attr.data-raqm-vertical]': 'vertical() ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmResizablePanelGroupComponent {\r\n /** A horizontal row by default; a bare `vertical` attribute makes a column. */\r\n readonly vertical = input(false, { transform: booleanAttribute });\r\n readonly defaultSize = input(50);\r\n readonly minSize = input(10);\r\n readonly maxSize = input(90);\r\n readonly element = inject(ElementRef<HTMLElement>);\r\n readonly panels = contentChildren(RaqmResizablePanelDirective);\r\n readonly handles = contentChildren(RaqmResizableHandleDirective);\r\n private readonly changed = signal<ReadonlyMap<RaqmResizablePanelDirective, number>>(new Map());\r\n readonly sizes = computed(() => {\r\n const panels = this.panels();\r\n const changes = this.changed();\r\n if (!panels.length) return [];\r\n const explicit = panels.map((p) => p.defaultSize());\r\n const missing = explicit.filter((x) => x === undefined).length;\r\n const remaining = Math.max(0, 100 - explicit.reduce<number>((a, b) => a + (b ?? 0), 0));\r\n let initial = explicit.map((v) => v ?? (missing ? remaining / missing : 0));\r\n if (panels.every((p) => changes.has(p))) initial = panels.map((p) => changes.get(p)!);\r\n else if (panels.length === 2 && explicit.every((v) => v === undefined)) {\r\n initial = [this.defaultSize(), 100 - this.defaultSize()];\r\n }\r\n const mins = panels.map((p, i) =>\r\n Math.max(0, p.minSize() ?? (panels.length === 2 && i === 0 ? this.minSize() : 0)),\r\n );\r\n const maxs = panels.map((p, i) =>\r\n Math.min(100, p.maxSize() ?? (panels.length === 2 && i === 0 ? this.maxSize() : 100)),\r\n );\r\n const values = initial.map((v, i) =>\r\n Math.min(maxs[i], Math.max(mins[i], Number.isFinite(v) ? v : 0)),\r\n );\r\n let remainingSize = 100 - values.reduce((a, b) => a + b, 0);\r\n for (let i = 0; i < values.length && Math.abs(remainingSize) > 0.000001; i++) {\r\n const change =\r\n remainingSize > 0\r\n ? Math.min(remainingSize, maxs[i] - values[i])\r\n : Math.max(remainingSize, mins[i] - values[i]);\r\n values[i] += change;\r\n remainingSize -= change;\r\n }\r\n return values;\r\n });\r\n panelIndex(panel: RaqmResizablePanelDirective): number {\r\n return this.panels().indexOf(panel);\r\n }\r\n handleIndex(handle: RaqmResizableHandleDirective): number {\r\n return this.handles().indexOf(handle);\r\n }\r\n bounds(index: number): { min: number; max: number } {\r\n const panels = this.panels(),\r\n sizes = this.sizes(),\r\n left = panels[index],\r\n right = panels[index + 1];\r\n if (!left || !right) return { min: 0, max: 0 };\r\n const total = sizes[index] + sizes[index + 1];\r\n const legacy = panels.length === 2;\r\n const leftMin = left.minSize() ?? (legacy ? this.minSize() : 0);\r\n const leftMax = left.maxSize() ?? (legacy ? this.maxSize() : 100);\r\n const rightMin = right.minSize() ?? 0;\r\n const rightMax = right.maxSize() ?? 100;\r\n return {\r\n min: Math.max(0, leftMin, total - rightMax),\r\n max: Math.min(total, leftMax, total - rightMin),\r\n };\r\n }\r\n resize(index: number, value: number): void {\r\n const panels = this.panels(),\r\n sizes = this.sizes(),\r\n bounds = this.bounds(index);\r\n if (!panels[index] || !panels[index + 1] || bounds.min > bounds.max || !Number.isFinite(value))\r\n return;\r\n const next = Math.min(bounds.max, Math.max(bounds.min, value));\r\n const total = sizes[index] + sizes[index + 1];\r\n const values = new Map(panels.map((panel, i) => [panel, sizes[i]]));\r\n values.set(panels[index], next);\r\n values.set(panels[index + 1], total - next);\r\n this.changed.set(values);\r\n }\r\n}\r\n\r\n/** Raqm resizable panel — one percentage-sized region; owns its id (the handle's `aria-controls` target) and flex-basis. */\r\n@Directive({\r\n selector: '[raqm-resizable-panel]',\r\n host: {\r\n class: 'raqm-resizable-panel',\r\n '[style.flex-basis.%]': 'basis()',\r\n '[style.flex-grow]': '0',\r\n '[id]': 'id',\r\n },\r\n})\r\nexport class RaqmResizablePanelDirective {\r\n private readonly group = inject(RaqmResizablePanelGroupComponent);\r\n readonly id = inject(_IdGenerator).getId('raqm-resizable-panel-');\r\n readonly defaultSize = input<number | undefined>(undefined);\r\n readonly minSize = input<number | undefined>(undefined);\r\n readonly maxSize = input<number | undefined>(undefined);\r\n protected readonly basis = computed(() => this.group.sizes()[this.group.panelIndex(this)] ?? 0);\r\n}\r\n\r\n/** Raqm resizable handle — draggable `role=\"separator\"`, focusable and keyboard-operable; accessible name is app-authored. */\r\n@Directive({\r\n selector: '[raqm-resizable-handle]',\r\n host: {\r\n class: 'raqm-resizable-handle',\r\n role: 'separator',\r\n tabindex: '0',\r\n '[attr.data-raqm-with-handle]': 'withHandle() ? \"\" : null',\r\n '[attr.aria-orientation]': 'group.vertical() ? \"horizontal\" : \"vertical\"',\r\n '[attr.aria-valuenow]': 'value()',\r\n '[attr.aria-valuemin]': 'bounds().min',\r\n '[attr.aria-valuemax]': 'bounds().max',\r\n '[attr.aria-controls]': 'group.panels()[index()]?.id ?? null',\r\n '(keydown)': 'onKey($event)',\r\n '(pointerdown)': 'onPointer($event)',\r\n },\r\n})\r\nexport class RaqmResizableHandleDirective {\r\n readonly withHandle = input(false, { transform: booleanAttribute });\r\n protected readonly group = inject(RaqmResizablePanelGroupComponent);\r\n protected readonly index = computed(() => this.group.handleIndex(this));\r\n protected readonly value = computed(() => this.group.sizes()[this.index()] ?? 0);\r\n protected readonly bounds = computed(() => this.group.bounds(this.index()));\r\n private readonly element = inject(ElementRef<HTMLElement>);\r\n private readonly destroy = inject(DestroyRef);\r\n private cleanup: (() => void) | undefined;\r\n constructor() {\r\n this.destroy.onDestroy(() => this.cleanup?.());\r\n }\r\n protected onKey(event: KeyboardEvent): void {\r\n const horizontal = !this.group.vertical();\r\n const rtl = getComputedStyle(this.group.element.nativeElement).direction === 'rtl';\r\n let delta = 0;\r\n if (horizontal && event.key === 'ArrowRight') delta = rtl ? -1 : 1;\r\n if (horizontal && event.key === 'ArrowLeft') delta = rtl ? 1 : -1;\r\n if (!horizontal && event.key === 'ArrowDown') delta = 1;\r\n if (!horizontal && event.key === 'ArrowUp') delta = -1;\r\n if (event.key === 'Home' || event.key === 'End') {\r\n event.preventDefault();\r\n this.group.resize(this.index(), event.key === 'Home' ? this.bounds().min : this.bounds().max);\r\n } else if (delta) {\r\n event.preventDefault();\r\n this.group.resize(this.index(), this.value() + delta * (event.shiftKey ? 10 : 1));\r\n }\r\n }\r\n protected onPointer(event: PointerEvent): void {\r\n if (event.button !== 0) return;\r\n event.preventDefault();\r\n this.cleanup?.();\r\n const handle = this.element.nativeElement;\r\n const horizontal = !this.group.vertical();\r\n const rect = this.group.element.nativeElement.getBoundingClientRect();\r\n const rtl =\r\n horizontal && getComputedStyle(this.group.element.nativeElement).direction === 'rtl';\r\n const start = horizontal ? event.clientX : event.clientY;\r\n const initialSize = this.value();\r\n const move = (e: PointerEvent) => {\r\n const distance = (horizontal ? e.clientX : e.clientY) - start;\r\n const length = horizontal ? rect.width : rect.height;\r\n if (length)\r\n this.group.resize(\r\n this.index(),\r\n initialSize + ((rtl ? -distance : distance) / length) * 100,\r\n );\r\n };\r\n const end = () => this.cleanup?.();\r\n this.cleanup = () => {\r\n handle.removeEventListener('pointermove', move);\r\n handle.removeEventListener('pointerup', end);\r\n handle.removeEventListener('pointercancel', end);\r\n handle.removeEventListener('lostpointercapture', end);\r\n if (handle.hasPointerCapture(event.pointerId)) handle.releasePointerCapture(event.pointerId);\r\n this.cleanup = undefined;\r\n };\r\n handle.setPointerCapture(event.pointerId);\r\n handle.addEventListener('pointermove', move);\r\n handle.addEventListener('pointerup', end);\r\n handle.addEventListener('pointercancel', end);\r\n handle.addEventListener('lostpointercapture', end);\r\n }\r\n}\r\n","import {\r\n RaqmResizablePanelGroupComponent,\r\n RaqmResizablePanelDirective,\r\n RaqmResizableHandleDirective,\r\n} from './resizable';\r\n\r\nexport {\r\n RaqmResizablePanelGroupComponent,\r\n RaqmResizablePanelDirective,\r\n RaqmResizableHandleDirective,\r\n};\r\n\r\nexport const RaqmResizable = [\r\n RaqmResizablePanelGroupComponent,\r\n RaqmResizablePanelDirective,\r\n RaqmResizableHandleDirective,\r\n] as const;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-resizable.mjs","names":[],"sources":["../../../projects/ui/resizable/resizable.ts","../../../projects/ui/resizable/public-api.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { _IdGenerator } from '@angular/cdk/a11y';\r\n\r\n/** Raqm resizable panel group — percentage-based panels with a draggable divider; the app supplies every accessible name. */\r\n@Component({\r\n selector: 'raqm-resizable-panel-group',\r\n template: '<ng-content />',\r\n styleUrl: './resizable.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-resizable-panel-group',\r\n '[attr.data-raqm-vertical]': 'vertical() ? \"\" : null',\r\n },\r\n})\r\nexport class RaqmResizablePanelGroupComponent {\r\n /** A horizontal row by default; a bare `vertical` attribute makes a column. */\r\n readonly vertical = input(false, { transform: booleanAttribute });\r\n readonly defaultSize = input(50);\r\n readonly minSize = input(10);\r\n readonly maxSize = input(90);\r\n readonly element = inject(ElementRef<HTMLElement>);\r\n readonly panels = contentChildren(RaqmResizablePanelDirective);\r\n readonly handles = contentChildren(RaqmResizableHandleDirective);\r\n // Rebuilt only when the projected membership changes, not on every size update.\r\n private readonly panelIndices = computed(() => this.indexByPanel());\r\n private readonly handleIndices = computed(() => this.indexByHandle());\r\n private readonly changed = signal<ReadonlyMap<RaqmResizablePanelDirective, number>>(new Map());\r\n readonly sizes = computed(() => {\r\n const panels = this.panels();\r\n const changes = this.changed();\r\n if (!panels.length) return [];\r\n const explicit = panels.map((p) => p.defaultSize());\r\n const missing = explicit.filter((x) => x === undefined).length;\r\n const remaining = Math.max(0, 100 - explicit.reduce<number>((a, b) => a + (b ?? 0), 0));\r\n let initial = explicit.map((v) => v ?? (missing ? remaining / missing : 0));\r\n if (panels.every((p) => changes.has(p))) initial = panels.map((p) => changes.get(p)!);\r\n else if (panels.length === 2 && explicit.every((v) => v === undefined)) {\r\n initial = [this.defaultSize(), 100 - this.defaultSize()];\r\n }\r\n const mins = panels.map((p, i) =>\r\n Math.max(0, p.minSize() ?? (panels.length === 2 && i === 0 ? this.minSize() : 0)),\r\n );\r\n const maxs = panels.map((p, i) =>\r\n Math.min(100, p.maxSize() ?? (panels.length === 2 && i === 0 ? this.maxSize() : 100)),\r\n );\r\n const values = initial.map((v, i) =>\r\n Math.min(maxs[i], Math.max(mins[i], Number.isFinite(v) ? v : 0)),\r\n );\r\n let remainingSize = 100 - values.reduce((a, b) => a + b, 0);\r\n for (let i = 0; i < values.length && Math.abs(remainingSize) > 0.000001; i++) {\r\n const change =\r\n remainingSize > 0\r\n ? Math.min(remainingSize, maxs[i] - values[i])\r\n : Math.max(remainingSize, mins[i] - values[i]);\r\n values[i] += change;\r\n remainingSize -= change;\r\n }\r\n return values;\r\n });\r\n private indexByPanel(): ReadonlyMap<RaqmResizablePanelDirective, number> {\r\n return new Map(this.panels().map((panel, index) => [panel, index]));\r\n }\r\n private indexByHandle(): ReadonlyMap<RaqmResizableHandleDirective, number> {\r\n return new Map(this.handles().map((handle, index) => [handle, index]));\r\n }\r\n panelIndex(panel: RaqmResizablePanelDirective): number {\r\n return this.panelIndices().get(panel) ?? -1;\r\n }\r\n handleIndex(handle: RaqmResizableHandleDirective): number {\r\n return this.handleIndices().get(handle) ?? -1;\r\n }\r\n bounds(index: number): { min: number; max: number } {\r\n const panels = this.panels(),\r\n sizes = this.sizes(),\r\n left = panels[index],\r\n right = panels[index + 1];\r\n if (!left || !right) return { min: 0, max: 0 };\r\n const total = sizes[index] + sizes[index + 1];\r\n const legacy = panels.length === 2;\r\n const leftMin = left.minSize() ?? (legacy ? this.minSize() : 0);\r\n const leftMax = left.maxSize() ?? (legacy ? this.maxSize() : 100);\r\n const rightMin = right.minSize() ?? 0;\r\n const rightMax = right.maxSize() ?? 100;\r\n return {\r\n min: Math.max(0, leftMin, total - rightMax),\r\n max: Math.min(total, leftMax, total - rightMin),\r\n };\r\n }\r\n resize(index: number, value: number): void {\r\n const panels = this.panels(),\r\n sizes = this.sizes(),\r\n bounds = this.bounds(index);\r\n if (!panels[index] || !panels[index + 1] || bounds.min > bounds.max || !Number.isFinite(value))\r\n return;\r\n const next = Math.min(bounds.max, Math.max(bounds.min, value));\r\n const total = sizes[index] + sizes[index + 1];\r\n const right = total - next;\r\n const changes = this.changed();\r\n // Only an exact, complete snapshot can be skipped without changing what future constraints see.\r\n if (\r\n next === sizes[index] &&\r\n right === sizes[index + 1] &&\r\n changes.size === panels.length &&\r\n panels.every((panel, i) => changes.get(panel) === sizes[i])\r\n ) {\r\n return;\r\n }\r\n const values = new Map(panels.map((panel, i) => [panel, sizes[i]]));\r\n values.set(panels[index], next);\r\n values.set(panels[index + 1], right);\r\n this.changed.set(values);\r\n }\r\n}\r\n\r\n/** Raqm resizable panel — one percentage-sized region; owns its id (the handle's `aria-controls` target) and flex-basis. */\r\n@Directive({\r\n selector: '[raqm-resizable-panel]',\r\n host: {\r\n class: 'raqm-resizable-panel',\r\n '[style.flex-basis.%]': 'basis()',\r\n '[style.flex-grow]': '0',\r\n '[id]': 'id',\r\n },\r\n})\r\nexport class RaqmResizablePanelDirective {\r\n private readonly group = inject(RaqmResizablePanelGroupComponent);\r\n readonly id = inject(_IdGenerator).getId('raqm-resizable-panel-');\r\n readonly defaultSize = input<number | undefined>(undefined);\r\n readonly minSize = input<number | undefined>(undefined);\r\n readonly maxSize = input<number | undefined>(undefined);\r\n protected readonly basis = computed(() => this.group.sizes()[this.group.panelIndex(this)] ?? 0);\r\n}\r\n\r\n/** Raqm resizable handle — draggable `role=\"separator\"`, focusable and keyboard-operable; accessible name is app-authored. */\r\n@Directive({\r\n selector: '[raqm-resizable-handle]',\r\n host: {\r\n class: 'raqm-resizable-handle',\r\n role: 'separator',\r\n tabindex: '0',\r\n '[attr.data-raqm-with-handle]': 'withHandle() ? \"\" : null',\r\n '[attr.aria-orientation]': 'group.vertical() ? \"horizontal\" : \"vertical\"',\r\n '[attr.aria-valuenow]': 'value()',\r\n '[attr.aria-valuemin]': 'bounds().min',\r\n '[attr.aria-valuemax]': 'bounds().max',\r\n '[attr.aria-controls]': 'group.panels()[index()]?.id ?? null',\r\n '(keydown)': 'onKey($event)',\r\n '(pointerdown)': 'onPointer($event)',\r\n },\r\n})\r\nexport class RaqmResizableHandleDirective {\r\n readonly withHandle = input(false, { transform: booleanAttribute });\r\n protected readonly group = inject(RaqmResizablePanelGroupComponent);\r\n protected readonly index = computed(() => this.group.handleIndex(this));\r\n protected readonly value = computed(() => this.group.sizes()[this.index()] ?? 0);\r\n protected readonly bounds = computed(() => this.group.bounds(this.index()));\r\n private readonly element = inject(ElementRef<HTMLElement>);\r\n private readonly destroy = inject(DestroyRef);\r\n private cleanup: (() => void) | undefined;\r\n constructor() {\r\n this.destroy.onDestroy(() => this.cleanup?.());\r\n }\r\n protected onKey(event: KeyboardEvent): void {\r\n const horizontal = !this.group.vertical();\r\n const rtl = getComputedStyle(this.group.element.nativeElement).direction === 'rtl';\r\n let delta = 0;\r\n if (horizontal && event.key === 'ArrowRight') delta = rtl ? -1 : 1;\r\n if (horizontal && event.key === 'ArrowLeft') delta = rtl ? 1 : -1;\r\n if (!horizontal && event.key === 'ArrowDown') delta = 1;\r\n if (!horizontal && event.key === 'ArrowUp') delta = -1;\r\n if (event.key === 'Home' || event.key === 'End') {\r\n event.preventDefault();\r\n this.group.resize(this.index(), event.key === 'Home' ? this.bounds().min : this.bounds().max);\r\n } else if (delta) {\r\n event.preventDefault();\r\n this.group.resize(this.index(), this.value() + delta * (event.shiftKey ? 10 : 1));\r\n }\r\n }\r\n protected onPointer(event: PointerEvent): void {\r\n if (event.button !== 0) return;\r\n event.preventDefault();\r\n this.cleanup?.();\r\n const handle = this.element.nativeElement;\r\n const horizontal = !this.group.vertical();\r\n const rect = this.group.element.nativeElement.getBoundingClientRect();\r\n const rtl =\r\n horizontal && getComputedStyle(this.group.element.nativeElement).direction === 'rtl';\r\n const start = horizontal ? event.clientX : event.clientY;\r\n const initialSize = this.value();\r\n const move = (e: PointerEvent) => {\r\n const distance = (horizontal ? e.clientX : e.clientY) - start;\r\n const length = horizontal ? rect.width : rect.height;\r\n if (length)\r\n this.group.resize(\r\n this.index(),\r\n initialSize + ((rtl ? -distance : distance) / length) * 100,\r\n );\r\n };\r\n const end = () => this.cleanup?.();\r\n this.cleanup = () => {\r\n handle.removeEventListener('pointermove', move);\r\n handle.removeEventListener('pointerup', end);\r\n handle.removeEventListener('pointercancel', end);\r\n handle.removeEventListener('lostpointercapture', end);\r\n if (handle.hasPointerCapture(event.pointerId)) handle.releasePointerCapture(event.pointerId);\r\n this.cleanup = undefined;\r\n };\r\n handle.setPointerCapture(event.pointerId);\r\n handle.addEventListener('pointermove', move);\r\n handle.addEventListener('pointerup', end);\r\n handle.addEventListener('pointercancel', end);\r\n handle.addEventListener('lostpointercapture', end);\r\n }\r\n}\r\n","import {\r\n RaqmResizablePanelGroupComponent,\r\n RaqmResizablePanelDirective,\r\n RaqmResizableHandleDirective,\r\n} from './resizable';\r\n\r\nexport {\r\n RaqmResizablePanelGroupComponent,\r\n RaqmResizablePanelDirective,\r\n RaqmResizableHandleDirective,\r\n};\r\n\r\nexport const RaqmResizable = [\r\n RaqmResizablePanelGroupComponent,\r\n RaqmResizablePanelDirective,\r\n RaqmResizableHandleDirective,\r\n] as const;\r\n"],"mappings":"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"}
@@ -17,6 +17,8 @@ var RaqmScrollBarComponent = class RaqmScrollBarComponent {
17
17
  destroyRef = inject(DestroyRef);
18
18
  trackSize = signal(0, ...ngDevMode ? [{ debugName: "trackSize" }] : /* istanbul ignore next */ []);
19
19
  drag = null;
20
+ coordinates = null;
21
+ coordinateFrame;
20
22
  overflow = computed(() => {
21
23
  const m = this.area.metrics();
22
24
  return this.vertical() ? m.scrollHeight > m.height : m.scrollWidth > m.width;
@@ -49,14 +51,14 @@ var RaqmScrollBarComponent = class RaqmScrollBarComponent {
49
51
  }, ...ngDevMode ? [{ debugName: "thumbStyle" }] : /* istanbul ignore next */ []);
50
52
  constructor() {
51
53
  afterNextRender(() => {
52
- const resize = new ResizeObserver(() => this.measure());
53
- resize.observe(this.host.nativeElement);
54
+ const resize = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => this.measure());
55
+ resize?.observe(this.host.nativeElement);
54
56
  this.measure();
55
57
  const track = this.host.nativeElement;
56
58
  const wheel = (event) => this.onTrackWheel(event);
57
59
  track.addEventListener("wheel", wheel, { passive: false });
58
60
  this.destroyRef.onDestroy(() => {
59
- resize.disconnect();
61
+ resize?.disconnect();
60
62
  track.removeEventListener("wheel", wheel);
61
63
  });
62
64
  });
@@ -84,11 +86,35 @@ var RaqmScrollBarComponent = class RaqmScrollBarComponent {
84
86
  this.trackSize.set(Math.max(0, (vertical ? el.clientHeight : el.clientWidth) - parseFloat(vertical ? css.paddingTop : css.paddingLeft) - parseFloat(vertical ? css.paddingBottom : css.paddingRight)));
85
87
  }
86
88
  coordinate(event) {
89
+ const space = this.coordinates ?? this.measureCoordinates();
90
+ if (this.vertical()) return event.clientY - space.rect.top - space.clientTop - space.paddingTop;
91
+ return space.rtl ? space.rect.right - event.clientX - space.borderRightWidth - space.paddingRight : event.clientX - space.rect.left - space.clientLeft - space.paddingLeft;
92
+ }
93
+ measureCoordinates() {
87
94
  const el = this.host.nativeElement;
88
- const rect = el.getBoundingClientRect();
89
95
  const css = getComputedStyle(el);
90
- if (this.vertical()) return event.clientY - rect.top - el.clientTop - parseFloat(css.paddingTop);
91
- return this.area.metrics().rtl ? rect.right - event.clientX - parseFloat(css.borderRightWidth) - parseFloat(css.paddingRight) : event.clientX - rect.left - el.clientLeft - parseFloat(css.paddingLeft);
96
+ const space = {
97
+ rect: el.getBoundingClientRect(),
98
+ clientTop: el.clientTop,
99
+ clientLeft: el.clientLeft,
100
+ paddingTop: parseFloat(css.paddingTop),
101
+ paddingLeft: parseFloat(css.paddingLeft),
102
+ paddingRight: parseFloat(css.paddingRight),
103
+ borderRightWidth: parseFloat(css.borderRightWidth),
104
+ rtl: this.area.metrics().rtl
105
+ };
106
+ if (typeof requestAnimationFrame === "undefined") return space;
107
+ this.coordinates = space;
108
+ if (this.coordinateFrame === void 0) this.coordinateFrame = requestAnimationFrame(() => {
109
+ this.coordinateFrame = void 0;
110
+ this.coordinates = null;
111
+ });
112
+ return space;
113
+ }
114
+ clearCoordinates() {
115
+ if (this.coordinateFrame !== void 0 && typeof cancelAnimationFrame !== "undefined") cancelAnimationFrame(this.coordinateFrame);
116
+ this.coordinateFrame = void 0;
117
+ this.coordinates = null;
92
118
  }
93
119
  onPointerDown(event) {
94
120
  if (!event.isPrimary || event.button !== 0 || !this.overflow() || this.drag) return;
@@ -117,6 +143,7 @@ var RaqmScrollBarComponent = class RaqmScrollBarComponent {
117
143
  endDrag() {
118
144
  const drag = this.drag;
119
145
  this.drag = null;
146
+ this.clearCoordinates();
120
147
  if (drag && this.host.nativeElement.hasPointerCapture(drag.pointer)) this.host.nativeElement.releasePointerCapture(drag.pointer);
121
148
  }
122
149
  static ɵfac = i0.ɵɵngDeclareFactory({
@@ -261,7 +288,9 @@ var RaqmScrollAreaComponent = class RaqmScrollAreaComponent {
261
288
  vertical = computed(() => this.metrics().scrollHeight > this.metrics().height, ...ngDevMode ? [{ debugName: "vertical" }] : /* istanbul ignore next */ []);
262
289
  scrolling = signal(false, ...ngDevMode ? [{ debugName: "scrolling" }] : /* istanbul ignore next */ []);
263
290
  hovering = signal(false, ...ngDevMode ? [{ debugName: "hovering" }] : /* istanbul ignore next */ []);
291
+ geometry = null;
264
292
  scrollTimer;
293
+ frame;
265
294
  edges = computed(() => {
266
295
  const m = this.metrics();
267
296
  const threshold = this.overflowEdgeThreshold();
@@ -274,14 +303,17 @@ var RaqmScrollAreaComponent = class RaqmScrollAreaComponent {
274
303
  };
275
304
  }, ...ngDevMode ? [{ debugName: "edges" }] : /* istanbul ignore next */ []);
276
305
  constructor() {
277
- this.destroyRef.onDestroy(() => clearTimeout(this.scrollTimer));
306
+ this.destroyRef.onDestroy(() => {
307
+ clearTimeout(this.scrollTimer);
308
+ if (this.frame !== void 0 && typeof cancelAnimationFrame !== "undefined") cancelAnimationFrame(this.frame);
309
+ });
278
310
  afterNextRender(() => {
279
311
  const viewport = this.viewport().nativeElement;
280
312
  const content = this.content().nativeElement;
281
- const resize = new ResizeObserver(() => this.refresh());
282
- resize.observe(viewport);
283
- resize.observe(content);
284
- const direction = new MutationObserver(() => this.refresh());
313
+ const resize = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => this.scheduleRefresh());
314
+ resize?.observe(viewport);
315
+ resize?.observe(content);
316
+ const direction = new MutationObserver(() => this.scheduleRefresh());
285
317
  for (let element = this.host.nativeElement; element; element = element.parentElement) direction.observe(element, {
286
318
  attributes: true,
287
319
  attributeFilter: [
@@ -290,17 +322,17 @@ var RaqmScrollAreaComponent = class RaqmScrollAreaComponent {
290
322
  "style"
291
323
  ]
292
324
  });
293
- const mutation = new MutationObserver(() => this.refresh());
325
+ const mutation = new MutationObserver(() => this.scheduleRefresh());
294
326
  mutation.observe(content, {
295
327
  subtree: true,
296
328
  childList: true,
297
329
  characterData: true,
298
330
  attributes: true
299
331
  });
300
- const load = () => this.refresh();
332
+ const load = () => this.scheduleRefresh();
301
333
  content.addEventListener("load", load, true);
302
334
  this.destroyRef.onDestroy(() => {
303
- resize.disconnect();
335
+ resize?.disconnect();
304
336
  mutation.disconnect();
305
337
  direction.disconnect();
306
338
  content.removeEventListener("load", load, true);
@@ -309,33 +341,57 @@ var RaqmScrollAreaComponent = class RaqmScrollAreaComponent {
309
341
  });
310
342
  }
311
343
  onScroll() {
312
- this.refresh();
313
344
  this.scrolling.set(true);
314
345
  clearTimeout(this.scrollTimer);
315
346
  this.scrollTimer = setTimeout(() => this.scrolling.set(false), 100);
347
+ this.scheduleRefresh();
348
+ }
349
+ scheduleRefresh() {
350
+ if (typeof requestAnimationFrame === "undefined") {
351
+ this.refresh();
352
+ return;
353
+ }
354
+ if (this.frame !== void 0) return;
355
+ this.frame = requestAnimationFrame(() => {
356
+ this.frame = void 0;
357
+ this.refresh();
358
+ });
316
359
  }
317
360
  refresh() {
318
361
  const viewport = this.viewport().nativeElement;
319
- const rtl = getComputedStyle(viewport).direction === "rtl";
320
- const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth);
362
+ this.geometry = {
363
+ width: viewport.clientWidth,
364
+ height: viewport.clientHeight,
365
+ scrollWidth: viewport.scrollWidth,
366
+ scrollHeight: viewport.scrollHeight,
367
+ rtl: getComputedStyle(viewport).direction === "rtl"
368
+ };
369
+ this.refreshOffsets();
370
+ }
371
+ refreshOffsets() {
372
+ const geometry = this.geometry;
373
+ if (geometry === null) {
374
+ this.refresh();
375
+ return;
376
+ }
377
+ const viewport = this.viewport().nativeElement;
378
+ const max = Math.max(0, geometry.scrollWidth - geometry.width);
321
379
  let x = viewport.scrollLeft;
322
- if (rtl) switch (getRtlScrollAxisType()) {
380
+ if (geometry.rtl) switch (getRtlScrollAxisType()) {
323
381
  case RtlScrollAxisType.NEGATED:
324
382
  x = -x;
325
383
  break;
326
384
  case RtlScrollAxisType.NORMAL: x = max - x;
327
385
  }
328
- const next = {
329
- width: viewport.clientWidth,
330
- height: viewport.clientHeight,
331
- scrollWidth: viewport.scrollWidth,
332
- scrollHeight: viewport.scrollHeight,
333
- x: Math.max(0, Math.min(max, x)),
334
- y: Math.max(0, viewport.scrollTop),
335
- rtl
336
- };
386
+ x = Math.max(0, Math.min(max, x));
387
+ const y = Math.max(0, viewport.scrollTop);
337
388
  const previous = this.metrics();
338
- if (Object.keys(next).some((key) => next[key] !== previous[key])) this.metrics.set(next);
389
+ if (x === previous.x && y === previous.y && geometry.width === previous.width && geometry.height === previous.height && geometry.scrollWidth === previous.scrollWidth && geometry.scrollHeight === previous.scrollHeight && geometry.rtl === previous.rtl) return;
390
+ this.metrics.set({
391
+ ...geometry,
392
+ x,
393
+ y
394
+ });
339
395
  }
340
396
  scrollTo(orientation, offset) {
341
397
  const viewport = this.viewport().nativeElement;
@@ -353,7 +409,7 @@ var RaqmScrollAreaComponent = class RaqmScrollAreaComponent {
353
409
  }
354
410
  viewport.scrollLeft = value;
355
411
  }
356
- this.refresh();
412
+ this.refreshOffsets();
357
413
  }
358
414
  static ɵfac = i0.ɵɵngDeclareFactory({
359
415
  minVersion: "12.0.0",
@@ -1 +1 @@
1
- {"version":3,"file":"raqm-ui-scroll-area.mjs","names":[],"sources":["../../../projects/ui/scroll-area/scroll-area-context.ts","../../../projects/ui/scroll-area/scroll-bar.ts","../../../projects/ui/scroll-area/scroll-bar.html","../../../projects/ui/scroll-area/scroll-area.ts","../../../projects/ui/scroll-area/scroll-area.html","../../../projects/ui/scroll-area/public-api.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\r\n\r\nexport interface ScrollAreaMetrics {\r\n width: number;\r\n height: number;\r\n scrollWidth: number;\r\n scrollHeight: number;\r\n x: number;\r\n y: number;\r\n rtl: boolean;\r\n}\r\n\r\n/** Internal root contract; the token avoids a circular component dependency. */\r\nexport const SCROLL_AREA = new InjectionToken<{\r\n metrics: Signal<ScrollAreaMetrics>;\r\n horizontal: Signal<boolean>;\r\n vertical: Signal<boolean>;\r\n scrolling: Signal<boolean>;\r\n hovering: Signal<boolean>;\r\n edges: Signal<{ xStart: boolean; xEnd: boolean; yStart: boolean; yEnd: boolean }>;\r\n refresh(): void;\r\n scrollTo(orientation: 'horizontal' | 'vertical', offset: number): void;\r\n}>('RAQM_SCROLL_AREA');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { SCROLL_AREA } from './scroll-area-context';\r\n\r\n/** Scroll bar overlay; `aria-hidden` and not a tab stop, because the viewport handles keyboard/AT scrolling. */\r\n@Component({\r\n selector: 'raqm-scroll-bar',\r\n templateUrl: './scroll-bar.html',\r\n styleUrl: './scroll-bar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-scroll-bar',\r\n 'data-slot': 'scroll-area-scrollbar',\r\n 'aria-hidden': 'true',\r\n '[attr.data-raqm-vertical]': 'vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow]': 'overflow() ? \"\" : null',\r\n '[attr.data-raqm-keep-mounted]': 'keepMounted() ? \"\" : null',\r\n '[attr.data-raqm-corner]': 'area.horizontal() && area.vertical() ? \"\" : null',\r\n '[attr.data-raqm-scrolling]': 'area.scrolling() ? \"\" : null',\r\n '[attr.data-raqm-hovering]': 'area.hovering() ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-x]':\r\n 'area.metrics().scrollWidth > area.metrics().width ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-y]': 'area.vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-start]': 'area.edges().xStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-end]': 'area.edges().xEnd ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-start]': 'area.edges().yStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-end]': 'area.edges().yEnd ? \"\" : null',\r\n '(pointerdown)': 'onPointerDown($event)',\r\n '(pointermove)': 'onPointerMove($event)',\r\n '(pointerup)': 'endPointer($event)',\r\n '(pointercancel)': 'endPointer($event)',\r\n '(lostpointercapture)': 'endPointer($event)',\r\n },\r\n})\r\nexport class RaqmScrollBarComponent {\r\n readonly vertical = input(true, { transform: booleanAttribute });\r\n /** Keeps the internal thumb mounted without overflow; the Angular host always exists. */\r\n readonly keepMounted = input(false, { transform: booleanAttribute });\r\n protected readonly area = inject(SCROLL_AREA);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly trackSize = signal(0);\r\n private drag: { pointer: number; grab: number } | null = null;\r\n protected readonly overflow = computed(() => {\r\n const m = this.area.metrics();\r\n return this.vertical() ? m.scrollHeight > m.height : m.scrollWidth > m.width;\r\n });\r\n private readonly geometry = computed(() => {\r\n const m = this.area.metrics();\r\n const vertical = this.vertical();\r\n const viewport = vertical ? m.height : m.width;\r\n const content = vertical ? m.scrollHeight : m.scrollWidth;\r\n const track = this.trackSize();\r\n const thumb = Math.min(track, Math.max(16, content ? (track * viewport) / content : track));\r\n const max = Math.max(0, content - viewport);\r\n return { thumb, travel: track - thumb, max, offset: vertical ? m.y : m.x };\r\n });\r\n protected readonly thumbStyle = computed(() => {\r\n const g = this.geometry();\r\n const position = g.max ? (g.offset / g.max) * g.travel : 0;\r\n return this.vertical()\r\n ? { 'block-size': `${g.thumb}px`, 'inset-block-start': `${position}px` }\r\n : { 'inline-size': `${g.thumb}px`, 'inset-inline-start': `${position}px` };\r\n });\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n const resize = new ResizeObserver(() => this.measure());\r\n resize.observe(this.host.nativeElement);\r\n this.measure();\r\n const track = this.host.nativeElement;\r\n const wheel = (event: WheelEvent) => this.onTrackWheel(event);\r\n track.addEventListener('wheel', wheel, { passive: false });\r\n this.destroyRef.onDestroy(() => {\r\n resize.disconnect();\r\n track.removeEventListener('wheel', wheel);\r\n });\r\n });\r\n this.destroyRef.onDestroy(() => this.endDrag());\r\n }\r\n\r\n /** Bridges only overlay-track wheel input; viewport wheel/touch remain native. */\r\n private onTrackWheel(event: WheelEvent): void {\r\n if (event.ctrlKey || event.defaultPrevented || !event.cancelable) return;\r\n const vertical = this.vertical();\r\n const delta = vertical ? event.deltaY : event.deltaX;\r\n if (!Number.isFinite(delta) || delta === 0) return;\r\n this.area.refresh();\r\n const metrics = this.area.metrics();\r\n const css = getComputedStyle(this.host.nativeElement);\r\n // Computed line-height may be `normal`: use the inherited font's usual 1.2 ratio.\r\n const lineHeight = parseFloat(css.lineHeight) || parseFloat(css.fontSize) * 1.2 || 16;\r\n const unit =\r\n event.deltaMode === WheelEvent.DOM_DELTA_LINE\r\n ? lineHeight\r\n : event.deltaMode === WheelEvent.DOM_DELTA_PAGE\r\n ? vertical\r\n ? metrics.height\r\n : metrics.width\r\n : 1;\r\n // Wheel deltaX is physical; the root's public offset is measured from logical start.\r\n const change = delta * unit * (!vertical && metrics.rtl ? -1 : 1);\r\n const before = vertical ? metrics.y : metrics.x;\r\n this.area.scrollTo(this.vertical() ? 'vertical' : 'horizontal', before + change);\r\n const after = this.area.metrics();\r\n if ((vertical ? after.y : after.x) !== before) event.preventDefault();\r\n }\r\n\r\n private measure(): void {\r\n const el = this.host.nativeElement;\r\n const css = getComputedStyle(el);\r\n const vertical = this.vertical();\r\n this.trackSize.set(\r\n Math.max(\r\n 0,\r\n (vertical ? el.clientHeight : el.clientWidth) -\r\n parseFloat(vertical ? css.paddingTop : css.paddingLeft) -\r\n parseFloat(vertical ? css.paddingBottom : css.paddingRight),\r\n ),\r\n );\r\n }\r\n\r\n private coordinate(event: PointerEvent): number {\r\n const el = this.host.nativeElement;\r\n const rect = el.getBoundingClientRect();\r\n const css = getComputedStyle(el);\r\n if (this.vertical())\r\n return event.clientY - rect.top - el.clientTop - parseFloat(css.paddingTop);\r\n return this.area.metrics().rtl\r\n ? rect.right - event.clientX - parseFloat(css.borderRightWidth) - parseFloat(css.paddingRight)\r\n : event.clientX - rect.left - el.clientLeft - parseFloat(css.paddingLeft);\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n if (!event.isPrimary || event.button !== 0 || !this.overflow() || this.drag) return;\r\n event.preventDefault();\r\n this.area.refresh();\r\n this.measure();\r\n const g = this.geometry();\r\n const position = g.max ? (g.offset / g.max) * g.travel : 0;\r\n const coordinate = this.coordinate(event);\r\n const onThumb = coordinate >= position && coordinate <= position + g.thumb;\r\n this.drag = { pointer: event.pointerId, grab: onThumb ? coordinate - position : g.thumb / 2 };\r\n this.host.nativeElement.setPointerCapture(event.pointerId);\r\n if (!onThumb) this.onPointerMove(event);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (this.drag?.pointer !== event.pointerId) return;\r\n const g = this.geometry();\r\n if (g.travel > 0)\r\n this.area.scrollTo(\r\n this.vertical() ? 'vertical' : 'horizontal',\r\n ((this.coordinate(event) - this.drag.grab) / g.travel) * g.max,\r\n );\r\n }\r\n\r\n protected endPointer(event: PointerEvent): void {\r\n if (event.pointerId === this.drag?.pointer) this.endDrag();\r\n }\r\n\r\n private endDrag(): void {\r\n const drag = this.drag;\r\n this.drag = null;\r\n if (drag && this.host.nativeElement.hasPointerCapture(drag.pointer))\r\n this.host.nativeElement.releasePointerCapture(drag.pointer);\r\n }\r\n}\r\n","@if (overflow() || keepMounted()) {\r\n <div\r\n class=\"raqm-scroll-bar__thumb\"\r\n data-slot=\"scroll-area-thumb\"\r\n [attr.data-raqm-vertical]=\"vertical() ? '' : null\"\r\n [attr.data-raqm-scrolling]=\"area.scrolling() ? '' : null\"\r\n [style]=\"thumbStyle()\"\r\n ></div>\r\n}\r\n","import { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { getRtlScrollAxisType, RtlScrollAxisType } from '@angular/cdk/platform';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n contentChildren,\r\n forwardRef,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { RaqmScrollBarComponent } from './scroll-bar';\r\nimport { SCROLL_AREA, ScrollAreaMetrics } from './scroll-area-context';\r\n\r\n/** Scroll area; the labelled native viewport is the sole keyboard/AT target and the overlay bars are `aria-hidden` and pointer-only. */\r\n@Component({\r\n selector: 'raqm-scroll-area',\r\n imports: [CdkScrollable, RaqmScrollBarComponent],\r\n templateUrl: './scroll-area.html',\r\n styleUrl: './scroll-area.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: SCROLL_AREA, useExisting: forwardRef(() => RaqmScrollAreaComponent) }],\r\n host: {\r\n class: 'raqm-scroll-area',\r\n 'data-slot': 'scroll-area',\r\n '[attr.data-raqm-has-overflow-x]': 'metrics().scrollWidth > metrics().width ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-y]': 'vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-start]': 'edges().xStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-end]': 'edges().xEnd ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-start]': 'edges().yStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-end]': 'edges().yEnd ? \"\" : null',\r\n '[attr.data-raqm-scrolling]': 'scrolling() ? \"\" : null',\r\n '(pointerenter)': 'hovering.set(true)',\r\n '(pointerleave)': 'hovering.set(false)',\r\n },\r\n})\r\nexport class RaqmScrollAreaComponent {\r\n /** Required accessible name for the keyboard-focusable native viewport. */\r\n readonly viewportLabel = input.required<string>();\r\n readonly overflowEdgeThreshold = input<\r\n number | Partial<Record<'xStart' | 'xEnd' | 'yStart' | 'yEnd', number>>\r\n >(0);\r\n readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\r\n private readonly content = viewChild.required<ElementRef<HTMLElement>>('content');\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly bars = contentChildren(RaqmScrollBarComponent);\r\n protected readonly defaultVertical = computed(() => !this.bars().some((bar) => bar.vertical()));\r\n readonly metrics = signal<ScrollAreaMetrics>({\r\n width: 0,\r\n height: 0,\r\n scrollWidth: 0,\r\n scrollHeight: 0,\r\n x: 0,\r\n y: 0,\r\n rtl: false,\r\n });\r\n readonly horizontal = computed(\r\n () =>\r\n this.bars().some((bar) => !bar.vertical()) &&\r\n this.metrics().scrollWidth > this.metrics().width,\r\n );\r\n readonly vertical = computed(() => this.metrics().scrollHeight > this.metrics().height);\r\n readonly scrolling = signal(false);\r\n readonly hovering = signal(false);\r\n private scrollTimer: ReturnType<typeof setTimeout> | undefined;\r\n readonly edges = computed(() => {\r\n const m = this.metrics();\r\n const threshold = this.overflowEdgeThreshold();\r\n const edge = (key: 'xStart' | 'xEnd' | 'yStart' | 'yEnd') =>\r\n Math.max(0, typeof threshold === 'number' ? threshold : (threshold[key] ?? 0));\r\n return {\r\n xStart: m.x > edge('xStart'),\r\n xEnd: m.scrollWidth - m.width - m.x > edge('xEnd'),\r\n yStart: m.y > edge('yStart'),\r\n yEnd: m.scrollHeight - m.height - m.y > edge('yEnd'),\r\n };\r\n });\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => clearTimeout(this.scrollTimer));\r\n afterNextRender(() => {\r\n const viewport = this.viewport().nativeElement;\r\n const content = this.content().nativeElement;\r\n const resize = new ResizeObserver(() => this.refresh());\r\n resize.observe(viewport);\r\n resize.observe(content);\r\n // Direction can change on any ancestor without changing viewport size.\r\n const direction = new MutationObserver(() => this.refresh());\r\n for (\r\n let element: HTMLElement | null = this.host.nativeElement;\r\n element;\r\n element = element.parentElement\r\n ) {\r\n direction.observe(element, {\r\n attributes: true,\r\n attributeFilter: ['dir', 'class', 'style'],\r\n });\r\n }\r\n const mutation = new MutationObserver(() => this.refresh());\r\n mutation.observe(content, {\r\n subtree: true,\r\n childList: true,\r\n characterData: true,\r\n attributes: true,\r\n });\r\n const load = () => this.refresh();\r\n content.addEventListener('load', load, true);\r\n this.destroyRef.onDestroy(() => {\r\n resize.disconnect();\r\n mutation.disconnect();\r\n direction.disconnect();\r\n content.removeEventListener('load', load, true);\r\n });\r\n this.refresh();\r\n });\r\n }\r\n\r\n /** Tracks the native scroll lifecycle without changing wheel or touch events. */\r\n protected onScroll(): void {\r\n this.refresh();\r\n this.scrolling.set(true);\r\n clearTimeout(this.scrollTimer);\r\n this.scrollTimer = setTimeout(() => this.scrolling.set(false), 100);\r\n }\r\n\r\n refresh(): void {\r\n const viewport = this.viewport().nativeElement;\r\n const rtl = getComputedStyle(viewport).direction === 'rtl';\r\n const max = Math.max(0, viewport.scrollWidth - viewport.clientWidth);\r\n let x = viewport.scrollLeft;\r\n if (rtl) {\r\n switch (getRtlScrollAxisType()) {\r\n case RtlScrollAxisType.NEGATED:\r\n x = -x;\r\n break;\r\n case RtlScrollAxisType.NORMAL:\r\n x = max - x;\r\n break;\r\n }\r\n }\r\n const next = {\r\n width: viewport.clientWidth,\r\n height: viewport.clientHeight,\r\n scrollWidth: viewport.scrollWidth,\r\n scrollHeight: viewport.scrollHeight,\r\n x: Math.max(0, Math.min(max, x)),\r\n y: Math.max(0, viewport.scrollTop),\r\n rtl,\r\n };\r\n const previous = this.metrics();\r\n if (\r\n Object.keys(next).some(\r\n (key) => next[key as keyof ScrollAreaMetrics] !== previous[key as keyof ScrollAreaMetrics],\r\n )\r\n )\r\n this.metrics.set(next);\r\n }\r\n\r\n /** Sets a clamped native offset measured from the logical start of the chosen axis. */\r\n scrollTo(orientation: 'horizontal' | 'vertical', offset: number): void {\r\n const viewport = this.viewport().nativeElement;\r\n this.refresh();\r\n const metrics = this.metrics();\r\n const max =\r\n orientation === 'horizontal'\r\n ? metrics.scrollWidth - metrics.width\r\n : metrics.scrollHeight - metrics.height;\r\n let value = Math.max(0, Math.min(max, offset));\r\n if (orientation === 'vertical') {\r\n viewport.scrollTop = value;\r\n } else {\r\n if (metrics.rtl) {\r\n switch (getRtlScrollAxisType()) {\r\n case RtlScrollAxisType.NEGATED:\r\n value = -value;\r\n break;\r\n case RtlScrollAxisType.NORMAL:\r\n value = max - value;\r\n break;\r\n }\r\n }\r\n viewport.scrollLeft = value;\r\n }\r\n this.refresh();\r\n }\r\n}\r\n","<div\r\n #viewport\r\n cdkScrollable\r\n class=\"raqm-scroll-area__viewport\"\r\n data-slot=\"scroll-area-viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"viewportLabel()\"\r\n (scroll)=\"onScroll()\"\r\n>\r\n <div #content class=\"raqm-scroll-area__content\"><ng-content /></div>\r\n</div>\r\n<ng-content select=\"raqm-scroll-bar\" />\r\n@if (defaultVertical()) {\r\n <raqm-scroll-bar />\r\n}\r\n@if (horizontal() && vertical()) {\r\n <div class=\"raqm-scroll-area__corner\" aria-hidden=\"true\"></div>\r\n}\r\n","import { RaqmScrollAreaComponent } from './scroll-area';\r\nimport { RaqmScrollBarComponent } from './scroll-bar';\r\n\r\nexport { RaqmScrollAreaComponent, RaqmScrollBarComponent };\r\n\r\nexport const RaqmScrollArea = [RaqmScrollAreaComponent, RaqmScrollBarComponent] as const;\r\n"],"mappings":"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"}
1
+ {"version":3,"file":"raqm-ui-scroll-area.mjs","names":[],"sources":["../../../projects/ui/scroll-area/scroll-area-context.ts","../../../projects/ui/scroll-area/scroll-bar.ts","../../../projects/ui/scroll-area/scroll-bar.html","../../../projects/ui/scroll-area/scroll-area.ts","../../../projects/ui/scroll-area/scroll-area.html","../../../projects/ui/scroll-area/public-api.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\r\n\r\nexport interface ScrollAreaMetrics {\r\n width: number;\r\n height: number;\r\n scrollWidth: number;\r\n scrollHeight: number;\r\n x: number;\r\n y: number;\r\n rtl: boolean;\r\n}\r\n\r\n/** Internal root contract; the token avoids a circular component dependency. */\r\nexport const SCROLL_AREA = new InjectionToken<{\r\n metrics: Signal<ScrollAreaMetrics>;\r\n horizontal: Signal<boolean>;\r\n vertical: Signal<boolean>;\r\n scrolling: Signal<boolean>;\r\n hovering: Signal<boolean>;\r\n edges: Signal<{ xStart: boolean; xEnd: boolean; yStart: boolean; yEnd: boolean }>;\r\n refresh(): void;\r\n scrollTo(orientation: 'horizontal' | 'vertical', offset: number): void;\r\n}>('RAQM_SCROLL_AREA');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { SCROLL_AREA } from './scroll-area-context';\r\n\r\ninterface ScrollBarCoordinates {\r\n rect: DOMRect;\r\n clientTop: number;\r\n clientLeft: number;\r\n paddingTop: number;\r\n paddingLeft: number;\r\n paddingRight: number;\r\n borderRightWidth: number;\r\n rtl: boolean;\r\n}\r\n\r\n/** Scroll bar overlay; `aria-hidden` and not a tab stop, because the viewport handles keyboard/AT scrolling. */\r\n@Component({\r\n selector: 'raqm-scroll-bar',\r\n templateUrl: './scroll-bar.html',\r\n styleUrl: './scroll-bar.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-scroll-bar',\r\n 'data-slot': 'scroll-area-scrollbar',\r\n 'aria-hidden': 'true',\r\n '[attr.data-raqm-vertical]': 'vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow]': 'overflow() ? \"\" : null',\r\n '[attr.data-raqm-keep-mounted]': 'keepMounted() ? \"\" : null',\r\n '[attr.data-raqm-corner]': 'area.horizontal() && area.vertical() ? \"\" : null',\r\n '[attr.data-raqm-scrolling]': 'area.scrolling() ? \"\" : null',\r\n '[attr.data-raqm-hovering]': 'area.hovering() ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-x]':\r\n 'area.metrics().scrollWidth > area.metrics().width ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-y]': 'area.vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-start]': 'area.edges().xStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-end]': 'area.edges().xEnd ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-start]': 'area.edges().yStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-end]': 'area.edges().yEnd ? \"\" : null',\r\n '(pointerdown)': 'onPointerDown($event)',\r\n '(pointermove)': 'onPointerMove($event)',\r\n '(pointerup)': 'endPointer($event)',\r\n '(pointercancel)': 'endPointer($event)',\r\n '(lostpointercapture)': 'endPointer($event)',\r\n },\r\n})\r\nexport class RaqmScrollBarComponent {\r\n readonly vertical = input(true, { transform: booleanAttribute });\r\n /** Keeps the internal thumb mounted without overflow; the Angular host always exists. */\r\n readonly keepMounted = input(false, { transform: booleanAttribute });\r\n protected readonly area = inject(SCROLL_AREA);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly trackSize = signal(0);\r\n private drag: { pointer: number; grab: number } | null = null;\r\n // Reused within one frame only; the track can move between frames while scrolling or resizing.\r\n private coordinates: ScrollBarCoordinates | null = null;\r\n private coordinateFrame: number | undefined;\r\n protected readonly overflow = computed(() => {\r\n const m = this.area.metrics();\r\n return this.vertical() ? m.scrollHeight > m.height : m.scrollWidth > m.width;\r\n });\r\n private readonly geometry = computed(() => {\r\n const m = this.area.metrics();\r\n const vertical = this.vertical();\r\n const viewport = vertical ? m.height : m.width;\r\n const content = vertical ? m.scrollHeight : m.scrollWidth;\r\n const track = this.trackSize();\r\n const thumb = Math.min(track, Math.max(16, content ? (track * viewport) / content : track));\r\n const max = Math.max(0, content - viewport);\r\n return { thumb, travel: track - thumb, max, offset: vertical ? m.y : m.x };\r\n });\r\n protected readonly thumbStyle = computed(() => {\r\n const g = this.geometry();\r\n const position = g.max ? (g.offset / g.max) * g.travel : 0;\r\n return this.vertical()\r\n ? { 'block-size': `${g.thumb}px`, 'inset-block-start': `${position}px` }\r\n : { 'inline-size': `${g.thumb}px`, 'inset-inline-start': `${position}px` };\r\n });\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n const resize =\r\n typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => this.measure());\r\n resize?.observe(this.host.nativeElement);\r\n this.measure();\r\n const track = this.host.nativeElement;\r\n const wheel = (event: WheelEvent) => this.onTrackWheel(event);\r\n track.addEventListener('wheel', wheel, { passive: false });\r\n this.destroyRef.onDestroy(() => {\r\n resize?.disconnect();\r\n track.removeEventListener('wheel', wheel);\r\n });\r\n });\r\n this.destroyRef.onDestroy(() => this.endDrag());\r\n }\r\n\r\n /** Bridges only overlay-track wheel input; viewport wheel/touch remain native. */\r\n private onTrackWheel(event: WheelEvent): void {\r\n if (event.ctrlKey || event.defaultPrevented || !event.cancelable) return;\r\n const vertical = this.vertical();\r\n const delta = vertical ? event.deltaY : event.deltaX;\r\n if (!Number.isFinite(delta) || delta === 0) return;\r\n this.area.refresh();\r\n const metrics = this.area.metrics();\r\n const css = getComputedStyle(this.host.nativeElement);\r\n // Computed line-height may be `normal`: use the inherited font's usual 1.2 ratio.\r\n const lineHeight = parseFloat(css.lineHeight) || parseFloat(css.fontSize) * 1.2 || 16;\r\n const unit =\r\n event.deltaMode === WheelEvent.DOM_DELTA_LINE\r\n ? lineHeight\r\n : event.deltaMode === WheelEvent.DOM_DELTA_PAGE\r\n ? vertical\r\n ? metrics.height\r\n : metrics.width\r\n : 1;\r\n // Wheel deltaX is physical; the root's public offset is measured from logical start.\r\n const change = delta * unit * (!vertical && metrics.rtl ? -1 : 1);\r\n const before = vertical ? metrics.y : metrics.x;\r\n this.area.scrollTo(this.vertical() ? 'vertical' : 'horizontal', before + change);\r\n const after = this.area.metrics();\r\n if ((vertical ? after.y : after.x) !== before) event.preventDefault();\r\n }\r\n\r\n private measure(): void {\r\n const el = this.host.nativeElement;\r\n const css = getComputedStyle(el);\r\n const vertical = this.vertical();\r\n this.trackSize.set(\r\n Math.max(\r\n 0,\r\n (vertical ? el.clientHeight : el.clientWidth) -\r\n parseFloat(vertical ? css.paddingTop : css.paddingLeft) -\r\n parseFloat(vertical ? css.paddingBottom : css.paddingRight),\r\n ),\r\n );\r\n }\r\n\r\n private coordinate(event: PointerEvent): number {\r\n const space = this.coordinates ?? this.measureCoordinates();\r\n if (this.vertical()) return event.clientY - space.rect.top - space.clientTop - space.paddingTop;\r\n return space.rtl\r\n ? space.rect.right - event.clientX - space.borderRightWidth - space.paddingRight\r\n : event.clientX - space.rect.left - space.clientLeft - space.paddingLeft;\r\n }\r\n\r\n private measureCoordinates(): ScrollBarCoordinates {\r\n const el = this.host.nativeElement;\r\n const css = getComputedStyle(el);\r\n const space: ScrollBarCoordinates = {\r\n rect: el.getBoundingClientRect(),\r\n clientTop: el.clientTop,\r\n clientLeft: el.clientLeft,\r\n paddingTop: parseFloat(css.paddingTop),\r\n paddingLeft: parseFloat(css.paddingLeft),\r\n paddingRight: parseFloat(css.paddingRight),\r\n borderRightWidth: parseFloat(css.borderRightWidth),\r\n rtl: this.area.metrics().rtl,\r\n };\r\n // Without frames, measure every call rather than risk a stale drag coordinate.\r\n if (typeof requestAnimationFrame === 'undefined') return space;\r\n this.coordinates = space;\r\n if (this.coordinateFrame === undefined) {\r\n this.coordinateFrame = requestAnimationFrame(() => {\r\n this.coordinateFrame = undefined;\r\n this.coordinates = null;\r\n });\r\n }\r\n return space;\r\n }\r\n\r\n private clearCoordinates(): void {\r\n if (this.coordinateFrame !== undefined && typeof cancelAnimationFrame !== 'undefined') {\r\n cancelAnimationFrame(this.coordinateFrame);\r\n }\r\n this.coordinateFrame = undefined;\r\n this.coordinates = null;\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n if (!event.isPrimary || event.button !== 0 || !this.overflow() || this.drag) return;\r\n event.preventDefault();\r\n this.area.refresh();\r\n this.measure();\r\n const g = this.geometry();\r\n const position = g.max ? (g.offset / g.max) * g.travel : 0;\r\n const coordinate = this.coordinate(event);\r\n const onThumb = coordinate >= position && coordinate <= position + g.thumb;\r\n this.drag = { pointer: event.pointerId, grab: onThumb ? coordinate - position : g.thumb / 2 };\r\n this.host.nativeElement.setPointerCapture(event.pointerId);\r\n if (!onThumb) this.onPointerMove(event);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (this.drag?.pointer !== event.pointerId) return;\r\n const g = this.geometry();\r\n if (g.travel > 0)\r\n this.area.scrollTo(\r\n this.vertical() ? 'vertical' : 'horizontal',\r\n ((this.coordinate(event) - this.drag.grab) / g.travel) * g.max,\r\n );\r\n }\r\n\r\n protected endPointer(event: PointerEvent): void {\r\n if (event.pointerId === this.drag?.pointer) this.endDrag();\r\n }\r\n\r\n private endDrag(): void {\r\n const drag = this.drag;\r\n this.drag = null;\r\n this.clearCoordinates();\r\n if (drag && this.host.nativeElement.hasPointerCapture(drag.pointer))\r\n this.host.nativeElement.releasePointerCapture(drag.pointer);\r\n }\r\n}\r\n","@if (overflow() || keepMounted()) {\r\n <div\r\n class=\"raqm-scroll-bar__thumb\"\r\n data-slot=\"scroll-area-thumb\"\r\n [attr.data-raqm-vertical]=\"vertical() ? '' : null\"\r\n [attr.data-raqm-scrolling]=\"area.scrolling() ? '' : null\"\r\n [style]=\"thumbStyle()\"\r\n ></div>\r\n}\r\n","import { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { getRtlScrollAxisType, RtlScrollAxisType } from '@angular/cdk/platform';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n contentChildren,\r\n forwardRef,\r\n inject,\r\n input,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { RaqmScrollBarComponent } from './scroll-bar';\r\nimport { SCROLL_AREA, ScrollAreaMetrics } from './scroll-area-context';\r\n\r\n/** Layout-derived state; scrolling only changes offsets, so this survives scroll events. */\r\ninterface ScrollAreaGeometry {\r\n width: number;\r\n height: number;\r\n scrollWidth: number;\r\n scrollHeight: number;\r\n rtl: boolean;\r\n}\r\n\r\n/** Scroll area; the labelled native viewport is the sole keyboard/AT target and the overlay bars are `aria-hidden` and pointer-only. */\r\n@Component({\r\n selector: 'raqm-scroll-area',\r\n imports: [CdkScrollable, RaqmScrollBarComponent],\r\n templateUrl: './scroll-area.html',\r\n styleUrl: './scroll-area.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: SCROLL_AREA, useExisting: forwardRef(() => RaqmScrollAreaComponent) }],\r\n host: {\r\n class: 'raqm-scroll-area',\r\n 'data-slot': 'scroll-area',\r\n '[attr.data-raqm-has-overflow-x]': 'metrics().scrollWidth > metrics().width ? \"\" : null',\r\n '[attr.data-raqm-has-overflow-y]': 'vertical() ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-start]': 'edges().xStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-x-end]': 'edges().xEnd ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-start]': 'edges().yStart ? \"\" : null',\r\n '[attr.data-raqm-overflow-y-end]': 'edges().yEnd ? \"\" : null',\r\n '[attr.data-raqm-scrolling]': 'scrolling() ? \"\" : null',\r\n '(pointerenter)': 'hovering.set(true)',\r\n '(pointerleave)': 'hovering.set(false)',\r\n },\r\n})\r\nexport class RaqmScrollAreaComponent {\r\n /** Required accessible name for the keyboard-focusable native viewport. */\r\n readonly viewportLabel = input.required<string>();\r\n readonly overflowEdgeThreshold = input<\r\n number | Partial<Record<'xStart' | 'xEnd' | 'yStart' | 'yEnd', number>>\r\n >(0);\r\n readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\r\n private readonly content = viewChild.required<ElementRef<HTMLElement>>('content');\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly bars = contentChildren(RaqmScrollBarComponent);\r\n protected readonly defaultVertical = computed(() => !this.bars().some((bar) => bar.vertical()));\r\n readonly metrics = signal<ScrollAreaMetrics>({\r\n width: 0,\r\n height: 0,\r\n scrollWidth: 0,\r\n scrollHeight: 0,\r\n x: 0,\r\n y: 0,\r\n rtl: false,\r\n });\r\n readonly horizontal = computed(\r\n () =>\r\n this.bars().some((bar) => !bar.vertical()) &&\r\n this.metrics().scrollWidth > this.metrics().width,\r\n );\r\n readonly vertical = computed(() => this.metrics().scrollHeight > this.metrics().height);\r\n readonly scrolling = signal(false);\r\n readonly hovering = signal(false);\r\n private geometry: ScrollAreaGeometry | null = null;\r\n private scrollTimer: ReturnType<typeof setTimeout> | undefined;\r\n private frame: number | undefined;\r\n readonly edges = computed(() => {\r\n const m = this.metrics();\r\n const threshold = this.overflowEdgeThreshold();\r\n const edge = (key: 'xStart' | 'xEnd' | 'yStart' | 'yEnd') =>\r\n Math.max(0, typeof threshold === 'number' ? threshold : (threshold[key] ?? 0));\r\n return {\r\n xStart: m.x > edge('xStart'),\r\n xEnd: m.scrollWidth - m.width - m.x > edge('xEnd'),\r\n yStart: m.y > edge('yStart'),\r\n yEnd: m.scrollHeight - m.height - m.y > edge('yEnd'),\r\n };\r\n });\r\n\r\n constructor() {\r\n this.destroyRef.onDestroy(() => {\r\n clearTimeout(this.scrollTimer);\r\n if (this.frame !== undefined && typeof cancelAnimationFrame !== 'undefined') {\r\n cancelAnimationFrame(this.frame);\r\n }\r\n });\r\n afterNextRender(() => {\r\n const viewport = this.viewport().nativeElement;\r\n const content = this.content().nativeElement;\r\n const resize =\r\n typeof ResizeObserver === 'undefined'\r\n ? null\r\n : new ResizeObserver(() => this.scheduleRefresh());\r\n resize?.observe(viewport);\r\n resize?.observe(content);\r\n // Direction can change on any ancestor without changing viewport size.\r\n const direction = new MutationObserver(() => this.scheduleRefresh());\r\n for (\r\n let element: HTMLElement | null = this.host.nativeElement;\r\n element;\r\n element = element.parentElement\r\n ) {\r\n direction.observe(element, {\r\n attributes: true,\r\n attributeFilter: ['dir', 'class', 'style'],\r\n });\r\n }\r\n const mutation = new MutationObserver(() => this.scheduleRefresh());\r\n mutation.observe(content, {\r\n subtree: true,\r\n childList: true,\r\n characterData: true,\r\n attributes: true,\r\n });\r\n const load = () => this.scheduleRefresh();\r\n content.addEventListener('load', load, true);\r\n this.destroyRef.onDestroy(() => {\r\n resize?.disconnect();\r\n mutation.disconnect();\r\n direction.disconnect();\r\n content.removeEventListener('load', load, true);\r\n });\r\n this.refresh();\r\n });\r\n }\r\n\r\n /** Tracks the native scroll lifecycle without changing wheel or touch events. */\r\n protected onScroll(): void {\r\n this.scrolling.set(true);\r\n clearTimeout(this.scrollTimer);\r\n this.scrollTimer = setTimeout(() => this.scrolling.set(false), 100);\r\n // Native scrolling can follow layout that no observer reports, so revalidate per frame.\r\n this.scheduleRefresh();\r\n }\r\n\r\n /** Coalesces scroll and observer notifications; callers that need fresh data call `refresh` directly. */\r\n private scheduleRefresh(): void {\r\n if (typeof requestAnimationFrame === 'undefined') {\r\n this.refresh();\r\n return;\r\n }\r\n if (this.frame !== undefined) return;\r\n this.frame = requestAnimationFrame(() => {\r\n this.frame = undefined;\r\n this.refresh();\r\n });\r\n }\r\n\r\n /** Re-reads layout and direction, then publishes the current offsets. */\r\n refresh(): void {\r\n const viewport = this.viewport().nativeElement;\r\n this.geometry = {\r\n width: viewport.clientWidth,\r\n height: viewport.clientHeight,\r\n scrollWidth: viewport.scrollWidth,\r\n scrollHeight: viewport.scrollHeight,\r\n rtl: getComputedStyle(viewport).direction === 'rtl',\r\n };\r\n this.refreshOffsets();\r\n }\r\n\r\n /** Reads only the offsets, reusing the last measured layout. */\r\n private refreshOffsets(): void {\r\n const geometry = this.geometry;\r\n if (geometry === null) {\r\n this.refresh();\r\n return;\r\n }\r\n const viewport = this.viewport().nativeElement;\r\n const max = Math.max(0, geometry.scrollWidth - geometry.width);\r\n let x = viewport.scrollLeft;\r\n if (geometry.rtl) {\r\n switch (getRtlScrollAxisType()) {\r\n case RtlScrollAxisType.NEGATED:\r\n x = -x;\r\n break;\r\n case RtlScrollAxisType.NORMAL:\r\n x = max - x;\r\n break;\r\n }\r\n }\r\n x = Math.max(0, Math.min(max, x));\r\n const y = Math.max(0, viewport.scrollTop);\r\n const previous = this.metrics();\r\n if (\r\n x === previous.x &&\r\n y === previous.y &&\r\n geometry.width === previous.width &&\r\n geometry.height === previous.height &&\r\n geometry.scrollWidth === previous.scrollWidth &&\r\n geometry.scrollHeight === previous.scrollHeight &&\r\n geometry.rtl === previous.rtl\r\n ) {\r\n return;\r\n }\r\n this.metrics.set({ ...geometry, x, y });\r\n }\r\n\r\n /** Sets a clamped native offset measured from the logical start of the chosen axis. */\r\n scrollTo(orientation: 'horizontal' | 'vertical', offset: number): void {\r\n const viewport = this.viewport().nativeElement;\r\n this.refresh();\r\n const metrics = this.metrics();\r\n const max =\r\n orientation === 'horizontal'\r\n ? metrics.scrollWidth - metrics.width\r\n : metrics.scrollHeight - metrics.height;\r\n let value = Math.max(0, Math.min(max, offset));\r\n if (orientation === 'vertical') {\r\n viewport.scrollTop = value;\r\n } else {\r\n if (metrics.rtl) {\r\n switch (getRtlScrollAxisType()) {\r\n case RtlScrollAxisType.NEGATED:\r\n value = -value;\r\n break;\r\n case RtlScrollAxisType.NORMAL:\r\n value = max - value;\r\n break;\r\n }\r\n }\r\n viewport.scrollLeft = value;\r\n }\r\n this.refreshOffsets();\r\n }\r\n}\r\n","<div\r\n #viewport\r\n cdkScrollable\r\n class=\"raqm-scroll-area__viewport\"\r\n data-slot=\"scroll-area-viewport\"\r\n tabindex=\"0\"\r\n role=\"region\"\r\n [attr.aria-label]=\"viewportLabel()\"\r\n (scroll)=\"onScroll()\"\r\n>\r\n <div #content class=\"raqm-scroll-area__content\"><ng-content /></div>\r\n</div>\r\n<ng-content select=\"raqm-scroll-bar\" />\r\n@if (defaultVertical()) {\r\n <raqm-scroll-bar />\r\n}\r\n@if (horizontal() && vertical()) {\r\n <div class=\"raqm-scroll-area__corner\" aria-hidden=\"true\"></div>\r\n}\r\n","import { RaqmScrollAreaComponent } from './scroll-area';\r\nimport { RaqmScrollBarComponent } from './scroll-bar';\r\n\r\nexport { RaqmScrollAreaComponent, RaqmScrollBarComponent };\r\n\r\nexport const RaqmScrollArea = [RaqmScrollAreaComponent, RaqmScrollBarComponent] as const;\r\n"],"mappings":"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"}
@@ -142,9 +142,8 @@ var RaqmSelectKeyboard = class {
142
142
  onOptionPointerMove(view) {
143
143
  if (view.option.disabled === true) return;
144
144
  if (this.host.activeId() === view.id) return;
145
- const index = this.host.optionViews().findIndex((candidate) => candidate.id === view.id);
146
- if (index === -1) return;
147
- this.keyManager?.setActiveItem(index);
145
+ if (this.host.optionViews()[view.index]?.id !== view.id) return;
146
+ this.keyManager?.setActiveItem(view.index);
148
147
  }
149
148
  onOptionPointerLeave(event) {
150
149
  if (event.pointerType === "touch") return;
@@ -276,6 +275,7 @@ var RaqmSelectPosition = class {
276
275
  positionSubscription;
277
276
  appliedAligned;
278
277
  alignmentDeactivated = false;
278
+ popupElementRef = null;
279
279
  constructor(viewportRuler, host) {
280
280
  this.viewportRuler = viewportRuler;
281
281
  this.host = host;
@@ -323,10 +323,18 @@ var RaqmSelectPosition = class {
323
323
  this.positionStrategy = void 0;
324
324
  this.appliedAligned = void 0;
325
325
  this.alignmentDeactivated = false;
326
+ this.popupElementRef = null;
326
327
  }
327
328
  resetAfterDetach() {
328
329
  this.positionStrategy = void 0;
329
330
  this.appliedAligned = void 0;
331
+ this.popupElementRef = null;
332
+ }
333
+ popupElement() {
334
+ const cached = this.popupElementRef;
335
+ if (cached?.isConnected) return cached;
336
+ this.popupElementRef = this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup") ?? null;
337
+ return this.popupElementRef;
330
338
  }
331
339
  reactToAlignmentChange() {
332
340
  const aligned = this.host.alignItemWithTrigger();
@@ -337,7 +345,7 @@ var RaqmSelectPosition = class {
337
345
  const overlayRef = this.host.overlayRef();
338
346
  const strategy = this.positionStrategy;
339
347
  if (!overlayRef || !strategy) return;
340
- const popupElement = overlayRef.overlayElement.querySelector(".raqm-select-popup");
348
+ const popupElement = this.popupElement();
341
349
  this.configureStrategy(strategy, aligned);
342
350
  this.appliedAligned = aligned;
343
351
  if (aligned) {
@@ -357,7 +365,7 @@ var RaqmSelectPosition = class {
357
365
  const strategy = this.positionStrategy;
358
366
  if (!overlayRef || !strategy || !this.host.alignItemWithTrigger() || this.alignmentDeactivated) return;
359
367
  const triggerElement = this.host.trigger();
360
- const popupElement = overlayRef.overlayElement.querySelector(".raqm-select-popup");
368
+ const popupElement = this.popupElement();
361
369
  const activeId = this.host.activeId();
362
370
  const rowElement = activeId ? overlayRef.overlayElement.querySelector(`[id="${activeId}"]`) : null;
363
371
  if (!popupElement || !rowElement) {
@@ -396,7 +404,7 @@ var RaqmSelectPosition = class {
396
404
  if (heightReduced) this.host.updateScrollAffordances();
397
405
  }
398
406
  boundPopupHeight() {
399
- const popupElement = this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup");
407
+ const popupElement = this.popupElement();
400
408
  if (!popupElement) return;
401
409
  const triggerRect = this.host.trigger().getBoundingClientRect();
402
410
  const viewport = this.viewportRuler.getViewportSize();
@@ -417,7 +425,7 @@ var RaqmSelectPosition = class {
417
425
  if (!overlayRef || !strategy) return;
418
426
  this.alignmentDeactivated = true;
419
427
  this.appliedAligned = false;
420
- const popupElement = overlayRef.overlayElement.querySelector(".raqm-select-popup");
428
+ const popupElement = this.popupElement();
421
429
  if (popupElement) popupElement.style.maxHeight = "";
422
430
  strategy.withDefaultOffsetY(0);
423
431
  this.configureStrategy(strategy, false);
@@ -432,16 +440,17 @@ var RaqmSelectScrolling = class {
432
440
  autoScrollDirection = null;
433
441
  scrollCleanup;
434
442
  viewportSubscription;
443
+ popupElementRef = null;
444
+ arrowElementRefs = null;
435
445
  constructor(viewportRuler, host) {
436
446
  this.viewportRuler = viewportRuler;
437
447
  this.host = host;
438
448
  }
439
449
  scrollOptionIntoView(id) {
440
- const overlayRef = this.host.overlayRef();
441
- if (!overlayRef || !id) return;
442
- const popupElement = overlayRef.overlayElement.querySelector(".raqm-select-popup");
443
- const rowElement = overlayRef.overlayElement.querySelector(`[id="${id}"]`);
444
- if (!popupElement || !rowElement) return;
450
+ const popupElement = this.popupElement();
451
+ if (!popupElement || !id) return;
452
+ const rowElement = popupElement.querySelector(`[id="${id}"]`);
453
+ if (!rowElement) return;
445
454
  const rowTop = rowElement.offsetTop;
446
455
  const rowBottom = rowTop + rowElement.offsetHeight;
447
456
  const viewTop = popupElement.scrollTop;
@@ -450,7 +459,7 @@ var RaqmSelectScrolling = class {
450
459
  else if (rowBottom > viewBottom) popupElement.scrollTop = rowBottom - popupElement.clientHeight;
451
460
  }
452
461
  attach() {
453
- const popupElement = this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup");
462
+ const popupElement = this.popupElement();
454
463
  if (popupElement) {
455
464
  const handler = () => this.updateAffordances();
456
465
  popupElement.addEventListener("scroll", handler, { passive: true });
@@ -464,9 +473,11 @@ var RaqmSelectScrolling = class {
464
473
  this.scrollCleanup = void 0;
465
474
  this.viewportSubscription?.unsubscribe();
466
475
  this.viewportSubscription = void 0;
476
+ this.popupElementRef = null;
477
+ this.arrowElementRefs = null;
467
478
  }
468
479
  updateAffordances() {
469
- const popupElement = this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup");
480
+ const popupElement = this.popupElement();
470
481
  if (!popupElement) {
471
482
  this.host.setCanScrollUp(false);
472
483
  this.host.setCanScrollDown(false);
@@ -477,13 +488,29 @@ var RaqmSelectScrolling = class {
477
488
  this.host.setCanScrollDown(scrollTop + clientHeight < scrollHeight - 1);
478
489
  }
479
490
  scrollByStep(direction) {
480
- const popupElement = this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup");
491
+ const popupElement = this.popupElement();
481
492
  if (!popupElement) return;
482
493
  popupElement.scrollTop += direction === "up" ? -120 : 120;
483
494
  this.updateAffordances();
484
495
  }
485
496
  popupScrollElement() {
486
- return this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup") ?? null;
497
+ return this.popupElement();
498
+ }
499
+ popupElement() {
500
+ const cached = this.popupElementRef;
501
+ if (cached?.isConnected) return cached;
502
+ this.popupElementRef = this.host.overlayRef()?.overlayElement.querySelector(".raqm-select-popup") ?? null;
503
+ this.arrowElementRefs = null;
504
+ return this.popupElementRef;
505
+ }
506
+ arrowElement(direction) {
507
+ const popupElement = this.popupElement();
508
+ if (!popupElement) return null;
509
+ if (this.arrowElementRefs === null) this.arrowElementRefs = {
510
+ up: popupElement.querySelector(".raqm-select-scroll-button--up"),
511
+ down: popupElement.querySelector(".raqm-select-scroll-button--down")
512
+ };
513
+ return this.arrowElementRefs[direction];
487
514
  }
488
515
  normalizeScrollOffset(value, max) {
489
516
  if (max <= 0) return 0;
@@ -497,14 +524,14 @@ var RaqmSelectScrolling = class {
497
524
  }
498
525
  scrollArrowStep(direction) {
499
526
  this.host.resetActive();
500
- const popupElement = this.popupScrollElement();
527
+ const popupElement = this.popupElement();
501
528
  if (!popupElement) {
502
529
  this.stopAutoScroll();
503
530
  return;
504
531
  }
505
532
  const isUp = direction === "up";
506
- const arrowHeight = (this.host.overlayRef()?.overlayElement.querySelector(isUp ? ".raqm-select-scroll-button--up" : ".raqm-select-scroll-button--down"))?.offsetHeight ?? 0;
507
- const rows = Array.from(popupElement.querySelectorAll(".raqm-select-option"));
533
+ const arrowHeight = this.arrowElement(direction)?.offsetHeight ?? 0;
534
+ const rows = popupElement.getElementsByClassName("raqm-select-option");
508
535
  const maxScrollTop = Math.max(0, popupElement.scrollHeight - popupElement.clientHeight);
509
536
  const scrollTop = this.normalizeScrollOffset(popupElement.scrollTop, maxScrollTop);
510
537
  if (scrollTop !== popupElement.scrollTop) popupElement.scrollTop = scrollTop;