@progress/kendo-angular-inputs 21.4.1 → 22.0.0-develop.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/colorpicker/localization/messages.d.ts +1 -1
  2. package/common/radio-checkbox.base.d.ts +1 -1
  3. package/fesm2022/progress-kendo-angular-inputs.mjs +321 -321
  4. package/numerictextbox/localization/messages.d.ts +1 -1
  5. package/otpinput/localization/messages.d.ts +1 -1
  6. package/package.json +17 -25
  7. package/rangeslider/localization/messages.d.ts +1 -1
  8. package/signature/localization/messages.d.ts +1 -1
  9. package/slider/localization/messages.d.ts +1 -1
  10. package/sliders-common/slider-base.d.ts +1 -1
  11. package/switch/localization/messages.d.ts +1 -1
  12. package/text-fields-common/text-fields-base.d.ts +1 -1
  13. package/textbox/localization/messages.d.ts +1 -1
  14. package/esm2022/checkbox/checkbox.component.mjs +0 -227
  15. package/esm2022/checkbox/checkbox.directive.mjs +0 -96
  16. package/esm2022/checkbox/checked-state.mjs +0 -5
  17. package/esm2022/checkbox.module.mjs +0 -42
  18. package/esm2022/colorpicker/adaptiveness/adaptive-close-button.component.mjs +0 -62
  19. package/esm2022/colorpicker/adaptiveness/adaptive-renderer.component.mjs +0 -219
  20. package/esm2022/colorpicker/color-contrast-svg.component.mjs +0 -108
  21. package/esm2022/colorpicker/color-gradient-numeric-label.directive.mjs +0 -37
  22. package/esm2022/colorpicker/color-gradient-text-label.directive.mjs +0 -34
  23. package/esm2022/colorpicker/color-gradient.component.mjs +0 -1110
  24. package/esm2022/colorpicker/color-input.component.mjs +0 -498
  25. package/esm2022/colorpicker/color-palette.component.mjs +0 -629
  26. package/esm2022/colorpicker/colorpicker.component.mjs +0 -1315
  27. package/esm2022/colorpicker/constants.mjs +0 -40
  28. package/esm2022/colorpicker/contrast-validation.component.mjs +0 -83
  29. package/esm2022/colorpicker/contrast.component.mjs +0 -114
  30. package/esm2022/colorpicker/events/active-color-click-event.mjs +0 -55
  31. package/esm2022/colorpicker/events/cancel-event.mjs +0 -18
  32. package/esm2022/colorpicker/events/close-event.mjs +0 -10
  33. package/esm2022/colorpicker/events/kendo-drag-event.mjs +0 -5
  34. package/esm2022/colorpicker/events/open-event.mjs +0 -10
  35. package/esm2022/colorpicker/events.mjs +0 -8
  36. package/esm2022/colorpicker/flatcolorpicker-actions.component.mjs +0 -112
  37. package/esm2022/colorpicker/flatcolorpicker-header.component.mjs +0 -244
  38. package/esm2022/colorpicker/flatcolorpicker.component.mjs +0 -942
  39. package/esm2022/colorpicker/localization/colorgradient-localization.service.mjs +0 -46
  40. package/esm2022/colorpicker/localization/colorpalette-localization.service.mjs +0 -46
  41. package/esm2022/colorpicker/localization/colorpicker-localization.service.mjs +0 -31
  42. package/esm2022/colorpicker/localization/custom-messages.component.mjs +0 -51
  43. package/esm2022/colorpicker/localization/flatcolorpicker-localization.service.mjs +0 -46
  44. package/esm2022/colorpicker/localization/localized-colorpicker-messages.directive.mjs +0 -39
  45. package/esm2022/colorpicker/localization/messages.mjs +0 -201
  46. package/esm2022/colorpicker/models/actions-layout.mjs +0 -5
  47. package/esm2022/colorpicker/models/adaptive-mode.mjs +0 -8
  48. package/esm2022/colorpicker/models/colorpicker-view.mjs +0 -5
  49. package/esm2022/colorpicker/models/gradient-settings.mjs +0 -5
  50. package/esm2022/colorpicker/models/hsva.mjs +0 -5
  51. package/esm2022/colorpicker/models/output-format.mjs +0 -5
  52. package/esm2022/colorpicker/models/palette-presets.mjs +0 -62
  53. package/esm2022/colorpicker/models/palette-settings.mjs +0 -5
  54. package/esm2022/colorpicker/models/popup-settings.mjs +0 -5
  55. package/esm2022/colorpicker/models/rgb.mjs +0 -5
  56. package/esm2022/colorpicker/models/rgba.mjs +0 -5
  57. package/esm2022/colorpicker/models/table-cell.mjs +0 -5
  58. package/esm2022/colorpicker/models/tile-size.mjs +0 -5
  59. package/esm2022/colorpicker/models.mjs +0 -16
  60. package/esm2022/colorpicker/services/color-palette.service.mjs +0 -65
  61. package/esm2022/colorpicker/services/flatcolorpicker.service.mjs +0 -39
  62. package/esm2022/colorpicker/utils/color-parser.mjs +0 -164
  63. package/esm2022/colorpicker/utils/contrast-curve.mjs +0 -85
  64. package/esm2022/colorpicker/utils.mjs +0 -6
  65. package/esm2022/colorpicker.module.mjs +0 -50
  66. package/esm2022/common/dom-utils.mjs +0 -36
  67. package/esm2022/common/formservice.service.mjs +0 -21
  68. package/esm2022/common/math.mjs +0 -65
  69. package/esm2022/common/models/fillmode.mjs +0 -5
  70. package/esm2022/common/models/gutters.mjs +0 -5
  71. package/esm2022/common/models/responsive-breakpoints.mjs +0 -5
  72. package/esm2022/common/models/rounded.mjs +0 -5
  73. package/esm2022/common/models/size.mjs +0 -5
  74. package/esm2022/common/models/styling-classes.mjs +0 -5
  75. package/esm2022/common/models/type.mjs +0 -5
  76. package/esm2022/common/models.mjs +0 -9
  77. package/esm2022/common/radio-checkbox.base.mjs +0 -295
  78. package/esm2022/common/utils.mjs +0 -88
  79. package/esm2022/directives.mjs +0 -430
  80. package/esm2022/form/form.component.mjs +0 -163
  81. package/esm2022/form/formseparator.component.mjs +0 -80
  82. package/esm2022/form/utils.mjs +0 -147
  83. package/esm2022/form.module.mjs +0 -46
  84. package/esm2022/formfield/error.component.mjs +0 -70
  85. package/esm2022/formfield/formfield.component.mjs +0 -353
  86. package/esm2022/formfield/hint.component.mjs +0 -65
  87. package/esm2022/formfield/models/message-align.mjs +0 -5
  88. package/esm2022/formfield/models/orientation.mjs +0 -5
  89. package/esm2022/formfield/models/show-options.mjs +0 -5
  90. package/esm2022/formfield.module.mjs +0 -43
  91. package/esm2022/formfieldset/formfieldset.component.mjs +0 -174
  92. package/esm2022/index.mjs +0 -91
  93. package/esm2022/inputs.module.mjs +0 -91
  94. package/esm2022/maskedtextbox/maskedtextbox.component.mjs +0 -876
  95. package/esm2022/maskedtextbox/masking.service.mjs +0 -189
  96. package/esm2022/maskedtextbox/parsing/combinators.mjs +0 -28
  97. package/esm2022/maskedtextbox/parsing/parsers.mjs +0 -148
  98. package/esm2022/maskedtextbox/parsing/result.mjs +0 -44
  99. package/esm2022/maskedtextbox/parsing/stream.mjs +0 -43
  100. package/esm2022/maskedtextbox.module.mjs +0 -43
  101. package/esm2022/numerictextbox/arrow-direction.mjs +0 -13
  102. package/esm2022/numerictextbox/constants.mjs +0 -28
  103. package/esm2022/numerictextbox/localization/custom-messages.component.mjs +0 -55
  104. package/esm2022/numerictextbox/localization/localized-numerictextbox-messages.directive.mjs +0 -39
  105. package/esm2022/numerictextbox/localization/messages.mjs +0 -33
  106. package/esm2022/numerictextbox/numerictextbox.component.mjs +0 -1314
  107. package/esm2022/numerictextbox/utils.mjs +0 -92
  108. package/esm2022/numerictextbox.module.mjs +0 -46
  109. package/esm2022/otp.module.mjs +0 -44
  110. package/esm2022/otpinput/localization/custom-messages.component.mjs +0 -45
  111. package/esm2022/otpinput/localization/localized-textbox-messages.directive.mjs +0 -39
  112. package/esm2022/otpinput/localization/messages.mjs +0 -34
  113. package/esm2022/otpinput/models/otpinput-type.mjs +0 -5
  114. package/esm2022/otpinput/models/separator-icon.mjs +0 -5
  115. package/esm2022/otpinput/otpinput-separator.component.mjs +0 -93
  116. package/esm2022/otpinput/otpinput.component.mjs +0 -936
  117. package/esm2022/package-metadata.mjs +0 -16
  118. package/esm2022/progress-kendo-angular-inputs.mjs +0 -8
  119. package/esm2022/radiobutton/radiobutton.component.mjs +0 -212
  120. package/esm2022/radiobutton/radiobutton.directive.mjs +0 -81
  121. package/esm2022/radiobutton.module.mjs +0 -43
  122. package/esm2022/rangeslider/localization/custom-messages.component.mjs +0 -53
  123. package/esm2022/rangeslider/localization/localized-rangeslider-messages.directive.mjs +0 -39
  124. package/esm2022/rangeslider/localization/messages.mjs +0 -33
  125. package/esm2022/rangeslider/rangeslider-model.mjs +0 -53
  126. package/esm2022/rangeslider/rangeslider-value.type.mjs +0 -5
  127. package/esm2022/rangeslider/rangeslider.component.mjs +0 -625
  128. package/esm2022/rangeslider.module.mjs +0 -46
  129. package/esm2022/rating/directives/rating-hovered-item.directive.mjs +0 -35
  130. package/esm2022/rating/directives/rating-item.directive.mjs +0 -34
  131. package/esm2022/rating/directives/rating-selected-item.directive.mjs +0 -36
  132. package/esm2022/rating/models/precision.mjs +0 -5
  133. package/esm2022/rating/models/rating-item.interface.mjs +0 -5
  134. package/esm2022/rating/models/selection.mjs +0 -5
  135. package/esm2022/rating/rating.component.mjs +0 -754
  136. package/esm2022/rating.module.mjs +0 -46
  137. package/esm2022/shared/input-separator.component.mjs +0 -55
  138. package/esm2022/shared/input-spacer.component.mjs +0 -56
  139. package/esm2022/shared/shared-events.directive.mjs +0 -102
  140. package/esm2022/shared/utils.mjs +0 -13
  141. package/esm2022/signature/events/close-event.mjs +0 -10
  142. package/esm2022/signature/events/index.mjs +0 -6
  143. package/esm2022/signature/events/open-event.mjs +0 -10
  144. package/esm2022/signature/localization/custom-messages.component.mjs +0 -43
  145. package/esm2022/signature/localization/index.mjs +0 -7
  146. package/esm2022/signature/localization/localized-signature-messages.directive.mjs +0 -39
  147. package/esm2022/signature/localization/messages.mjs +0 -45
  148. package/esm2022/signature/signature.component.mjs +0 -981
  149. package/esm2022/signature.module.mjs +0 -47
  150. package/esm2022/slider/localization/custom-messages.component.mjs +0 -43
  151. package/esm2022/slider/localization/localized-slider-messages.directive.mjs +0 -39
  152. package/esm2022/slider/localization/messages.mjs +0 -39
  153. package/esm2022/slider/slider-model.mjs +0 -32
  154. package/esm2022/slider/slider.component.mjs +0 -671
  155. package/esm2022/slider.module.mjs +0 -48
  156. package/esm2022/sliders-common/label-template.directive.mjs +0 -37
  157. package/esm2022/sliders-common/slider-base.mjs +0 -300
  158. package/esm2022/sliders-common/slider-model.base.mjs +0 -118
  159. package/esm2022/sliders-common/slider-ticks.component.mjs +0 -147
  160. package/esm2022/sliders-common/sliders-util.mjs +0 -206
  161. package/esm2022/sliders-common/title-callback.mjs +0 -5
  162. package/esm2022/switch/events/blur-event.mjs +0 -13
  163. package/esm2022/switch/events/focus-event.mjs +0 -13
  164. package/esm2022/switch/localization/custom-messages.component.mjs +0 -43
  165. package/esm2022/switch/localization/localized-switch-messages.directive.mjs +0 -39
  166. package/esm2022/switch/localization/messages.mjs +0 -33
  167. package/esm2022/switch/switch.component.mjs +0 -585
  168. package/esm2022/switch.module.mjs +0 -44
  169. package/esm2022/text-fields-common/text-fields-base.mjs +0 -150
  170. package/esm2022/textarea/models/adornments-orientation.mjs +0 -5
  171. package/esm2022/textarea/models/flow.mjs +0 -5
  172. package/esm2022/textarea/models/resize.mjs +0 -5
  173. package/esm2022/textarea/models/textarea-settings.mjs +0 -5
  174. package/esm2022/textarea/textarea-prefix.component.mjs +0 -67
  175. package/esm2022/textarea/textarea-suffix.component.mjs +0 -67
  176. package/esm2022/textarea/textarea.component.mjs +0 -740
  177. package/esm2022/textarea/textarea.directive.mjs +0 -288
  178. package/esm2022/textarea.module.mjs +0 -46
  179. package/esm2022/textbox/localization/custom-messages.component.mjs +0 -43
  180. package/esm2022/textbox/localization/localized-textbox-messages.directive.mjs +0 -39
  181. package/esm2022/textbox/localization/messages.mjs +0 -27
  182. package/esm2022/textbox/models/icon-show-options.mjs +0 -5
  183. package/esm2022/textbox/textbox-prefix.directive.mjs +0 -50
  184. package/esm2022/textbox/textbox-suffix.directive.mjs +0 -49
  185. package/esm2022/textbox/textbox.component.mjs +0 -933
  186. package/esm2022/textbox/textbox.directive.mjs +0 -125
  187. package/esm2022/textbox.module.mjs +0 -51
  188. package/esm2022/validators/max.validator.mjs +0 -21
  189. package/esm2022/validators/min.validator.mjs +0 -21
