@radix-ng/primitives 0.51.0 → 1.0.0-beta.0

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 (178) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs +105 -38
  2. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +221 -129
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-arrow.mjs +20 -4
  6. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-avatar.mjs +54 -61
  9. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-button.mjs +123 -0
  11. package/fesm2022/radix-ng-primitives-button.mjs.map +1 -0
  12. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-checkbox.mjs +378 -54
  14. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-collapsible.mjs +182 -81
  16. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  17. package/fesm2022/radix-ng-primitives-collection.mjs +40 -57
  18. package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-context-menu.mjs +140 -424
  21. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-core.mjs +735 -744
  23. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-cropper.mjs +1 -0
  25. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-date-field.mjs +51 -45
  27. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-dialog.mjs +655 -327
  29. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +70 -46
  31. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-drawer.mjs +1059 -0
  33. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
  34. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-field.mjs +363 -0
  36. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
  37. package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
  38. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-focus-scope.mjs +23 -8
  40. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  41. package/fesm2022/radix-ng-primitives-input.mjs +172 -0
  42. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
  43. package/fesm2022/radix-ng-primitives-label.mjs +6 -6
  44. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  45. package/fesm2022/radix-ng-primitives-menu.mjs +1480 -344
  46. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
  48. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
  50. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
  51. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1052 -1553
  52. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  53. package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -367
  54. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-popover.mjs +978 -989
  57. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-popper.mjs +91 -41
  59. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-portal.mjs +34 -10
  61. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
  63. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
  65. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
  66. package/fesm2022/radix-ng-primitives-progress.mjs +223 -84
  67. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  68. package/fesm2022/radix-ng-primitives-radio.mjs +191 -51
  69. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-roving-focus.mjs +96 -50
  71. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-select.mjs +791 -509
  73. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-separator.mjs +12 -35
  75. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  76. package/fesm2022/radix-ng-primitives-slider.mjs +969 -717
  77. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-stepper.mjs +15 -19
  79. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-switch.mjs +125 -113
  81. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-tabs.mjs +381 -108
  83. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-time-field.mjs +55 -46
  85. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-toggle-group.mjs +121 -247
  87. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-toggle.mjs +98 -61
  89. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-toolbar.mjs +303 -92
  91. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  92. package/fesm2022/radix-ng-primitives-tooltip.mjs +690 -1071
  93. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +25 -66
  95. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  96. package/meter/README.md +3 -0
  97. package/navigation-menu/README.md +2 -1
  98. package/package.json +31 -18
  99. package/portal/README.md +2 -0
  100. package/preview-card/README.md +3 -0
  101. package/schematics/collection.json +1 -0
  102. package/schematics/ng-add/index.d.ts +3 -2
  103. package/schematics/ng-add/index.js +62 -31
  104. package/schematics/ng-add/index.js.map +1 -1
  105. package/schematics/ng-add/package-config.d.ts +4 -2
  106. package/schematics/ng-add/package-config.js +10 -2
  107. package/schematics/ng-add/package-config.js.map +1 -1
  108. package/schematics/ng-add/schema.d.ts +3 -0
  109. package/schematics/ng-add/schema.js +3 -0
  110. package/schematics/ng-add/schema.js.map +1 -0
  111. package/schematics/ng-add/schema.json +14 -0
  112. package/select/README.md +2 -0
  113. package/types/radix-ng-primitives-accordion.d.ts +48 -14
  114. package/types/radix-ng-primitives-alert-dialog.d.ts +95 -38
  115. package/types/radix-ng-primitives-arrow.d.ts +1 -1
  116. package/types/radix-ng-primitives-aspect-ratio.d.ts +1 -1
  117. package/types/radix-ng-primitives-avatar.d.ts +7 -11
  118. package/types/radix-ng-primitives-button.d.ts +73 -0
  119. package/types/radix-ng-primitives-calendar.d.ts +1 -2
  120. package/types/radix-ng-primitives-checkbox.d.ts +201 -32
  121. package/types/radix-ng-primitives-collapsible.d.ts +112 -39
  122. package/types/radix-ng-primitives-collection.d.ts +38 -34
  123. package/types/radix-ng-primitives-config.d.ts +1 -1
  124. package/types/radix-ng-primitives-context-menu.d.ts +60 -116
  125. package/types/radix-ng-primitives-core.d.ts +307 -236
  126. package/types/radix-ng-primitives-cropper.d.ts +2 -2
  127. package/types/radix-ng-primitives-date-field.d.ts +38 -23
  128. package/types/radix-ng-primitives-dialog.d.ts +282 -165
  129. package/types/radix-ng-primitives-dismissable-layer.d.ts +15 -7
  130. package/types/radix-ng-primitives-drawer.d.ts +448 -0
  131. package/types/radix-ng-primitives-editable.d.ts +1 -1
  132. package/types/radix-ng-primitives-field.d.ts +373 -0
  133. package/types/radix-ng-primitives-fieldset.d.ts +48 -0
  134. package/types/radix-ng-primitives-focus-scope.d.ts +13 -5
  135. package/types/radix-ng-primitives-input.d.ts +87 -0
  136. package/types/radix-ng-primitives-label.d.ts +0 -1
  137. package/types/radix-ng-primitives-menu.d.ts +572 -99
  138. package/types/radix-ng-primitives-menubar.d.ts +60 -50
  139. package/types/radix-ng-primitives-meter.d.ts +193 -0
  140. package/types/radix-ng-primitives-navigation-menu.d.ts +422 -340
  141. package/types/radix-ng-primitives-number-field.d.ts +405 -145
  142. package/types/radix-ng-primitives-pagination.d.ts +2 -2
  143. package/types/radix-ng-primitives-popover.d.ts +365 -351
  144. package/types/radix-ng-primitives-popper.d.ts +49 -9
  145. package/types/radix-ng-primitives-portal.d.ts +14 -6
  146. package/types/radix-ng-primitives-presence.d.ts +28 -76
  147. package/types/radix-ng-primitives-preview-card.d.ts +359 -0
  148. package/types/radix-ng-primitives-progress.d.ts +174 -48
  149. package/types/radix-ng-primitives-radio.d.ts +55 -25
  150. package/types/radix-ng-primitives-roving-focus.d.ts +30 -21
  151. package/types/radix-ng-primitives-select.d.ts +475 -177
  152. package/types/radix-ng-primitives-separator.d.ts +7 -32
  153. package/types/radix-ng-primitives-slider.d.ts +315 -201
  154. package/types/radix-ng-primitives-stepper.d.ts +5 -7
  155. package/types/radix-ng-primitives-switch.d.ts +86 -71
  156. package/types/radix-ng-primitives-tabs.d.ts +213 -79
  157. package/types/radix-ng-primitives-time-field.d.ts +42 -27
  158. package/types/radix-ng-primitives-toggle-group.d.ts +85 -164
  159. package/types/radix-ng-primitives-toggle.d.ts +43 -53
  160. package/types/radix-ng-primitives-toolbar.d.ts +163 -38
  161. package/types/radix-ng-primitives-tooltip.d.ts +347 -384
  162. package/types/radix-ng-primitives-visually-hidden.d.ts +19 -19
  163. package/dropdown-menu/README.md +0 -1
  164. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -581
  165. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  166. package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1238
  167. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
  168. package/fesm2022/radix-ng-primitives-select2.mjs +0 -897
  169. package/fesm2022/radix-ng-primitives-select2.mjs.map +0 -1
  170. package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -735
  171. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
  172. package/hover-card/README.md +0 -3
  173. package/select2/README.md +0 -3
  174. package/tooltip2/README.md +0 -3
  175. package/types/radix-ng-primitives-dropdown-menu.d.ts +0 -171
  176. package/types/radix-ng-primitives-hover-card.d.ts +0 -471
  177. package/types/radix-ng-primitives-select2.d.ts +0 -511
  178. package/types/radix-ng-primitives-tooltip2.d.ts +0 -325
@@ -81,6 +81,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
81
81
  }]
82
82
  }], propDecorators: { imgClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "imgClass", required: false }] }], imgStyles: [{ type: i0.Input, args: [{ isSignal: true, alias: "imgStyles", required: false }] }] } });
83
83
 
