@radix-ng/primitives 0.51.0 → 1.0.0-beta.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 (186) 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 +95 -83
  13. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-checkbox.mjs +378 -54
  15. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-collapsible.mjs +182 -81
  17. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-collection.mjs +40 -57
  19. package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-context-menu.mjs +140 -424
  22. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-core.mjs +845 -744
  24. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-cropper.mjs +288 -308
  26. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-date-field.mjs +104 -58
  28. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-dialog.mjs +655 -327
  30. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +70 -46
  32. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-drawer.mjs +960 -0
  34. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
  35. package/fesm2022/radix-ng-primitives-editable.mjs +304 -23
  36. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-field.mjs +363 -0
  38. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
  40. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
  41. package/fesm2022/radix-ng-primitives-focus-scope.mjs +23 -8
  42. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-input.mjs +172 -0
  44. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
  45. package/fesm2022/radix-ng-primitives-label.mjs +6 -6
  46. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-menu.mjs +1907 -363
  48. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
  50. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  51. package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
  52. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
  53. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1052 -1553
  54. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -367
  56. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-popover.mjs +978 -989
  59. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-popper.mjs +111 -44
  61. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-portal.mjs +34 -10
  63. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
  65. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
  67. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
  68. package/fesm2022/radix-ng-primitives-progress.mjs +223 -84
  69. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-radio.mjs +191 -51
  71. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-roving-focus.mjs +96 -50
  73. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
  75. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
  76. package/fesm2022/radix-ng-primitives-select.mjs +791 -509
  77. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-separator.mjs +12 -35
  79. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-slider.mjs +969 -717
  81. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-stepper.mjs +15 -19
  83. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-switch.mjs +125 -113
  85. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-tabs.mjs +390 -108
  87. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-time-field.mjs +55 -46
  89. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
  91. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
  92. package/fesm2022/radix-ng-primitives-toggle-group.mjs +121 -247
  93. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-toggle.mjs +98 -61
  95. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-toolbar.mjs +303 -92
  97. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-tooltip.mjs +699 -1072
  99. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +25 -66
  101. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  102. package/meter/README.md +3 -0
  103. package/navigation-menu/README.md +2 -1
  104. package/package.json +39 -18
  105. package/portal/README.md +2 -0
  106. package/preview-card/README.md +3 -0
  107. package/schematics/collection.json +1 -0
  108. package/schematics/ng-add/index.d.ts +3 -2
  109. package/schematics/ng-add/index.js +62 -31
  110. package/schematics/ng-add/index.js.map +1 -1
  111. package/schematics/ng-add/package-config.d.ts +4 -2
  112. package/schematics/ng-add/package-config.js +10 -2
  113. package/schematics/ng-add/package-config.js.map +1 -1
  114. package/schematics/ng-add/schema.d.ts +3 -0
  115. package/schematics/ng-add/schema.js +3 -0
  116. package/schematics/ng-add/schema.js.map +1 -0
  117. package/schematics/ng-add/schema.json +14 -0
  118. package/select/README.md +2 -0
  119. package/types/radix-ng-primitives-accordion.d.ts +51 -16
  120. package/types/radix-ng-primitives-alert-dialog.d.ts +95 -38
  121. package/types/radix-ng-primitives-arrow.d.ts +1 -1
  122. package/types/radix-ng-primitives-aspect-ratio.d.ts +1 -1
  123. package/types/radix-ng-primitives-avatar.d.ts +7 -11
  124. package/types/radix-ng-primitives-button.d.ts +73 -0
  125. package/types/radix-ng-primitives-calendar.d.ts +39 -20
  126. package/types/radix-ng-primitives-checkbox.d.ts +204 -35
  127. package/types/radix-ng-primitives-collapsible.d.ts +114 -40
  128. package/types/radix-ng-primitives-collection.d.ts +38 -34
  129. package/types/radix-ng-primitives-config.d.ts +1 -1
  130. package/types/radix-ng-primitives-context-menu.d.ts +61 -116
  131. package/types/radix-ng-primitives-core.d.ts +345 -235
  132. package/types/radix-ng-primitives-cropper.d.ts +89 -56
  133. package/types/radix-ng-primitives-date-field.d.ts +49 -28
  134. package/types/radix-ng-primitives-dialog.d.ts +283 -165
  135. package/types/radix-ng-primitives-dismissable-layer.d.ts +15 -7
  136. package/types/radix-ng-primitives-drawer.d.ts +426 -0
  137. package/types/radix-ng-primitives-editable.d.ts +91 -14
  138. package/types/radix-ng-primitives-field.d.ts +374 -0
  139. package/types/radix-ng-primitives-fieldset.d.ts +49 -0
  140. package/types/radix-ng-primitives-focus-scope.d.ts +15 -6
  141. package/types/radix-ng-primitives-input.d.ts +87 -0
  142. package/types/radix-ng-primitives-label.d.ts +0 -1
  143. package/types/radix-ng-primitives-menu.d.ts +584 -99
  144. package/types/radix-ng-primitives-menubar.d.ts +61 -50
  145. package/types/radix-ng-primitives-meter.d.ts +194 -0
  146. package/types/radix-ng-primitives-navigation-menu.d.ts +422 -340
  147. package/types/radix-ng-primitives-number-field.d.ts +405 -145
  148. package/types/radix-ng-primitives-pagination.d.ts +2 -2
  149. package/types/radix-ng-primitives-popover.d.ts +366 -351
  150. package/types/radix-ng-primitives-popper.d.ts +68 -11
  151. package/types/radix-ng-primitives-portal.d.ts +14 -6
  152. package/types/radix-ng-primitives-presence.d.ts +28 -76
  153. package/types/radix-ng-primitives-preview-card.d.ts +359 -0
  154. package/types/radix-ng-primitives-progress.d.ts +175 -48
  155. package/types/radix-ng-primitives-radio.d.ts +55 -25
  156. package/types/radix-ng-primitives-roving-focus.d.ts +33 -23
  157. package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
  158. package/types/radix-ng-primitives-select.d.ts +475 -177
  159. package/types/radix-ng-primitives-separator.d.ts +7 -32
  160. package/types/radix-ng-primitives-slider.d.ts +315 -201
  161. package/types/radix-ng-primitives-stepper.d.ts +5 -7
  162. package/types/radix-ng-primitives-switch.d.ts +86 -71
  163. package/types/radix-ng-primitives-tabs.d.ts +213 -79
  164. package/types/radix-ng-primitives-time-field.d.ts +42 -27
  165. package/types/radix-ng-primitives-toast.d.ts +378 -0
  166. package/types/radix-ng-primitives-toggle-group.d.ts +86 -164
  167. package/types/radix-ng-primitives-toggle.d.ts +43 -53
  168. package/types/radix-ng-primitives-toolbar.d.ts +164 -38
  169. package/types/radix-ng-primitives-tooltip.d.ts +348 -384
  170. package/types/radix-ng-primitives-visually-hidden.d.ts +19 -19
  171. package/dropdown-menu/README.md +0 -1
  172. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -581
  173. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  174. package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1238
  175. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
  176. package/fesm2022/radix-ng-primitives-select2.mjs +0 -897
  177. package/fesm2022/radix-ng-primitives-select2.mjs.map +0 -1
  178. package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -735
  179. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
  180. package/hover-card/README.md +0 -3
  181. package/select2/README.md +0 -3
  182. package/tooltip2/README.md +0 -3
  183. package/types/radix-ng-primitives-dropdown-menu.d.ts +0 -171
  184. package/types/radix-ng-primitives-hover-card.d.ts +0 -471
  185. package/types/radix-ng-primitives-select2.d.ts +0 -511
  186. package/types/radix-ng-primitives-tooltip2.d.ts +0 -325