@@ -1,754 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, forwardRef, HostBinding, Input, NgZone, Output, Renderer2 } from '@angular/core';
6
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
7
- import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
8
- import { isDocumentAvailable, KendoInput, Keys, normalizeKeys } from '@progress/kendo-angular-common';
9
- import { validatePackage } from '@progress/kendo-licensing';
10
- import { packageMetadata } from '../package-metadata';
11
- import { starIcon, starOutlineIcon } from '@progress/kendo-svg-icons';
12
- import { Subscription } from 'rxjs';
13
- import { areSame } from '../common/utils';
14
- import { RatingItemTemplateDirective } from './directives/rating-item.directive';
15
- import { RatingHoveredItemTemplateDirective } from './directives/rating-hovered-item.directive';
16
- import { RatingSelectedItemTemplateDirective } from './directives/rating-selected-item.directive';
17
- import { NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';
18
- import { IconWrapperComponent } from '@progress/kendo-angular-icons';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@progress/kendo-angular-l10n";
21
- /**
22
- * Represents the Kendo UI Rating component for Angular.
23
- * Use this component to let users select a rating value.
24
- *
25
- * @example
26
- * ```html
27
- * <kendo-rating [itemsCount]="5" [(value)]="ratingValue"></kendo-rating>
28
- * ```
29
- */
30
- export class RatingComponent {
31
- element;
32
- renderer;
33
- localizationService;
34
- cdr;
35
- zone;
36
- itemTemplate;
37
- hoveredItemTemplate;
38
- selectedItemTemplate;
39
- /**
40
- * When `true`, disables the Rating ([see example]({% slug disabledstate_rating %})).
41
-
42
- * To disable the component in reactive forms, see [Forms Support](slug:formssupport_rating#toc-managing-the-rating-disabled-state-in-reactive-forms).
43
- *
44
- * @default false
45
- */
46
- disabled = false;
47
- /**
48
- * When `true`, sets the Rating to read-only ([see example]({% slug readonly_rating %})).
49
-
50
- *
51
- * @default false
52
- */
53
- readonly = false;
54
- /**
55
- * Sets the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the Rating.
56
-
57
- *
58
- * @default 0
59
- */
60
- tabindex = 0;
61
- /**
62
- * Sets the number of Rating items ([see example]({% slug itemscount_rating %})).
63
- *
64
- * @default 5
65
- */
66
- itemsCount = 5;
67
- /**
68
- * Sets the initial value of the Rating component.
69
- * Use either `ngModel` or the `value` binding, but not both at the same time.
70
- */
71
- set value(value) {
72
- this._value = value;
73
- this.updateRatingItems();
74
- }
75
- get value() {
76
- return this._value;
77
- }
78
- /**
79
- * Sets the selection mode of the Rating ([see example]({% slug selection_rating %})).
80
- *
81
- * @default 'continuous'
82
- */
83
- set selection(selection) {
84
- this._selection = selection;
85
- this.updateRatingItems();
86
- }
87
- get selection() {
88
- return this._selection;
89
- }
90
- /**
91
- * Sets the precision of the Rating ([see example]({% slug precision_rating %})).
92
- *
93
- * @default 'item'
94
- */
95
- set precision(precision) {
96
- this._precision = precision;
97
- this.updateRatingItems();
98
- }
99
- get precision() {
100
- return this._precision;
101
- }
102
- /**
103
- * Sets the label text for the Rating. The text renders in a `<span>` element ([see example]({% slug label_rating %})).
104
- */
105
- label;
106
- /**
107
- * Sets a custom font icon for the Rating items ([see example]({% slug icon_rating %})).
108
- */
109
- icon;
110
- /**
111
- * Sets a custom SVG icon for the selected or hovered state of the Rating items ([see example]({% slug icon_rating %})).
112
- */
113
- svgIcon = starIcon;
114
- /**
115
- * Sets a custom SVG icon for the default state of the Rating items when not hovered or selected ([see example]({% slug icon_rating %})).
116
- */
117
- svgIconOutline = starOutlineIcon;
118
- /**
119
- * Fires when the user selects a new value.
120
- */
121
- valueChange = new EventEmitter();
122
- hostClass = true;
123
- direction;
124
- get isControlInvalid() {
125
- return (this.control?.invalid)?.toString();
126
- }
127
- valueMin = 0;
128
- get valueMax() {
129
- return this.itemsCount;
130
- }
131
- get valueNow() {
132
- return this.value;
133
- }
134
- ariaRole = 'slider';
135
- /**
136
- * @hidden
137
- */
138
- ratingItems = [];
139
- control;
140
- ngChange = (_) => { };
141
- ngTouched = () => { };
142
- rect;
143
- _value;
144
- _selection = 'continuous';
145
- _precision = 'item';
146
- subscriptions = new Subscription();
147
- constructor(element, renderer, localizationService, cdr, zone) {
148
- this.element = element;
149
- this.renderer = renderer;
150
- this.localizationService = localizationService;
151
- this.cdr = cdr;
152
- this.zone = zone;
153
- validatePackage(packageMetadata);
154
- }
155
- ngOnInit() {
156
- this.subscriptions.add(this.localizationService
157
- .changes
158
- .subscribe(({ rtl }) => {
159
- this.direction = rtl ? 'rtl' : 'ltr';
160
- }));
161
- this.subscriptions.add(this.renderer.listen(this.element.nativeElement, 'blur', () => this.ngTouched()));
162
- this.subscriptions.add(this.renderer.listen(this.element.nativeElement, 'keydown', event => this.onKeyDown(event)));
163
- this.createRatingItems();
164
- }
165
- ngAfterViewInit() {
166
- const items = this.element.nativeElement.querySelectorAll('.k-rating-item');
167
- this.zone.runOutsideAngular(() => {
168
- items.forEach((item, index) => this.subscriptions.add(this.renderer.listen(item, 'mousemove', (event) => this.onMouseMove(index, event))));
169
- });
170
- }
171
- ngOnDestroy() {
172
- this.subscriptions.unsubscribe();
173
- }
174
- /**
175
- * Focuses the Rating component.
176
- */
177
- focus() {
178
- if (isDocumentAvailable() && !this.disabled) {
179
- this.element.nativeElement.focus();
180
- }
181
- }
182
- /**
183
- * Blurs the Rating component.
184
- */
185
- blur() {
186
- if (isDocumentAvailable()) {
187
- this.element.nativeElement.blur();
188
- }
189
- }
190
- /**
191
- * @hidden
192
- */
193
- createRatingItems() {
194
- for (let i = 0; i < this.itemsCount; i++) {
195
- const item = {
196
- title: this.isHalf(i, this.value) ? String(i + 0.5) : String(i + 1),
197
- selected: this.isSelected(i, this.value),
198
- selectedIndicator: false,
199
- hovered: false,
200
- half: this.isHalf(i, this.value)
201
- };
202
- this.ratingItems.push(item);
203
- }
204
- }
205
- /**
206
- * @hidden
207
- */
208
- onMouseEnter(event) {
209
- this.rect = event.target.getBoundingClientRect();
210
- }
211
- /**
212
- * @hidden
213
- */
214
- onMouseMove(value, event) {
215
- const halfPrecision = this.precision === 'half';
216
- const isFirstHalf = halfPrecision && this.isFirstHalf(this.rect, event.clientX);
217
- this.zone.run(() => this.ratingItems.forEach((item, index) => {
218
- item.title = (halfPrecision && value === index && isFirstHalf) ? String(index + 0.5) : String(index + 1);
219
- item.selected = item.hovered = this.isSelected(index, value + 1);
220
- item.selectedIndicator = this.isSelected(index, this.value);
221
- item.half = (halfPrecision && value === index) ? isFirstHalf : false;
222
- }));
223
- }
224
- /**
225
- * @hidden
226
- */
227
- onMouseOut() {
228
- this.rect = null;
229
- this.updateRatingItems();
230
- }
231
- /**
232
- * @hidden
233
- * Called when the status of the component changes to or from `disabled`.
234
- * Depending on the value, it enables or disables the appropriate DOM element.
235
- *
236
- * @param isDisabled
237
- */
238
- setDisabledState(isDisabled) {
239
- this.disabled = isDisabled;
240
- this.cdr.markForCheck();
241
- }
242
- /**
243
- * @hidden
244
- */
245
- changeValue(index, event) {
246
- const rect = event.target.getBoundingClientRect();
247
- const isFirstHalf = this.isFirstHalf(rect, event.clientX);
248
- const value = (this.precision === 'half' && isFirstHalf) ? index + 0.5 : index + 1;
249
- if (!areSame(this.value, value)) {
250
- this.value = value;
251
- this.ngChange(this.value);
252
- this.valueChange.emit(this.value);
253
- this.updateRatingItems();
254
- this.cdr.markForCheck();
255
- }
256
- }
257
- /**
258
- * @hidden
259
- */
260
- updateRatingItems() {
261
- this.ratingItems.forEach((item, index) => {
262
- item.title = this.isHalf(index, this.value) ? String(index + 0.5) : String(index + 1);
263
- item.selected = this.isSelected(index, this.value);
264
- item.selectedIndicator = this.isSelected(index, this.value);
265
- item.hovered = false;
266
- item.half = this.isHalf(index, this.value);
267
- });
268
- }
269
- /**
270
- * @hidden
271
- */
272
- writeValue(value) {
273
- this.value = value;
274
- this.updateRatingItems();
275
- this.cdr.markForCheck();
276
- }
277
- /**
278
- * @hidden
279
- */
280
- registerOnChange(fn) {
281
- this.ngChange = fn;
282
- }
283
- /**
284
- * @hidden
285
- */
286
- registerOnTouched(fn) {
287
- this.ngTouched = fn;
288
- }
289
- isSelected(index, value) {
290
- return this.selection === 'single' ? index === Math.ceil(value - 1) : index <= Math.ceil(value - 1);
291
- }
292
- isHalf(index, value) {
293
- return (this.precision === 'half' && (value > index) && (value < index + 1));
294
- }
295
- isFirstHalf(rect, clientX) {
296
- const elementPosition = rect.x + (rect.width / 2);
297
- return this.direction === 'ltr' ? clientX < elementPosition : clientX > elementPosition;
298
- }
299
- onKeyDown(event) {
300
- const decreaseValue = () => {
301
- if (this.value <= 0) {
302
- return;
303
- }
304
- this.value = (this.precision === 'half') ? this.value - 0.5 : this.value - 1;
305
- this.ngChange(this.value);
306
- this.valueChange.emit(this.value);
307
- this.updateRatingItems();
308
- this.cdr.markForCheck();
309
- };
310
- const increaseValue = () => {
311
- if (this.value >= this.itemsCount) {
312
- return;
313
- }
314
- this.value = (this.precision === 'half') ? this.value + 0.5 : this.value + 1;
315
- this.ngChange(this.value);
316
- this.valueChange.emit(this.value);
317
- this.updateRatingItems();
318
- this.cdr.markForCheck();
319
- };
320
- const setMinValue = () => {
321
- if (!areSame(this.value, this.valueMin)) {
322
- this.value = this.valueMin;
323
- this.ngChange(this.value);
324
- this.valueChange.emit(this.value);
325
- this.updateRatingItems();
326
- this.cdr.markForCheck();
327
- }
328
- };
329
- const setMaxValue = () => {
330
- if (!areSame(this.value, this.valueMax)) {
331
- this.value = this.valueMax;
332
- this.ngChange(this.value);
333
- this.valueChange.emit(this.value);
334
- this.updateRatingItems();
335
- this.cdr.markForCheck();
336
- }
337
- };
338
- const code = normalizeKeys(event);
339
- switch (code) {
340
- case Keys.ArrowDown:
341
- decreaseValue();
342
- break;
343
- case Keys.ArrowLeft:
344
- if (this.direction === 'ltr') {
345
- decreaseValue();
346
- }
347
- else {
348
- increaseValue();
349
- }
350
- break;
351
- case Keys.ArrowUp:
352
- increaseValue();
353
- break;
354
- case Keys.ArrowRight:
355
- if (this.direction === 'ltr') {
356
- increaseValue();
357
- }
358
- else {
359
- decreaseValue();
360
- }
361
- break;
362
- case Keys.Home:
363
- setMinValue();
364
- break;
365
- case Keys.End:
366
- setMaxValue();
367
- break;
368
- default:
369
- break;
370
- }
371
- }
372
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RatingComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
373
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RatingComponent, isStandalone: true, selector: "kendo-rating", inputs: { disabled: "disabled", readonly: "readonly", tabindex: "tabindex", itemsCount: "itemsCount", value: "value", selection: "selection", precision: "precision", label: "label", icon: "icon", svgIcon: "svgIcon", svgIconOutline: "svgIconOutline" }, outputs: { valueChange: "valueChange" }, host: { properties: { "attr.aria-disabled": "this.disabled", "class.k-disabled": "this.disabled", "attr.aria-readonly": "this.readonly", "class.k-readonly": "this.readonly", "attr.tabindex": "this.tabindex", "class.k-rating": "this.hostClass", "attr.dir": "this.direction", "attr.aria-invalid": "this.isControlInvalid", "attr.aria-valuemin": "this.valueMin", "attr.aria-valuemax": "this.valueMax", "attr.aria-valuenow": "this.valueNow", "attr.role": "this.ariaRole" } }, providers: [
374
- LocalizationService,
375
- { provide: L10N_PREFIX, useValue: 'kendo.rating' },
376
- {
377
- multi: true,
378
- provide: NG_VALUE_ACCESSOR,
379
- useExisting: forwardRef(() => RatingComponent) /* eslint-disable-line*/
380
- },
381
- {
382
- provide: KendoInput,
383
- useExisting: forwardRef(() => RatingComponent)
384
- }
385
- ], queries: [{ propertyName: "itemTemplate", first: true, predicate: RatingItemTemplateDirective, descendants: true }, { propertyName: "hoveredItemTemplate", first: true, predicate: RatingHoveredItemTemplateDirective, descendants: true }, { propertyName: "selectedItemTemplate", first: true, predicate: RatingSelectedItemTemplateDirective, descendants: true }], exportAs: ["kendoRating"], ngImport: i0, template: `
386
- <span class="k-rating-container">
387
- @for (item of ratingItems; track item; let i = $index) {
388
- <span
389
- class="k-rating-item"
390
- [title]="item.title"
391
- [ngClass]="{
392
- 'k-selected': item.selected || item.selectedIndicator,
393
- 'k-hover': item.hovered
394
- }"
395
- (mouseenter)="onMouseEnter($event)"
396
- (mouseout)="onMouseOut()"
397
- (click)="changeValue(i, $event)"
398
- >
399
- @if (!item.half) {
400
- @if (!itemTemplate) {
401
- @if (!icon) {
402
- <kendo-icon-wrapper
403
- size="xlarge"
404
- [name]="item.selected || item.hovered ? 'star' : 'star-outline'"
405
- [svgIcon]="item.selected || item.hovered ? svgIcon : svgIconOutline"
406
- >
407
- </kendo-icon-wrapper>
408
- }
409
- @if (icon) {
410
- <kendo-icon-wrapper
411
- size="xlarge"
412
- [name]="item.selected || item.hovered ? icon : icon + '-outline'"
413
- >
414
- </kendo-icon-wrapper>
415
- }
416
- }
417
- @if (itemTemplate && (!item.selected && !item.hovered)) {
418
- <ng-template
419
- [ngTemplateOutlet]="itemTemplate?.templateRef"
420
- [ngTemplateOutletContext]="{index: i}"
421
- >
422
- </ng-template>
423
- }
424
- @if (hoveredItemTemplate && item.hovered) {
425
- <ng-template
426
- [ngTemplateOutlet]="hoveredItemTemplate?.templateRef"
427
- [ngTemplateOutletContext]="{index: i}"
428
- >
429
- </ng-template>
430
- }
431
- @if (selectedItemTemplate && (item.selected && !item.hovered)) {
432
- <ng-template
433
- [ngTemplateOutlet]="selectedItemTemplate?.templateRef"
434
- [ngTemplateOutletContext]="{index: i}"
435
- >
436
- </ng-template>
437
- }
438
- }
439
- @if (item.half) {
440
- @if (!itemTemplate) {
441
- <span class="k-rating-precision-complement">
442
- @if (!icon) {
443
- <kendo-icon-wrapper
444
- size="xlarge"
445
- [name]="'star-outline'"
446
- [svgIcon]="svgIconOutline"
447
- >
448
- </kendo-icon-wrapper>
449
- }
450
- @if (icon) {
451
- <kendo-icon-wrapper
452
- size="xlarge"
453
- [name]="icon + '-outline'"
454
- >
455
- </kendo-icon-wrapper>
456
- }
457
- </span>
458
- <span
459
- class="k-rating-precision-part"
460
- [ngStyle]="{'clipPath': direction === 'rtl' ? 'inset(0 0 0 50%)' : 'inset(0 50% 0 0)'}"
461
- >
462
- @if (!icon) {
463
- <kendo-icon-wrapper
464
- size="xlarge"
465
- [name]="'star'"
466
- [svgIcon]="svgIcon"
467
- >
468
- </kendo-icon-wrapper>
469
- }
470
- @if (icon) {
471
- <kendo-icon-wrapper
472
- size="xlarge"
473
- [name]="icon"
474
- >
475
- </kendo-icon-wrapper>
476
- }
477
- </span>
478
- }
479
- <span
480
- class="k-rating-precision-complement"
481
- >
482
- <ng-template
483
- [ngTemplateOutlet]="itemTemplate?.templateRef"
484
- [ngTemplateOutletContext]="{index: i}"
485
- >
486
- </ng-template>
487
- </span>
488
- @if (hoveredItemTemplate && item.hovered) {
489
- <span
490
- class="k-rating-precision-part"
491
- [ngStyle]="{'clipPath': direction === 'rtl' ? 'inset(0 0 0 50%)' : 'inset(0 50% 0 0)'}"
492
- >
493
- <ng-template
494
- [ngTemplateOutlet]="hoveredItemTemplate?.templateRef"
495
- [ngTemplateOutletContext]="{index: i}"
496
- >
497
- </ng-template>
498
- </span>
499
- }
500
- @if (selectedItemTemplate && (item.selected && !item.hovered)) {
501
- <span
502
- class="k-rating-precision-part"
503
- [ngStyle]="{'clipPath': direction === 'rtl' ? 'inset(0 0 0 50%)' : 'inset(0 50% 0 0)'}"
504
- >
505
- <ng-template
506
- [ngTemplateOutlet]="selectedItemTemplate?.templateRef"
507
- [ngTemplateOutletContext]="{index: i}"
508
- >
509
- </ng-template>
510
- </span>
511
- }
512
- <span [style.width.px]="24" [style.height.px]="24" [style.display]="'block'"></span>
513
- }
514
- </span>
515
- }
516
- </span>
517
-
518
- @if (label) {
519
- <span
520
- class="k-rating-label"
521
- >{{ label }}</span>
522
- }
523
- `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
524
- }
525
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RatingComponent, decorators: [{
526
- type: Component,
527
- args: [{
528
- exportAs: 'kendoRating',
529
- providers: [
530
- LocalizationService,
531
- { provide: L10N_PREFIX, useValue: 'kendo.rating' },
532
- {
533
- multi: true,
534
- provide: NG_VALUE_ACCESSOR,
535
- useExisting: forwardRef(() => RatingComponent) /* eslint-disable-line*/
536
- },
537
- {
538
- provide: KendoInput,
539
- useExisting: forwardRef(() => RatingComponent)
540
- }
541
- ],
542
- selector: 'kendo-rating',
543
- template: `
544
- <span class="k-rating-container">
545
- @for (item of ratingItems; track item; let i = $index) {
546
- <span
547
- class="k-rating-item"
548
- [title]="item.title"
549
- [ngClass]="{
550
- 'k-selected': item.selected || item.selectedIndicator,
551
- 'k-hover': item.hovered
552
- }"
553
- (mouseenter)="onMouseEnter($event)"
554
- (mouseout)="onMouseOut()"
555
- (click)="changeValue(i, $event)"
556
- >
557
- @if (!item.half) {
558
- @if (!itemTemplate) {
559
- @if (!icon) {
560
- <kendo-icon-wrapper
561
- size="xlarge"
562
- [name]="item.selected || item.hovered ? 'star' : 'star-outline'"
563
- [svgIcon]="item.selected || item.hovered ? svgIcon : svgIconOutline"
564
- >
565
- </kendo-icon-wrapper>
566
- }
567
- @if (icon) {
568
- <kendo-icon-wrapper
569
- size="xlarge"
570
- [name]="item.selected || item.hovered ? icon : icon + '-outline'"
571
- >
572
- </kendo-icon-wrapper>
573
- }
574
- }
575
- @if (itemTemplate && (!item.selected && !item.hovered)) {
576
- <ng-template
577
- [ngTemplateOutlet]="itemTemplate?.templateRef"
578
- [ngTemplateOutletContext]="{index: i}"
579
- >
580
- </ng-template>
581
- }
582
- @if (hoveredItemTemplate && item.hovered) {
583
- <ng-template
584
- [ngTemplateOutlet]="hoveredItemTemplate?.templateRef"
585
- [ngTemplateOutletContext]="{index: i}"
586
- >
587
- </ng-template>
588
- }
589
- @if (selectedItemTemplate && (item.selected && !item.hovered)) {
590
- <ng-template
591
- [ngTemplateOutlet]="selectedItemTemplate?.templateRef"
592
- [ngTemplateOutletContext]="{index: i}"
593
- >
594
- </ng-template>
595
- }
596
- }
597
- @if (item.half) {
598
- @if (!itemTemplate) {
599
- <span class="k-rating-precision-complement">
600
- @if (!icon) {
601
- <kendo-icon-wrapper
602
- size="xlarge"
603
- [name]="'star-outline'"
604
- [svgIcon]="svgIconOutline"
605
- >
606
- </kendo-icon-wrapper>
607
- }
608
- @if (icon) {
609
- <kendo-icon-wrapper
610
- size="xlarge"
611
- [name]="icon + '-outline'"
612
- >
613
- </kendo-icon-wrapper>
614
- }
615
- </span>
616
- <span
617
- class="k-rating-precision-part"
618
- [ngStyle]="{'clipPath': direction === 'rtl' ? 'inset(0 0 0 50%)' : 'inset(0 50% 0 0)'}"
619
- >
620
- @if (!icon) {
621
- <kendo-icon-wrapper
622
- size="xlarge"
623
- [name]="'star'"
624
- [svgIcon]="svgIcon"
625
- >
626
- </kendo-icon-wrapper>
627
- }
628
- @if (icon) {
629
- <kendo-icon-wrapper
630
- size="xlarge"
631
- [name]="icon"
632
- >
633
- </kendo-icon-wrapper>
634
- }
635
- </span>
636
- }
637
- <span
638
- class="k-rating-precision-complement"
639
- >
640
- <ng-template
641
- [ngTemplateOutlet]="itemTemplate?.templateRef"
642
- [ngTemplateOutletContext]="{index: i}"
643
- >
644
- </ng-template>
645
- </span>
646
- @if (hoveredItemTemplate && item.hovered) {
647
- <span
648
- class="k-rating-precision-part"
649
- [ngStyle]="{'clipPath': direction === 'rtl' ? 'inset(0 0 0 50%)' : 'inset(0 50% 0 0)'}"
650
- >
651
- <ng-template
652
- [ngTemplateOutlet]="hoveredItemTemplate?.templateRef"
653
- [ngTemplateOutletContext]="{index: i}"
654
- >
655
- </ng-template>
656
- </span>
657
- }
658
- @if (selectedItemTemplate && (item.selected && !item.hovered)) {
659
- <span
660
- class="k-rating-precision-part"
661
- [ngStyle]="{'clipPath': direction === 'rtl' ? 'inset(0 0 0 50%)' : 'inset(0 50% 0 0)'}"
662
- >
663
- <ng-template
664
- [ngTemplateOutlet]="selectedItemTemplate?.templateRef"
665
- [ngTemplateOutletContext]="{index: i}"
666
- >
667
- </ng-template>
668
- </span>
669
- }
670
- <span [style.width.px]="24" [style.height.px]="24" [style.display]="'block'"></span>
671
- }
672
- </span>
673
- }
674
- </span>
675
-
676
- @if (label) {
677
- <span
678
- class="k-rating-label"
679
- >{{ label }}</span>
680
- }
681
- `,
682
- standalone: true,
683
- imports: [NgClass, IconWrapperComponent, NgTemplateOutlet, NgStyle]
684
- }]
685
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { itemTemplate: [{
686
- type: ContentChild,
687
- args: [RatingItemTemplateDirective]
688
- }], hoveredItemTemplate: [{
689
- type: ContentChild,
690
- args: [RatingHoveredItemTemplateDirective]
691
- }], selectedItemTemplate: [{
692
- type: ContentChild,
693
- args: [RatingSelectedItemTemplateDirective]
694
- }], disabled: [{
695
- type: Input
696
- }, {
697
- type: HostBinding,
698
- args: ['attr.aria-disabled']
699
- }, {
700
- type: HostBinding,
701
- args: ['class.k-disabled']
702
- }], readonly: [{
703
- type: Input
704
- }, {
705
- type: HostBinding,
706
- args: ['attr.aria-readonly']
707
- }, {
708
- type: HostBinding,
709
- args: ['class.k-readonly']
710
- }], tabindex: [{
711
- type: Input
712
- }, {
713
- type: HostBinding,
714
- args: ['attr.tabindex']
715
- }], itemsCount: [{
716
- type: Input
717
- }], value: [{
718
- type: Input
719
- }], selection: [{
720
- type: Input
721
- }], precision: [{
722
- type: Input
723
- }], label: [{
724
- type: Input
725
- }], icon: [{
726
- type: Input
727
- }], svgIcon: [{
728
- type: Input
729
- }], svgIconOutline: [{
730
- type: Input
731
- }], valueChange: [{
732
- type: Output
733
- }], hostClass: [{
734
- type: HostBinding,
735
- args: ['class.k-rating']
736
- }], direction: [{
737
- type: HostBinding,
738
- args: ['attr.dir']
739
- }], isControlInvalid: [{
740
- type: HostBinding,
741
- args: ['attr.aria-invalid']
742
- }], valueMin: [{
743
- type: HostBinding,
744
- args: ['attr.aria-valuemin']
745
- }], valueMax: [{
746
- type: HostBinding,
747
- args: ['attr.aria-valuemax']
748
- }], valueNow: [{
749
- type: HostBinding,
750
- args: ['attr.aria-valuenow']
751
- }], ariaRole: [{
752
- type: HostBinding,
753
- args: ['attr.role']
754
- }] } });