84
+ // Based on https://github.com/origin-space/image-cropper/blob/main/src/Cropper.tsx
84
85
  class RdxCropperRootDirective {
85
86
  constructor() {
86
87
  this.elementRef = inject((ElementRef));
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-cropper.mjs","sources":["../../../packages/primitives/cropper/src/cropper-context.token.ts","../../../packages/primitives/cropper/src/cropper-crop-area.directive.ts","../../../packages/primitives/cropper/src/cropper-description.directive.ts","../../../packages/primitives/cropper/src/cropper-image.component.ts","../../../packages/primitives/cropper/src/cropper-root.directive.ts","../../../packages/primitives/cropper/index.ts","../../../packages/primitives/cropper/radix-ng-primitives-cropper.ts"],"sourcesContent":["import { inject, InjectionToken, InputSignal, WritableSignal } from '@angular/core';\n\nexport interface CropperContextToken {\n image: InputSignal<string>;\n getImageProps: () => { [key: string]: any };\n getImageWrapperStyle: () => Record<string, string>;\n getCropAreaStyle: () => Record<string, string>;\n descriptionId: WritableSignal<string>;\n}\n\nexport const CROPPER_ROOT_CONTEXT = new InjectionToken<CropperContextToken>('CROPPER_ROOT_CONTEXT');\n\nexport function injectCropperRootContext() {\n return inject(CROPPER_ROOT_CONTEXT);\n}\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperCropArea]',\n host: {\n '[style]': 'rootContext.getCropAreaStyle()'\n }\n})\nexport class RdxCropperCropAreaDirective {\n readonly rootContext = injectCropperRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperDescription]',\n host: {\n '[attr.id]': 'rootContext.descriptionId()'\n }\n})\nexport class RdxCropperDescriptionDirective {\n readonly rootContext = injectCropperRootContext();\n}\n","import { Component, computed, input } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Component({\n selector: '[rdxCropperImage]',\n host: {\n '[style]': 'rootContext.getImageWrapperStyle()'\n },\n template: `\n <img\n [class]=\"imgClasses()\"\n [src]=\"rootContext.getImageProps()['src']\"\n [alt]=\"rootContext.getImageProps()['alt']\"\n [draggable]=\"rootContext.getImageProps()['draggable']\"\n [style]=\"imgStyless()\"\n aria-hidden=\"true\"\n />\n `\n})\nexport class RdxCropperImageComponent {\n protected readonly rootContext = injectCropperRootContext();\n\n readonly imgClass = input<string>();\n\n readonly imgStyles = input<string>();\n\n protected readonly imgClasses = computed(() => this.imgClass());\n\n protected readonly imgStyless = computed(() => this.imgStyles());\n}\n","// Based on https://github.com/origin-space/image-cropper/blob/main/src/Cropper.tsx\n\nimport { NumberInput } from '@angular/cdk/coercion';\nimport {\n afterNextRender,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n signal\n} from '@angular/core';\nimport { clamp, provideToken } from '@radix-ng/primitives/core';\nimport { CROPPER_ROOT_CONTEXT, CropperContextToken } from './cropper-context.token';\n\nexport type Area = { x: number; y: number; width: number; height: number };\n\n@Directive({\n selector: '[rdxCropperRoot]',\n providers: [provideToken(CROPPER_ROOT_CONTEXT, RdxCropperRootDirective)],\n host: {\n '[attr.aria-label]': '\"Interactive image cropper\"',\n '[attr.aria-describedby]': 'descriptionId()',\n '[attr.aria-valuemin]': 'minZoom()',\n '[attr.aria-valuemax]': 'maxZoom()',\n '[attr.aria-valuenow]': 'effectiveZoom()',\n '[attr.aria-valuetext]': 'zoomValueText()',\n tabindex: '0',\n role: 'application',\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(keyup)': 'onKeyUp($event)'\n }\n})\nexport class RdxCropperRootDirective implements CropperContextToken {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly CROPPER_DESC_WARN_MESSAGE = `Warning: \\`Cropper\\` requires a description element for accessibility.`;\n\n readonly image = input.required<string>();\n readonly cropPadding = input(25, { transform: numberAttribute });\n readonly aspectRatio = input(1, { transform: numberAttribute });\n readonly minZoom = input(1, { transform: numberAttribute });\n readonly maxZoom = input(3, { transform: numberAttribute });\n readonly zoomSensitivity = input(0.005, { transform: numberAttribute });\n readonly keyboardStep = input(10, { transform: numberAttribute });\n readonly zoom = input<number, NumberInput>(undefined, { transform: numberAttribute });\n\n readonly onCropChange = output<Area | null>();\n readonly onZoomChange = output<number>();\n\n // State signals\n private readonly imgWidth = signal<number | null>(null);\n private readonly imgHeight = signal<number | null>(null);\n private readonly cropAreaWidth = signal(0);\n private readonly cropAreaHeight = signal(0);\n private readonly imageWrapperWidth = signal(0);\n private readonly imageWrapperHeight = signal(0);\n private readonly offsetX = signal(0);\n private readonly offsetY = signal(0);\n private readonly internalZoom = signal(this.minZoom());\n private readonly isDragging = signal(false);\n readonly descriptionId = signal(`cropper-${Math.random().toString(36).substring(2, 9)}`);\n\n private readonly isZoomControlled = computed(() => this.zoom() !== undefined);\n protected readonly effectiveZoom = computed(() => (this.isZoomControlled() ? this.zoom()! : this.internalZoom()));\n protected readonly zoomValueText = computed(() => {\n const zoomPercent = this.effectiveZoom() * 100;\n return `Zoom: ${zoomPercent.toFixed(0)}%`;\n });\n\n // Refs\n private readonly dragStartPoint = signal({ x: 0, y: 0 });\n private readonly dragStartOffset = signal({ x: 0, y: 0 });\n private readonly latestRestrictedOffset = signal({ x: 0, y: 0 });\n private readonly latestZoom = signal(this.minZoom());\n private readonly isInitialSetupDone = signal(false);\n private readonly initialPinchDistance = signal(0);\n private readonly initialPinchZoom = signal(1);\n private readonly isPinching = signal(false);\n private readonly hasWarned = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this.initializeContainerDimensions();\n });\n\n this.setupImageLoadEffect();\n this.setupDimensionsEffects();\n this.setupCropCalculationEffect();\n this.setupAccessibilityWarningEffect();\n this.setupEventListenersEffect();\n\n effect(() => {\n this.latestZoom.set(this.effectiveZoom());\n });\n }\n\n private updateZoom(newZoomValue: number): number {\n const clampedZoom = clamp(newZoomValue, this.minZoom(), this.maxZoom());\n\n this.onZoomChange.emit(clampedZoom);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(clampedZoom);\n }\n return clampedZoom;\n }\n\n private initializeContainerDimensions() {\n const element = this.elementRef.nativeElement;\n if (element && element.clientWidth > 0 && element.clientHeight > 0) {\n this.cropAreaWidth.set(Math.max(0, element.clientWidth - this.cropPadding() * 2));\n this.cropAreaHeight.set(Math.max(0, element.clientHeight - this.cropPadding() * 2));\n }\n }\n\n private setupImageLoadEffect() {\n effect(() => {\n const image = this.image();\n this.offsetX.set(0);\n this.offsetY.set(0);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n this.isInitialSetupDone.set(false);\n\n if (!image) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n return;\n }\n\n let isMounted = true;\n const img = new Image();\n img.onload = () => {\n if (isMounted) {\n this.imgWidth.set(img.naturalWidth);\n this.imgHeight.set(img.naturalHeight);\n }\n };\n img.onerror = () => {\n if (isMounted) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n }\n };\n img.src = image;\n\n return () => {\n isMounted = false;\n };\n });\n }\n\n private setupDimensionsEffects(): void {\n effect(() => {\n const element = this.elementRef.nativeElement;\n if (!element) return;\n\n const updateDimensions = (width: number, height: number) => {\n if (width <= 0 || height <= 0) {\n this.cropAreaWidth.set(0);\n this.cropAreaHeight.set(0);\n return;\n }\n\n const maxPossibleWidth = Math.max(0, width - this.cropPadding() * 2);\n const maxPossibleHeight = Math.max(0, height - this.cropPadding() * 2);\n let targetCropW: number, targetCropH: number;\n\n if (maxPossibleWidth / this.aspectRatio() >= maxPossibleHeight) {\n targetCropH = maxPossibleHeight;\n targetCropW = targetCropH * this.aspectRatio();\n } else {\n targetCropW = maxPossibleWidth;\n targetCropH = targetCropW / this.aspectRatio();\n }\n\n this.cropAreaWidth.set(targetCropW);\n this.cropAreaHeight.set(targetCropH);\n };\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0) updateDimensions(width, height);\n }\n });\n\n observer.observe(element);\n const initialWidth = element.clientWidth;\n const initialHeight = element.clientHeight;\n if (initialWidth > 0 && initialHeight > 0) {\n updateDimensions(initialWidth, initialHeight);\n }\n\n return () => observer.disconnect();\n });\n\n // Update image wrapper dimensions when crop area or image dimensions change\n effect(() => {\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n\n if (cropW <= 0 || cropH <= 0 || !imgW || !imgH) {\n this.imageWrapperWidth.set(0);\n this.imageWrapperHeight.set(0);\n return;\n }\n\n const naturalAspect = imgW / imgH;\n const cropAspect = cropW / cropH;\n let targetWrapperWidth: number, targetWrapperHeight: number;\n\n if (naturalAspect >= cropAspect) {\n targetWrapperHeight = cropH;\n targetWrapperWidth = targetWrapperHeight * naturalAspect;\n } else {\n targetWrapperWidth = cropW;\n targetWrapperHeight = targetWrapperWidth / naturalAspect;\n }\n\n this.imageWrapperWidth.set(targetWrapperWidth);\n this.imageWrapperHeight.set(targetWrapperHeight);\n });\n }\n\n private restrictOffset(dragOffsetX: number, dragOffsetY: number, currentZoom: number): { x: number; y: number } {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n\n if (wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return { x: 0, y: 0 };\n }\n\n const effectiveWrapperWidth = wrapperW * currentZoom;\n const effectiveWrapperHeight = wrapperH * currentZoom;\n const maxDragX = Math.max(0, (effectiveWrapperWidth - cropW) / 2);\n const maxDragY = Math.max(0, (effectiveWrapperHeight - cropH) / 2);\n\n return {\n x: clamp(dragOffsetX, -maxDragX, maxDragX),\n y: clamp(dragOffsetY, -maxDragY, maxDragY)\n };\n }\n\n private calculateCropData(finalOffsetX?: number, finalOffsetY?: number, finalZoom?: number): Area | null {\n const currentOffsetX = finalOffsetX ?? this.latestRestrictedOffset().x;\n const currentOffsetY = finalOffsetY ?? this.latestRestrictedOffset().y;\n const currentZoom = finalZoom ?? this.effectiveZoom();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n\n if (!imgW || !imgH || wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return null;\n }\n\n const scaledWrapperWidth = wrapperW * currentZoom;\n const scaledWrapperHeight = wrapperH * currentZoom;\n const topLeftOffsetX = currentOffsetX + (cropW - scaledWrapperWidth) / 2;\n const topLeftOffsetY = currentOffsetY + (cropH - scaledWrapperHeight) / 2;\n const baseScale = imgW / wrapperW;\n\n if (isNaN(baseScale) || baseScale === 0) {\n return null;\n }\n\n const sx = (-topLeftOffsetX * baseScale) / currentZoom;\n const sy = (-topLeftOffsetY * baseScale) / currentZoom;\n const sWidth = (cropW * baseScale) / currentZoom;\n const sHeight = (cropH * baseScale) / currentZoom;\n\n const finalX = clamp(Math.round(sx), 0, imgW);\n const finalY = clamp(Math.round(sy), 0, imgH);\n const finalWidth = clamp(Math.round(sWidth), 0, imgW - finalX);\n const finalHeight = clamp(Math.round(sHeight), 0, imgH - finalY);\n\n if (finalWidth <= 0 || finalHeight <= 0) {\n return null;\n }\n\n return { x: finalX, y: finalY, width: finalWidth, height: finalHeight };\n }\n\n private setupCropCalculationEffect(): void {\n effect(() => {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const currentZoom = this.effectiveZoom();\n\n if (wrapperW > 0 && wrapperH > 0 && cropW > 0 && cropH > 0) {\n if (!this.isInitialSetupDone()) {\n const restrictedInitial = this.restrictOffset(0, 0, currentZoom);\n this.offsetX.set(restrictedInitial.x);\n this.offsetY.set(restrictedInitial.y);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(currentZoom);\n }\n\n this.dragStartOffset.set(restrictedInitial);\n this.latestRestrictedOffset.set(restrictedInitial);\n this.latestZoom.set(currentZoom);\n\n this.onCropChange.emit(\n this.calculateCropData(restrictedInitial.x, restrictedInitial.y, currentZoom)\n );\n\n this.isInitialSetupDone.set(true);\n } else {\n const currentX = this.latestRestrictedOffset().x;\n const currentY = this.latestRestrictedOffset().y;\n const restrictedCurrent = this.restrictOffset(currentX, currentY, currentZoom);\n\n if (restrictedCurrent.x !== currentX || restrictedCurrent.y !== currentY) {\n this.offsetX.set(restrictedCurrent.x);\n this.offsetY.set(restrictedCurrent.y);\n this.latestRestrictedOffset.set(restrictedCurrent);\n this.dragStartOffset.set(restrictedCurrent);\n }\n\n this.onCropChange.emit(\n this.calculateCropData(restrictedCurrent.x, restrictedCurrent.y, currentZoom)\n );\n }\n } else {\n this.isInitialSetupDone.set(false);\n this.offsetX.set(0);\n this.offsetY.set(0);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n this.dragStartOffset.set({ x: 0, y: 0 });\n this.latestRestrictedOffset.set({ x: 0, y: 0 });\n this.latestZoom.set(currentZoom);\n this.onCropChange.emit(null);\n }\n });\n }\n\n private setupAccessibilityWarningEffect(): void {\n effect(() => {\n const checkTimeout = setTimeout(() => {\n if (this.elementRef.nativeElement && !this.hasWarned()) {\n const hasDescription = document.getElementById(this.descriptionId());\n if (!hasDescription) {\n console.warn(this.CROPPER_DESC_WARN_MESSAGE);\n this.hasWarned.set(true);\n }\n }\n }, 100);\n\n return () => clearTimeout(checkTimeout);\n });\n }\n\n private setupEventListenersEffect(): void {\n effect((onCleanup) => {\n const node = this.elementRef.nativeElement;\n if (!node) return;\n\n const options = { passive: false } as any;\n\n const wheelHandler = (e: WheelEvent) => this.handleWheel(e);\n const touchStartHandler = (e: TouchEvent) => this.handleTouchStart(e);\n const touchMoveHandler = (e: TouchEvent) => this.handleTouchMove(e);\n const touchEndHandler = (e: TouchEvent) => this.handleTouchEnd(e);\n\n node.addEventListener('wheel', wheelHandler, options);\n node.addEventListener('touchstart', touchStartHandler, options);\n node.addEventListener('touchmove', touchMoveHandler, options);\n node.addEventListener('touchend', touchEndHandler, options);\n node.addEventListener('touchcancel', touchEndHandler, options);\n\n onCleanup(() => {\n node.removeEventListener('wheel', wheelHandler, options);\n node.removeEventListener('touchstart', touchStartHandler, options);\n node.removeEventListener('touchmove', touchMoveHandler, options);\n node.removeEventListener('touchend', touchEndHandler, options);\n node.removeEventListener('touchcancel', touchEndHandler, options);\n });\n });\n }\n\n private handleInteractionEnd(): void {\n const finalData = this.calculateCropData(\n this.latestRestrictedOffset().x,\n this.latestRestrictedOffset().y,\n this.effectiveZoom()\n );\n this.onCropChange.emit(finalData);\n }\n\n /**\n * @ignore\n */\n onMouseDown(e: MouseEvent): void {\n if (e.button !== 0) return;\n e.preventDefault();\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: e.clientX, y: e.clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n\n const handleMouseMove = (ev: MouseEvent) => {\n const deltaX = ev.clientX - this.dragStartPoint().x;\n const deltaY = ev.clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n };\n\n const handleMouseUp = () => {\n this.isDragging.set(false);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n this.handleInteractionEnd();\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }\n\n private handleWheel(e: WheelEvent): void {\n e.preventDefault();\n e.stopPropagation();\n if (!this.elementRef.nativeElement || this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n\n const currentZoom = this.latestZoom();\n const currentOffsetX = this.latestRestrictedOffset().x;\n const currentOffsetY = this.latestRestrictedOffset().y;\n const delta = e.deltaY * -this.zoomSensitivity();\n const targetZoom = currentZoom + delta;\n\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === currentZoom) return;\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pointerX = e.clientX - rect.left - rect.width / 2;\n const pointerY = e.clientY - rect.top - rect.height / 2;\n const imagePointX = (pointerX - currentOffsetX) / currentZoom;\n const imagePointY = (pointerY - currentOffsetY) / currentZoom;\n\n const finalNewZoom = this.updateZoom(targetZoom);\n\n const newOffsetX = pointerX - imagePointX * finalNewZoom;\n const newOffsetY = pointerY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n\n private getPinchDistance(touches: TouchList): number {\n return Math.sqrt(\n Math.pow(touches[1].clientX - touches[0].clientX, 2) + Math.pow(touches[1].clientY - touches[0].clientY, 2)\n );\n }\n\n private getPinchCenter(touches: TouchList): { x: number; y: number } {\n return {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n }\n\n private handleTouchStart(e: TouchEvent): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n e.preventDefault();\n const touches = e.touches;\n\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n } else if (touches.length === 2) {\n this.isDragging.set(false);\n this.isPinching.set(true);\n this.initialPinchDistance.set(this.getPinchDistance(touches));\n this.initialPinchZoom.set(this.latestZoom());\n this.dragStartOffset.set(this.latestRestrictedOffset());\n }\n }\n\n private handleTouchMove(e: TouchEvent): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n e.preventDefault();\n const touches = e.touches;\n\n if (touches.length === 1 && this.isDragging() && !this.isPinching()) {\n const deltaX = touches[0].clientX - this.dragStartPoint().x;\n const deltaY = touches[0].clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n } else if (touches.length === 2 && this.isPinching()) {\n const currentPinchDistance = this.getPinchDistance(touches);\n const scale = currentPinchDistance / this.initialPinchDistance();\n const currentZoom = this.initialPinchZoom();\n const targetZoom = currentZoom * scale;\n\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === this.latestZoom()) return;\n\n const pinchCenter = this.getPinchCenter(touches);\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pinchCenterX = pinchCenter.x - rect.left - rect.width / 2;\n const pinchCenterY = pinchCenter.y - rect.top - rect.height / 2;\n const currentOffsetX = this.dragStartOffset().x;\n const currentOffsetY = this.dragStartOffset().y;\n const imagePointX = (pinchCenterX - currentOffsetX) / currentZoom;\n const imagePointY = (pinchCenterY - currentOffsetY) / currentZoom;\n\n const finalNewZoom = this.updateZoom(targetZoom);\n\n const newOffsetX = pinchCenterX - imagePointX * finalNewZoom;\n const newOffsetY = pinchCenterY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n }\n\n private handleTouchEnd(e: TouchEvent): void {\n e.preventDefault();\n const touches = e.touches;\n\n if (this.isPinching() && touches.length < 2) {\n this.isPinching.set(false);\n\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n } else {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n } else if (this.isDragging() && touches.length === 0) {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n }\n\n /**\n * @ignore\n */\n onKeyDown(e: KeyboardEvent): void {\n if (this.imageWrapperWidth() <= 0) return;\n\n let targetOffsetX = this.latestRestrictedOffset().x;\n let targetOffsetY = this.latestRestrictedOffset().y;\n // eslint-disable-next-line no-useless-assignment\n let moved = false;\n\n switch (e.key) {\n case 'ArrowUp':\n targetOffsetY += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowDown':\n targetOffsetY -= this.keyboardStep();\n moved = true;\n break;\n case 'ArrowLeft':\n targetOffsetX += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowRight':\n targetOffsetX -= this.keyboardStep();\n moved = true;\n break;\n default:\n return;\n }\n\n if (moved) {\n e.preventDefault();\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n if (restricted.x !== this.latestRestrictedOffset().x || restricted.y !== this.latestRestrictedOffset().y) {\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n }\n }\n }\n\n /**\n * @ignore\n */\n onKeyUp(e: KeyboardEvent): void {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n this.handleInteractionEnd();\n }\n }\n\n /**\n * @ignore\n */\n getImageProps(): { [key: string]: any } {\n return {\n src: this.image(),\n alt: 'Image being cropped',\n draggable: false,\n 'aria-hidden': true\n };\n }\n\n /**\n * @ignore\n */\n getImageWrapperStyle(): Record<string, string> {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const offsetX = this.offsetX();\n const offsetY = this.offsetY();\n const zoom = this.effectiveZoom();\n\n return {\n width: `${wrapperW}px`,\n height: `${wrapperH}px`,\n transform: `translate3d(${offsetX}px, ${offsetY}px, 0px) scale(${zoom})`,\n position: 'absolute',\n left: `calc(50% - ${wrapperW / 2}px)`,\n top: `calc(50% - ${wrapperH / 2}px)`,\n willChange: 'transform'\n };\n }\n\n /**\n * @ignore\n */\n getCropAreaStyle(): Record<string, string> {\n return {\n width: `${this.cropAreaWidth()}px`,\n height: `${this.cropAreaHeight()}px`\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxCropperCropAreaDirective } from './src/cropper-crop-area.directive';\nimport { RdxCropperDescriptionDirective } from './src/cropper-description.directive';\nimport { RdxCropperImageComponent } from './src/cropper-image.component';\nimport { RdxCropperRootDirective } from './src/cropper-root.directive';\n\nexport * from './src/cropper-context.token';\nexport * from './src/cropper-crop-area.directive';\nexport * from './src/cropper-description.directive';\nexport * from './src/cropper-image.component';\nexport * from './src/cropper-root.directive';\n\nconst _imports = [\n RdxCropperRootDirective,\n RdxCropperImageComponent,\n RdxCropperCropAreaDirective,\n RdxCropperDescriptionDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxCropperModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-cropper.mjs","sources":["../../../packages/primitives/cropper/src/cropper-context.token.ts","../../../packages/primitives/cropper/src/cropper-crop-area.directive.ts","../../../packages/primitives/cropper/src/cropper-description.directive.ts","../../../packages/primitives/cropper/src/cropper-image.component.ts","../../../packages/primitives/cropper/src/cropper-root.directive.ts","../../../packages/primitives/cropper/index.ts","../../../packages/primitives/cropper/radix-ng-primitives-cropper.ts"],"sourcesContent":["import { inject, InjectionToken, InputSignal, WritableSignal } from '@angular/core';\n\nexport interface CropperContextToken {\n image: InputSignal<string>;\n getImageProps: () => { [key: string]: any };\n getImageWrapperStyle: () => Record<string, string>;\n getCropAreaStyle: () => Record<string, string>;\n descriptionId: WritableSignal<string>;\n}\n\nexport const CROPPER_ROOT_CONTEXT = new InjectionToken<CropperContextToken>('CROPPER_ROOT_CONTEXT');\n\nexport function injectCropperRootContext() {\n return inject(CROPPER_ROOT_CONTEXT);\n}\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperCropArea]',\n host: {\n '[style]': 'rootContext.getCropAreaStyle()'\n }\n})\nexport class RdxCropperCropAreaDirective {\n readonly rootContext = injectCropperRootContext();\n}\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperDescription]',\n host: {\n '[attr.id]': 'rootContext.descriptionId()'\n }\n})\nexport class RdxCropperDescriptionDirective {\n readonly rootContext = injectCropperRootContext();\n}\n","import { Component, computed, input } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Component({\n selector: '[rdxCropperImage]',\n host: {\n '[style]': 'rootContext.getImageWrapperStyle()'\n },\n template: `\n <img\n [class]=\"imgClasses()\"\n [src]=\"rootContext.getImageProps()['src']\"\n [alt]=\"rootContext.getImageProps()['alt']\"\n [draggable]=\"rootContext.getImageProps()['draggable']\"\n [style]=\"imgStyless()\"\n aria-hidden=\"true\"\n />\n `\n})\nexport class RdxCropperImageComponent {\n protected readonly rootContext = injectCropperRootContext();\n\n readonly imgClass = input<string>();\n\n readonly imgStyles = input<string>();\n\n protected readonly imgClasses = computed(() => this.imgClass());\n\n protected readonly imgStyless = computed(() => this.imgStyles());\n}\n","// Based on https://github.com/origin-space/image-cropper/blob/main/src/Cropper.tsx\n\nimport {\n afterNextRender,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n signal\n} from '@angular/core';\nimport { clamp, NumberInput, provideToken } from '@radix-ng/primitives/core';\nimport { CROPPER_ROOT_CONTEXT, CropperContextToken } from './cropper-context.token';\n\nexport type Area = { x: number; y: number; width: number; height: number };\n\n@Directive({\n selector: '[rdxCropperRoot]',\n providers: [provideToken(CROPPER_ROOT_CONTEXT, RdxCropperRootDirective)],\n host: {\n '[attr.aria-label]': '\"Interactive image cropper\"',\n '[attr.aria-describedby]': 'descriptionId()',\n '[attr.aria-valuemin]': 'minZoom()',\n '[attr.aria-valuemax]': 'maxZoom()',\n '[attr.aria-valuenow]': 'effectiveZoom()',\n '[attr.aria-valuetext]': 'zoomValueText()',\n tabindex: '0',\n role: 'application',\n '(mousedown)': 'onMouseDown($event)',\n '(keydown)': 'onKeyDown($event)',\n '(keyup)': 'onKeyUp($event)'\n }\n})\nexport class RdxCropperRootDirective implements CropperContextToken {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly CROPPER_DESC_WARN_MESSAGE = `Warning: \\`Cropper\\` requires a description element for accessibility.`;\n\n readonly image = input.required<string>();\n readonly cropPadding = input(25, { transform: numberAttribute });\n readonly aspectRatio = input(1, { transform: numberAttribute });\n readonly minZoom = input(1, { transform: numberAttribute });\n readonly maxZoom = input(3, { transform: numberAttribute });\n readonly zoomSensitivity = input(0.005, { transform: numberAttribute });\n readonly keyboardStep = input(10, { transform: numberAttribute });\n readonly zoom = input<number, NumberInput>(undefined, { transform: numberAttribute });\n\n readonly onCropChange = output<Area | null>();\n readonly onZoomChange = output<number>();\n\n // State signals\n private readonly imgWidth = signal<number | null>(null);\n private readonly imgHeight = signal<number | null>(null);\n private readonly cropAreaWidth = signal(0);\n private readonly cropAreaHeight = signal(0);\n private readonly imageWrapperWidth = signal(0);\n private readonly imageWrapperHeight = signal(0);\n private readonly offsetX = signal(0);\n private readonly offsetY = signal(0);\n private readonly internalZoom = signal(this.minZoom());\n private readonly isDragging = signal(false);\n readonly descriptionId = signal(`cropper-${Math.random().toString(36).substring(2, 9)}`);\n\n private readonly isZoomControlled = computed(() => this.zoom() !== undefined);\n protected readonly effectiveZoom = computed(() => (this.isZoomControlled() ? this.zoom()! : this.internalZoom()));\n protected readonly zoomValueText = computed(() => {\n const zoomPercent = this.effectiveZoom() * 100;\n return `Zoom: ${zoomPercent.toFixed(0)}%`;\n });\n\n // Refs\n private readonly dragStartPoint = signal({ x: 0, y: 0 });\n private readonly dragStartOffset = signal({ x: 0, y: 0 });\n private readonly latestRestrictedOffset = signal({ x: 0, y: 0 });\n private readonly latestZoom = signal(this.minZoom());\n private readonly isInitialSetupDone = signal(false);\n private readonly initialPinchDistance = signal(0);\n private readonly initialPinchZoom = signal(1);\n private readonly isPinching = signal(false);\n private readonly hasWarned = signal(false);\n\n constructor() {\n afterNextRender(() => {\n this.initializeContainerDimensions();\n });\n\n this.setupImageLoadEffect();\n this.setupDimensionsEffects();\n this.setupCropCalculationEffect();\n this.setupAccessibilityWarningEffect();\n this.setupEventListenersEffect();\n\n effect(() => {\n this.latestZoom.set(this.effectiveZoom());\n });\n }\n\n private updateZoom(newZoomValue: number): number {\n const clampedZoom = clamp(newZoomValue, this.minZoom(), this.maxZoom());\n\n this.onZoomChange.emit(clampedZoom);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(clampedZoom);\n }\n return clampedZoom;\n }\n\n private initializeContainerDimensions() {\n const element = this.elementRef.nativeElement;\n if (element && element.clientWidth > 0 && element.clientHeight > 0) {\n this.cropAreaWidth.set(Math.max(0, element.clientWidth - this.cropPadding() * 2));\n this.cropAreaHeight.set(Math.max(0, element.clientHeight - this.cropPadding() * 2));\n }\n }\n\n private setupImageLoadEffect() {\n effect(() => {\n const image = this.image();\n this.offsetX.set(0);\n this.offsetY.set(0);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n this.isInitialSetupDone.set(false);\n\n if (!image) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n return;\n }\n\n let isMounted = true;\n const img = new Image();\n img.onload = () => {\n if (isMounted) {\n this.imgWidth.set(img.naturalWidth);\n this.imgHeight.set(img.naturalHeight);\n }\n };\n img.onerror = () => {\n if (isMounted) {\n this.imgWidth.set(null);\n this.imgHeight.set(null);\n }\n };\n img.src = image;\n\n return () => {\n isMounted = false;\n };\n });\n }\n\n private setupDimensionsEffects(): void {\n effect(() => {\n const element = this.elementRef.nativeElement;\n if (!element) return;\n\n const updateDimensions = (width: number, height: number) => {\n if (width <= 0 || height <= 0) {\n this.cropAreaWidth.set(0);\n this.cropAreaHeight.set(0);\n return;\n }\n\n const maxPossibleWidth = Math.max(0, width - this.cropPadding() * 2);\n const maxPossibleHeight = Math.max(0, height - this.cropPadding() * 2);\n let targetCropW: number, targetCropH: number;\n\n if (maxPossibleWidth / this.aspectRatio() >= maxPossibleHeight) {\n targetCropH = maxPossibleHeight;\n targetCropW = targetCropH * this.aspectRatio();\n } else {\n targetCropW = maxPossibleWidth;\n targetCropH = targetCropW / this.aspectRatio();\n }\n\n this.cropAreaWidth.set(targetCropW);\n this.cropAreaHeight.set(targetCropH);\n };\n\n const observer = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0) updateDimensions(width, height);\n }\n });\n\n observer.observe(element);\n const initialWidth = element.clientWidth;\n const initialHeight = element.clientHeight;\n if (initialWidth > 0 && initialHeight > 0) {\n updateDimensions(initialWidth, initialHeight);\n }\n\n return () => observer.disconnect();\n });\n\n // Update image wrapper dimensions when crop area or image dimensions change\n effect(() => {\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n\n if (cropW <= 0 || cropH <= 0 || !imgW || !imgH) {\n this.imageWrapperWidth.set(0);\n this.imageWrapperHeight.set(0);\n return;\n }\n\n const naturalAspect = imgW / imgH;\n const cropAspect = cropW / cropH;\n let targetWrapperWidth: number, targetWrapperHeight: number;\n\n if (naturalAspect >= cropAspect) {\n targetWrapperHeight = cropH;\n targetWrapperWidth = targetWrapperHeight * naturalAspect;\n } else {\n targetWrapperWidth = cropW;\n targetWrapperHeight = targetWrapperWidth / naturalAspect;\n }\n\n this.imageWrapperWidth.set(targetWrapperWidth);\n this.imageWrapperHeight.set(targetWrapperHeight);\n });\n }\n\n private restrictOffset(dragOffsetX: number, dragOffsetY: number, currentZoom: number): { x: number; y: number } {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n\n if (wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return { x: 0, y: 0 };\n }\n\n const effectiveWrapperWidth = wrapperW * currentZoom;\n const effectiveWrapperHeight = wrapperH * currentZoom;\n const maxDragX = Math.max(0, (effectiveWrapperWidth - cropW) / 2);\n const maxDragY = Math.max(0, (effectiveWrapperHeight - cropH) / 2);\n\n return {\n x: clamp(dragOffsetX, -maxDragX, maxDragX),\n y: clamp(dragOffsetY, -maxDragY, maxDragY)\n };\n }\n\n private calculateCropData(finalOffsetX?: number, finalOffsetY?: number, finalZoom?: number): Area | null {\n const currentOffsetX = finalOffsetX ?? this.latestRestrictedOffset().x;\n const currentOffsetY = finalOffsetY ?? this.latestRestrictedOffset().y;\n const currentZoom = finalZoom ?? this.effectiveZoom();\n const imgW = this.imgWidth();\n const imgH = this.imgHeight();\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n\n if (!imgW || !imgH || wrapperW <= 0 || wrapperH <= 0 || cropW <= 0 || cropH <= 0) {\n return null;\n }\n\n const scaledWrapperWidth = wrapperW * currentZoom;\n const scaledWrapperHeight = wrapperH * currentZoom;\n const topLeftOffsetX = currentOffsetX + (cropW - scaledWrapperWidth) / 2;\n const topLeftOffsetY = currentOffsetY + (cropH - scaledWrapperHeight) / 2;\n const baseScale = imgW / wrapperW;\n\n if (isNaN(baseScale) || baseScale === 0) {\n return null;\n }\n\n const sx = (-topLeftOffsetX * baseScale) / currentZoom;\n const sy = (-topLeftOffsetY * baseScale) / currentZoom;\n const sWidth = (cropW * baseScale) / currentZoom;\n const sHeight = (cropH * baseScale) / currentZoom;\n\n const finalX = clamp(Math.round(sx), 0, imgW);\n const finalY = clamp(Math.round(sy), 0, imgH);\n const finalWidth = clamp(Math.round(sWidth), 0, imgW - finalX);\n const finalHeight = clamp(Math.round(sHeight), 0, imgH - finalY);\n\n if (finalWidth <= 0 || finalHeight <= 0) {\n return null;\n }\n\n return { x: finalX, y: finalY, width: finalWidth, height: finalHeight };\n }\n\n private setupCropCalculationEffect(): void {\n effect(() => {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const cropW = this.cropAreaWidth();\n const cropH = this.cropAreaHeight();\n const currentZoom = this.effectiveZoom();\n\n if (wrapperW > 0 && wrapperH > 0 && cropW > 0 && cropH > 0) {\n if (!this.isInitialSetupDone()) {\n const restrictedInitial = this.restrictOffset(0, 0, currentZoom);\n this.offsetX.set(restrictedInitial.x);\n this.offsetY.set(restrictedInitial.y);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(currentZoom);\n }\n\n this.dragStartOffset.set(restrictedInitial);\n this.latestRestrictedOffset.set(restrictedInitial);\n this.latestZoom.set(currentZoom);\n\n this.onCropChange.emit(\n this.calculateCropData(restrictedInitial.x, restrictedInitial.y, currentZoom)\n );\n\n this.isInitialSetupDone.set(true);\n } else {\n const currentX = this.latestRestrictedOffset().x;\n const currentY = this.latestRestrictedOffset().y;\n const restrictedCurrent = this.restrictOffset(currentX, currentY, currentZoom);\n\n if (restrictedCurrent.x !== currentX || restrictedCurrent.y !== currentY) {\n this.offsetX.set(restrictedCurrent.x);\n this.offsetY.set(restrictedCurrent.y);\n this.latestRestrictedOffset.set(restrictedCurrent);\n this.dragStartOffset.set(restrictedCurrent);\n }\n\n this.onCropChange.emit(\n this.calculateCropData(restrictedCurrent.x, restrictedCurrent.y, currentZoom)\n );\n }\n } else {\n this.isInitialSetupDone.set(false);\n this.offsetX.set(0);\n this.offsetY.set(0);\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n this.dragStartOffset.set({ x: 0, y: 0 });\n this.latestRestrictedOffset.set({ x: 0, y: 0 });\n this.latestZoom.set(currentZoom);\n this.onCropChange.emit(null);\n }\n });\n }\n\n private setupAccessibilityWarningEffect(): void {\n effect(() => {\n const checkTimeout = setTimeout(() => {\n if (this.elementRef.nativeElement && !this.hasWarned()) {\n const hasDescription = document.getElementById(this.descriptionId());\n if (!hasDescription) {\n console.warn(this.CROPPER_DESC_WARN_MESSAGE);\n this.hasWarned.set(true);\n }\n }\n }, 100);\n\n return () => clearTimeout(checkTimeout);\n });\n }\n\n private setupEventListenersEffect(): void {\n effect((onCleanup) => {\n const node = this.elementRef.nativeElement;\n if (!node) return;\n\n const options = { passive: false } as any;\n\n const wheelHandler = (e: WheelEvent) => this.handleWheel(e);\n const touchStartHandler = (e: TouchEvent) => this.handleTouchStart(e);\n const touchMoveHandler = (e: TouchEvent) => this.handleTouchMove(e);\n const touchEndHandler = (e: TouchEvent) => this.handleTouchEnd(e);\n\n node.addEventListener('wheel', wheelHandler, options);\n node.addEventListener('touchstart', touchStartHandler, options);\n node.addEventListener('touchmove', touchMoveHandler, options);\n node.addEventListener('touchend', touchEndHandler, options);\n node.addEventListener('touchcancel', touchEndHandler, options);\n\n onCleanup(() => {\n node.removeEventListener('wheel', wheelHandler, options);\n node.removeEventListener('touchstart', touchStartHandler, options);\n node.removeEventListener('touchmove', touchMoveHandler, options);\n node.removeEventListener('touchend', touchEndHandler, options);\n node.removeEventListener('touchcancel', touchEndHandler, options);\n });\n });\n }\n\n private handleInteractionEnd(): void {\n const finalData = this.calculateCropData(\n this.latestRestrictedOffset().x,\n this.latestRestrictedOffset().y,\n this.effectiveZoom()\n );\n this.onCropChange.emit(finalData);\n }\n\n /**\n * @ignore\n */\n onMouseDown(e: MouseEvent): void {\n if (e.button !== 0) return;\n e.preventDefault();\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: e.clientX, y: e.clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n\n const handleMouseMove = (ev: MouseEvent) => {\n const deltaX = ev.clientX - this.dragStartPoint().x;\n const deltaY = ev.clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n };\n\n const handleMouseUp = () => {\n this.isDragging.set(false);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n this.handleInteractionEnd();\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }\n\n private handleWheel(e: WheelEvent): void {\n e.preventDefault();\n e.stopPropagation();\n if (!this.elementRef.nativeElement || this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n\n const currentZoom = this.latestZoom();\n const currentOffsetX = this.latestRestrictedOffset().x;\n const currentOffsetY = this.latestRestrictedOffset().y;\n const delta = e.deltaY * -this.zoomSensitivity();\n const targetZoom = currentZoom + delta;\n\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === currentZoom) return;\n\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pointerX = e.clientX - rect.left - rect.width / 2;\n const pointerY = e.clientY - rect.top - rect.height / 2;\n const imagePointX = (pointerX - currentOffsetX) / currentZoom;\n const imagePointY = (pointerY - currentOffsetY) / currentZoom;\n\n const finalNewZoom = this.updateZoom(targetZoom);\n\n const newOffsetX = pointerX - imagePointX * finalNewZoom;\n const newOffsetY = pointerY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n\n private getPinchDistance(touches: TouchList): number {\n return Math.sqrt(\n Math.pow(touches[1].clientX - touches[0].clientX, 2) + Math.pow(touches[1].clientY - touches[0].clientY, 2)\n );\n }\n\n private getPinchCenter(touches: TouchList): { x: number; y: number } {\n return {\n x: (touches[0].clientX + touches[1].clientX) / 2,\n y: (touches[0].clientY + touches[1].clientY) / 2\n };\n }\n\n private handleTouchStart(e: TouchEvent): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n e.preventDefault();\n const touches = e.touches;\n\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.isPinching.set(false);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n } else if (touches.length === 2) {\n this.isDragging.set(false);\n this.isPinching.set(true);\n this.initialPinchDistance.set(this.getPinchDistance(touches));\n this.initialPinchZoom.set(this.latestZoom());\n this.dragStartOffset.set(this.latestRestrictedOffset());\n }\n }\n\n private handleTouchMove(e: TouchEvent): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n e.preventDefault();\n const touches = e.touches;\n\n if (touches.length === 1 && this.isDragging() && !this.isPinching()) {\n const deltaX = touches[0].clientX - this.dragStartPoint().x;\n const deltaY = touches[0].clientY - this.dragStartPoint().y;\n const targetOffsetX = this.dragStartOffset().x + deltaX;\n const targetOffsetY = this.dragStartOffset().y + deltaY;\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n } else if (touches.length === 2 && this.isPinching()) {\n const currentPinchDistance = this.getPinchDistance(touches);\n const scale = currentPinchDistance / this.initialPinchDistance();\n const currentZoom = this.initialPinchZoom();\n const targetZoom = currentZoom * scale;\n\n if (clamp(targetZoom, this.minZoom(), this.maxZoom()) === this.latestZoom()) return;\n\n const pinchCenter = this.getPinchCenter(touches);\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const pinchCenterX = pinchCenter.x - rect.left - rect.width / 2;\n const pinchCenterY = pinchCenter.y - rect.top - rect.height / 2;\n const currentOffsetX = this.dragStartOffset().x;\n const currentOffsetY = this.dragStartOffset().y;\n const imagePointX = (pinchCenterX - currentOffsetX) / currentZoom;\n const imagePointY = (pinchCenterY - currentOffsetY) / currentZoom;\n\n const finalNewZoom = this.updateZoom(targetZoom);\n\n const newOffsetX = pinchCenterX - imagePointX * finalNewZoom;\n const newOffsetY = pinchCenterY - imagePointY * finalNewZoom;\n const restrictedNewOffset = this.restrictOffset(newOffsetX, newOffsetY, finalNewZoom);\n\n this.offsetX.set(restrictedNewOffset.x);\n this.offsetY.set(restrictedNewOffset.y);\n this.latestRestrictedOffset.set(restrictedNewOffset);\n\n const finalData = this.calculateCropData(restrictedNewOffset.x, restrictedNewOffset.y, finalNewZoom);\n this.onCropChange.emit(finalData);\n }\n }\n\n private handleTouchEnd(e: TouchEvent): void {\n e.preventDefault();\n const touches = e.touches;\n\n if (this.isPinching() && touches.length < 2) {\n this.isPinching.set(false);\n\n if (touches.length === 1) {\n this.isDragging.set(true);\n this.dragStartPoint.set({ x: touches[0].clientX, y: touches[0].clientY });\n this.dragStartOffset.set(this.latestRestrictedOffset());\n } else {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n } else if (this.isDragging() && touches.length === 0) {\n this.isDragging.set(false);\n this.handleInteractionEnd();\n }\n }\n\n /**\n * @ignore\n */\n onKeyDown(e: KeyboardEvent): void {\n if (this.imageWrapperWidth() <= 0) return;\n\n let targetOffsetX = this.latestRestrictedOffset().x;\n let targetOffsetY = this.latestRestrictedOffset().y;\n // eslint-disable-next-line no-useless-assignment\n let moved = false;\n\n switch (e.key) {\n case 'ArrowUp':\n targetOffsetY += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowDown':\n targetOffsetY -= this.keyboardStep();\n moved = true;\n break;\n case 'ArrowLeft':\n targetOffsetX += this.keyboardStep();\n moved = true;\n break;\n case 'ArrowRight':\n targetOffsetX -= this.keyboardStep();\n moved = true;\n break;\n default:\n return;\n }\n\n if (moved) {\n e.preventDefault();\n const restricted = this.restrictOffset(targetOffsetX, targetOffsetY, this.effectiveZoom());\n if (restricted.x !== this.latestRestrictedOffset().x || restricted.y !== this.latestRestrictedOffset().y) {\n this.latestRestrictedOffset.set(restricted);\n this.offsetX.set(restricted.x);\n this.offsetY.set(restricted.y);\n }\n }\n }\n\n /**\n * @ignore\n */\n onKeyUp(e: KeyboardEvent): void {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(e.key)) {\n this.handleInteractionEnd();\n }\n }\n\n /**\n * @ignore\n */\n getImageProps(): { [key: string]: any } {\n return {\n src: this.image(),\n alt: 'Image being cropped',\n draggable: false,\n 'aria-hidden': true\n };\n }\n\n /**\n * @ignore\n */\n getImageWrapperStyle(): Record<string, string> {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const offsetX = this.offsetX();\n const offsetY = this.offsetY();\n const zoom = this.effectiveZoom();\n\n return {\n width: `${wrapperW}px`,\n height: `${wrapperH}px`,\n transform: `translate3d(${offsetX}px, ${offsetY}px, 0px) scale(${zoom})`,\n position: 'absolute',\n left: `calc(50% - ${wrapperW / 2}px)`,\n top: `calc(50% - ${wrapperH / 2}px)`,\n willChange: 'transform'\n };\n }\n\n /**\n * @ignore\n */\n getCropAreaStyle(): Record<string, string> {\n return {\n width: `${this.cropAreaWidth()}px`,\n height: `${this.cropAreaHeight()}px`\n };\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RdxCropperCropAreaDirective } from './src/cropper-crop-area.directive';\nimport { RdxCropperDescriptionDirective } from './src/cropper-description.directive';\nimport { RdxCropperImageComponent } from './src/cropper-image.component';\nimport { RdxCropperRootDirective } from './src/cropper-root.directive';\n\nexport * from './src/cropper-context.token';\nexport * from './src/cropper-crop-area.directive';\nexport * from './src/cropper-description.directive';\nexport * from './src/cropper-image.component';\nexport * from './src/cropper-root.directive';\n\nconst _imports = [\n RdxCropperRootDirective,\n RdxCropperImageComponent,\n RdxCropperCropAreaDirective,\n RdxCropperDescriptionDirective\n];\n\n@NgModule({\n imports: [..._imports],\n exports: [..._imports]\n})\nexport class RdxCropperModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, ElementRef, input, computed, signal, effect, Directive, model, booleanAttribute, NgModule } from '@angular/core';
3
- import { useDateField, normalizeDateStep, getDefaultDate, hasTime, isBefore, createContent, watch, isNullish, createFormatter, normalizeHourCycle, initializeSegmentValues, syncSegmentValues, getSegmentElements, ARROW_LEFT, ARROW_RIGHT, isSegmentNavigationKey, provideToken } from '@radix-ng/primitives/core';
2
+ import { InjectionToken, inject, ElementRef, input, computed, signal, effect, Directive, model, booleanAttribute, contentChildren, linkedSignal, NgModule } from '@angular/core';
3
+ import { useDateField, normalizeDateStep, createFormatter, normalizeHourCycle, getDefaultDate, hasTime, syncSegmentValues, initializeSegmentValues, isBefore, createContent, watch, isNullish, ARROW_LEFT, ARROW_RIGHT, isSegmentNavigationKey, provideToken } from '@radix-ng/primitives/core';
4
4
 