@@ -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-math.ts","../../../packages/primitives/cropper/src/cropper-root.directive.ts","../../../packages/primitives/cropper/index.ts","../../../packages/primitives/cropper/radix-ng-primitives-cropper.ts"],"sourcesContent":["import { InputSignal, Signal } from '@angular/core';\nimport { createContext } from '@radix-ng/primitives/core';\n\nexport interface CropperRootContext {\n image: InputSignal<string>;\n imageWrapperStyle: Signal<Record<string, string>>;\n cropAreaStyle: Signal<Record<string, string>>;\n descriptionId: string;\n}\n\nexport const [injectCropperRootContext, provideCropperRootContext] = createContext<CropperRootContext>('CropperRoot');\n","import { Directive } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Directive({\n selector: '[rdxCropperCropArea]',\n host: {\n '[style]': 'rootContext.cropAreaStyle()'\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, input } from '@angular/core';\nimport { injectCropperRootContext } from './cropper-context.token';\n\n@Component({\n selector: '[rdxCropperImage]',\n host: {\n '[style]': 'rootContext.imageWrapperStyle()'\n },\n template: `\n <img\n [class]=\"imgClass()\"\n [src]=\"rootContext.image()\"\n [style]=\"imgStyles()\"\n [draggable]=\"false\"\n [alt]=\"imgAlt()\"\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 /**\n * `alt` text for the rendered image. Defaults to `''` (decorative — screen readers skip it, since\n * the cropper widget describes itself via the root's label/description). Set a non-empty value to\n * give the image a meaningful accessible name.\n */\n readonly imgAlt = input('');\n}\n","import { clamp } from '@radix-ng/primitives/core';\n\n/** A crop rectangle in the source image's natural-pixel coordinate space. */\nexport type Area = { x: number; y: number; width: number; height: number };\n\n/** The rendered geometry the crop math operates on (all in CSS px, wrapper measured at zoom 1). */\nexport interface CropperGeometry {\n /** Image-wrapper width at zoom 1. */\n wrapperWidth: number;\n /** Image-wrapper height at zoom 1. */\n wrapperHeight: number;\n /** Crop window width. */\n cropWidth: number;\n /** Crop window height. */\n cropHeight: number;\n}\n\n/**\n * Clamp a pan offset so the zoomed image always fully covers the crop window — the user can never\n * drag an image edge inside the crop frame. The offset is measured from the centered position, so the\n * allowed travel on each axis is half the overflow of the scaled wrapper past the crop window.\n *\n * Returns `{ x: 0, y: 0 }` when the geometry is not ready yet (any dimension `<= 0`).\n */\nexport function restrictOffset(\n offsetX: number,\n offsetY: number,\n zoom: number,\n geometry: CropperGeometry\n): { x: number; y: number } {\n const { wrapperWidth, wrapperHeight, cropWidth, cropHeight } = geometry;\n\n if (wrapperWidth <= 0 || wrapperHeight <= 0 || cropWidth <= 0 || cropHeight <= 0) {\n return { x: 0, y: 0 };\n }\n\n const maxDragX = Math.max(0, (wrapperWidth * zoom - cropWidth) / 2);\n const maxDragY = Math.max(0, (wrapperHeight * zoom - cropHeight) / 2);\n\n return {\n x: clamp(offsetX, -maxDragX, maxDragX),\n y: clamp(offsetY, -maxDragY, maxDragY)\n };\n}\n\n/**\n * Project the current pan/zoom into a crop rectangle in the source image's natural pixels.\n *\n * The wrapper is centered in the crop window and scaled by `zoom`; `baseScale` converts rendered px\n * back to natural px. The result is rounded and clamped to the image bounds.\n *\n * Returns `null` when the geometry/image is not ready (any dimension `<= 0` or no image), or when the\n * computed crop collapses to zero area.\n */\nexport function calculateCropData(\n offsetX: number,\n offsetY: number,\n zoom: number,\n geometry: CropperGeometry,\n image: { width: number | null; height: number | null }\n): Area | null {\n const { wrapperWidth, wrapperHeight, cropWidth, cropHeight } = geometry;\n const imgW = image.width;\n const imgH = image.height;\n\n if (!imgW || !imgH || wrapperWidth <= 0 || wrapperHeight <= 0 || cropWidth <= 0 || cropHeight <= 0) {\n return null;\n }\n\n const scaledWrapperWidth = wrapperWidth * zoom;\n const scaledWrapperHeight = wrapperHeight * zoom;\n const topLeftOffsetX = offsetX + (cropWidth - scaledWrapperWidth) / 2;\n const topLeftOffsetY = offsetY + (cropHeight - scaledWrapperHeight) / 2;\n const baseScale = imgW / wrapperWidth;\n\n if (isNaN(baseScale) || baseScale === 0) {\n return null;\n }\n\n const sx = (-topLeftOffsetX * baseScale) / zoom;\n const sy = (-topLeftOffsetY * baseScale) / zoom;\n const sWidth = (cropWidth * baseScale) / zoom;\n const sHeight = (cropHeight * baseScale) / zoom;\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","// Based on https://github.com/origin-space/image-cropper/blob/main/src/Cropper.tsx\n\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n numberAttribute,\n output,\n PLATFORM_ID,\n signal,\n untracked\n} from '@angular/core';\nimport { BooleanInput, clamp, injectId, NumberInput, resizeEffect } from '@radix-ng/primitives/core';\nimport { CropperRootContext, provideCropperRootContext } from './cropper-context.token';\nimport {\n Area,\n calculateCropData as computeCropData,\n restrictOffset as computeRestrictedOffset,\n CropperGeometry\n} from './cropper-math';\n\nexport type { Area };\n\n/** Value equality for an `Area` so the crop `computed` only notifies when the rectangle changes. */\nconst areaEqual = (a: Area | null, b: Area | null): boolean =>\n a === b || (!!a && !!b && a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height);\n\n/** Value equality for an `{x,y}` point so the clamped-offset `computed` only notifies on real moves. */\nconst pointEqual = (a: { x: number; y: number }, b: { x: number; y: number }): boolean => a.x === b.x && a.y === b.y;\n\n/** Exposes the root's public state to the child parts (image, crop-area, description). */\nconst rootContext = (): CropperRootContext => {\n const instance = inject(RdxCropperRootDirective);\n return {\n image: instance.image,\n imageWrapperStyle: instance.imageWrapperStyle,\n cropAreaStyle: instance.cropAreaStyle,\n descriptionId: instance.descriptionId\n };\n};\n\n@Directive({\n selector: '[rdxCropperRoot]',\n providers: [provideCropperRootContext(rootContext)],\n host: {\n // `application` so a screen reader passes arrow/+/- keys straight to our handlers (pan + zoom)\n // instead of intercepting them for browse-mode navigation; instructions come via the\n // description element referenced by `aria-describedby`. The slider-style `aria-value*`\n // attributes were removed — they are only honored on range roles, so they were dead here.\n role: 'application',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-describedby]': 'descriptionId',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : undefined',\n '[attr.data-disabled]': 'disabled() ? \"\" : undefined',\n '[attr.data-dragging]': 'isDragging() ? \"\" : undefined'\n }\n})\nexport class RdxCropperRootDirective {\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly injector = inject(Injector);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\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 /** Pan distance (px) per arrow-key press. */\n readonly keyboardStep = input(10, { transform: numberAttribute });\n /** Zoom delta per `+` / `-` / `PageUp` / `PageDown` press. */\n readonly zoomKeyboardStep = input(0.1, { transform: numberAttribute });\n readonly zoom = input<number, NumberInput>(undefined, { transform: numberAttribute });\n /** Accessible name for the cropper widget. */\n readonly ariaLabel = input('Interactive image cropper');\n /** Disables all interaction (drag, wheel/pinch zoom, keyboard); exposed as `data-disabled`. */\n readonly disabled = input<boolean, BooleanInput>(false, { transform: booleanAttribute });\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 /** Raw content-box size (px) of the root, fed by the ResizeObserver / initial measure. */\n private readonly containerSize = signal({ width: 0, height: 0 });\n /**\n * Crop-area size derived from the container minus padding, fitted to `aspectRatio`. A `computed`\n * (not a written signal) so it stays reactive to `aspectRatio` / `cropPadding` changes, not only\n * to container resizes — previously these inputs were read inside the ResizeObserver closure and\n * never recomputed until the next resize.\n */\n private readonly cropAreaSize = computed(() => {\n const { width, height } = this.containerSize();\n if (width <= 0 || height <= 0) {\n return { width: 0, height: 0 };\n }\n\n const maxPossibleWidth = Math.max(0, width - this.cropPadding() * 2);\n const maxPossibleHeight = Math.max(0, height - this.cropPadding() * 2);\n const aspectRatio = this.aspectRatio();\n\n if (maxPossibleWidth / aspectRatio >= maxPossibleHeight) {\n return { width: maxPossibleHeight * aspectRatio, height: maxPossibleHeight };\n }\n return { width: maxPossibleWidth, height: maxPossibleWidth / aspectRatio };\n });\n private readonly cropAreaWidth = computed(() => this.cropAreaSize().width);\n private readonly cropAreaHeight = computed(() => this.cropAreaSize().height);\n private readonly imageWrapperWidth = signal(0);\n private readonly imageWrapperHeight = signal(0);\n /** Raw (unclamped) pan-offset intent (px) written by gestures; clamping lives in `clampedOffset`. */\n private readonly offset = signal({ x: 0, y: 0 });\n private readonly internalZoom = signal(this.minZoom());\n protected readonly isDragging = signal(false);\n // SSR-stable, deterministic id (the project's CDK-free `_IdGenerator` replacement) so the\n // `aria-describedby` reference matches between server and client renders.\n readonly descriptionId = injectId('rdx-cropper-description-');\n\n private readonly isZoomControlled = computed(() => this.zoom() !== undefined);\n protected readonly effectiveZoom = computed(() => (this.isZoomControlled() ? this.zoom()! : this.internalZoom()));\n\n /**\n * The applied pan offset (px): the raw intent clamped to keep the image covering the crop window\n * at the current geometry/zoom. Derived (not an effect) so it self-corrects when the container\n * resizes or the zoom/aspect-ratio changes — no write-back, no `untracked` re-entrancy. This is the\n * value the view renders and the crop math reads.\n */\n private readonly clampedOffset = computed(\n () => this.restrictOffset(this.offset().x, this.offset().y, this.effectiveZoom()),\n { equal: pointEqual }\n );\n\n /**\n * Crop rectangle derived from the rendered pan/zoom — the single source of truth for emission.\n * `onCropChange` fires from one effect watching this, so interactions/handlers never emit directly\n * (which previously double-emitted). Value equality keeps it from notifying on equal results.\n */\n private readonly cropData = computed<Area | null>(\n () =>\n computeCropData(this.clampedOffset().x, this.clampedOffset().y, this.effectiveZoom(), this.geometry(), {\n width: this.imgWidth(),\n height: this.imgHeight()\n }),\n { equal: areaEqual }\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 latestZoom = signal(this.minZoom());\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.setupAccessibilityWarningEffect();\n this.setupEventListenersEffect();\n\n effect(() => {\n this.latestZoom.set(this.effectiveZoom());\n });\n\n // Single source of crop emission: emit whenever the derived crop rectangle changes.\n effect(() => {\n const data = this.cropData();\n untracked(() => this.onCropChange.emit(data));\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 // Seed the size for the first paint; the ResizeObserver keeps it in sync afterwards.\n this.containerSize.set({ width: element.clientWidth, height: element.clientHeight });\n }\n }\n\n private setupImageLoadEffect() {\n effect(() => {\n const image = this.image();\n this.offset.set({ x: 0, y: 0 });\n\n if (!this.isZoomControlled()) {\n this.internalZoom.set(this.minZoom());\n }\n\n if (!image || !this.isBrowser) {\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 // Track the container's content-box size via the shared resize-observer effect; `cropAreaSize`\n // derives crop dimensions from it reactively (so changing `aspectRatio` / `cropPadding`\n // recomputes without waiting for a resize). `element` is null on the server, so no observer is\n // constructed (SSR-safe).\n resizeEffect({\n injector: this.injector,\n element: computed(() => (this.isBrowser ? this.elementRef.nativeElement : null)),\n onResize: (entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n if (width > 0 && height > 0) this.containerSize.set({ width, height });\n }\n }\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 /** Current rendered geometry the crop math operates on, read from the state signals. */\n private geometry(): CropperGeometry {\n return {\n wrapperWidth: this.imageWrapperWidth(),\n wrapperHeight: this.imageWrapperHeight(),\n cropWidth: this.cropAreaWidth(),\n cropHeight: this.cropAreaHeight()\n };\n }\n\n private restrictOffset(dragOffsetX: number, dragOffsetY: number, currentZoom: number): { x: number; y: number } {\n return computeRestrictedOffset(dragOffsetX, dragOffsetY, currentZoom, this.geometry());\n }\n\n private setupAccessibilityWarningEffect(): void {\n if (!this.isBrowser) return;\n\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 /**\n * Single attachment point for every interaction listener. Re-runs on `disabled()`, so a disabled\n * cropper has NO interaction listeners bound at all — there is no per-handler `disabled` check to\n * forget, and a new gesture path can't accidentally bypass the gate. Uses `{ passive: false }` so\n * the handlers can `preventDefault()` (wheel/touch scrolling, arrow-key page scroll).\n */\n private setupEventListenersEffect(): void {\n if (!this.isBrowser) return;\n\n effect((onCleanup) => {\n const node = this.elementRef.nativeElement;\n if (!node || this.disabled()) return;\n\n const options: AddEventListenerOptions = { passive: false };\n\n const mouseDownHandler = (e: MouseEvent) => this.onMouseDown(e);\n const keyDownHandler = (e: KeyboardEvent) => this.onKeyDown(e);\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('mousedown', mouseDownHandler, options);\n node.addEventListener('keydown', keyDownHandler, options);\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('mousedown', mouseDownHandler, options);\n node.removeEventListener('keydown', keyDownHandler, options);\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 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.clampedOffset());\n\n const handleMouseMove = (ev: MouseEvent) => {\n const deltaX = ev.clientX - this.dragStartPoint().x;\n const deltaY = ev.clientY - this.dragStartPoint().y;\n this.offset.set({ x: this.dragStartOffset().x + deltaX, y: this.dragStartOffset().y + deltaY });\n };\n\n const handleMouseUp = () => {\n this.isDragging.set(false);\n window.removeEventListener('mousemove', handleMouseMove);\n window.removeEventListener('mouseup', handleMouseUp);\n };\n\n window.addEventListener('mousemove', handleMouseMove);\n window.addEventListener('mouseup', handleMouseUp);\n }\n\n /**\n * Zoom toward an anchor point (coordinates relative to the root's center). `fromZoom`/`fromOffset`\n * are the zoom/offset the anchor is measured against — the live state for wheel/keyboard, the\n * gesture-start baseline for pinch. Emits the zoom request via {@link updateZoom}, then re-anchors\n * the pan offset **only when the zoom is uncontrolled**: in controlled mode the rendered zoom does\n * not change until the parent writes `zoom` back, so writing an offset for a not-yet-applied zoom\n * would pan the image without rescaling it (`clampedOffset` re-derives once the new zoom applies).\n */\n private zoomToPoint(\n pointerX: number,\n pointerY: number,\n targetZoom: number,\n fromZoom: number,\n fromOffset: { x: number; y: number }\n ): void {\n const clampedZoom = clamp(targetZoom, this.minZoom(), this.maxZoom());\n if (clampedZoom === this.effectiveZoom()) return;\n\n const imagePointX = (pointerX - fromOffset.x) / fromZoom;\n const imagePointY = (pointerY - fromOffset.y) / fromZoom;\n\n const finalNewZoom = this.updateZoom(clampedZoom);\n if (this.isZoomControlled()) return;\n\n this.offset.set({ x: pointerX - imagePointX * finalNewZoom, y: pointerY - imagePointY * finalNewZoom });\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 delta = e.deltaY * -this.zoomSensitivity();\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\n this.zoomToPoint(pointerX, pointerY, this.effectiveZoom() + delta, this.effectiveZoom(), this.clampedOffset());\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.clampedOffset());\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.clampedOffset());\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 this.offset.set({ x: this.dragStartOffset().x + deltaX, y: this.dragStartOffset().y + deltaY });\n } else if (touches.length === 2 && this.isPinching()) {\n const scale = this.getPinchDistance(touches) / this.initialPinchDistance();\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\n // Pinch is baseline-relative: anchor against the zoom/offset captured at gesture start.\n this.zoomToPoint(\n pinchCenterX,\n pinchCenterY,\n this.initialPinchZoom() * scale,\n this.initialPinchZoom(),\n this.dragStartOffset()\n );\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.clampedOffset());\n } else {\n this.isDragging.set(false);\n }\n } else if (this.isDragging() && touches.length === 0) {\n this.isDragging.set(false);\n }\n }\n\n private onKeyDown(e: KeyboardEvent): void {\n if (this.imageWrapperWidth() <= 0) return;\n\n const base = this.clampedOffset();\n let targetOffsetX = base.x;\n let targetOffsetY = base.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 case '+':\n case '=':\n case 'PageUp':\n e.preventDefault();\n this.zoomFromCenter(this.zoomKeyboardStep());\n return;\n case '-':\n case '_':\n case 'PageDown':\n e.preventDefault();\n this.zoomFromCenter(-this.zoomKeyboardStep());\n return;\n default:\n return;\n }\n\n if (moved) {\n e.preventDefault();\n // Write the raw target; `clampedOffset` clamps it (and dedups a no-op at the boundary).\n this.offset.set({ x: targetOffsetX, y: targetOffsetY });\n }\n }\n\n /** Zoom by `delta` keeping the crop center fixed (the keyboard counterpart of wheel/pinch zoom). */\n private zoomFromCenter(delta: number): void {\n if (this.imageWrapperWidth() <= 0 || this.imageWrapperHeight() <= 0) return;\n // Anchor at the crop center (pointer 0,0 relative to center) against the live zoom/offset.\n this.zoomToPoint(0, 0, this.effectiveZoom() + delta, this.effectiveZoom(), this.clampedOffset());\n }\n\n /**\n * Inline style for the image wrapper: measured size, centered in the root, then translated and\n * scaled by the current pan offset and zoom. A `computed` (not a method) so the `[style]` binding\n * only re-applies when an input actually changes — a per-change-detection method call would\n * allocate a new object every tick and force a constant re-bind.\n */\n readonly imageWrapperStyle = computed<Record<string, string>>(() => {\n const wrapperW = this.imageWrapperWidth();\n const wrapperH = this.imageWrapperHeight();\n const { x: offsetX, y: offsetY } = this.clampedOffset();\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 /** Inline style for the crop-area overlay (its measured width/height). */\n readonly cropAreaStyle = computed<Record<string, string>>(() => ({\n width: `${this.cropAreaWidth()}px`,\n height: `${this.cropAreaHeight()}px`\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":["computeCropData","computeRestrictedOffset"],"mappings":"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"}
@@ -1,15 +1,27 @@
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, isNullish, normalizeDateStep, createFormatter, normalizeHourCycle, getDefaultDate, hasTime, syncSegmentValues, initializeSegmentValues, isBefore, createContent, watch, 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() {
7
7
  return inject(DATE_FIELDS_ROOT_CONTEXT);
8
8
  }
9
9
 
10
+ /**
11
+ * Attribute keys produced by `useDateField().attributes()` that are instead owned by host
12
+ * bindings. Writing them imperatively would clobber the host value — re-enabling a disabled
13
+ * segment via `contenteditable`, or overwriting a consumer's inline `style`.
14
+ */
15
+ const hostManagedAttrs = new Set(['contenteditable', 'style']);
10
16
  class RdxDateFieldInputDirective {
11
17
  constructor() {
12
18
  this.elementRef = inject(ElementRef);
19
+ /**
20
+ * The host element of this segment. Consumed by the root to collect focusable
21
+ * segments in DOM order.
22
+ * @ignore
23
+ */
24
+ this.element = this.elementRef.nativeElement;
13
25
  this.rootContext = injectDateFieldsRootContext();
14
26
  /**
15
27
  * The part of the date to render
@@ -43,7 +55,7 @@ class RdxDateFieldInputDirective {
43
55
  placeholder: this.rootContext.placeholder,
44
56
  hourCycle: this.rootContext.hourCycle(),
45
57
  segmentValues: this.rootContext.segmentValues,
46
- formatter: this.rootContext.formatter,
58
+ formatter: this.rootContext.formatter(),
47
59
  part: this.part(),
48
60
  disabled: this.rootContext.disabled,
49
61
  readonly: this.rootContext.readonly,
@@ -53,18 +65,51 @@ class RdxDateFieldInputDirective {
53
65
  });
54
66
  }, ...(ngDevMode ? [{ debugName: "fieldData" }] : /* istanbul ignore next */ []));
55
67
  this.attributes = computed(() => this.fieldData().attributes(), ...(ngDevMode ? [{ debugName: "attributes" }] : /* istanbul ignore next */ []));
68
+ /**
69
+ * Attribute keys applied imperatively on the previous effect run, so keys that
70
+ * disappear from `attributes()` are removed instead of lingering as stale state.
71
+ * @ignore
72
+ */
73
+ this.appliedAttrs = new Set();
56
74
  effect(() => {
57
- const { handleSegmentClick, handleSegmentKeydown } = this.fieldData();
58
- this.handleSegmentKeydown = handleSegmentKeydown;
59
- this.handleSegmentClick = handleSegmentClick;
60
- });
61
- effect(() => {
75
+ const element = this.elementRef.nativeElement;
62
76
  const attrs = this.attributes();
63
- Object.entries(attrs).forEach(([attr, value]) => {
64
- this.elementRef.nativeElement.setAttribute(attr, String(value));
65
- });
77
+ const next = new Set();
78
+ for (const [attr, value] of Object.entries(attrs)) {
79
+ // Skip keys a host binding already owns, so this effect never fights it.
80
+ if (hostManagedAttrs.has(attr)) {
81
+ continue;
82
+ }
83
+ // A nullish value means the attribute should be absent (e.g. `data-placeholder`
84
+ // once a segment is filled); removing it avoids a literal `"undefined"` string.
85
+ if (isNullish(value)) {
86
+ element.removeAttribute(attr);
87
+ }
88
+ else {
89
+ element.setAttribute(attr, String(value));
90
+ next.add(attr);
91
+ }
92
+ }
93
+ for (const attr of this.appliedAttrs) {
94
+ if (!next.has(attr)) {
95
+ element.removeAttribute(attr);
96
+ }
97
+ }
98
+ this.appliedAttrs = next;
66
99
  });
67
100
  }
101
+ /**
102
+ * @ignore
103
+ */
104
+ handleSegmentClick(event) {
105
+ this.fieldData().handleSegmentClick(event);
106
+ }
107
+ /**
108
+ * @ignore
109
+ */
110
+ handleSegmentKeydown(event) {
111
+ this.fieldData().handleSegmentKeydown(event);
112
+ }
68
113
  /**
69
114
  * @ignore
70
115
  */
@@ -78,7 +123,7 @@ class RdxDateFieldInputDirective {
78
123
  this.hasLeftFocus.set(true);
79
124
  }
80
125
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxDateFieldInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
81
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxDateFieldInputDirective, isStandalone: true, selector: "[rdxDateFieldInput]", inputs: { part: { classPropertyName: "part", publicName: "part", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mousedown": "part() !== \"literal\" && handleSegmentClick($event)", "keydown": "part() !== \"literal\" && handleSegmentKeydown($event)", "focus": "part() !== \"literal\" && onFocus($event)", "focusout": "part() !== \"literal\" && onFocusOut()" }, properties: { "attr.contenteditable": "disabled() || readonly() ? false : part() !== \"literal\"", "attr.data-rdx-date-field-segment": "part()", "attr.aria-disabled": "disabled() ? \"\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-invalid": "isInvalid() ? \"\" : undefined", "attr.aria-invalid": "isInvalid() ? true : undefined" } }, ngImport: i0 }); }
126
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxDateFieldInputDirective, isStandalone: true, selector: "[rdxDateFieldInput]", inputs: { part: { classPropertyName: "part", publicName: "part", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mousedown": "part() !== \"literal\" && handleSegmentClick($event)", "keydown": "part() !== \"literal\" && handleSegmentKeydown($event)", "focus": "part() !== \"literal\" && onFocus($event)", "focusout": "part() !== \"literal\" && onFocusOut()" }, properties: { "attr.contenteditable": "disabled() || readonly() ? false : part() !== \"literal\"", "style.caret-color": "part() !== \"literal\" ? \"transparent\" : undefined", "attr.data-rdx-date-field-segment": "part()", "attr.aria-disabled": "disabled() ? \"true\" : undefined", "attr.data-disabled": "disabled() ? \"\" : undefined", "attr.data-invalid": "isInvalid() ? \"\" : undefined", "attr.aria-invalid": "isInvalid() ? true : undefined" } }, ngImport: i0 }); }
82
127
  }
83
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxDateFieldInputDirective, decorators: [{
84
129
  type: Directive,
@@ -86,8 +131,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
86
131
  selector: '[rdxDateFieldInput]',
87
132
  host: {
88
133
  '[attr.contenteditable]': 'disabled() || readonly() ? false : part() !== "literal"',
134
+ '[style.caret-color]': 'part() !== "literal" ? "transparent" : undefined',
89
135
  '[attr.data-rdx-date-field-segment]': 'part()',
90
- '[attr.aria-disabled]': 'disabled() ? "" : undefined',
136
+ '[attr.aria-disabled]': 'disabled() ? "true" : undefined',
91
137
  '[attr.data-disabled]': 'disabled() ? "" : undefined',
92
138
  '[attr.data-invalid]': 'isInvalid() ? "" : undefined',
93
139
  '[attr.aria-invalid]': 'isInvalid() ? true : undefined',
@@ -101,13 +147,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
101
147
 
102
148
  class RdxDateFieldRootDirective {
103
149
  constructor() {
104
- this.elementRef = inject((ElementRef));
105
150
  /**
106
- * The controlled checked state of the calendar.
151
+ * The controlled value of the date field.
107
152
  */
108
153
  this.value = model(...(ngDevMode ? [undefined, { debugName: "value" }] : /* istanbul ignore next */ []));
109
154
  /**
110
- * A callback fired when the date field's value is invalid.
155
+ * A matcher that marks specific dates as unavailable; a matched value makes the field invalid.
111
156
  */
112
157
  this.isDateUnavailable = input(undefined, ...(ngDevMode ? [{ debugName: "isDateUnavailable" }] : /* istanbul ignore next */ []));
113
158
  /**
@@ -146,6 +191,14 @@ class RdxDateFieldRootDirective {
146
191
  */
147
192
  this.step = input(...(ngDevMode ? [undefined, { debugName: "step" }] : /* istanbul ignore next */ []));
148
193
  this.step$ = computed(() => normalizeDateStep(this.step()), ...(ngDevMode ? [{ debugName: "step$" }] : /* istanbul ignore next */ []));
194
+ /**
195
+ * Locale- and hour-cycle-aware formatter. Recomputed whenever `locale` or
196
+ * `hourCycle` change so segments always render with the current settings.
197
+ * @ignore
198
+ */
199
+ this.formatter = computed(() => createFormatter(this.locale(), {
200
+ hourCycle: normalizeHourCycle(this.hourCycle())
201
+ }), ...(ngDevMode ? [{ debugName: "formatter" }] : /* istanbul ignore next */ []));
149
202
  /**
150
203
  * @ignore
151
204
  */
@@ -161,25 +214,23 @@ class RdxDateFieldRootDirective {
161
214
  this.placeholder = model(this.defaultDate().copy(), ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
162
215
  // Internal state
163
216
  /**
217
+ * Segment input parts, collected from the projected content in DOM order. This
218
+ * stays in sync with `segmentContents()` (granularity / locale / value changes
219
+ * add or remove segments) instead of being captured once after view init.
164
220
  * @ignore
165
221
  */
166
- this.segmentElements = signal(new Set(), ...(ngDevMode ? [{ debugName: "segmentElements" }] : /* istanbul ignore next */ []));
222
+ this.segmentInputs = contentChildren(RdxDateFieldInputDirective, ...(ngDevMode ? [{ debugName: "segmentInputs" }] : /* istanbul ignore next */ []));
167
223
  /**
224
+ * The focusable (non-literal) segment elements, in DOM order.
168
225
  * @ignore
169
226
  */
170
- this.currentFocusedElement = signal(null, ...(ngDevMode ? [{ debugName: "currentFocusedElement" }] : /* istanbul ignore next */ []));
227
+ this.segmentElements = computed(() => this.segmentInputs()
228
+ .filter((seg) => seg.part() !== 'literal')
229
+ .map((seg) => seg.element), ...(ngDevMode ? [{ debugName: "segmentElements" }] : /* istanbul ignore next */ []));
171
230
  /**
172
231
  * @ignore
173
232
  */
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 */ []));
233
+ this.currentFocusedElement = signal(null, ...(ngDevMode ? [{ debugName: "currentFocusedElement" }] : /* istanbul ignore next */ []));
183
234
  /**
184
235
  * @ignore
185
236
  */
@@ -189,6 +240,19 @@ class RdxDateFieldRootDirective {
189
240
  return placeholder && !hasTime(placeholder) ? 'day' : this.granularity();
190
241
  return placeholder && hasTime(placeholder) ? 'minute' : 'day';
191
242
  }, ...(ngDevMode ? [{ debugName: "inferredGranularity" }] : /* istanbul ignore next */ []));
243
+ /**
244
+ * The per-segment values. Writable so segment editing (via `useDateField`) can
245
+ * update individual parts, but re-synced from the model whenever the value,
246
+ * granularity or formatter change — so a controlled `value` set after init is
247
+ * reflected, and an empty field re-initializes when granularity changes.
248
+ * @ignore
249
+ */
250
+ this.segmentValues = linkedSignal({ ...(ngDevMode ? { debugName: "segmentValues" } : /* istanbul ignore next */ {}), source: () => ({
251
+ value: this.value(),
252
+ granularity: this.inferredGranularity(),
253
+ formatter: this.formatter()
254
+ }),
255
+ computation: ({ value, granularity, formatter }) => value ? { ...syncSegmentValues({ value, formatter }) } : { ...initializeSegmentValues(granularity) } });
192
256
  /**
193
257
  * @ignore
194
258
  */
@@ -209,7 +273,7 @@ class RdxDateFieldRootDirective {
209
273
  this.allSegmentContent = computed(() => createContent({
210
274
  granularity: this.inferredGranularity(),
211
275
  dateRef: this.placeholder(),
212
- formatter: this.formatter,
276
+ formatter: this.formatter(),
213
277
  hideTimeZone: this.hideTimeZone(),
214
278
  hourCycle: this.hourCycle(),
215
279
  segmentValues: this.segmentValues(),
@@ -222,29 +286,30 @@ class RdxDateFieldRootDirective {
222
286
  /**
223
287
  * @ignore
224
288
  */
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 */ []));
289
+ this.currentSegmentIndex = computed(() => this.segmentElements().findIndex((el) => el === this.currentFocusedElement()), ...(ngDevMode ? [{ debugName: "currentSegmentIndex" }] : /* istanbul ignore next */ []));
227
290
  /**
228
291
  * @ignore
229
292
  */
230
293
  this.prevFocusableSegment = computed(() => {
231
294
  const sign = this.dir() === 'rtl' ? -1 : 1;
232
- const prevCondition = sign > 0 ? this.currentSegmentIndex() < 0 : this.currentSegmentIndex() > this.segmentElements().size - 1;
295
+ const elements = this.segmentElements();
296
+ const index = this.currentSegmentIndex();
297
+ const prevCondition = sign > 0 ? index < 0 : index > elements.length - 1;
233
298
  if (prevCondition)
234
299
  return null;
235
- const segmentToFocus = Array.from(this.segmentElements())[this.currentSegmentIndex() - sign];
236
- return segmentToFocus;
300
+ return elements[index - sign];
237
301
  }, ...(ngDevMode ? [{ debugName: "prevFocusableSegment" }] : /* istanbul ignore next */ []));
238
302
  /**
239
303
  * @ignore
240
304
  */
241
305
  this.nextFocusableSegment = computed(() => {
242
306
  const sign = this.dir() === 'rtl' ? -1 : 1;
243
- const nextCondition = sign < 0 ? this.currentSegmentIndex() < 0 : this.currentSegmentIndex() > this.segmentElements().size - 1;
307
+ const elements = this.segmentElements();
308
+ const index = this.currentSegmentIndex();
309
+ const nextCondition = sign < 0 ? index < 0 : index > elements.length - 1;
244
310
  if (nextCondition)
245
311
  return null;
246
- const segmentToFocus = Array.from(this.segmentElements())[this.currentSegmentIndex() + sign];
247
- return segmentToFocus;
312
+ return elements[index + sign];
248
313
  }, ...(ngDevMode ? [{ debugName: "nextFocusableSegment" }] : /* istanbul ignore next */ []));
249
314
  /**
250
315
  * @ignore
@@ -258,25 +323,6 @@ class RdxDateFieldRootDirective {
258
323
  }
259
324
  });
260
325
  }
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
326
  /**
281
327
  * @ignore
282
328
  */
@@ -301,7 +347,7 @@ class RdxDateFieldRootDirective {
301
347
  this.currentFocusedElement.set(el);
302
348
  }
303
349
  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 }); }
350
+ 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() ? \"true\" : 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
351
  }
306
352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxDateFieldRootDirective, decorators: [{
307
353
  type: Directive,
@@ -311,7 +357,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
311
357
  providers: [provideToken(DATE_FIELDS_ROOT_CONTEXT, RdxDateFieldRootDirective)],
312
358
  host: {
313
359
  role: 'group',
314
- '[attr.aria-disabled]': 'disabled() ? "" : undefined',
360
+ '[attr.aria-disabled]': 'disabled() ? "true" : undefined',
315
361
  '[attr.data-disabled]': 'disabled() ? "" : undefined',
316
362
  '[attr.data-readonly]': 'readonly() ? "" : undefined',
317
363
  '[attr.data-invalid]': 'isInvalid() ? "" : undefined',
@@ -319,7 +365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
319
365
  '(keydown)': 'onKeydown($event)'
320
366
  }
321
367
  }]
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"] }] } });
368
+ }], 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
369
 
324
370
  const _imports = [RdxDateFieldRootDirective, RdxDateFieldInputDirective];
325
371
  class RdxDateFieldModule {