@weeehaoooz/talos-ui 0.1.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 (180) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs +237 -0
  4. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +1 -0
  5. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +93 -0
  6. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +1 -0
  7. package/fesm2022/weeehaoooz-talos-ui-core.mjs +438 -0
  8. package/fesm2022/weeehaoooz-talos-ui-core.mjs.map +1 -0
  9. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +233 -0
  10. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +1 -0
  11. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +361 -0
  12. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +1 -0
  13. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +312 -0
  14. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +1 -0
  15. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +235 -0
  16. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +1 -0
  17. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +462 -0
  18. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +1 -0
  19. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +805 -0
  20. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +1 -0
  21. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +267 -0
  22. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +1 -0
  23. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +351 -0
  24. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +1 -0
  25. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +566 -0
  26. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +1 -0
  27. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +534 -0
  28. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +1 -0
  29. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +446 -0
  30. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +1 -0
  31. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +376 -0
  32. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +1 -0
  33. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +147 -0
  34. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +1 -0
  35. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +242 -0
  36. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +1 -0
  37. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +514 -0
  38. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +1 -0
  39. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +548 -0
  40. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +1 -0
  41. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +692 -0
  42. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +1 -0
  43. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +761 -0
  44. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +1 -0
  45. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +896 -0
  46. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +1 -0
  47. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +872 -0
  48. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +1 -0
  49. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +119 -0
  50. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +1 -0
  51. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +135 -0
  52. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +1 -0
  53. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +666 -0
  54. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +1 -0
  55. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +147 -0
  56. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +1 -0
  57. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +33 -0
  58. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +1 -0
  59. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +455 -0
  60. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +1 -0
  61. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +379 -0
  62. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +1 -0
  63. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +297 -0
  64. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +1 -0
  65. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +661 -0
  66. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +1 -0
  67. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +346 -0
  68. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +1 -0
  69. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +896 -0
  70. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +1 -0
  71. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +252 -0
  72. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +1 -0
  73. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +916 -0
  74. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +1 -0
  75. package/fesm2022/weeehaoooz-talos-ui-layout.mjs +851 -0
  76. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -0
  77. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +897 -0
  78. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -0
  79. package/fesm2022/weeehaoooz-talos-ui.mjs +17058 -0
  80. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -0
  81. package/package.json +203 -0
  82. package/schematics/collection.json +10 -0
  83. package/schematics/ng-add/index.d.ts +3 -0
  84. package/schematics/ng-add/index.js +99 -0
  85. package/schematics/ng-add/schema.d.ts +10 -0
  86. package/schematics/ng-add/schema.js +2 -0
  87. package/schematics/ng-add/schema.json +52 -0
  88. package/styles/_alert.scss +56 -0
  89. package/styles/_badge.scss +279 -0
  90. package/styles/_button-group.scss +470 -0
  91. package/styles/_buttons.scss +442 -0
  92. package/styles/_card.scss +18 -0
  93. package/styles/_dialog.scss +116 -0
  94. package/styles/_drop-zone.scss +19 -0
  95. package/styles/_form-controls.scss +660 -0
  96. package/styles/_slide-toggle.scss +171 -0
  97. package/styles/_status-tag.scss +108 -0
  98. package/styles/_timeline.scss +19 -0
  99. package/styles/_tooltip.scss +32 -0
  100. package/styles/_typography.scss +279 -0
  101. package/styles/_variables.scss +590 -0
  102. package/styles/index.scss +15 -0
  103. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +59 -0
  104. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +1 -0
  105. package/types/weeehaoooz-talos-ui-button-button.d.ts +38 -0
  106. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +1 -0
  107. package/types/weeehaoooz-talos-ui-core.d.ts +95 -0
  108. package/types/weeehaoooz-talos-ui-core.d.ts.map +1 -0
  109. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +119 -0
  110. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +1 -0
  111. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +135 -0
  112. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +1 -0
  113. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +144 -0
  114. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +1 -0
  115. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +83 -0
  116. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +1 -0
  117. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +255 -0
  118. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +1 -0
  119. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +204 -0
  120. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +1 -0
  121. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +101 -0
  122. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +1 -0
  123. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +138 -0
  124. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +1 -0
  125. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +161 -0
  126. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +1 -0
  127. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +212 -0
  128. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +1 -0
  129. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +259 -0
  130. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +1 -0
  131. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +147 -0
  132. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +1 -0
  133. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +32 -0
  134. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +1 -0
  135. package/types/weeehaoooz-talos-ui-form-affix.d.ts +88 -0
  136. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +1 -0
  137. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +113 -0
  138. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +1 -0
  139. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +165 -0
  140. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +1 -0
  141. package/types/weeehaoooz-talos-ui-form-chips.d.ts +152 -0
  142. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +1 -0
  143. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +144 -0
  144. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +1 -0
  145. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +138 -0
  146. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +1 -0
  147. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +148 -0
  148. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +1 -0
  149. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +44 -0
  150. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +1 -0
  151. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +48 -0
  152. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +1 -0
  153. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +227 -0
  154. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +1 -0
  155. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +42 -0
  156. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +1 -0
  157. package/types/weeehaoooz-talos-ui-form-input.d.ts +15 -0
  158. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +1 -0
  159. package/types/weeehaoooz-talos-ui-form-otp.d.ts +111 -0
  160. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +1 -0
  161. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +145 -0
  162. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +1 -0
  163. package/types/weeehaoooz-talos-ui-form-radio.d.ts +84 -0
  164. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +1 -0
  165. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +181 -0
  166. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +1 -0
  167. package/types/weeehaoooz-talos-ui-form-rating.d.ts +110 -0
  168. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +1 -0
  169. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +195 -0
  170. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +1 -0
  171. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +79 -0
  172. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +1 -0
  173. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +192 -0
  174. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +1 -0
  175. package/types/weeehaoooz-talos-ui-layout.d.ts +286 -0
  176. package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -0
  177. package/types/weeehaoooz-talos-ui-nav.d.ts +384 -0
  178. package/types/weeehaoooz-talos-ui-nav.d.ts.map +1 -0
  179. package/types/weeehaoooz-talos-ui.d.ts +5050 -0
  180. package/types/weeehaoooz-talos-ui.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"weeehaoooz-talos-ui-form-range-input.mjs","sources":["../../../projects/talos-ui/form/range-input/range-input.directive.ts","../../../projects/talos-ui/form/range-input/range-input.component.ts","../../../projects/talos-ui/form/range-input/range-input.component.html","../../../projects/talos-ui/form/range-input/range-input.module.ts","../../../projects/talos-ui/form/range-input/weeehaoooz-talos-ui-form-range-input.ts"],"sourcesContent":["import { Directive, ElementRef, computed, inject, input } from '@angular/core';\nimport { RangeInputSize, RangeInputVariant } from './range-input.types';\n\n@Directive({\n selector: 'input[type=\"range\"][talosRangeInput], input[type=\"range\"][talos-range-input]',\n host: {\n 'class': 'talos-range-native-input',\n '[class.talos-range-input-sm]': 'size() === \"sm\"',\n '[class.talos-range-input-md]': 'size() === \"md\"',\n '[class.talos-range-input-lg]': 'size() === \"lg\"',\n '[class.talos-range-input-primary]': 'variant() === \"primary\"',\n '[class.talos-range-input-secondary]': 'variant() === \"secondary\"',\n '[class.talos-range-input-success]': 'variant() === \"success\"',\n '[class.talos-range-input-warning]': 'variant() === \"warning\"',\n '[class.talos-range-input-danger]': 'variant() === \"danger\"',\n '[class.talos-range-input-info]': 'variant() === \"info\"',\n '[class.is-invalid]': 'invalid()',\n '[style.--range-fill-percent]': 'fillPercentStyle()'\n }\n})\nexport class TalosRangeInputDirective {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n /** Size variant */\n readonly size = input<RangeInputSize>('md');\n\n /** Visual color variant */\n readonly variant = input<RangeInputVariant>('primary');\n\n /** Error state */\n readonly invalid = input<boolean>(false);\n\n protected readonly fillPercentStyle = computed(() => {\n const el = this.elementRef.nativeElement;\n const min = parseFloat(el.min) || 0;\n const max = parseFloat(el.max) || 100;\n const val = parseFloat(el.value) || min;\n const percent = max > min ? ((val - min) / (max - min)) * 100 : 0;\n return `${Math.max(0, Math.min(100, percent))}%`;\n });\n}\n","import {\n Component,\n ElementRef,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n RangeInputChangeEvent,\n RangeInputMark,\n RangeInputSize,\n RangeInputTick,\n RangeInputTooltipMode,\n RangeInputValue,\n RangeInputVariant\n} from './range-input.types';\n\nlet rangeInputCounter = 0;\n\n@Component({\n selector: 'talos-range-input, talos-range-slider, talos-slider',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TalosRangeInputComponent),\n multi: true\n }\n ],\n templateUrl: './range-input.component.html',\n styleUrl: './range-input.component.scss',\n host: {\n 'class': 'talos-range-input-host',\n '[class.talos-range-disabled]': 'effectiveDisabled()',\n '[class.talos-range-invalid]': 'effectiveInvalid()',\n '[class.is-floating]': 'isFloatingMode()'\n }\n})\nexport class TalosRangeInputComponent implements ControlValueAccessor {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly trackContainerRef = viewChild<ElementRef<HTMLDivElement>>('sliderTrackContainer');\n private readonly thumb0Ref = viewChild<ElementRef<HTMLDivElement>>('thumb0');\n private readonly thumb1Ref = viewChild<ElementRef<HTMLDivElement>>('thumb1');\n\n /** Minimum allowed value */\n readonly min = input<number>(0);\n\n /** Maximum allowed value */\n readonly max = input<number>(100);\n\n /** Step increment for values */\n readonly step = input<number>(1);\n\n /** Step interval for tick marks / labels generation (e.g. 10, 20, 25) */\n readonly interval = input<number | null>(null);\n\n /** Whether the slider operates in dual-thumb range mode */\n readonly range = input<boolean>(false);\n\n /** Minimum distance between handles in dual mode */\n readonly minRange = input<number>(0);\n\n /** Maximum distance between handles in dual mode */\n readonly maxRange = input<number | null>(null);\n\n /** Discrete tick marks with optional custom labels */\n readonly marks = input<RangeInputMark[] | number[] | null>(null);\n\n /** Whether to show tick mark notches on the track */\n readonly showTicks = input<boolean>(false);\n\n /** Whether to show interval/tick labels under the track */\n readonly showIntervals = input<boolean>(false);\n\n /** Alias for showIntervals */\n readonly showLabels = input<boolean>(false);\n\n /** Whether to snap slider thumb only to configured tick marks */\n readonly snapToTicks = input<boolean>(false);\n\n /** Sizing variant */\n readonly size = input<RangeInputSize>('md');\n\n /** Visual color variant */\n readonly variant = input<RangeInputVariant>('primary');\n\n /** Disabled state */\n readonly disabled = input<boolean>(false);\n\n /** Read-only state */\n readonly readonly = input<boolean>(false);\n\n /** Invalid error state */\n readonly invalid = input<boolean>(false);\n\n /** Top label text */\n readonly label = input<string>('');\n\n /** Floating label mode toggle */\n readonly floatingLabel = input<boolean>(false);\n readonly floating = input<boolean>(false);\n\n /** Helper hint text */\n readonly hint = input<string>('');\n\n /** Whether to render synchronized number inputs */\n readonly showInputs = input<boolean>(false);\n\n /** Whether to show top value badge when inputs are disabled */\n readonly showValueBadge = input<boolean>(true);\n\n /** Tooltip display mode ('always' | 'hover' | 'drag' | 'none') */\n readonly showTooltip = input<RangeInputTooltipMode>('hover');\n\n /** Optional prefix string (e.g. '$') */\n readonly prefix = input<string>('');\n\n /** Optional suffix string (e.g. '%', '°C') */\n readonly suffix = input<string>('');\n\n /** Custom value formatter function */\n readonly formatter = input<((value: number) => string) | null>(null);\n\n /** Accessibility label for single slider */\n readonly ariaLabel = input<string>('Range slider');\n\n /** Accessibility label for start thumb in range mode */\n readonly ariaLabelStart = input<string>('Minimum range value');\n\n /** Accessibility label for end thumb in range mode */\n readonly ariaLabelEnd = input<string>('Maximum range value');\n\n /** Element unique ID */\n readonly id = input<string>('');\n\n /** Standalone value input binding */\n readonly value = input<RangeInputValue | null>(null);\n\n /** Emitted when value changes */\n readonly valueChange = output<RangeInputValue>();\n\n /** Emitted during active dragging or keyboard movement */\n readonly inputChange = output<RangeInputChangeEvent>();\n\n /** Emitted on drag end, click release or input commit */\n readonly change = output<RangeInputChangeEvent>();\n\n // Internal reactive states\n private readonly defaultId = `talos-range-${++rangeInputCounter}`;\n readonly elementId = computed(() => this.id() || this.defaultId);\n\n readonly internalValue = signal<RangeInputValue | null>(null);\n readonly isCvaDisabled = signal<boolean>(false);\n readonly isTouched = signal<boolean>(false);\n\n // Active interaction tracking\n readonly focusedThumb = signal<number | null>(null);\n readonly hoveredThumb = signal<number | null>(null);\n readonly draggingThumb = signal<number | null>(null);\n\n // Effective state computations\n readonly isFloatingMode = computed(() => this.floatingLabel() || this.floating());\n readonly effectiveDisabled = computed(() => this.disabled() || this.isCvaDisabled());\n readonly effectiveInvalid = computed(() => this.invalid());\n\n /** Determines whether the component is in dual-handle range mode */\n readonly isDualRange = computed<boolean>(() => {\n if (this.range()) return true;\n const v = this.internalValue() ?? this.value();\n return Array.isArray(v);\n });\n\n /** Resolved start value (single value or lower bound of range) */\n readonly startValue = computed<number>(() => {\n const v = this.internalValue() ?? this.value();\n const min = this.min();\n const max = this.max();\n\n if (Array.isArray(v)) {\n const val = typeof v[0] === 'number' ? v[0] : min;\n return this.clamp(val, min, max);\n }\n const val = typeof v === 'number' ? v : min;\n return this.clamp(val, min, max);\n });\n\n /** Resolved end value (upper bound of range mode) */\n readonly endValue = computed<number>(() => {\n const v = this.internalValue() ?? this.value();\n const min = this.min();\n const max = this.max();\n\n if (Array.isArray(v)) {\n const val = typeof v[1] === 'number' ? v[1] : max;\n return this.clamp(Math.max(this.startValue(), val), min, max);\n }\n return max;\n });\n\n /** Overall span */\n readonly span = computed<number>(() => {\n const diff = this.max() - this.min();\n return diff > 0 ? diff : 1;\n });\n\n /** Percentage position of thumb 0 */\n readonly thumb0Percent = computed<number>(() => {\n return this.valueToPercent(this.startValue());\n });\n\n /** Percentage position of thumb 1 */\n readonly thumb1Percent = computed<number>(() => {\n return this.valueToPercent(this.endValue());\n });\n\n /** Fill bar left percentage */\n readonly fillLeftPercent = computed<number>(() => {\n if (this.isDualRange()) {\n return this.thumb0Percent();\n }\n return 0;\n });\n\n /** Fill bar width percentage */\n readonly fillWidthPercent = computed<number>(() => {\n if (this.isDualRange()) {\n return Math.max(0, this.thumb1Percent() - this.thumb0Percent());\n }\n return this.thumb0Percent();\n });\n\n /** Computed list of tick marks */\n readonly ticks = computed<RangeInputTick[]>(() => {\n const min = this.min();\n const max = this.max();\n const customMarks = this.marks();\n const intervalVal = this.interval();\n const startVal = this.startValue();\n const endVal = this.isDualRange() ? this.endValue() : startVal;\n const isDual = this.isDualRange();\n\n if (customMarks && customMarks.length > 0) {\n return customMarks.map(m => {\n const val = typeof m === 'number' ? m : m.value;\n const label = typeof m === 'number' ? undefined : m.label;\n const tooltip = typeof m === 'number' ? undefined : m.tooltip;\n const percent = this.valueToPercent(val);\n const active = isDual\n ? val >= startVal && val <= endVal\n : val <= startVal;\n return { value: val, percent, label, tooltip, active };\n });\n }\n\n if (intervalVal && intervalVal > 0) {\n const list: RangeInputTick[] = [];\n for (let v = min; v <= max; v += intervalVal) {\n const percent = this.valueToPercent(v);\n const active = isDual\n ? v >= startVal && v <= endVal\n : v <= startVal;\n list.push({\n value: v,\n percent,\n label: this.formatDisplayValue(v),\n active\n });\n }\n // Ensure max is included if not strictly a multiple\n if ((max - min) % intervalVal !== 0) {\n list.push({\n value: max,\n percent: 100,\n label: this.formatDisplayValue(max),\n active: isDual ? endVal >= max : startVal >= max\n });\n }\n return list;\n }\n\n return [];\n });\n\n /** Computed list of interval/tick labels */\n readonly labels = computed<RangeInputTick[]>(() => {\n const customMarks = this.marks();\n const ticksList = this.ticks();\n\n if (customMarks && customMarks.length > 0) {\n return ticksList.filter(t => t.label !== undefined);\n }\n return ticksList;\n });\n\n readonly isDragging = computed(() => this.draggingThumb() !== null);\n\n private onChange: (val: RangeInputValue) => void = () => { };\n private onTouched: () => void = () => { };\n\n // --- ControlValueAccessor Implementation ---\n writeValue(val: RangeInputValue | null): void {\n if (val === null || val === undefined) {\n this.internalValue.set(this.range() ? [this.min(), this.max()] : this.min());\n } else {\n this.internalValue.set(val);\n }\n }\n\n registerOnChange(fn: (val: RangeInputValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.isCvaDisabled.set(isDisabled);\n }\n\n // --- Value Helpers & Formatting ---\n private clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n }\n\n private valueToPercent(value: number): number {\n const min = this.min();\n const span = this.span();\n const percent = ((value - min) / span) * 100;\n return Math.max(0, Math.min(100, percent));\n }\n\n private percentToValue(percent: number): number {\n const min = this.min();\n const span = this.span();\n return min + (percent / 100) * span;\n }\n\n private snapValue(value: number): number {\n const min = this.min();\n const max = this.max();\n\n if (this.snapToTicks()) {\n const availableTicks = this.ticks();\n if (availableTicks.length > 0) {\n let closest = availableTicks[0].value;\n let minDiff = Math.abs(value - closest);\n for (const t of availableTicks) {\n const diff = Math.abs(value - t.value);\n if (diff < minDiff) {\n minDiff = diff;\n closest = t.value;\n }\n }\n return closest;\n }\n }\n\n const step = this.step();\n if (step <= 0) return this.clamp(value, min, max);\n\n const stepsCount = Math.round((value - min) / step);\n const steppedVal = min + stepsCount * step;\n\n // Handle floating-point rounding precision\n const stepDecimals = (step.toString().split('.')[1] || '').length;\n const roundedVal = parseFloat(steppedVal.toFixed(stepDecimals));\n\n return this.clamp(roundedVal, min, max);\n }\n\n formatDisplayValue(val: number): string {\n const customFormatter = this.formatter();\n if (customFormatter) {\n return customFormatter(val);\n }\n const pre = this.prefix();\n const suf = this.suffix();\n return `${pre}${val.toLocaleString()}${suf}`;\n }\n\n isTooltipVisible(thumbIndex: number): boolean {\n const mode = this.showTooltip();\n if (mode === 'none') return false;\n if (mode === 'always') return true;\n if (mode === 'drag') return this.draggingThumb() === thumbIndex;\n if (mode === 'hover') {\n return (\n this.hoveredThumb() === thumbIndex ||\n this.draggingThumb() === thumbIndex ||\n this.focusedThumb() === thumbIndex\n );\n }\n return false;\n }\n\n // --- Interaction & Event Handlers ---\n private emitUpdate(newVal: RangeInputValue, source: 'drag' | 'keyboard' | 'input' | 'track-click', isFinal = false): void {\n this.internalValue.set(newVal);\n this.onChange(newVal);\n this.valueChange.emit(newVal);\n\n const event: RangeInputChangeEvent = { value: newVal, source };\n this.inputChange.emit(event);\n\n if (isFinal) {\n this.change.emit(event);\n this.markAsTouched();\n }\n }\n\n private markAsTouched(): void {\n if (!this.isTouched()) {\n this.isTouched.set(true);\n this.onTouched();\n }\n }\n\n onThumbFocus(thumbIndex: number): void {\n this.focusedThumb.set(thumbIndex);\n }\n\n onThumbBlur(thumbIndex: number): void {\n if (this.focusedThumb() === thumbIndex) {\n this.focusedThumb.set(null);\n }\n this.markAsTouched();\n }\n\n onThumbMouseEnter(thumbIndex: number): void {\n this.hoveredThumb.set(thumbIndex);\n }\n\n onThumbMouseLeave(thumbIndex: number): void {\n if (this.hoveredThumb() === thumbIndex) {\n this.hoveredThumb.set(null);\n }\n }\n\n onThumbPointerDown(thumbIndex: number, event: PointerEvent): void {\n if (this.effectiveDisabled() || this.readonly()) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n this.draggingThumb.set(thumbIndex);\n this.focusedThumb.set(thumbIndex);\n\n const target = event.currentTarget as HTMLElement;\n target.setPointerCapture(event.pointerId);\n\n const onPointerMove = (e: PointerEvent) => {\n if (this.draggingThumb() !== thumbIndex) return;\n this.updateValueFromPointer(thumbIndex, e.clientX, 'drag', false);\n };\n\n const onPointerUp = (e: PointerEvent) => {\n target.removeEventListener('pointermove', onPointerMove);\n target.removeEventListener('pointerup', onPointerUp);\n target.removeEventListener('pointercancel', onPointerUp);\n\n try {\n target.releasePointerCapture(e.pointerId);\n } catch { }\n\n if (this.draggingThumb() === thumbIndex) {\n this.updateValueFromPointer(thumbIndex, e.clientX, 'drag', true);\n this.draggingThumb.set(null);\n }\n };\n\n target.addEventListener('pointermove', onPointerMove);\n target.addEventListener('pointerup', onPointerUp);\n target.addEventListener('pointercancel', onPointerUp);\n }\n\n onTrackPointerDown(event: PointerEvent): void {\n if (this.effectiveDisabled() || this.readonly()) return;\n\n const trackContainer = this.trackContainerRef()?.nativeElement;\n if (!trackContainer) return;\n\n const rect = trackContainer.getBoundingClientRect();\n const clickX = event.clientX;\n const clickRatio = (clickX - rect.left) / rect.width;\n const rawVal = this.percentToValue(clickRatio * 100);\n\n let chosenThumb = 0;\n if (this.isDualRange()) {\n const dist0 = Math.abs(rawVal - this.startValue());\n const dist1 = Math.abs(rawVal - this.endValue());\n chosenThumb = dist0 <= dist1 ? 0 : 1;\n }\n\n this.updateValueFromPointer(chosenThumb, clickX, 'track-click', true);\n\n // Focus chosen thumb\n if (chosenThumb === 0) {\n this.thumb0Ref()?.nativeElement.focus();\n } else {\n this.thumb1Ref()?.nativeElement.focus();\n }\n }\n\n private updateValueFromPointer(thumbIndex: number, clientX: number, source: 'drag' | 'track-click', isFinal: boolean): void {\n const trackContainer = this.trackContainerRef()?.nativeElement;\n if (!trackContainer) return;\n\n const rect = trackContainer.getBoundingClientRect();\n const ratio = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width));\n const rawVal = this.percentToValue(ratio * 100);\n const steppedVal = this.snapValue(rawVal);\n\n if (this.isDualRange()) {\n let start = this.startValue();\n let end = this.endValue();\n const minDistance = this.minRange();\n const maxDistance = this.maxRange();\n\n if (thumbIndex === 0) {\n start = Math.min(steppedVal, end - minDistance);\n if (maxDistance !== null && end - start > maxDistance) {\n start = end - maxDistance;\n }\n } else {\n end = Math.max(steppedVal, start + minDistance);\n if (maxDistance !== null && end - start > maxDistance) {\n end = start + maxDistance;\n }\n }\n\n this.emitUpdate([start, end], source, isFinal);\n } else {\n this.emitUpdate(steppedVal, source, isFinal);\n }\n }\n\n onThumbKeyDown(thumbIndex: number, event: KeyboardEvent): void {\n if (this.effectiveDisabled() || this.readonly()) return;\n\n const step = this.step();\n const span = this.span();\n const largeStep = Math.max(step * 10, span / 10);\n\n let delta = 0;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n delta = step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n delta = -step;\n break;\n case 'PageUp':\n delta = largeStep;\n break;\n case 'PageDown':\n delta = -largeStep;\n break;\n case 'Home':\n delta = -(span + 1);\n break;\n case 'End':\n delta = span + 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n\n if (this.isDualRange()) {\n let start = this.startValue();\n let end = this.endValue();\n const minDistance = this.minRange();\n\n if (thumbIndex === 0) {\n const nextVal = this.snapValue(start + delta);\n start = Math.min(nextVal, end - minDistance);\n } else {\n const nextVal = this.snapValue(end + delta);\n end = Math.max(nextVal, start + minDistance);\n }\n\n this.emitUpdate([start, end], 'keyboard', true);\n } else {\n const nextVal = this.snapValue(this.startValue() + delta);\n this.emitUpdate(nextVal, 'keyboard', true);\n }\n }\n\n onNumberInputChange(thumbIndex: number, event: Event): void {\n const inputEl = event.target as HTMLInputElement;\n const parsed = parseFloat(inputEl.value);\n if (isNaN(parsed)) return;\n\n const steppedVal = this.snapValue(parsed);\n\n if (this.isDualRange()) {\n let start = this.startValue();\n let end = this.endValue();\n const minDistance = this.minRange();\n\n if (thumbIndex === 0) {\n start = Math.min(steppedVal, end - minDistance);\n } else {\n end = Math.max(steppedVal, start + minDistance);\n }\n\n inputEl.value = (thumbIndex === 0 ? start : end).toString();\n this.emitUpdate([start, end], 'input', true);\n } else {\n inputEl.value = steppedVal.toString();\n this.emitUpdate(steppedVal, 'input', true);\n }\n }\n\n onTickClick(tick: RangeInputTick, event: MouseEvent): void {\n if (this.effectiveDisabled() || this.readonly()) return;\n event.stopPropagation();\n\n const targetVal = tick.value;\n if (this.isDualRange()) {\n const dist0 = Math.abs(targetVal - this.startValue());\n const dist1 = Math.abs(targetVal - this.endValue());\n let start = this.startValue();\n let end = this.endValue();\n\n if (dist0 <= dist1) {\n start = Math.min(targetVal, end - this.minRange());\n } else {\n end = Math.max(targetVal, start + this.minRange());\n }\n this.emitUpdate([start, end], 'track-click', true);\n } else {\n this.emitUpdate(targetVal, 'track-click', true);\n }\n }\n\n onLabelClick(tick: RangeInputTick, event: MouseEvent): void {\n this.onTickClick(tick, event);\n }\n}\n","<div class=\"talos-range-wrapper\" [class.is-disabled]=\"effectiveDisabled()\" [class.is-readonly]=\"readonly()\"\n [class.is-invalid]=\"effectiveInvalid()\" [class.is-range]=\"isDualRange()\" [class.size-sm]=\"size() === 'sm'\"\n [class.size-md]=\"size() === 'md'\" [class.size-lg]=\"size() === 'lg'\" [class.variant-primary]=\"variant() === 'primary'\"\n [class.variant-secondary]=\"variant() === 'secondary'\" [class.variant-success]=\"variant() === 'success'\"\n [class.variant-warning]=\"variant() === 'warning'\" [class.variant-danger]=\"variant() === 'danger'\"\n [class.variant-info]=\"variant() === 'info'\">\n <!-- Header: Label, Hint & Optional Value Display / Synchronized Number Inputs -->\n @if (label() || hint() || showValueBadge() || showInputs()) {\n <div class=\"talos-range-header\">\n <div class=\"talos-range-label-group\" [class.is-floating-label]=\"isFloatingMode()\">\n @if (label()) {\n <label class=\"talos-range-label\" [class.is-floated]=\"isFloatingMode()\" [attr.for]=\"elementId() + '-thumb-0'\">\n {{ label() }}\n </label>\n }\n @if (hint()) {\n <span class=\"talos-range-hint\">{{ hint() }}</span>\n }\n </div>\n\n @if (showInputs()) {\n <div class=\"talos-range-inputs-group\">\n @if (isDualRange()) {\n <div class=\"talos-range-number-box\">\n @if (prefix()) {\n <span class=\"talos-range-input-affix\">{{ prefix() }}</span>\n }\n <input type=\"number\" class=\"talos-range-number-input\" [id]=\"elementId() + '-num-0'\" [min]=\"min()\"\n [max]=\"endValue()\" [step]=\"step()\" [disabled]=\"effectiveDisabled() || readonly()\" [value]=\"startValue()\"\n (change)=\"onNumberInputChange(0, $event)\" (keydown.enter)=\"onNumberInputChange(0, $event)\" />\n @if (suffix()) {\n <span class=\"talos-range-input-affix\">{{ suffix() }}</span>\n }\n </div>\n <span class=\"talos-range-inputs-separator\">–</span>\n <div class=\"talos-range-number-box\">\n @if (prefix()) {\n <span class=\"talos-range-input-affix\">{{ prefix() }}</span>\n }\n <input type=\"number\" class=\"talos-range-number-input\" [id]=\"elementId() + '-num-1'\" [min]=\"startValue()\"\n [max]=\"max()\" [step]=\"step()\" [disabled]=\"effectiveDisabled() || readonly()\" [value]=\"endValue()\"\n (change)=\"onNumberInputChange(1, $event)\" (keydown.enter)=\"onNumberInputChange(1, $event)\" />\n @if (suffix()) {\n <span class=\"talos-range-input-affix\">{{ suffix() }}</span>\n }\n </div>\n } @else {\n <div class=\"talos-range-number-box\">\n @if (prefix()) {\n <span class=\"talos-range-input-affix\">{{ prefix() }}</span>\n }\n <input type=\"number\" class=\"talos-range-number-input\" [id]=\"elementId() + '-num'\" [min]=\"min()\" [max]=\"max()\"\n [step]=\"step()\" [disabled]=\"effectiveDisabled() || readonly()\" [value]=\"startValue()\"\n (change)=\"onNumberInputChange(0, $event)\" (keydown.enter)=\"onNumberInputChange(0, $event)\" />\n @if (suffix()) {\n <span class=\"talos-range-input-affix\">{{ suffix() }}</span>\n }\n </div>\n }\n </div>\n } @else if (showValueBadge()) {\n <div class=\"talos-range-value-badge\">\n @if (isDualRange()) {\n <span>{{ formatDisplayValue(startValue()) }} – {{ formatDisplayValue(endValue()) }}</span>\n } @else {\n <span>{{ formatDisplayValue(startValue()) }}</span>\n }\n </div>\n }\n </div>\n }\n\n <!-- Range Slider Container (Track, Fills, Ticks, Thumbs) -->\n <div #sliderTrackContainer class=\"talos-range-slider\" [class.is-active]=\"isDragging()\"\n (pointerdown)=\"onTrackPointerDown($event)\">\n <!-- Background Track -->\n <div class=\"talos-range-track\">\n <!-- Active Filled Range Segment -->\n <div class=\"talos-range-fill\" [style.left.%]=\"fillLeftPercent()\" [style.width.%]=\"fillWidthPercent()\"></div>\n\n <!-- Tick Marks -->\n @if (ticks().length > 0 && (showTicks() || marks())) {\n <div class=\"talos-range-ticks\">\n @for (tick of ticks(); track tick.value) {\n <div class=\"talos-range-tick\" [class.is-active]=\"tick.active\" [style.left.%]=\"tick.percent\"\n (click)=\"onTickClick(tick, $event)\"></div>\n }\n </div>\n }\n </div>\n\n <!-- Thumb 0 (Primary or Lower Bound Handle) -->\n <div #thumb0 class=\"talos-range-thumb\" [class.is-focused]=\"focusedThumb() === 0\"\n [class.is-dragging]=\"draggingThumb() === 0\" [class.is-tooltip-visible]=\"isTooltipVisible(0)\"\n [style.left.%]=\"thumb0Percent()\" tabindex=\"0\" role=\"slider\" [attr.id]=\"elementId() + '-thumb-0'\"\n [attr.aria-label]=\"isDualRange() ? ariaLabelStart() : ariaLabel()\" [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"isDualRange() ? endValue() : max()\" [attr.aria-valuenow]=\"startValue()\"\n [attr.aria-valuetext]=\"formatDisplayValue(startValue())\"\n [attr.aria-disabled]=\"effectiveDisabled() ? 'true' : null\" (pointerdown)=\"onThumbPointerDown(0, $event)\"\n (keydown)=\"onThumbKeyDown(0, $event)\" (focus)=\"onThumbFocus(0)\" (blur)=\"onThumbBlur(0)\"\n (mouseenter)=\"onThumbMouseEnter(0)\" (mouseleave)=\"onThumbMouseLeave(0)\">\n <!-- Floating Value Tooltip -->\n @if (showTooltip() !== 'none') {\n <div class=\"talos-range-tooltip\" [class.visible]=\"isTooltipVisible(0)\">\n {{ formatDisplayValue(startValue()) }}\n </div>\n }\n </div>\n\n <!-- Thumb 1 (Upper Bound Handle for Dual Range) -->\n @if (isDualRange()) {\n <div #thumb1 class=\"talos-range-thumb\" [class.is-focused]=\"focusedThumb() === 1\"\n [class.is-dragging]=\"draggingThumb() === 1\" [class.is-tooltip-visible]=\"isTooltipVisible(1)\"\n [style.left.%]=\"thumb1Percent()\" tabindex=\"0\" role=\"slider\" [attr.id]=\"elementId() + '-thumb-1'\"\n [attr.aria-label]=\"ariaLabelEnd()\" [attr.aria-valuemin]=\"startValue()\" [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"endValue()\" [attr.aria-valuetext]=\"formatDisplayValue(endValue())\"\n [attr.aria-disabled]=\"effectiveDisabled() ? 'true' : null\" (pointerdown)=\"onThumbPointerDown(1, $event)\"\n (keydown)=\"onThumbKeyDown(1, $event)\" (focus)=\"onThumbFocus(1)\" (blur)=\"onThumbBlur(1)\"\n (mouseenter)=\"onThumbMouseEnter(1)\" (mouseleave)=\"onThumbMouseLeave(1)\">\n <!-- Floating Value Tooltip -->\n @if (showTooltip() !== 'none') {\n <div class=\"talos-range-tooltip\" [class.visible]=\"isTooltipVisible(1)\">\n {{ formatDisplayValue(endValue()) }}\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Interval / Step Labels under track -->\n @if (labels().length > 0 && (showIntervals() || showLabels() || marks())) {\n <div class=\"talos-range-labels\">\n @for (item of labels(); track item.value) {\n <span class=\"talos-range-label-item\" [class.is-active]=\"item.active\" [style.left.%]=\"item.percent\"\n (click)=\"onLabelClick(item, $event)\">\n {{ item.label }}\n </span>\n }\n </div>\n }\n</div>","import { NgModule } from '@angular/core';\nimport { TalosRangeInputComponent } from './range-input.component';\nimport { TalosRangeInputDirective } from './range-input.directive';\n\n@NgModule({\n imports: [TalosRangeInputComponent, TalosRangeInputDirective],\n exports: [TalosRangeInputComponent, TalosRangeInputDirective]\n})\nexport class TalosRangeInputModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,346 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, ElementRef, input, output, computed, signal, forwardRef, Component, NgModule } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+
5
+ let ratingCounter = 0;
6
+ class TalosRatingComponent {
7
+ elementRef = inject((ElementRef));
8
+ animationTimeout = null;
9
+ // --- Inputs ---
10
+ /** Current numerical rating value */
11
+ value = input(0, /* @ts-ignore */
12
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
13
+ /** Maximum rating count / total stars (default: 5) */
14
+ max = input(5, /* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
16
+ /** Whether clicking the current value resets/clears to 0 (default: true) */
17
+ allowClear = input(true, /* @ts-ignore */
18
+ ...(ngDevMode ? [{ debugName: "allowClear" }] : /* istanbul ignore next */ []));
19
+ /** Read-only display mode */
20
+ readonly = input(false, /* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
22
+ /** Disabled state */
23
+ disabled = input(false, /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
25
+ /** Sizing scale ('sm' | 'md' | 'lg' | 'xl') */
26
+ size = input('md', /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
28
+ /** Visual color variant ('warning' | 'primary' | 'danger' | 'success' | 'purple' | 'custom') */
29
+ variant = input('warning', /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
31
+ /** Custom HEX or CSS color code when variant is 'custom' or overriding */
32
+ color = input('', /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
34
+ /** Animation mode ('none' | 'subtle' | 'pop' | 'particles' | 'full') */
35
+ animation = input('full', /* @ts-ignore */
36
+ ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
37
+ /** Whether animations are enabled (default: true) */
38
+ animated = input(true, /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "animated" }] : /* istanbul ignore next */ []));
40
+ /** Tooltip/label strings for each star index (1-based) */
41
+ tooltips = input([], /* @ts-ignore */
42
+ ...(ngDevMode ? [{ debugName: "tooltips" }] : /* istanbul ignore next */ []));
43
+ /** Whether to show numeric score badge */
44
+ showScore = input(false, /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "showScore" }] : /* istanbul ignore next */ []));
46
+ /** Whether to show text label from tooltips or current state */
47
+ showLabel = input(false, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
49
+ /** Position of score/tooltip label */
50
+ labelPosition = input('right', /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "labelPosition" }] : /* istanbul ignore next */ []));
52
+ /** Component HTML ID */
53
+ id = input('', /* @ts-ignore */
54
+ ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
55
+ /** Accessibility label */
56
+ ariaLabel = input('Rating', /* @ts-ignore */
57
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
58
+ // --- Outputs ---
59
+ /** Emitted when value changes */
60
+ valueChange = output();
61
+ /** Emitted with old and new values */
62
+ rateChange = output();
63
+ /** Emitted when hovering over rating items */
64
+ hoverChange = output();
65
+ /** Emitted when rating is cleared */
66
+ cleared = output();
67
+ // --- Internal State ---
68
+ defaultId = `talos-rating-${++ratingCounter}`;
69
+ elementId = computed(() => this.id() || this.defaultId, /* @ts-ignore */
70
+ ...(ngDevMode ? [{ debugName: "elementId" }] : /* istanbul ignore next */ []));
71
+ internalValue = signal(0, /* @ts-ignore */
72
+ ...(ngDevMode ? [{ debugName: "internalValue" }] : /* istanbul ignore next */ []));
73
+ hoverValue = signal(null, /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "hoverValue" }] : /* istanbul ignore next */ []));
75
+ isDisabled = signal(false, /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
77
+ isTouched = signal(false, /* @ts-ignore */
78
+ ...(ngDevMode ? [{ debugName: "isTouched" }] : /* istanbul ignore next */ []));
79
+ isFocused = signal(false, /* @ts-ignore */
80
+ ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
81
+ /** Index of currently pop-animating star */
82
+ animatingIndex = signal(null, /* @ts-ignore */
83
+ ...(ngDevMode ? [{ debugName: "animatingIndex" }] : /* istanbul ignore next */ []));
84
+ /** Index of currently particle-bursting star */
85
+ activeBurstIndex = signal(null, /* @ts-ignore */
86
+ ...(ngDevMode ? [{ debugName: "activeBurstIndex" }] : /* istanbul ignore next */ []));
87
+ // --- Computed States ---
88
+ effectiveDisabled = computed(() => this.disabled() || this.isDisabled(), /* @ts-ignore */
89
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
90
+ effectiveReadonly = computed(() => this.readonly(), /* @ts-ignore */
91
+ ...(ngDevMode ? [{ debugName: "effectiveReadonly" }] : /* istanbul ignore next */ []));
92
+ effectiveAnimation = computed(() => {
93
+ if (!this.animated())
94
+ return 'none';
95
+ return this.animation();
96
+ }, /* @ts-ignore */
97
+ ...(ngDevMode ? [{ debugName: "effectiveAnimation" }] : /* istanbul ignore next */ []));
98
+ showParticles = computed(() => {
99
+ const anim = this.effectiveAnimation();
100
+ return anim === 'particles' || anim === 'full';
101
+ }, /* @ts-ignore */
102
+ ...(ngDevMode ? [{ debugName: "showParticles" }] : /* istanbul ignore next */ []));
103
+ showPop = computed(() => {
104
+ const anim = this.effectiveAnimation();
105
+ return anim === 'pop' || anim === 'full';
106
+ }, /* @ts-ignore */
107
+ ...(ngDevMode ? [{ debugName: "showPop" }] : /* istanbul ignore next */ []));
108
+ currentValue = computed(() => {
109
+ const internal = this.internalValue();
110
+ const prop = this.value();
111
+ const val = internal !== 0 || this.isTouched() ? internal : prop;
112
+ return Math.max(0, Math.min(this.max(), Math.round(Number(val) || 0)));
113
+ }, /* @ts-ignore */
114
+ ...(ngDevMode ? [{ debugName: "currentValue" }] : /* istanbul ignore next */ []));
115
+ displayValue = computed(() => {
116
+ const hover = this.hoverValue();
117
+ if (hover !== null) {
118
+ return hover;
119
+ }
120
+ return this.currentValue();
121
+ }, /* @ts-ignore */
122
+ ...(ngDevMode ? [{ debugName: "displayValue" }] : /* istanbul ignore next */ []));
123
+ /** Array of star item indices [1, 2, ..., max] */
124
+ items = computed(() => {
125
+ const count = Math.max(1, Math.floor(this.max()));
126
+ return Array.from({ length: count }, (_, i) => i + 1);
127
+ }, /* @ts-ignore */
128
+ ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
129
+ /** Active tooltip text based on current display value */
130
+ activeTooltip = computed(() => {
131
+ const list = this.tooltips();
132
+ if (!list || list.length === 0)
133
+ return '';
134
+ const val = this.displayValue();
135
+ if (val <= 0)
136
+ return '';
137
+ const index = Math.min(list.length - 1, Math.max(0, Math.ceil(val) - 1));
138
+ return list[index] || '';
139
+ }, /* @ts-ignore */
140
+ ...(ngDevMode ? [{ debugName: "activeTooltip" }] : /* istanbul ignore next */ []));
141
+ // --- ControlValueAccessor ---
142
+ onChange = () => { };
143
+ onTouched = () => { };
144
+ writeValue(val) {
145
+ const num = val === null || val === undefined || isNaN(val) ? 0 : Math.round(Number(val));
146
+ this.internalValue.set(Math.max(0, Math.min(this.max(), num)));
147
+ }
148
+ registerOnChange(fn) {
149
+ this.onChange = fn;
150
+ }
151
+ registerOnTouched(fn) {
152
+ this.onTouched = fn;
153
+ }
154
+ setDisabledState(isDisabled) {
155
+ this.isDisabled.set(isDisabled);
156
+ }
157
+ // --- Hover and Click Handlers ---
158
+ onItemMouseEnter(index) {
159
+ if (this.effectiveDisabled() || this.effectiveReadonly())
160
+ return;
161
+ this.hoverValue.set(index);
162
+ this.hoverChange.emit({ value: index, index });
163
+ }
164
+ onItemClick(index) {
165
+ if (this.effectiveDisabled() || this.effectiveReadonly())
166
+ return;
167
+ const current = this.currentValue();
168
+ let nextVal = index;
169
+ // Clearable toggle on re-clicking the current rating
170
+ if (this.allowClear() && current === index) {
171
+ nextVal = 0;
172
+ this.cleared.emit();
173
+ }
174
+ else {
175
+ // Trigger click pop & particle explosion if animation enabled
176
+ if (this.effectiveAnimation() !== 'none') {
177
+ this.triggerClickEffects(index);
178
+ }
179
+ }
180
+ this.setValue(nextVal);
181
+ }
182
+ onMouseLeave() {
183
+ if (this.effectiveDisabled() || this.effectiveReadonly())
184
+ return;
185
+ this.hoverValue.set(null);
186
+ this.hoverChange.emit({ value: 0, index: -1 });
187
+ }
188
+ triggerClickEffects(index) {
189
+ if (this.animationTimeout) {
190
+ clearTimeout(this.animationTimeout);
191
+ this.animationTimeout = null;
192
+ }
193
+ this.animatingIndex.set(index);
194
+ this.activeBurstIndex.set(index);
195
+ this.animationTimeout = setTimeout(() => {
196
+ this.animatingIndex.set(null);
197
+ this.activeBurstIndex.set(null);
198
+ this.animationTimeout = null;
199
+ }, 600);
200
+ }
201
+ // --- Keyboard Navigation ---
202
+ onKeyDown(event) {
203
+ if (this.effectiveDisabled() || this.effectiveReadonly())
204
+ return;
205
+ const current = this.currentValue();
206
+ let nextVal = current;
207
+ switch (event.key) {
208
+ case 'ArrowRight':
209
+ case 'ArrowUp':
210
+ event.preventDefault();
211
+ nextVal = Math.min(this.max(), current + 1);
212
+ if (this.effectiveAnimation() !== 'none' && nextVal > current) {
213
+ this.triggerClickEffects(nextVal);
214
+ }
215
+ this.setValue(nextVal);
216
+ break;
217
+ case 'ArrowLeft':
218
+ case 'ArrowDown':
219
+ event.preventDefault();
220
+ nextVal = Math.max(0, current - 1);
221
+ this.setValue(nextVal);
222
+ break;
223
+ case 'Home':
224
+ event.preventDefault();
225
+ nextVal = 0;
226
+ this.setValue(nextVal);
227
+ break;
228
+ case 'End':
229
+ event.preventDefault();
230
+ nextVal = this.max();
231
+ if (this.effectiveAnimation() !== 'none') {
232
+ this.triggerClickEffects(nextVal);
233
+ }
234
+ this.setValue(nextVal);
235
+ break;
236
+ case 'Enter':
237
+ case ' ':
238
+ event.preventDefault();
239
+ if (this.effectiveAnimation() !== 'none' && current > 0) {
240
+ this.triggerClickEffects(current);
241
+ }
242
+ this.setValue(current);
243
+ break;
244
+ }
245
+ }
246
+ onFocus() {
247
+ if (this.effectiveDisabled())
248
+ return;
249
+ this.isFocused.set(true);
250
+ }
251
+ onBlur() {
252
+ this.isFocused.set(false);
253
+ this.markAsTouched();
254
+ }
255
+ setValue(val) {
256
+ const oldValue = this.currentValue();
257
+ const clamped = Math.max(0, Math.min(this.max(), Math.round(val)));
258
+ this.internalValue.set(clamped);
259
+ this.hoverValue.set(null);
260
+ this.onChange(clamped);
261
+ this.valueChange.emit(clamped);
262
+ this.rateChange.emit({ value: clamped, oldValue });
263
+ this.markAsTouched();
264
+ }
265
+ markAsTouched() {
266
+ if (!this.isTouched()) {
267
+ this.isTouched.set(true);
268
+ this.onTouched();
269
+ }
270
+ }
271
+ isItemActive(index) {
272
+ return this.displayValue() >= index;
273
+ }
274
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosRatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
275
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosRatingComponent, isStandalone: true, selector: "talos-rating, talos-rate", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, showScore: { classPropertyName: "showScore", publicName: "showScore", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, labelPosition: { classPropertyName: "labelPosition", publicName: "labelPosition", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", rateChange: "rateChange", hoverChange: "hoverChange", cleared: "cleared" }, host: { listeners: { "keydown": "onKeyDown($event)", "focus": "onFocus()", "blur": "onBlur()", "mouseleave": "onMouseLeave()" }, properties: { "class.is-disabled": "effectiveDisabled()", "class.is-readonly": "effectiveReadonly()", "class.is-interactive": "!effectiveDisabled() && !effectiveReadonly()", "class.is-focused": "isFocused()", "class.rating-sm": "size() === \"sm\"", "class.rating-md": "size() === \"md\"", "class.rating-lg": "size() === \"lg\"", "class.rating-xl": "size() === \"xl\"", "class.variant-warning": "variant() === \"warning\"", "class.variant-primary": "variant() === \"primary\"", "class.variant-danger": "variant() === \"danger\"", "class.variant-success": "variant() === \"success\"", "class.variant-purple": "variant() === \"purple\"", "class.variant-custom": "variant() === \"custom\"", "class.label-bottom": "labelPosition() === \"bottom\"", "class.anim-none": "effectiveAnimation() === \"none\"", "class.anim-subtle": "effectiveAnimation() === \"subtle\"", "class.anim-pop": "effectiveAnimation() === \"pop\"", "class.anim-particles": "effectiveAnimation() === \"particles\"", "class.anim-full": "effectiveAnimation() === \"full\"", "attr.role": "\"slider\"", "attr.tabindex": "effectiveDisabled() ? -1 : 0", "attr.aria-label": "ariaLabel()", "attr.aria-valuenow": "currentValue()", "attr.aria-valuemin": "0", "attr.aria-valuemax": "max()", "attr.aria-readonly": "effectiveReadonly()", "attr.aria-disabled": "effectiveDisabled()" }, classAttribute: "talos-rating-host" }, providers: [
276
+ {
277
+ provide: NG_VALUE_ACCESSOR,
278
+ useExisting: forwardRef(() => TalosRatingComponent),
279
+ multi: true
280
+ }
281
+ ], ngImport: i0, template: "<div\n class=\"talos-rating-container\"\n [id]=\"elementId()\"\n [style.--talos-rating-custom-color]=\"color() || null\"\n>\n <div class=\"talos-rating-stars\" role=\"presentation\">\n @for (i of items(); track i) {\n <button\n type=\"button\"\n class=\"talos-rating-star-btn\"\n [class.is-active]=\"isItemActive(i)\"\n [class.is-hovered]=\"hoverValue() !== null && hoverValue()! >= i\"\n [class.is-animating]=\"animatingIndex() === i && showPop()\"\n [attr.aria-label]=\"i + ' of ' + max() + ' stars'\"\n [disabled]=\"effectiveDisabled() || effectiveReadonly()\"\n (mouseenter)=\"onItemMouseEnter(i)\"\n (click)=\"onItemClick(i)\"\n >\n <svg\n class=\"talos-star-svg\"\n viewBox=\"0 0 24 24\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n\n <!-- Particle Celebration Spark Burst -->\n @if (activeBurstIndex() === i && showParticles()) {\n <span class=\"talos-rating-particles\" aria-hidden=\"true\">\n <span class=\"particle p-1\"></span>\n <span class=\"particle p-2\"></span>\n <span class=\"particle p-3\"></span>\n <span class=\"particle p-4\"></span>\n <span class=\"particle p-5\"></span>\n <span class=\"particle p-6\"></span>\n <span class=\"particle p-7\"></span>\n <span class=\"particle p-8\"></span>\n </span>\n }\n </button>\n }\n </div>\n\n <!-- Optional Descriptor / Score Label -->\n @if (showScore() || showLabel() || activeTooltip()) {\n <div class=\"talos-rating-label-wrapper\">\n @if (showScore()) {\n <span class=\"talos-rating-score-pill\">\n {{ displayValue() }}<span class=\"score-max\">/{{ max() }}</span>\n </span>\n }\n @if ((showLabel() || tooltips().length > 0) && activeTooltip()) {\n <span class=\"talos-rating-desc-text\">{{ activeTooltip() }}</span>\n }\n </div>\n }\n</div>\n", styles: [":host{display:inline-flex;vertical-align:middle;outline:none;border-radius:var(--talos-radius-sm, 4px);transition:box-shadow var(--talos-transition, .18s ease);--talos-rating-fill: var(--talos-warning, #f59e0b);--talos-rating-spark-alt: #fbbf24;--talos-rating-unfilled: var(--talos-border-default, #cbd5e1);--talos-rating-size: 1.375rem;--talos-rating-gap: .375rem;--talos-rating-font-size: var(--talos-font-size-sm, .8125rem)}:host.variant-warning{--talos-rating-fill: var(--talos-warning, #f59e0b);--talos-rating-spark-alt: #fcd34d}:host.variant-primary{--talos-rating-fill: var(--talos-primary, #2563eb);--talos-rating-spark-alt: #60a5fa}:host.variant-danger{--talos-rating-fill: var(--talos-danger, #ef4444);--talos-rating-spark-alt: #f87171}:host.variant-success{--talos-rating-fill: var(--talos-success, #16a34a);--talos-rating-spark-alt: #4ade80}:host.variant-purple{--talos-rating-fill: var(--talos-purple, #8b5cf6);--talos-rating-spark-alt: #c084fc}:host.variant-custom{--talos-rating-fill: var(--talos-rating-custom-color, var(--talos-warning, #f59e0b));--talos-rating-spark-alt: var(--talos-rating-custom-color, #fbbf24)}:host.rating-sm{--talos-rating-size: 1.125rem;--talos-rating-gap: .25rem;--talos-rating-font-size: var(--talos-font-size-xs, .75rem);--particle-dist: 12px}:host.rating-md{--talos-rating-size: 1.375rem;--talos-rating-gap: .375rem;--talos-rating-font-size: var(--talos-font-size-sm, .8125rem);--particle-dist: 16px}:host.rating-lg{--talos-rating-size: 1.75rem;--talos-rating-gap: .5rem;--talos-rating-font-size: var(--talos-font-size-md, .875rem);--particle-dist: 22px}:host.rating-xl{--talos-rating-size: 2.25rem;--talos-rating-gap: .625rem;--talos-rating-font-size: var(--talos-font-size-lg, 1rem);--particle-dist: 28px}:host.is-disabled{opacity:.5;pointer-events:none;cursor:not-allowed}:host.is-readonly{cursor:default}:host:focus-visible{box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .2))}.talos-rating-container{display:inline-flex;align-items:center;gap:.625rem;-webkit-user-select:none;user-select:none;font-family:var(--talos-font-sans, inherit)}:host(.label-bottom) .talos-rating-container{flex-direction:column;align-items:flex-start;gap:.375rem}.talos-rating-stars{display:inline-flex;align-items:center;gap:var(--talos-rating-gap)}.talos-rating-star-btn{position:relative;background:transparent;border:none;padding:0;margin:0;line-height:0;display:inline-flex;align-items:center;justify-content:center;width:var(--talos-rating-size);height:var(--talos-rating-size);color:var(--talos-rating-unfilled);outline:none;cursor:default;transform-origin:center center;overflow:visible}:host(.is-interactive) .talos-rating-star-btn{cursor:pointer}.talos-rating-star-btn .talos-star-svg{width:var(--talos-rating-size);height:var(--talos-rating-size);stroke-width:1.75;stroke:var(--talos-rating-unfilled);fill:transparent;transition:color .15s ease,fill .15s ease,stroke .15s ease,transform .15s ease;transform-origin:center center}:host(.is-interactive:not(.anim-none)) .talos-rating-star-btn:hover .talos-star-svg{transform:scale(1.12)}.talos-rating-star-btn.is-active,.talos-rating-star-btn.is-hovered{color:var(--talos-rating-fill)}.talos-rating-star-btn.is-active .talos-star-svg,.talos-rating-star-btn.is-hovered .talos-star-svg{fill:var(--talos-rating-fill);stroke:var(--talos-rating-fill);filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}.talos-rating-star-btn.is-animating .talos-star-svg{animation:talosStarPop .44s cubic-bezier(.175,.885,.32,1.275)}.talos-rating-star-btn:disabled{cursor:not-allowed}.talos-rating-particles{position:absolute;top:50%;left:50%;width:0;height:0;pointer-events:none;z-index:10}.talos-rating-particles .particle{position:absolute;top:0;left:0;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;background-color:var(--talos-rating-fill);pointer-events:none;box-shadow:0 0 4px var(--talos-rating-fill);animation-duration:.5s;animation-timing-function:cubic-bezier(.165,.84,.44,1);animation-fill-mode:forwards}.talos-rating-particles .particle.p-1,.talos-rating-particles .particle.p-3,.talos-rating-particles .particle.p-5,.talos-rating-particles .particle.p-7{background-color:var(--talos-rating-spark-alt);box-shadow:0 0 5px var(--talos-rating-spark-alt)}.talos-rating-particles .particle.p-1{width:3.5px;height:3.5px;animation-name:burstNorthWest}.talos-rating-particles .particle.p-2{width:4.5px;height:4.5px;animation-name:burstNorth}.talos-rating-particles .particle.p-3{width:3px;height:3px;animation-name:burstNorthEast}.talos-rating-particles .particle.p-4{width:4.5px;height:4.5px;animation-name:burstEast}.talos-rating-particles .particle.p-5{width:3.5px;height:3.5px;animation-name:burstSouthEast}.talos-rating-particles .particle.p-6{width:4px;height:4px;animation-name:burstSouth}.talos-rating-particles .particle.p-7{width:3px;height:3px;animation-name:burstSouthWest}.talos-rating-particles .particle.p-8{width:4.5px;height:4.5px;animation-name:burstWest}@keyframes talosStarPop{0%{transform:scale(1)}30%{transform:scale(1.38) rotate(-6deg)}65%{transform:scale(.9) rotate(3deg)}85%{transform:scale(1.08) rotate(0)}to{transform:scale(1) rotate(0)}}@keyframes burstNorthWest{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * -.7),calc(var(--particle-dist, 16px) * -.7)) scale(0);opacity:0}}@keyframes burstNorth{0%{transform:translate(0) scale(1);opacity:1}to{transform:translateY(calc(var(--particle-dist, 16px) * -1)) scale(0);opacity:0}}@keyframes burstNorthEast{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * .7),calc(var(--particle-dist, 16px) * -.7)) scale(0);opacity:0}}@keyframes burstEast{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--particle-dist, 16px)) scale(0);opacity:0}}@keyframes burstSouthEast{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * .7),calc(var(--particle-dist, 16px) * .7)) scale(0);opacity:0}}@keyframes burstSouth{0%{transform:translate(0) scale(1);opacity:1}to{transform:translateY(var(--particle-dist, 16px)) scale(0);opacity:0}}@keyframes burstSouthWest{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * -.7),calc(var(--particle-dist, 16px) * .7)) scale(0);opacity:0}}@keyframes burstWest{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * -1)) scale(0);opacity:0}}.talos-rating-label-wrapper{display:inline-flex;align-items:center;gap:.5rem;font-size:var(--talos-rating-font-size);line-height:1}.talos-rating-score-pill{display:inline-flex;align-items:baseline;padding:.15rem .45rem;font-weight:700;border-radius:var(--talos-radius-sm, 4px);background-color:var(--talos-bg-subtle, #f1f5f9);color:var(--talos-text-primary, #0f172a);border:1px solid var(--talos-border-subtle, #e2e8f0)}.talos-rating-score-pill .score-max{font-size:.85em;font-weight:500;color:var(--talos-text-muted, #64748b);margin-left:1px}.talos-rating-desc-text{font-weight:500;color:var(--talos-text-secondary, #334155)}:host(.anim-none) .talos-rating-star-btn,:host(.anim-none) .talos-star-svg,:host(.anim-none) .talos-rating-particles{animation:none!important;transition:none!important;transform:none!important}:host(.anim-subtle) .talos-rating-star-btn.is-animating .talos-star-svg{animation:none;transform:scale(1.08);transition:transform .15s ease}:host(.anim-pop) .talos-rating-particles{display:none!important}@media(prefers-reduced-motion:reduce){:host .talos-rating-star-btn,:host .talos-star-svg,:host .talos-rating-particles{animation:none!important;transition:none!important;transform:none!important}}:root[data-theme=dark],:root.dark,[data-theme=dark],[data-mode=dark],.dark,.dark-theme{--talos-rating-unfilled: rgba(255, 255, 255, .2)}:root[data-theme=dark] .talos-rating-star-btn .talos-star-svg,:root.dark .talos-rating-star-btn .talos-star-svg,[data-theme=dark] .talos-rating-star-btn .talos-star-svg,[data-mode=dark] .talos-rating-star-btn .talos-star-svg,.dark .talos-rating-star-btn .talos-star-svg,.dark-theme .talos-rating-star-btn .talos-star-svg{stroke:#ffffff40}:root[data-theme=dark] .talos-rating-score-pill,:root.dark .talos-rating-score-pill,[data-theme=dark] .talos-rating-score-pill,[data-mode=dark] .talos-rating-score-pill,.dark .talos-rating-score-pill,.dark-theme .talos-rating-score-pill{background-color:var(--talos-bg-subtle, #131d31);border-color:var(--talos-border-subtle, rgba(255, 255, 255, .08));color:var(--talos-text-primary, #f8fafc)}:root[data-theme=dark] .talos-rating-score-pill .score-max,:root.dark .talos-rating-score-pill .score-max,[data-theme=dark] .talos-rating-score-pill .score-max,[data-mode=dark] .talos-rating-score-pill .score-max,.dark .talos-rating-score-pill .score-max,.dark-theme .talos-rating-score-pill .score-max{color:var(--talos-text-muted, #94a3b8)}:root[data-theme=dark] .talos-rating-desc-text,:root.dark .talos-rating-desc-text,[data-theme=dark] .talos-rating-desc-text,[data-mode=dark] .talos-rating-desc-text,.dark .talos-rating-desc-text,.dark-theme .talos-rating-desc-text{color:var(--talos-text-secondary, #e2e8f0)}\n"] });
282
+ }
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosRatingComponent, decorators: [{
284
+ type: Component,
285
+ args: [{ selector: 'talos-rating, talos-rate', providers: [
286
+ {
287
+ provide: NG_VALUE_ACCESSOR,
288
+ useExisting: forwardRef(() => TalosRatingComponent),
289
+ multi: true
290
+ }
291
+ ], host: {
292
+ 'class': 'talos-rating-host',
293
+ '[class.is-disabled]': 'effectiveDisabled()',
294
+ '[class.is-readonly]': 'effectiveReadonly()',
295
+ '[class.is-interactive]': '!effectiveDisabled() && !effectiveReadonly()',
296
+ '[class.is-focused]': 'isFocused()',
297
+ '[class.rating-sm]': 'size() === "sm"',
298
+ '[class.rating-md]': 'size() === "md"',
299
+ '[class.rating-lg]': 'size() === "lg"',
300
+ '[class.rating-xl]': 'size() === "xl"',
301
+ '[class.variant-warning]': 'variant() === "warning"',
302
+ '[class.variant-primary]': 'variant() === "primary"',
303
+ '[class.variant-danger]': 'variant() === "danger"',
304
+ '[class.variant-success]': 'variant() === "success"',
305
+ '[class.variant-purple]': 'variant() === "purple"',
306
+ '[class.variant-custom]': 'variant() === "custom"',
307
+ '[class.label-bottom]': 'labelPosition() === "bottom"',
308
+ '[class.anim-none]': 'effectiveAnimation() === "none"',
309
+ '[class.anim-subtle]': 'effectiveAnimation() === "subtle"',
310
+ '[class.anim-pop]': 'effectiveAnimation() === "pop"',
311
+ '[class.anim-particles]': 'effectiveAnimation() === "particles"',
312
+ '[class.anim-full]': 'effectiveAnimation() === "full"',
313
+ '[attr.role]': '"slider"',
314
+ '[attr.tabindex]': 'effectiveDisabled() ? -1 : 0',
315
+ '[attr.aria-label]': 'ariaLabel()',
316
+ '[attr.aria-valuenow]': 'currentValue()',
317
+ '[attr.aria-valuemin]': '0',
318
+ '[attr.aria-valuemax]': 'max()',
319
+ '[attr.aria-readonly]': 'effectiveReadonly()',
320
+ '[attr.aria-disabled]': 'effectiveDisabled()',
321
+ '(keydown)': 'onKeyDown($event)',
322
+ '(focus)': 'onFocus()',
323
+ '(blur)': 'onBlur()',
324
+ '(mouseleave)': 'onMouseLeave()'
325
+ }, template: "<div\n class=\"talos-rating-container\"\n [id]=\"elementId()\"\n [style.--talos-rating-custom-color]=\"color() || null\"\n>\n <div class=\"talos-rating-stars\" role=\"presentation\">\n @for (i of items(); track i) {\n <button\n type=\"button\"\n class=\"talos-rating-star-btn\"\n [class.is-active]=\"isItemActive(i)\"\n [class.is-hovered]=\"hoverValue() !== null && hoverValue()! >= i\"\n [class.is-animating]=\"animatingIndex() === i && showPop()\"\n [attr.aria-label]=\"i + ' of ' + max() + ' stars'\"\n [disabled]=\"effectiveDisabled() || effectiveReadonly()\"\n (mouseenter)=\"onItemMouseEnter(i)\"\n (click)=\"onItemClick(i)\"\n >\n <svg\n class=\"talos-star-svg\"\n viewBox=\"0 0 24 24\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\" />\n </svg>\n\n <!-- Particle Celebration Spark Burst -->\n @if (activeBurstIndex() === i && showParticles()) {\n <span class=\"talos-rating-particles\" aria-hidden=\"true\">\n <span class=\"particle p-1\"></span>\n <span class=\"particle p-2\"></span>\n <span class=\"particle p-3\"></span>\n <span class=\"particle p-4\"></span>\n <span class=\"particle p-5\"></span>\n <span class=\"particle p-6\"></span>\n <span class=\"particle p-7\"></span>\n <span class=\"particle p-8\"></span>\n </span>\n }\n </button>\n }\n </div>\n\n <!-- Optional Descriptor / Score Label -->\n @if (showScore() || showLabel() || activeTooltip()) {\n <div class=\"talos-rating-label-wrapper\">\n @if (showScore()) {\n <span class=\"talos-rating-score-pill\">\n {{ displayValue() }}<span class=\"score-max\">/{{ max() }}</span>\n </span>\n }\n @if ((showLabel() || tooltips().length > 0) && activeTooltip()) {\n <span class=\"talos-rating-desc-text\">{{ activeTooltip() }}</span>\n }\n </div>\n }\n</div>\n", styles: [":host{display:inline-flex;vertical-align:middle;outline:none;border-radius:var(--talos-radius-sm, 4px);transition:box-shadow var(--talos-transition, .18s ease);--talos-rating-fill: var(--talos-warning, #f59e0b);--talos-rating-spark-alt: #fbbf24;--talos-rating-unfilled: var(--talos-border-default, #cbd5e1);--talos-rating-size: 1.375rem;--talos-rating-gap: .375rem;--talos-rating-font-size: var(--talos-font-size-sm, .8125rem)}:host.variant-warning{--talos-rating-fill: var(--talos-warning, #f59e0b);--talos-rating-spark-alt: #fcd34d}:host.variant-primary{--talos-rating-fill: var(--talos-primary, #2563eb);--talos-rating-spark-alt: #60a5fa}:host.variant-danger{--talos-rating-fill: var(--talos-danger, #ef4444);--talos-rating-spark-alt: #f87171}:host.variant-success{--talos-rating-fill: var(--talos-success, #16a34a);--talos-rating-spark-alt: #4ade80}:host.variant-purple{--talos-rating-fill: var(--talos-purple, #8b5cf6);--talos-rating-spark-alt: #c084fc}:host.variant-custom{--talos-rating-fill: var(--talos-rating-custom-color, var(--talos-warning, #f59e0b));--talos-rating-spark-alt: var(--talos-rating-custom-color, #fbbf24)}:host.rating-sm{--talos-rating-size: 1.125rem;--talos-rating-gap: .25rem;--talos-rating-font-size: var(--talos-font-size-xs, .75rem);--particle-dist: 12px}:host.rating-md{--talos-rating-size: 1.375rem;--talos-rating-gap: .375rem;--talos-rating-font-size: var(--talos-font-size-sm, .8125rem);--particle-dist: 16px}:host.rating-lg{--talos-rating-size: 1.75rem;--talos-rating-gap: .5rem;--talos-rating-font-size: var(--talos-font-size-md, .875rem);--particle-dist: 22px}:host.rating-xl{--talos-rating-size: 2.25rem;--talos-rating-gap: .625rem;--talos-rating-font-size: var(--talos-font-size-lg, 1rem);--particle-dist: 28px}:host.is-disabled{opacity:.5;pointer-events:none;cursor:not-allowed}:host.is-readonly{cursor:default}:host:focus-visible{box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .2))}.talos-rating-container{display:inline-flex;align-items:center;gap:.625rem;-webkit-user-select:none;user-select:none;font-family:var(--talos-font-sans, inherit)}:host(.label-bottom) .talos-rating-container{flex-direction:column;align-items:flex-start;gap:.375rem}.talos-rating-stars{display:inline-flex;align-items:center;gap:var(--talos-rating-gap)}.talos-rating-star-btn{position:relative;background:transparent;border:none;padding:0;margin:0;line-height:0;display:inline-flex;align-items:center;justify-content:center;width:var(--talos-rating-size);height:var(--talos-rating-size);color:var(--talos-rating-unfilled);outline:none;cursor:default;transform-origin:center center;overflow:visible}:host(.is-interactive) .talos-rating-star-btn{cursor:pointer}.talos-rating-star-btn .talos-star-svg{width:var(--talos-rating-size);height:var(--talos-rating-size);stroke-width:1.75;stroke:var(--talos-rating-unfilled);fill:transparent;transition:color .15s ease,fill .15s ease,stroke .15s ease,transform .15s ease;transform-origin:center center}:host(.is-interactive:not(.anim-none)) .talos-rating-star-btn:hover .talos-star-svg{transform:scale(1.12)}.talos-rating-star-btn.is-active,.talos-rating-star-btn.is-hovered{color:var(--talos-rating-fill)}.talos-rating-star-btn.is-active .talos-star-svg,.talos-rating-star-btn.is-hovered .talos-star-svg{fill:var(--talos-rating-fill);stroke:var(--talos-rating-fill);filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}.talos-rating-star-btn.is-animating .talos-star-svg{animation:talosStarPop .44s cubic-bezier(.175,.885,.32,1.275)}.talos-rating-star-btn:disabled{cursor:not-allowed}.talos-rating-particles{position:absolute;top:50%;left:50%;width:0;height:0;pointer-events:none;z-index:10}.talos-rating-particles .particle{position:absolute;top:0;left:0;width:4px;height:4px;margin:-2px 0 0 -2px;border-radius:50%;background-color:var(--talos-rating-fill);pointer-events:none;box-shadow:0 0 4px var(--talos-rating-fill);animation-duration:.5s;animation-timing-function:cubic-bezier(.165,.84,.44,1);animation-fill-mode:forwards}.talos-rating-particles .particle.p-1,.talos-rating-particles .particle.p-3,.talos-rating-particles .particle.p-5,.talos-rating-particles .particle.p-7{background-color:var(--talos-rating-spark-alt);box-shadow:0 0 5px var(--talos-rating-spark-alt)}.talos-rating-particles .particle.p-1{width:3.5px;height:3.5px;animation-name:burstNorthWest}.talos-rating-particles .particle.p-2{width:4.5px;height:4.5px;animation-name:burstNorth}.talos-rating-particles .particle.p-3{width:3px;height:3px;animation-name:burstNorthEast}.talos-rating-particles .particle.p-4{width:4.5px;height:4.5px;animation-name:burstEast}.talos-rating-particles .particle.p-5{width:3.5px;height:3.5px;animation-name:burstSouthEast}.talos-rating-particles .particle.p-6{width:4px;height:4px;animation-name:burstSouth}.talos-rating-particles .particle.p-7{width:3px;height:3px;animation-name:burstSouthWest}.talos-rating-particles .particle.p-8{width:4.5px;height:4.5px;animation-name:burstWest}@keyframes talosStarPop{0%{transform:scale(1)}30%{transform:scale(1.38) rotate(-6deg)}65%{transform:scale(.9) rotate(3deg)}85%{transform:scale(1.08) rotate(0)}to{transform:scale(1) rotate(0)}}@keyframes burstNorthWest{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * -.7),calc(var(--particle-dist, 16px) * -.7)) scale(0);opacity:0}}@keyframes burstNorth{0%{transform:translate(0) scale(1);opacity:1}to{transform:translateY(calc(var(--particle-dist, 16px) * -1)) scale(0);opacity:0}}@keyframes burstNorthEast{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * .7),calc(var(--particle-dist, 16px) * -.7)) scale(0);opacity:0}}@keyframes burstEast{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(var(--particle-dist, 16px)) scale(0);opacity:0}}@keyframes burstSouthEast{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * .7),calc(var(--particle-dist, 16px) * .7)) scale(0);opacity:0}}@keyframes burstSouth{0%{transform:translate(0) scale(1);opacity:1}to{transform:translateY(var(--particle-dist, 16px)) scale(0);opacity:0}}@keyframes burstSouthWest{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * -.7),calc(var(--particle-dist, 16px) * .7)) scale(0);opacity:0}}@keyframes burstWest{0%{transform:translate(0) scale(1);opacity:1}to{transform:translate(calc(var(--particle-dist, 16px) * -1)) scale(0);opacity:0}}.talos-rating-label-wrapper{display:inline-flex;align-items:center;gap:.5rem;font-size:var(--talos-rating-font-size);line-height:1}.talos-rating-score-pill{display:inline-flex;align-items:baseline;padding:.15rem .45rem;font-weight:700;border-radius:var(--talos-radius-sm, 4px);background-color:var(--talos-bg-subtle, #f1f5f9);color:var(--talos-text-primary, #0f172a);border:1px solid var(--talos-border-subtle, #e2e8f0)}.talos-rating-score-pill .score-max{font-size:.85em;font-weight:500;color:var(--talos-text-muted, #64748b);margin-left:1px}.talos-rating-desc-text{font-weight:500;color:var(--talos-text-secondary, #334155)}:host(.anim-none) .talos-rating-star-btn,:host(.anim-none) .talos-star-svg,:host(.anim-none) .talos-rating-particles{animation:none!important;transition:none!important;transform:none!important}:host(.anim-subtle) .talos-rating-star-btn.is-animating .talos-star-svg{animation:none;transform:scale(1.08);transition:transform .15s ease}:host(.anim-pop) .talos-rating-particles{display:none!important}@media(prefers-reduced-motion:reduce){:host .talos-rating-star-btn,:host .talos-star-svg,:host .talos-rating-particles{animation:none!important;transition:none!important;transform:none!important}}:root[data-theme=dark],:root.dark,[data-theme=dark],[data-mode=dark],.dark,.dark-theme{--talos-rating-unfilled: rgba(255, 255, 255, .2)}:root[data-theme=dark] .talos-rating-star-btn .talos-star-svg,:root.dark .talos-rating-star-btn .talos-star-svg,[data-theme=dark] .talos-rating-star-btn .talos-star-svg,[data-mode=dark] .talos-rating-star-btn .talos-star-svg,.dark .talos-rating-star-btn .talos-star-svg,.dark-theme .talos-rating-star-btn .talos-star-svg{stroke:#ffffff40}:root[data-theme=dark] .talos-rating-score-pill,:root.dark .talos-rating-score-pill,[data-theme=dark] .talos-rating-score-pill,[data-mode=dark] .talos-rating-score-pill,.dark .talos-rating-score-pill,.dark-theme .talos-rating-score-pill{background-color:var(--talos-bg-subtle, #131d31);border-color:var(--talos-border-subtle, rgba(255, 255, 255, .08));color:var(--talos-text-primary, #f8fafc)}:root[data-theme=dark] .talos-rating-score-pill .score-max,:root.dark .talos-rating-score-pill .score-max,[data-theme=dark] .talos-rating-score-pill .score-max,[data-mode=dark] .talos-rating-score-pill .score-max,.dark .talos-rating-score-pill .score-max,.dark-theme .talos-rating-score-pill .score-max{color:var(--talos-text-muted, #94a3b8)}:root[data-theme=dark] .talos-rating-desc-text,:root.dark .talos-rating-desc-text,[data-theme=dark] .talos-rating-desc-text,[data-mode=dark] .talos-rating-desc-text,.dark .talos-rating-desc-text,.dark-theme .talos-rating-desc-text{color:var(--talos-text-secondary, #e2e8f0)}\n"] }]
326
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], allowClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowClear", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }], tooltips: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltips", required: false }] }], showScore: [{ type: i0.Input, args: [{ isSignal: true, alias: "showScore", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], rateChange: [{ type: i0.Output, args: ["rateChange"] }], hoverChange: [{ type: i0.Output, args: ["hoverChange"] }], cleared: [{ type: i0.Output, args: ["cleared"] }] } });
327
+
328
+ class TalosRatingModule {
329
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosRatingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
330
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosRatingModule, imports: [TalosRatingComponent], exports: [TalosRatingComponent] });
331
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosRatingModule });
332
+ }
333
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosRatingModule, decorators: [{
334
+ type: NgModule,
335
+ args: [{
336
+ imports: [TalosRatingComponent],
337
+ exports: [TalosRatingComponent]
338
+ }]
339
+ }] });
340
+
341
+ /**
342
+ * Generated bundle index. Do not edit.
343
+ */
344
+
345
+ export { TalosRatingComponent, TalosRatingModule };
346
+ //# sourceMappingURL=weeehaoooz-talos-ui-form-rating.mjs.map