5
5
  const DATE_FIELDS_ROOT_CONTEXT = new InjectionToken('DATE_FIELDS_ROOT_CONTEXT');
6
6
  function injectDateFieldsRootContext() {
@@ -10,6 +10,12 @@ function injectDateFieldsRootContext() {
10
10
  class RdxDateFieldInputDirective {
11
11
  constructor() {
12
12
  this.elementRef = inject(ElementRef);
13
+ /**
14
+ * The host element of this segment. Consumed by the root to collect focusable
15
+ * segments in DOM order.
16
+ * @ignore
17
+ */
18
+ this.element = this.elementRef.nativeElement;
13
19
  this.rootContext = injectDateFieldsRootContext();
14
20
  /**
15
21
  * The part of the date to render
@@ -43,7 +49,7 @@ class RdxDateFieldInputDirective {
43
49
  placeholder: this.rootContext.placeholder,
44
50
  hourCycle: this.rootContext.hourCycle(),
45
51
  segmentValues: this.rootContext.segmentValues,
46
- formatter: this.rootContext.formatter,
52
+ formatter: this.rootContext.formatter(),
47
53
  part: this.part(),
48
54
  disabled: this.rootContext.disabled,
49
55
  readonly: this.rootContext.readonly,
@@ -101,7 +107,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
101
107
 
102
108
  class RdxDateFieldRootDirective {
103
109
  constructor() {
104
- this.elementRef = inject((ElementRef));
105
110
  /**
106
111
  * The controlled checked state of the calendar.
107
112
  */
@@ -146,6 +151,14 @@ class RdxDateFieldRootDirective {
146
151
  */
147
152
  this.step = input(...(ngDevMode ? [undefined, { debugName: "step" }] : /* istanbul ignore next */ []));
148
153
  this.step$ = computed(() => normalizeDateStep(this.step()), ...(ngDevMode ? [{ debugName: "step$" }] : /* istanbul ignore next */ []));
154
+ /**
155
+ * Locale- and hour-cycle-aware formatter. Recomputed whenever `locale` or
156
+ * `hourCycle` change so segments always render with the current settings.
157
+ * @ignore
158
+ */
159
+ this.formatter = computed(() => createFormatter(this.locale(), {
160
+ hourCycle: normalizeHourCycle(this.hourCycle())
161
+ }), ...(ngDevMode ? [{ debugName: "formatter" }] : /* istanbul ignore next */ []));
149
162
  /**
150
163
  * @ignore
151
164
  */
@@ -161,25 +174,23 @@ class RdxDateFieldRootDirective {
161
174
  this.placeholder = model(this.defaultDate().copy(), ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
162
175
  // Internal state
163
176
  /**
177
+ * Segment input parts, collected from the projected content in DOM order. This
178
+ * stays in sync with `segmentContents()` (granularity / locale / value changes
179
+ * add or remove segments) instead of being captured once after view init.
164
180
  * @ignore
165
181
  */
166
- this.segmentElements = signal(new Set(), ...(ngDevMode ? [{ debugName: "segmentElements" }] : /* istanbul ignore next */ []));
182
+ this.segmentInputs = contentChildren(RdxDateFieldInputDirective, ...(ngDevMode ? [{ debugName: "segmentInputs" }] : /* istanbul ignore next */ []));
167
183
  /**
184
+ * The focusable (non-literal) segment elements, in DOM order.
168
185
  * @ignore
169
186
  */
170
- this.currentFocusedElement = signal(null, ...(ngDevMode ? [{ debugName: "currentFocusedElement" }] : /* istanbul ignore next */ []));
187
+ this.segmentElements = computed(() => this.segmentInputs()
188
+ .filter((seg) => seg.part() !== 'literal')
189
+ .map((seg) => seg.element), ...(ngDevMode ? [{ debugName: "segmentElements" }] : /* istanbul ignore next */ []));
171
190
  /**
172
191
  * @ignore
173
192
  */
174
- this.segmentValues = signal({
175
- year: null,
176
- month: null,
177
- day: null,
178
- hour: null,
179
- minute: null,
180
- second: null,
181
- dayPeriod: null
182
- }, ...(ngDevMode ? [{ debugName: "segmentValues" }] : /* istanbul ignore next */ []));
193
+ this.currentFocusedElement = signal(null, ...(ngDevMode ? [{ debugName: "currentFocusedElement" }] : /* istanbul ignore next */ []));
183
194
  /**
184
195
  * @ignore
185
196
  */
@@ -189,6 +200,19 @@ class RdxDateFieldRootDirective {
189
200
  return placeholder && !hasTime(placeholder) ? 'day' : this.granularity();
190
201
  return placeholder && hasTime(placeholder) ? 'minute' : 'day';
191
202
  }, ...(ngDevMode ? [{ debugName: "inferredGranularity" }] : /* istanbul ignore next */ []));
203
+ /**
204
+ * The per-segment values. Writable so segment editing (via `useDateField`) can
205
+ * update individual parts, but re-synced from the model whenever the value,
206
+ * granularity or formatter change — so a controlled `value` set after init is
207
+ * reflected, and an empty field re-initializes when granularity changes.
208
+ * @ignore
209
+ */
210
+ this.segmentValues = linkedSignal({ ...(ngDevMode ? { debugName: "segmentValues" } : /* istanbul ignore next */ {}), source: () => ({
211
+ value: this.value(),
212
+ granularity: this.inferredGranularity(),
213
+ formatter: this.formatter()
214
+ }),
215
+ computation: ({ value, granularity, formatter }) => value ? { ...syncSegmentValues({ value, formatter }) } : { ...initializeSegmentValues(granularity) } });
192
216
  /**
193
217
  * @ignore
194
218
  */
@@ -209,7 +233,7 @@ class RdxDateFieldRootDirective {
209
233
  this.allSegmentContent = computed(() => createContent({
210
234
  granularity: this.inferredGranularity(),
211
235
  dateRef: this.placeholder(),
212
- formatter: this.formatter,
236
+ formatter: this.formatter(),
213
237
  hideTimeZone: this.hideTimeZone(),
214
238
  hourCycle: this.hourCycle(),
215
239
  segmentValues: this.segmentValues(),
@@ -222,29 +246,30 @@ class RdxDateFieldRootDirective {
222
246
  /**
223
247
  * @ignore
224
248
  */
225
- this.currentSegmentIndex = computed(() => Array.from(this.segmentElements()).findIndex((el) => el.getAttribute('data-rdx-date-field-segment') ===
226
- this.currentFocusedElement()?.getAttribute('data-rdx-date-field-segment')), ...(ngDevMode ? [{ debugName: "currentSegmentIndex" }] : /* istanbul ignore next */ []));
249
+ this.currentSegmentIndex = computed(() => this.segmentElements().findIndex((el) => el === this.currentFocusedElement()), ...(ngDevMode ? [{ debugName: "currentSegmentIndex" }] : /* istanbul ignore next */ []));
227
250
  /**
228
251
  * @ignore
229
252
  */
230
253
  this.prevFocusableSegment = computed(() => {
231
254
  const sign = this.dir() === 'rtl' ? -1 : 1;
232
- const prevCondition = sign > 0 ? this.currentSegmentIndex() < 0 : this.currentSegmentIndex() > this.segmentElements().size - 1;
255
+ const elements = this.segmentElements();
256
+ const index = this.currentSegmentIndex();
257
+ const prevCondition = sign > 0 ? index < 0 : index > elements.length - 1;
233
258
  if (prevCondition)
234
259
  return null;
235
- const segmentToFocus = Array.from(this.segmentElements())[this.currentSegmentIndex() - sign];
236
- return segmentToFocus;
260
+ return elements[index - sign];
237
261
  }, ...(ngDevMode ? [{ debugName: "prevFocusableSegment" }] : /* istanbul ignore next */ []));
238
262
  /**
239
263
  * @ignore
240
264
  */
241
265
  this.nextFocusableSegment = computed(() => {
242
266
  const sign = this.dir() === 'rtl' ? -1 : 1;
243
- const nextCondition = sign < 0 ? this.currentSegmentIndex() < 0 : this.currentSegmentIndex() > this.segmentElements().size - 1;
267
+ const elements = this.segmentElements();
268
+ const index = this.currentSegmentIndex();
269
+ const nextCondition = sign < 0 ? index < 0 : index > elements.length - 1;
244
270
  if (nextCondition)
245
271
  return null;
246
- const segmentToFocus = Array.from(this.segmentElements())[this.currentSegmentIndex() + sign];
247
- return segmentToFocus;
272
+ return elements[index + sign];
248
273
  }, ...(ngDevMode ? [{ debugName: "nextFocusableSegment" }] : /* istanbul ignore next */ []));
249
274
  /**
250
275
  * @ignore
@@ -258,25 +283,6 @@ class RdxDateFieldRootDirective {
258
283
  }
259
284
  });
260
285
  }
261
- ngOnInit() {
262
- const defDate = getDefaultDate({
263
- defaultPlaceholder: undefined,
264
- granularity: this.granularity(),
265
- defaultValue: this.value(),
266
- locale: this.locale()
267
- });
268
- this.placeholder.set(defDate.copy());
269
- this.formatter = createFormatter(this.locale(), {
270
- hourCycle: normalizeHourCycle(this.hourCycle())
271
- });
272
- const initialSegments = initializeSegmentValues(this.inferredGranularity());
273
- this.segmentValues.set(this.value()
274
- ? { ...syncSegmentValues({ value: this.value(), formatter: this.formatter }) }
275
- : { ...initialSegments });
276
- }
277
- ngAfterViewInit() {
278
- getSegmentElements(this.elementRef.nativeElement).forEach((item) => this.segmentElements().add(item));
279
- }
280
286
  /**
281
287
  * @ignore
282
288
  */
@@ -301,7 +307,7 @@ class RdxDateFieldRootDirective {
301
307
  this.currentFocusedElement.set(el);
302
308
  }
303
309
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxDateFieldRootDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
304
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxDateFieldRootDirective, isStandalone: true, selector: "[rdxDateFieldRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, isDateUnavailable: { classPropertyName: "isDateUnavailable", publicName: "isDateUnavailable", isSignal: true, isRequired: false, transformFunction: null }, hourCycle: { classPropertyName: "hourCycle", publicName: "hourCycle", isSignal: true, isRequired: false, transformFunction: null }, granularity: { classPropertyName: "granularity", publicName: "granularity", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: "minValue", publicName: "minValue", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: "maxValue", publicName: "maxValue", isSignal: true, isRequired: false, transformFunction: null }, hideTimeZone: { classPropertyName: "hideTimeZone", publicName: "hideTimeZone", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", placeholder: "placeholderChange" }, host: { attributes: { "role": "group" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.aria-disabled": "disabled() ? \"\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-readonly": "readonly() ? \"\" : undefined", "attr.data-invalid": "isInvalid() ? \"\" : undefined", "attr.dir": "dir()" } }, providers: [provideToken(DATE_FIELDS_ROOT_CONTEXT, RdxDateFieldRootDirective)], exportAs: ["rdxDateFieldRoot"], ngImport: i0 }); }
310
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.9", type: RdxDateFieldRootDirective, isStandalone: true, selector: "[rdxDateFieldRoot]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, isDateUnavailable: { classPropertyName: "isDateUnavailable", publicName: "isDateUnavailable", isSignal: true, isRequired: false, transformFunction: null }, hourCycle: { classPropertyName: "hourCycle", publicName: "hourCycle", isSignal: true, isRequired: false, transformFunction: null }, granularity: { classPropertyName: "granularity", publicName: "granularity", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, minValue: { classPropertyName: "minValue", publicName: "minValue", isSignal: true, isRequired: false, transformFunction: null }, maxValue: { classPropertyName: "maxValue", publicName: "maxValue", isSignal: true, isRequired: false, transformFunction: null }, hideTimeZone: { classPropertyName: "hideTimeZone", publicName: "hideTimeZone", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", placeholder: "placeholderChange" }, host: { attributes: { "role": "group" }, listeners: { "keydown": "onKeydown($event)" }, properties: { "attr.aria-disabled": "disabled() ? \"\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-readonly": "readonly() ? \"\" : undefined", "attr.data-invalid": "isInvalid() ? \"\" : undefined", "attr.dir": "dir()" } }, providers: [provideToken(DATE_FIELDS_ROOT_CONTEXT, RdxDateFieldRootDirective)], queries: [{ propertyName: "segmentInputs", predicate: RdxDateFieldInputDirective, isSignal: true }], exportAs: ["rdxDateFieldRoot"], ngImport: i0 }); }
305
311
  }
306
312
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxDateFieldRootDirective, decorators: [{
307
313
  type: Directive,
@@ -319,7 +325,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
319
325
  '(keydown)': 'onKeydown($event)'
320
326
  }
321
327
  }]
322
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], isDateUnavailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDateUnavailable", required: false }] }], hourCycle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourCycle", required: false }] }], granularity: [{ type: i0.Input, args: [{ isSignal: true, alias: "granularity", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], minValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "minValue", required: false }] }], maxValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxValue", required: false }] }], hideTimeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideTimeZone", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }, { type: i0.Output, args: ["placeholderChange"] }] } });
328
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], isDateUnavailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDateUnavailable", required: false }] }], hourCycle: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourCycle", required: false }] }], granularity: [{ type: i0.Input, args: [{ isSignal: true, alias: "granularity", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], minValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "minValue", required: false }] }], maxValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxValue", required: false }] }], hideTimeZone: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideTimeZone", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }, { type: i0.Output, args: ["placeholderChange"] }], segmentInputs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => RdxDateFieldInputDirective), { isSignal: true }] }] } });
323
329
 
324
330
  const _imports = [RdxDateFieldRootDirective, RdxDateFieldInputDirective];
325
331
  class RdxDateFieldModule {