@frame-ui-ng/components 0.2.0-beta.0 → 0.4.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 (71) hide show
  1. package/button/src/styles/button.css +20 -4
  2. package/button-group/src/styles/button-group.css +6 -0
  3. package/dropdown-menu/src/styles/_vars.css +1 -1
  4. package/dropdown-menu/src/styles/dropdown-menu-item.css +87 -87
  5. package/fesm2022/frame-ui-ng-components-calendar.mjs +369 -263
  6. package/fesm2022/frame-ui-ng-components-calendar.mjs.map +1 -1
  7. package/fesm2022/frame-ui-ng-components-combobox.mjs +48 -51
  8. package/fesm2022/frame-ui-ng-components-combobox.mjs.map +1 -1
  9. package/fesm2022/frame-ui-ng-components-command.mjs +1 -1
  10. package/fesm2022/frame-ui-ng-components-command.mjs.map +1 -1
  11. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs +162 -0
  12. package/fesm2022/frame-ui-ng-components-confirm-modal.mjs.map +1 -0
  13. package/fesm2022/frame-ui-ng-components-date-picker.mjs +232 -226
  14. package/fesm2022/frame-ui-ng-components-date-picker.mjs.map +1 -1
  15. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs +45 -22
  16. package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs.map +1 -1
  17. package/fesm2022/frame-ui-ng-components-input-otp.mjs +64 -69
  18. package/fesm2022/frame-ui-ng-components-input-otp.mjs.map +1 -1
  19. package/fesm2022/frame-ui-ng-components-input.mjs +6 -3
  20. package/fesm2022/frame-ui-ng-components-input.mjs.map +1 -1
  21. package/fesm2022/frame-ui-ng-components-modal.mjs +93 -15
  22. package/fesm2022/frame-ui-ng-components-modal.mjs.map +1 -1
  23. package/fesm2022/frame-ui-ng-components-pagination.mjs +37 -36
  24. package/fesm2022/frame-ui-ng-components-pagination.mjs.map +1 -1
  25. package/fesm2022/frame-ui-ng-components-progress.mjs +2 -1
  26. package/fesm2022/frame-ui-ng-components-progress.mjs.map +1 -1
  27. package/fesm2022/frame-ui-ng-components-resizable.mjs +16 -26
  28. package/fesm2022/frame-ui-ng-components-resizable.mjs.map +1 -1
  29. package/fesm2022/frame-ui-ng-components-select.mjs +6 -3
  30. package/fesm2022/frame-ui-ng-components-select.mjs.map +1 -1
  31. package/fesm2022/frame-ui-ng-components-sheet.mjs +19 -16
  32. package/fesm2022/frame-ui-ng-components-sheet.mjs.map +1 -1
  33. package/fesm2022/frame-ui-ng-components-sidebar.mjs +59 -10
  34. package/fesm2022/frame-ui-ng-components-sidebar.mjs.map +1 -1
  35. package/fesm2022/frame-ui-ng-components-slider.mjs +53 -59
  36. package/fesm2022/frame-ui-ng-components-slider.mjs.map +1 -1
  37. package/fesm2022/frame-ui-ng-components-tooltip.mjs +307 -254
  38. package/fesm2022/frame-ui-ng-components-tooltip.mjs.map +1 -1
  39. package/fesm2022/frame-ui-ng-components-utils.mjs +20 -0
  40. package/fesm2022/frame-ui-ng-components-utils.mjs.map +1 -0
  41. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs +10 -12
  42. package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs.map +1 -1
  43. package/fesm2022/frame-ui-ng-components.mjs +1047 -806
  44. package/fesm2022/frame-ui-ng-components.mjs.map +1 -1
  45. package/input/src/styles/input-group.css +50 -0
  46. package/item/src/styles/item.css +188 -187
  47. package/modal/src/styles/modal.css +10 -1
  48. package/package.json +10 -2
  49. package/select/src/styles/select-trigger.css +7 -36
  50. package/sidebar/src/styles/sidebar.css +10 -4
  51. package/src/styles/blueprint.css +102 -11
  52. package/src/styles/components.css +4 -4
  53. package/styles/blueprint.css +102 -11
  54. package/styles/components.css +4 -4
  55. package/styles.css +4 -4
  56. package/tooltip/src/styles/tooltip.css +7 -13
  57. package/types/frame-ui-ng-components-calendar.d.ts +14 -0
  58. package/types/frame-ui-ng-components-combobox.d.ts +1 -1
  59. package/types/frame-ui-ng-components-confirm-modal.d.ts +48 -0
  60. package/types/frame-ui-ng-components-context-menu.d.ts +2 -2
  61. package/types/frame-ui-ng-components-date-picker.d.ts +3 -1
  62. package/types/frame-ui-ng-components-dropdown-menu.d.ts +3 -3
  63. package/types/frame-ui-ng-components-input-otp.d.ts +1 -1
  64. package/types/frame-ui-ng-components-input.d.ts +6 -3
  65. package/types/frame-ui-ng-components-modal.d.ts +18 -7
  66. package/types/frame-ui-ng-components-select.d.ts +6 -3
  67. package/types/frame-ui-ng-components-sheet.d.ts +2 -0
  68. package/types/frame-ui-ng-components-sidebar.d.ts +8 -1
  69. package/types/frame-ui-ng-components-tooltip.d.ts +48 -73
  70. package/types/frame-ui-ng-components-utils.d.ts +5 -0
  71. package/types/frame-ui-ng-components.d.ts +87 -45
@@ -1 +1 @@
1
- {"version":3,"file":"frame-ui-ng-components-slider.mjs","sources":["../../../projects/components/slider/src/slider.ts","../../../projects/components/slider/slider.module.ts","../../../projects/components/slider/frame-ui-ng-components-slider.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { FrControlValueAccessor, provideDsValueAccessor } from '@frame-ui-ng/components/forms';\n\nexport const FR_SLIDER_ORIENTATIONS = ['horizontal', 'vertical'] as const;\n\nexport type FrSliderOrientation = (typeof FR_SLIDER_ORIENTATIONS)[number];\nexport type FrSliderValue = number | number[];\n\nfunction coerceOrientation(value: unknown): FrSliderOrientation {\n return value === 'vertical' ? 'vertical' : 'horizontal';\n}\n\nfunction coerceNumber(value: unknown, fallback: number): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction coerceValue(value: FrSliderValue | null | undefined): number[] {\n if (Array.isArray(value)) {\n return value.map((item) => coerceNumber(item, 0));\n }\n\n if (value === null || value === undefined) {\n return [0];\n }\n\n return [coerceNumber(value, 0)];\n}\n\n@Component({\n selector: 'frame-slider',\n exportAs: 'frSlider',\n providers: [provideDsValueAccessor(FrSlider)],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'frame-slider',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\n '[attr.data-inverted]': 'inverted() ? \"\" : null',\n '[style.--frame-slider-start-percent]': 'rangeStartPercent() + \"%\"',\n '[style.--frame-slider-end-percent]': 'rangeEndPercent() + \"%\"',\n '(pointerdown)': 'handlePointerDown($event)',\n },\n template: `\n <span class=\"frame-slider__track\">\n <span class=\"frame-slider__range\"></span>\n </span>\n\n @for (thumb of values(); track $index) {\n <input\n class=\"frame-slider__native\"\n type=\"range\"\n [attr.aria-label]=\"thumbLabel($index)\"\n [attr.aria-valuetext]=\"valueText(thumb)\"\n [disabled]=\"disabled()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"thumb\"\n (blur)=\"markTouched()\"\n (input)=\"handleNativeInput($index, $any($event.target).value)\"\n />\n <span\n class=\"frame-slider__thumb\"\n [attr.data-active]=\"activeThumb() === $index ? '' : null\"\n [style.--frame-slider-thumb-percent]=\"percentForValue(thumb) + '%'\"\n ></span>\n }\n `,\n})\nexport class FrSlider extends FrControlValueAccessor<FrSliderValue | null> {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly document = inject(DOCUMENT);\n private controlledByInput = false;\n\n readonly min = input(0, { transform: numberAttribute });\n readonly max = input(100, { transform: numberAttribute });\n readonly step = input(1, { transform: numberAttribute });\n readonly minStepsBetweenThumbs = input(0, { transform: numberAttribute });\n readonly orientation = input<FrSliderOrientation, unknown>('horizontal', { transform: coerceOrientation });\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n readonly invalidInput = input(false, { alias: 'invalid', transform: booleanAttribute });\n readonly inverted = input(false, { transform: booleanAttribute });\n readonly defaultValue = input<FrSliderValue>(0);\n readonly valueInput = input<FrSliderValue | null>(null, { alias: 'value' });\n readonly ariaLabel = input('Slider thumb', { alias: 'aria-label' });\n readonly formatValue = input<((value: number) => string) | null>(null);\n\n readonly valueChange = output<FrSliderValue>();\n\n protected readonly values = signal<number[]>([0]);\n protected readonly activeThumb = signal<number | null>(null);\n protected readonly disabled = computed(() => this.disabledInput() || this.formDisabled());\n protected readonly invalid = computed(() => this.invalidInput() || this.formInvalid());\n protected readonly rangeStartPercent = computed(() => {\n const values = this.values();\n return values.length > 1 ? this.percentForValue(values[0]) : 0;\n });\n protected readonly rangeEndPercent = computed(() => {\n const values = this.values();\n return this.percentForValue(values.at(-1) ?? this.min());\n });\n\n constructor() {\n super();\n\n effect(() => {\n const controlledValue = this.valueInput();\n\n if (controlledValue !== null) {\n this.controlledByInput = true;\n this.values.set(this.normalizeValues(coerceValue(controlledValue)));\n return;\n }\n\n if (!this.controlledByInput) {\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\n }\n });\n }\n\n protected setViewValue(value: FrSliderValue | null): void {\n if (value === null || value === undefined) {\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\n return;\n }\n\n this.values.set(this.normalizeValues(coerceValue(value)));\n }\n\n protected handleNativeInput(index: number, rawValue: string): void {\n this.commitThumbValue(index, Number(rawValue));\n }\n\n protected markTouched(): void {\n this.markAsTouched();\n }\n\n protected handlePointerDown(event: PointerEvent): void {\n if (this.disabled() || event.button !== 0) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n if (target?.classList.contains('frame-slider__native')) {\n return;\n }\n\n event.preventDefault();\n const index = this.closestThumbIndex(this.valueFromPointer(event));\n this.activeThumb.set(index);\n this.commitThumbValue(index, this.valueFromPointer(event));\n\n const move = (moveEvent: PointerEvent) => {\n moveEvent.preventDefault();\n this.commitThumbValue(index, this.valueFromPointer(moveEvent));\n };\n\n const up = () => {\n this.document.removeEventListener('pointermove', move);\n this.document.removeEventListener('pointerup', up);\n this.activeThumb.set(null);\n this.markTouched();\n };\n\n this.document.addEventListener('pointermove', move);\n this.document.addEventListener('pointerup', up, { once: true });\n }\n\n protected thumbLabel(index: number): string {\n const count = this.values().length;\n\n if (count === 1) {\n return this.ariaLabel();\n }\n\n if (index === 0) {\n return `${this.ariaLabel()} minimum`;\n }\n\n if (index === count - 1) {\n return `${this.ariaLabel()} maximum`;\n }\n\n return `${this.ariaLabel()} ${index + 1}`;\n }\n\n protected valueText(value: number): string {\n return this.formatValue()?.(value) ?? String(value);\n }\n\n protected percentForValue(value: number): number {\n const min = this.min();\n const max = this.max();\n const range = max - min;\n\n if (range <= 0) {\n return 0;\n }\n\n return ((value - min) / range) * 100;\n }\n\n private commitThumbValue(index: number, rawValue: number): void {\n const next = [...this.values()];\n next[index] = rawValue;\n const normalized = this.normalizeValues(next, index);\n this.values.set(normalized);\n\n const emitted = this.toExternalValue(normalized);\n this.notifyValueChange(emitted);\n this.valueChange.emit(emitted);\n }\n\n private normalizeValues(values: number[], activeIndex = -1): number[] {\n const min = Math.min(this.min(), this.max());\n const max = Math.max(this.min(), this.max());\n const step = Math.max(this.step(), 0.000001);\n const minDistance = Math.max(this.minStepsBetweenThumbs(), 0) * step;\n const normalized = values.length ? values : [min];\n\n return normalized.map((value, index) => {\n const previous = index > 0 ? normalized[index - 1] + minDistance : min;\n const next = index < normalized.length - 1 ? normalized[index + 1] - minDistance : max;\n const lower = activeIndex === index ? previous : min;\n const upper = activeIndex === index ? next : max;\n return this.snap(clamp(value, lower, upper), min, step);\n });\n }\n\n private snap(value: number, min: number, step: number): number {\n const decimals = String(step).split('.')[1]?.length ?? 0;\n return Number((Math.round((value - min) / step) * step + min).toFixed(decimals));\n }\n\n private toExternalValue(values: number[]): FrSliderValue {\n return values.length === 1 ? values[0] : values;\n }\n\n private valueFromPointer(event: PointerEvent): number {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n const horizontal = this.orientation() === 'horizontal';\n const size = horizontal ? rect.width : rect.height;\n const offset = horizontal ? event.clientX - rect.left : rect.bottom - event.clientY;\n const direction = horizontal && this.isRtl() ? -1 : 1;\n let percent = size > 0 ? offset / size : 0;\n\n if (direction === -1) {\n percent = 1 - percent;\n }\n\n if (this.inverted()) {\n percent = 1 - percent;\n }\n\n return this.min() + clamp(percent, 0, 1) * (this.max() - this.min());\n }\n\n private closestThumbIndex(value: number): number {\n return this.values().reduce((closestIndex, thumb, index, values) => {\n const currentDistance = Math.abs(value - thumb);\n const closestDistance = Math.abs(value - values[closestIndex]);\n return currentDistance < closestDistance ? index : closestIndex;\n }, 0);\n }\n\n private isRtl(): boolean {\n return getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\n }\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n","import { NgModule } from '@angular/core';\n\nimport { FrSlider } from './src/slider';\n\n@NgModule({\n imports: [FrSlider],\n exports: [FrSlider],\n})\nexport class FrSliderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frame-ui-ng-components-slider.mjs","sources":["../../../projects/components/slider/src/slider.ts","../../../projects/components/slider/slider.module.ts","../../../projects/components/slider/frame-ui-ng-components-slider.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\nimport { FrControlValueAccessor, provideDsValueAccessor } from '@frame-ui-ng/components/forms';\r\nimport { clampNumber, coerceNumber } from '@frame-ui-ng/components/utils';\r\n\r\nexport const FR_SLIDER_ORIENTATIONS = ['horizontal', 'vertical'] as const;\r\n\r\nexport type FrSliderOrientation = (typeof FR_SLIDER_ORIENTATIONS)[number];\r\nexport type FrSliderValue = number | number[];\r\n\r\nfunction coerceOrientation(value: unknown): FrSliderOrientation {\r\n return value === 'vertical' ? 'vertical' : 'horizontal';\r\n}\r\n\r\nfunction coerceValue(value: FrSliderValue | null | undefined): number[] {\r\n if (Array.isArray(value)) {\r\n return value.map((item) => coerceNumber(item, 0));\r\n }\r\n\r\n if (value === null || value === undefined) {\r\n return [0];\r\n }\r\n\r\n return [coerceNumber(value, 0)];\r\n}\r\n\r\n@Component({\r\n selector: 'frame-slider',\r\n exportAs: 'frSlider',\r\n providers: [provideDsValueAccessor(FrSlider)],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'frame-slider',\r\n '[attr.data-orientation]': 'orientation()',\r\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\r\n '[attr.data-invalid]': 'invalid() ? \"\" : null',\r\n '[attr.data-inverted]': 'inverted() ? \"\" : null',\r\n '[style.--frame-slider-start-percent]': 'rangeStartPercent() + \"%\"',\r\n '[style.--frame-slider-end-percent]': 'rangeEndPercent() + \"%\"',\r\n '(pointerdown)': 'handlePointerDown($event)',\r\n },\r\n template: `\r\n <span class=\"frame-slider__track\">\r\n <span class=\"frame-slider__range\"></span>\r\n </span>\r\n\r\n @for (thumb of values(); track $index) {\r\n <input\r\n class=\"frame-slider__native\"\r\n type=\"range\"\r\n [attr.aria-label]=\"thumbLabel($index)\"\r\n [attr.aria-valuetext]=\"valueText(thumb)\"\r\n [disabled]=\"disabled()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [step]=\"step()\"\r\n [value]=\"thumb\"\r\n (blur)=\"markTouched()\"\r\n (input)=\"handleNativeInput($index, $any($event.target).value)\"\r\n />\r\n <span\r\n class=\"frame-slider__thumb\"\r\n [attr.data-active]=\"activeThumb() === $index ? '' : null\"\r\n [style.--frame-slider-thumb-percent]=\"percentForValue(thumb) + '%'\"\r\n ></span>\r\n }\r\n `,\r\n})\r\nexport class FrSlider extends FrControlValueAccessor<FrSliderValue | null> {\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private controlledByInput = false;\r\n\r\n readonly min = input(0, { transform: numberAttribute });\r\n readonly max = input(100, { transform: numberAttribute });\r\n readonly step = input(1, { transform: numberAttribute });\r\n readonly minStepsBetweenThumbs = input(0, { transform: numberAttribute });\r\n readonly orientation = input<FrSliderOrientation, unknown>('horizontal', { transform: coerceOrientation });\r\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\r\n readonly invalidInput = input(false, { alias: 'invalid', transform: booleanAttribute });\r\n readonly inverted = input(false, { transform: booleanAttribute });\r\n readonly defaultValue = input<FrSliderValue>(0);\r\n readonly valueInput = input<FrSliderValue | null>(null, { alias: 'value' });\r\n readonly ariaLabel = input('Slider thumb', { alias: 'aria-label' });\r\n readonly formatValue = input<((value: number) => string) | null>(null);\r\n\r\n readonly valueChange = output<FrSliderValue>();\r\n\r\n protected readonly values = signal<number[]>([0]);\r\n protected readonly activeThumb = signal<number | null>(null);\r\n protected readonly disabled = computed(() => this.disabledInput() || this.formDisabled());\r\n protected readonly invalid = computed(() => this.invalidInput() || this.formInvalid());\r\n protected readonly rangeStartPercent = computed(() => {\r\n const values = this.values();\r\n return values.length > 1 ? this.percentForValue(values[0]) : 0;\r\n });\r\n protected readonly rangeEndPercent = computed(() => {\r\n const values = this.values();\r\n return this.percentForValue(values.at(-1) ?? this.min());\r\n });\r\n\r\n constructor() {\r\n super();\r\n\r\n effect(() => {\r\n const controlledValue = this.valueInput();\r\n\r\n if (controlledValue !== null) {\r\n this.controlledByInput = true;\r\n this.values.set(this.normalizeValues(coerceValue(controlledValue)));\r\n return;\r\n }\r\n\r\n if (!this.controlledByInput) {\r\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\r\n }\r\n });\r\n }\r\n\r\n protected setViewValue(value: FrSliderValue | null): void {\r\n if (value === null || value === undefined) {\r\n this.values.set(this.normalizeValues(coerceValue(this.defaultValue())));\r\n return;\r\n }\r\n\r\n this.values.set(this.normalizeValues(coerceValue(value)));\r\n }\r\n\r\n protected handleNativeInput(index: number, rawValue: string): void {\r\n this.commitThumbValue(index, Number(rawValue));\r\n }\r\n\r\n protected markTouched(): void {\r\n this.markAsTouched();\r\n }\r\n\r\n protected handlePointerDown(event: PointerEvent): void {\r\n if (this.disabled() || event.button !== 0) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement | null;\r\n if (target?.classList.contains('frame-slider__native')) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const index = this.closestThumbIndex(this.valueFromPointer(event));\r\n this.activeThumb.set(index);\r\n this.commitThumbValue(index, this.valueFromPointer(event));\r\n\r\n const move = (moveEvent: PointerEvent) => {\r\n moveEvent.preventDefault();\r\n this.commitThumbValue(index, this.valueFromPointer(moveEvent));\r\n };\r\n\r\n const up = () => {\r\n this.document.removeEventListener('pointermove', move);\r\n this.document.removeEventListener('pointerup', up);\r\n this.activeThumb.set(null);\r\n this.markTouched();\r\n };\r\n\r\n this.document.addEventListener('pointermove', move);\r\n this.document.addEventListener('pointerup', up, { once: true });\r\n }\r\n\r\n protected thumbLabel(index: number): string {\r\n const count = this.values().length;\r\n\r\n if (count === 1) {\r\n return this.ariaLabel();\r\n }\r\n\r\n if (index === 0) {\r\n return `${this.ariaLabel()} minimum`;\r\n }\r\n\r\n if (index === count - 1) {\r\n return `${this.ariaLabel()} maximum`;\r\n }\r\n\r\n return `${this.ariaLabel()} ${index + 1}`;\r\n }\r\n\r\n protected valueText(value: number): string {\r\n return this.formatValue()?.(value) ?? String(value);\r\n }\r\n\r\n protected percentForValue(value: number): number {\r\n const min = this.min();\r\n const max = this.max();\r\n const range = max - min;\r\n\r\n if (range <= 0) {\r\n return 0;\r\n }\r\n\r\n return ((value - min) / range) * 100;\r\n }\r\n\r\n private commitThumbValue(index: number, rawValue: number): void {\r\n const next = [...this.values()];\r\n next[index] = rawValue;\r\n const normalized = this.normalizeValues(next, index);\r\n this.values.set(normalized);\r\n\r\n const emitted = this.toExternalValue(normalized);\r\n this.notifyValueChange(emitted);\r\n this.valueChange.emit(emitted);\r\n }\r\n\r\n private normalizeValues(values: number[], activeIndex = -1): number[] {\r\n const min = Math.min(this.min(), this.max());\r\n const max = Math.max(this.min(), this.max());\r\n const step = Math.max(this.step(), 0.000001);\r\n const minDistance = Math.max(this.minStepsBetweenThumbs(), 0) * step;\r\n const normalized = values.length ? values : [min];\r\n\r\n return normalized.map((value, index) => {\r\n const previous = index > 0 ? normalized[index - 1] + minDistance : min;\r\n const next = index < normalized.length - 1 ? normalized[index + 1] - minDistance : max;\r\n const lower = activeIndex === index ? previous : min;\r\n const upper = activeIndex === index ? next : max;\r\n return this.snap(clampNumber(value, lower, upper), min, step);\r\n });\r\n }\r\n\r\n private snap(value: number, min: number, step: number): number {\r\n const decimals = String(step).split('.')[1]?.length ?? 0;\r\n return Number((Math.round((value - min) / step) * step + min).toFixed(decimals));\r\n }\r\n\r\n private toExternalValue(values: number[]): FrSliderValue {\r\n return values.length === 1 ? values[0] : values;\r\n }\r\n\r\n private valueFromPointer(event: PointerEvent): number {\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const horizontal = this.orientation() === 'horizontal';\r\n const size = horizontal ? rect.width : rect.height;\r\n const offset = horizontal ? event.clientX - rect.left : rect.bottom - event.clientY;\r\n const direction = horizontal && this.isRtl() ? -1 : 1;\r\n let percent = size > 0 ? offset / size : 0;\r\n\r\n if (direction === -1) {\r\n percent = 1 - percent;\r\n }\r\n\r\n if (this.inverted()) {\r\n percent = 1 - percent;\r\n }\r\n\r\n return this.min() + clampNumber(percent, 0, 1) * (this.max() - this.min());\r\n }\r\n\r\n private closestThumbIndex(value: number): number {\r\n return this.values().reduce((closestIndex, thumb, index, values) => {\r\n const currentDistance = Math.abs(value - thumb);\r\n const closestDistance = Math.abs(value - values[closestIndex]);\r\n return currentDistance < closestDistance ? index : closestIndex;\r\n }, 0);\r\n }\r\n\r\n private isRtl(): boolean {\r\n return getComputedStyle(this.elementRef.nativeElement).direction === 'rtl';\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\n\nimport { FrSlider } from './src/slider';\n\n@NgModule({\n imports: [FrSlider],\n exports: [FrSlider],\n})\nexport class FrSliderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}