@progress/kendo-angular-inputs 19.3.0-develop.3 → 19.3.0-develop.31

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 (37) hide show
  1. package/common/formservice.service.d.ts +14 -0
  2. package/common/models/gutters.d.ts +28 -0
  3. package/common/models/responsive-breakpoints.d.ts +34 -0
  4. package/common/utils.d.ts +0 -4
  5. package/directives.d.ts +19 -1
  6. package/esm2022/common/formservice.service.mjs +21 -0
  7. package/esm2022/common/models/gutters.mjs +5 -0
  8. package/esm2022/common/models/responsive-breakpoints.mjs +5 -0
  9. package/esm2022/common/utils.mjs +0 -4
  10. package/esm2022/directives.mjs +24 -0
  11. package/esm2022/form/form.component.mjs +153 -0
  12. package/esm2022/form/formseparator.component.mjs +80 -0
  13. package/esm2022/form/utils.mjs +144 -0
  14. package/esm2022/form.module.mjs +46 -0
  15. package/esm2022/formfield/formfield.component.mjs +47 -5
  16. package/esm2022/formfieldset/formfieldset.component.mjs +170 -0
  17. package/esm2022/index.mjs +5 -0
  18. package/esm2022/inputs.module.mjs +26 -23
  19. package/esm2022/otpinput/otpinput.component.mjs +2 -2
  20. package/esm2022/package-metadata.mjs +2 -2
  21. package/esm2022/rangeslider/rangeslider.component.mjs +3 -0
  22. package/esm2022/text-fields-common/text-fields-base.mjs +1 -1
  23. package/esm2022/textarea/models/textarea-settings.mjs +5 -0
  24. package/esm2022/textarea/textarea.component.mjs +35 -4
  25. package/fesm2022/progress-kendo-angular-inputs.mjs +661 -19
  26. package/form/form.component.d.ts +70 -0
  27. package/form/formseparator.component.d.ts +32 -0
  28. package/form/utils.d.ts +62 -0
  29. package/form.module.d.ts +36 -0
  30. package/formfield/formfield.component.d.ts +19 -4
  31. package/formfieldset/formfieldset.component.d.ts +68 -0
  32. package/index.d.ts +7 -0
  33. package/inputs.module.d.ts +25 -22
  34. package/package.json +13 -13
  35. package/text-fields-common/text-fields-base.d.ts +1 -1
  36. package/textarea/models/textarea-settings.d.ts +101 -0
  37. package/textarea/textarea.component.d.ts +9 -3
@@ -10,7 +10,7 @@ import { take, tap, filter, concatMap, startWith, takeUntil, skip, debounceTime,
10
10
  import * as i1 from '@progress/kendo-angular-l10n';
11
11
  import { ComponentMessages, LocalizationService, L10N_PREFIX, RTL } from '@progress/kendo-angular-l10n';
12
12
  import * as i7 from '@progress/kendo-angular-common';
13
- import { Keys, guid, anyChanged, isDocumentAvailable, hasObservers, KendoInput, EventsOutsideAngularDirective, DraggableDirective, ResizeSensorComponent, isObjectPresent, removeHTMLAttributes, parseAttributes, isControlRequired, setHTMLAttributes, SuffixTemplateDirective, PrefixTemplateDirective, isChanged, isPresent as isPresent$1, isSafari, PreventableEvent, findFocusableChild, parseCSSClassNames, closest as closest$1, SeparatorComponent, ResizeBatchService, KENDO_ADORNMENTS } from '@progress/kendo-angular-common';
13
+ import { Keys, guid, anyChanged, isDocumentAvailable, hasObservers, KendoInput, EventsOutsideAngularDirective, DraggableDirective, ResizeSensorComponent, isObjectPresent, removeHTMLAttributes, parseAttributes, isControlRequired, setHTMLAttributes, SuffixTemplateDirective, PrefixTemplateDirective, isChanged, isPresent as isPresent$1, isSafari, PreventableEvent, findFocusableChild, parseCSSClassNames, closest as closest$1, processCssValue, replaceMessagePlaceholder, getLicenseMessage, shouldShowValidationUI, WatermarkOverlayComponent, SeparatorComponent, ResizeBatchService, KENDO_ADORNMENTS } from '@progress/kendo-angular-common';
14
14
  export { PrefixTemplateDirective, SeparatorComponent, SuffixTemplateDirective } from '@progress/kendo-angular-common';
15
15
  import { validatePackage } from '@progress/kendo-licensing';
16
16
  import { caretAltUpIcon, caretAltDownIcon, caretAltLeftIcon, caretAltRightIcon, checkIcon, exclamationCircleIcon, xIcon, caretAltExpandIcon, xCircleIcon, dropletSlashIcon, dropletSliderIcon, paletteIcon, starIcon, starOutlineIcon, hyperlinkOpenIcon } from '@progress/kendo-svg-icons';
@@ -111,10 +111,6 @@ const getStylingClasses = (componentType, stylingOption, previousValue, newValue
111
111
  * Used to differentiate between the Radio and CheckBox components in their base class.
112
112
  */
113
113
  const COMPONENT_TYPE = new InjectionToken('TYPE_TOKEN');
114
- /**
115
- * @hidden
116
- */
117
- const replaceMessagePlaceholder = (message, name, value) => message.replace(new RegExp(`{\\s*${name}\\s*}`, 'g'), value);
118
114
 
119
115
  /**
120
116
  * @hidden
@@ -554,8 +550,8 @@ const packageMetadata = {
554
550
  productName: 'Kendo UI for Angular',
555
551
  productCode: 'KENDOUIANGULAR',
556
552
  productCodes: ['KENDOUIANGULAR'],
557
- publishDate: 1751984862,
558
- version: '19.3.0-develop.3',
553
+ publishDate: 1754576545,
554
+ version: '19.3.0-develop.31',
559
555
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/'
560
556
  };
561
557
 
@@ -1872,6 +1868,7 @@ class RangeSliderComponent extends SliderBase {
1872
1868
  this.ngZone = ngZone;
1873
1869
  this.changeDetector = changeDetector;
1874
1870
  this.hostElement = hostElement;
1871
+ validatePackage(packageMetadata);
1875
1872
  }
1876
1873
  /**
1877
1874
  * Focuses the RangeSlider.
@@ -14203,6 +14200,161 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
14203
14200
  args: ['attr.id']
14204
14201
  }] } });
14205
14202
 
14203
+ /**
14204
+ * @hidden
14205
+ */
14206
+ class FormService {
14207
+ formWidth = new BehaviorSubject(null);
14208
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14209
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormService, providedIn: 'root' });
14210
+ }
14211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormService, decorators: [{
14212
+ type: Injectable,
14213
+ args: [{
14214
+ providedIn: 'root',
14215
+ }]
14216
+ }] });
14217
+
14218
+ /**
14219
+ * @hidden
14220
+ */
14221
+ const DEFAULT_FORM_GUTTERS = { rows: '0px', cols: '32px' };
14222
+ /**
14223
+ * @hidden
14224
+ */
14225
+ const DEFAULT_FORMFIELDSET_GUTTERS = { rows: '0px', cols: '16px' };
14226
+ /**
14227
+ * @hidden
14228
+ */
14229
+ function innerWidth(element) {
14230
+ let width = element.clientWidth;
14231
+ const style = getComputedStyle(element);
14232
+ width -= (parseFloat(style.paddingLeft) || 0) + (parseFloat(style.borderLeftWidth) || 0);
14233
+ width -= (parseFloat(style.paddingRight) || 0) + (parseFloat(style.borderRightWidth) || 0);
14234
+ return width;
14235
+ }
14236
+ /**
14237
+ * @hidden
14238
+ */
14239
+ function processBreakpoints(breakpoints, containerWidth) {
14240
+ if (!breakpoints?.length || containerWidth === null) {
14241
+ return '';
14242
+ }
14243
+ for (const [index, breakpoint] of breakpoints.entries()) {
14244
+ const minBreakpointWidth = breakpoint.minWidth || breakpoints[index - 1]?.maxWidth + 1 || 0;
14245
+ const maxBreakpointWidth = breakpoint.maxWidth || breakpoints[index + 1]?.minWidth - 1 || Infinity;
14246
+ if (containerWidth >= minBreakpointWidth && containerWidth <= maxBreakpointWidth) {
14247
+ return breakpoint.value;
14248
+ }
14249
+ }
14250
+ return '';
14251
+ }
14252
+ /**
14253
+ * @hidden
14254
+ */
14255
+ const calculateColumns = (cols, containerWidth) => {
14256
+ if (!cols) {
14257
+ return null;
14258
+ }
14259
+ if (Array.isArray(cols) && cols.length > 0) {
14260
+ const processedCols = processBreakpoints(cols, containerWidth) || null;
14261
+ return typeof processedCols === 'string' ? parseInt(processedCols, 10) : processedCols;
14262
+ }
14263
+ else if (typeof cols === 'number') {
14264
+ return cols;
14265
+ }
14266
+ return null;
14267
+ };
14268
+ /**
14269
+ * @hidden
14270
+ *
14271
+ * Calculates gutters for rows and columns based on responsive breakpoints or fixed values
14272
+ */
14273
+ const calculateGutters = (gutters, containerWidth) => {
14274
+ if (!gutters) {
14275
+ return null;
14276
+ }
14277
+ if (typeof gutters === 'number' || typeof gutters === 'string') {
14278
+ return { cols: gutters, rows: gutters };
14279
+ }
14280
+ else if (Array.isArray(gutters)) {
14281
+ const processedGutters = processBreakpoints(gutters, containerWidth) || null;
14282
+ return processedGutters !== null ? { cols: processedGutters, rows: processedGutters } : null;
14283
+ }
14284
+ else if (typeof gutters === 'object') {
14285
+ const gutterObject = gutters;
14286
+ const result = { rows: null, cols: null };
14287
+ if (gutterObject.cols !== undefined && gutterObject.cols !== null) {
14288
+ if (typeof gutterObject.cols === 'number' || typeof gutterObject.cols === 'string') {
14289
+ result.cols = gutterObject.cols;
14290
+ }
14291
+ else if (Array.isArray(gutterObject.cols)) {
14292
+ result.cols = processBreakpoints(gutterObject.cols, containerWidth) || null;
14293
+ }
14294
+ }
14295
+ else {
14296
+ result.cols = null;
14297
+ }
14298
+ if (gutterObject.rows !== undefined) {
14299
+ if (typeof gutterObject.rows === 'number' || typeof gutterObject.rows === 'string') {
14300
+ result.rows = gutterObject.rows;
14301
+ }
14302
+ else if (Array.isArray(gutterObject.rows)) {
14303
+ result.rows = processBreakpoints(gutterObject.rows, containerWidth) || null;
14304
+ }
14305
+ }
14306
+ else {
14307
+ result.rows = null;
14308
+ }
14309
+ return result;
14310
+ }
14311
+ return null;
14312
+ };
14313
+ /**
14314
+ * @hidden
14315
+ *
14316
+ * Calculates column span value based on responsive breakpoints or fixed number
14317
+ */
14318
+ const calculateColSpan = (colSpan, containerWidth) => {
14319
+ if (!colSpan) {
14320
+ return null;
14321
+ }
14322
+ if (typeof colSpan === 'number') {
14323
+ return colSpan;
14324
+ }
14325
+ else if (Array.isArray(colSpan) && colSpan.length > 0) {
14326
+ const processedColSpan = processBreakpoints(colSpan, containerWidth) || null;
14327
+ return typeof processedColSpan === 'string' ? parseInt(processedColSpan, 10) : processedColSpan;
14328
+ }
14329
+ return null;
14330
+ };
14331
+ /**
14332
+ * @hidden
14333
+ *
14334
+ * Generates CSS class names for columns
14335
+ */
14336
+ const generateColumnClass = (columnsNumber) => {
14337
+ return columnsNumber && columnsNumber > 0 ? `k-grid-cols-${columnsNumber}` : '';
14338
+ };
14339
+ /**
14340
+ * @hidden
14341
+ *
14342
+ * Generates CSS styles for gutters based on the provided gutters object.
14343
+ */
14344
+ const generateGuttersStyling = (gutters, defaultGutters = DEFAULT_FORM_GUTTERS) => {
14345
+ const rows = processCssValue(gutters?.rows);
14346
+ const cols = processCssValue(gutters?.cols);
14347
+ return `${rows ?? defaultGutters.rows} ${cols ?? defaultGutters.cols}`;
14348
+ };
14349
+ /**
14350
+ * @hidden
14351
+ *
14352
+ * Generates CSS class name for column span
14353
+ */
14354
+ const generateColSpanClass = (colSpan) => {
14355
+ return colSpan ? `k-col-span-${colSpan}` : '';
14356
+ };
14357
+
14206
14358
  /**
14207
14359
  * Represents the Kendo UI FormField component for Angular.
14208
14360
  * Use this component to group form-bound controls (Kendo Angular components or native HTML controls).
@@ -14225,6 +14377,7 @@ class FormFieldComponent {
14225
14377
  renderer;
14226
14378
  localizationService;
14227
14379
  hostElement;
14380
+ formService;
14228
14381
  hostClass = true;
14229
14382
  /**
14230
14383
  * @hidden
@@ -14267,6 +14420,8 @@ class FormFieldComponent {
14267
14420
  /**
14268
14421
  * Specifies the layout orientation of the form field.
14269
14422
  *
14423
+ * @hidden
14424
+ *
14270
14425
  * @default 'vertical'
14271
14426
  */
14272
14427
  orientation = 'vertical';
@@ -14278,6 +14433,11 @@ class FormFieldComponent {
14278
14433
  * @default 'initial'
14279
14434
  */
14280
14435
  showErrors = 'initial';
14436
+ /**
14437
+ * Defines the colspan for the form field.
14438
+ * Can be a number or an array of responsive breakpoints.
14439
+ */
14440
+ colSpan;
14281
14441
  /**
14282
14442
  * @hidden
14283
14443
  */
@@ -14299,15 +14459,23 @@ class FormFieldComponent {
14299
14459
  control;
14300
14460
  subscriptions = new Subscription();
14301
14461
  rtl = false;
14302
- constructor(renderer, localizationService, hostElement) {
14462
+ _formWidth = null;
14463
+ _colSpanClass = null;
14464
+ _previousColSpan = null;
14465
+ constructor(renderer, localizationService, hostElement, formService) {
14303
14466
  this.renderer = renderer;
14304
14467
  this.localizationService = localizationService;
14305
14468
  this.hostElement = hostElement;
14469
+ this.formService = formService;
14306
14470
  validatePackage(packageMetadata);
14307
14471
  this.subscriptions.add(this.localizationService.changes.subscribe(({ rtl }) => {
14308
14472
  this.rtl = rtl;
14309
14473
  this.direction = this.rtl ? 'rtl' : 'ltr';
14310
14474
  }));
14475
+ this.subscriptions.add(this.formService.formWidth.pipe(filter((width) => width !== null)).subscribe((width) => {
14476
+ this._formWidth = width;
14477
+ this.updateColSpanClass();
14478
+ }));
14311
14479
  }
14312
14480
  ngAfterViewInit() {
14313
14481
  this.setDescription();
@@ -14315,6 +14483,11 @@ class FormFieldComponent {
14315
14483
  ngAfterViewChecked() {
14316
14484
  this.updateDescription();
14317
14485
  }
14486
+ ngOnChanges(changes) {
14487
+ if (changes['colSpan']) {
14488
+ this.updateColSpanClass();
14489
+ }
14490
+ }
14318
14491
  ngOnDestroy() {
14319
14492
  this.subscriptions.unsubscribe();
14320
14493
  }
@@ -14419,14 +14592,29 @@ class FormFieldComponent {
14419
14592
  this.subscriptions.add(this.errorChildren.changes.subscribe(() => this.updateDescription()));
14420
14593
  this.subscriptions.add(this.hintChildren.changes.subscribe(() => this.updateDescription()));
14421
14594
  }
14422
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
14423
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "kendo-formfield", inputs: { showHints: "showHints", orientation: "orientation", showErrors: "showErrors" }, host: { properties: { "class.k-form-field": "this.hostClass", "attr.dir": "this.direction", "class.k-form-field-error": "this.errorClass", "class.k-form-field-disabled": "this.disabledClass" } }, providers: [
14595
+ updateColSpanClass() {
14596
+ const hostElement = this.hostElement.nativeElement;
14597
+ const newColSpan = calculateColSpan(this.colSpan, this._formWidth);
14598
+ if (newColSpan !== this._previousColSpan) {
14599
+ const newClass = generateColSpanClass(newColSpan);
14600
+ if (this._colSpanClass) {
14601
+ this.renderer.removeClass(hostElement, this._colSpanClass);
14602
+ }
14603
+ if (newClass) {
14604
+ this.renderer.addClass(hostElement, newClass);
14605
+ }
14606
+ this._colSpanClass = newClass;
14607
+ this._previousColSpan = newColSpan;
14608
+ }
14609
+ }
14610
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, deps: [{ token: i0.Renderer2 }, { token: i1.LocalizationService }, { token: i0.ElementRef }, { token: FormService }], target: i0.ɵɵFactoryTarget.Component });
14611
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "kendo-formfield", inputs: { showHints: "showHints", orientation: "orientation", showErrors: "showErrors", colSpan: "colSpan" }, host: { properties: { "class.k-form-field": "this.hostClass", "attr.dir": "this.direction", "class.k-form-field-error": "this.errorClass", "class.k-form-field-disabled": "this.disabledClass" } }, providers: [
14424
14612
  LocalizationService,
14425
14613
  {
14426
14614
  provide: L10N_PREFIX,
14427
14615
  useValue: 'kendo.formfield'
14428
14616
  }
14429
- ], queries: [{ propertyName: "kendoInput", first: true, predicate: KendoInput, descendants: true, static: true }, { propertyName: "formControls", predicate: NgControl, descendants: true }, { propertyName: "controlElementRefs", predicate: NgControl, descendants: true, read: ElementRef }, { propertyName: "errorChildren", predicate: ErrorComponent, descendants: true }, { propertyName: "hintChildren", predicate: HintComponent, descendants: true }], ngImport: i0, template: `
14617
+ ], queries: [{ propertyName: "kendoInput", first: true, predicate: KendoInput, descendants: true, static: true }, { propertyName: "formControls", predicate: NgControl, descendants: true }, { propertyName: "controlElementRefs", predicate: NgControl, descendants: true, read: ElementRef }, { propertyName: "errorChildren", predicate: ErrorComponent, descendants: true }, { propertyName: "hintChildren", predicate: HintComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
14430
14618
  <ng-content select="label, kendo-label"></ng-content>
14431
14619
  <div class="k-form-field-wrap">
14432
14620
  <ng-content></ng-content>
@@ -14457,7 +14645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
14457
14645
  standalone: true,
14458
14646
  imports: [NgIf]
14459
14647
  }]
14460
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.ElementRef }]; }, propDecorators: { hostClass: [{
14648
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i1.LocalizationService }, { type: i0.ElementRef }, { type: FormService }]; }, propDecorators: { hostClass: [{
14461
14649
  type: HostBinding,
14462
14650
  args: ['class.k-form-field']
14463
14651
  }], direction: [{
@@ -14490,6 +14678,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
14490
14678
  type: Input
14491
14679
  }], showErrors: [{
14492
14680
  type: Input
14681
+ }], colSpan: [{
14682
+ type: Input
14493
14683
  }] } });
14494
14684
 
14495
14685
  /**
@@ -16894,7 +17084,7 @@ class TextFieldsBase {
16894
17084
  /**
16895
17085
  * Sets the `title` attribute of the internal textarea input element of the component.
16896
17086
  */
16897
- title = '';
17087
+ title;
16898
17088
  /**
16899
17089
  * Sets the disabled state of the TextArea component. To learn how to disable the component in reactive forms, refer to the article on [Forms Support](slug:formssupport_textarea#toc-managing-the-textarea-disabled-state-in-reactive-forms).
16900
17090
  *
@@ -17123,6 +17313,10 @@ class TextAreaComponent extends TextFieldsBase {
17123
17313
  * Sets the maximum number of characters allowed in the text area.
17124
17314
  */
17125
17315
  maxlength;
17316
+ /**
17317
+ * @hidden
17318
+ */
17319
+ maxResizableRows;
17126
17320
  /**
17127
17321
  * Sets the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.
17128
17322
  * @default 0
@@ -17213,6 +17407,7 @@ class TextAreaComponent extends TextFieldsBase {
17213
17407
  */
17214
17408
  valueChange = new EventEmitter();
17215
17409
  initialHeight;
17410
+ maxResizableHeight;
17216
17411
  resizeSubscription;
17217
17412
  _size = 'medium';
17218
17413
  _rounded = 'medium';
@@ -17253,10 +17448,24 @@ class TextAreaComponent extends TextFieldsBase {
17253
17448
  validatePackage(packageMetadata);
17254
17449
  this.direction = localizationService.rtl ? 'rtl' : 'ltr';
17255
17450
  }
17451
+ ngAfterContentInit() {
17452
+ this.ngZone.onStable.pipe((take(1))).subscribe(() => {
17453
+ this.prefix && (this.prefix.orientation = this.adornmentsOrientation);
17454
+ this.suffix && (this.suffix.orientation = this.adornmentsOrientation);
17455
+ });
17456
+ }
17256
17457
  ngAfterViewInit() {
17257
17458
  this.ngZone.runOutsideAngular(() => {
17258
17459
  this.handleFlow();
17259
17460
  });
17461
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
17462
+ if (this.prefix) {
17463
+ this.prefix.flow = this.flow;
17464
+ }
17465
+ if (this.suffix) {
17466
+ this.suffix.flow = this.flow;
17467
+ }
17468
+ });
17260
17469
  const stylingInputs = ['size', 'rounded', 'fillMode'];
17261
17470
  stylingInputs.forEach(input => {
17262
17471
  this.handleClasses(this[input], input);
@@ -17284,8 +17493,14 @@ class TextAreaComponent extends TextFieldsBase {
17284
17493
  }
17285
17494
  if (changes.resizable) {
17286
17495
  if (this.resizable === 'auto') {
17287
- this.renderer.removeClass(element, '\!k-overflow-y-auto');
17288
- this.initialHeight = element.offsetHeight;
17496
+ this.ngZone.onStable.pipe(take(1)).subscribe(() => {
17497
+ this.renderer.removeClass(element, '\!k-overflow-y-auto');
17498
+ this.initialHeight = element.offsetHeight;
17499
+ if (this.maxResizableRows && this.rows) {
17500
+ const heightValue = parseFloat(getComputedStyle(element).getPropertyValue('height')) - 2 * parseFloat(getComputedStyle(element).getPropertyValue('padding'));
17501
+ this.maxResizableHeight = this.initialHeight + (heightValue * (this.maxResizableRows - this.rows));
17502
+ }
17503
+ });
17289
17504
  }
17290
17505
  else if (this.resizable !== 'both') {
17291
17506
  this.renderer.addClass(element, '\!k-overflow-y-auto');
@@ -17449,6 +17664,10 @@ class TextAreaComponent extends TextFieldsBase {
17449
17664
  const element = this.input.nativeElement;
17450
17665
  this.renderer.setStyle(element, 'height', `${this.initialHeight}px`);
17451
17666
  const scrollHeight = element.scrollHeight;
17667
+ if (scrollHeight > this.maxResizableHeight) {
17668
+ this.renderer.setStyle(element, 'height', `${this.maxResizableHeight}px`);
17669
+ return;
17670
+ }
17452
17671
  this.renderer.setStyle(hostElement, 'min-height', `${scrollHeight}px`);
17453
17672
  if (scrollHeight > this.initialHeight) {
17454
17673
  this.renderer.setStyle(element, 'height', `${scrollHeight}px`);
@@ -17519,7 +17738,7 @@ class TextAreaComponent extends TextFieldsBase {
17519
17738
  setHTMLAttributes(attributesToRender, this.renderer, this.input.nativeElement, this.ngZone);
17520
17739
  }
17521
17740
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TextAreaComponent, deps: [{ token: i1.LocalizationService }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.Injector }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
17522
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TextAreaComponent, isStandalone: true, selector: "kendo-textarea", inputs: { focusableId: "focusableId", flow: "flow", inputAttributes: "inputAttributes", adornmentsOrientation: "adornmentsOrientation", rows: "rows", cols: "cols", maxlength: "maxlength", tabindex: "tabindex", tabIndex: "tabIndex", resizable: "resizable", size: "size", rounded: "rounded", fillMode: "fillMode", showPrefixSeparator: "showPrefixSeparator", showSuffixSeparator: "showSuffixSeparator" }, outputs: { onFocus: "focus", onBlur: "blur", valueChange: "valueChange" }, host: { properties: { "class.k-textarea": "this.hostClasses", "class.k-input": "this.hostClasses", "class.!k-flex-col": "this.flowCol", "class.!k-flex-row": "this.flowRow" } }, providers: [
17741
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TextAreaComponent, isStandalone: true, selector: "kendo-textarea", inputs: { focusableId: "focusableId", flow: "flow", inputAttributes: "inputAttributes", adornmentsOrientation: "adornmentsOrientation", rows: "rows", cols: "cols", maxlength: "maxlength", maxResizableRows: "maxResizableRows", tabindex: "tabindex", tabIndex: "tabIndex", resizable: "resizable", size: "size", rounded: "rounded", fillMode: "fillMode", showPrefixSeparator: "showPrefixSeparator", showSuffixSeparator: "showSuffixSeparator" }, outputs: { onFocus: "focus", onBlur: "blur", valueChange: "valueChange" }, host: { properties: { "class.k-textarea": "this.hostClasses", "class.k-input": "this.hostClasses", "class.!k-flex-col": "this.flowCol", "class.!k-flex-row": "this.flowRow" } }, providers: [
17523
17742
  LocalizationService,
17524
17743
  { provide: L10N_PREFIX, useValue: 'kendo.textarea' },
17525
17744
  {
@@ -17661,6 +17880,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
17661
17880
  type: Input
17662
17881
  }], maxlength: [{
17663
17882
  type: Input
17883
+ }], maxResizableRows: [{
17884
+ type: Input
17664
17885
  }], tabindex: [{
17665
17886
  type: Input
17666
17887
  }], tabIndex: [{
@@ -18810,6 +19031,372 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
18810
19031
  }]
18811
19032
  }], ctorParameters: function () { return [{ type: i1.LocalizationService }]; } });
18812
19033
 
19034
+ /**
19035
+ * Represents the Kendo UI Form component for Angular.
19036
+ *
19037
+ * @remarks
19038
+ * Supported children components are: {@link FormFieldComponent}, {@link FormSeparatorComponent}, and {@link FormFieldSetComponent}.
19039
+ */
19040
+ class FormComponent {
19041
+ element;
19042
+ cdr;
19043
+ formService;
19044
+ /**
19045
+ * Defines the orientation of the form.
19046
+ *
19047
+ * @default 'vertical'
19048
+ */
19049
+ orientation = 'vertical';
19050
+ /**
19051
+ * Defines the number of columns in the form.
19052
+ * Can be a number or an array of responsive breakpoints.
19053
+ */
19054
+ cols;
19055
+ /**
19056
+ * Defines the gutters for the form.
19057
+ * You can specify gutters for rows and columns.
19058
+ */
19059
+ gutters = { ...DEFAULT_FORM_GUTTERS };
19060
+ /**
19061
+ * @hidden
19062
+ */
19063
+ columnsClass = '';
19064
+ /**
19065
+ * @hidden
19066
+ */
19067
+ guttersStyle = '';
19068
+ /**
19069
+ * @hidden
19070
+ */
19071
+ showLicenseWatermark = false;
19072
+ /**
19073
+ * @hidden
19074
+ */
19075
+ licenseMessage;
19076
+ get formClass() {
19077
+ return 'k-form k-form-md';
19078
+ }
19079
+ get horizontalClass() {
19080
+ return this.orientation === 'horizontal';
19081
+ }
19082
+ _formColumnsNumber;
19083
+ _formGutters = { ...DEFAULT_FORM_GUTTERS };
19084
+ constructor(element, cdr, formService) {
19085
+ this.element = element;
19086
+ this.cdr = cdr;
19087
+ this.formService = formService;
19088
+ const isValid = validatePackage(packageMetadata);
19089
+ this.licenseMessage = getLicenseMessage(packageMetadata);
19090
+ this.showLicenseWatermark = shouldShowValidationUI(isValid);
19091
+ }
19092
+ ngAfterContentInit() {
19093
+ this.applyColumns();
19094
+ this.applyGutters();
19095
+ this.formService.formWidth.next(innerWidth(this.element.nativeElement));
19096
+ }
19097
+ ngOnChanges(changes) {
19098
+ if (changes['cols']) {
19099
+ this.applyColumns();
19100
+ }
19101
+ if (changes['gutters']) {
19102
+ this.applyGutters();
19103
+ }
19104
+ }
19105
+ /**
19106
+ * @hidden
19107
+ */
19108
+ onResize() {
19109
+ this.formService.formWidth.next(innerWidth(this.element.nativeElement));
19110
+ const previousColumnsNumber = this._formColumnsNumber;
19111
+ const previousGutters = this._formGutters;
19112
+ this.applyColumns();
19113
+ this.applyGutters();
19114
+ if (previousColumnsNumber !== this._formColumnsNumber) {
19115
+ this.cdr.detectChanges();
19116
+ }
19117
+ if (previousGutters?.cols !== this._formGutters?.cols || previousGutters?.rows !== this._formGutters?.rows) {
19118
+ this.cdr.detectChanges();
19119
+ }
19120
+ }
19121
+ applyColumns() {
19122
+ const containerWidth = innerWidth(this.element.nativeElement);
19123
+ this._formColumnsNumber = calculateColumns(this.cols, containerWidth);
19124
+ this.updateColumnClasses();
19125
+ }
19126
+ applyGutters() {
19127
+ const containerWidth = innerWidth(this.element.nativeElement);
19128
+ this._formGutters = calculateGutters(this.gutters, containerWidth);
19129
+ this.updateGutterClasses();
19130
+ }
19131
+ updateColumnClasses() {
19132
+ this.columnsClass = generateColumnClass(this._formColumnsNumber);
19133
+ }
19134
+ updateGutterClasses() {
19135
+ this.guttersStyle = generateGuttersStyling(this._formGutters, { ...DEFAULT_FORM_GUTTERS });
19136
+ }
19137
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: FormService }], target: i0.ɵɵFactoryTarget.Component });
19138
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormComponent, isStandalone: true, selector: "form[kendoForm]", inputs: { orientation: "orientation", cols: "cols", gutters: "gutters" }, host: { properties: { "class": "this.formClass", "class.k-form-horizontal": "this.horizontalClass" } }, exportAs: ["kendoForm"], usesOnChanges: true, ngImport: i0, template: `
19139
+ <div class="k-form-layout k-d-grid" [ngClass]="[columnsClass]" [ngStyle]="{ gap: guttersStyle }">
19140
+ <ng-content></ng-content>
19141
+ </div>
19142
+ <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
19143
+ <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
19144
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }] });
19145
+ }
19146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, decorators: [{
19147
+ type: Component,
19148
+ args: [{
19149
+ exportAs: 'kendoForm',
19150
+ selector: 'form[kendoForm]',
19151
+ template: `
19152
+ <div class="k-form-layout k-d-grid" [ngClass]="[columnsClass]" [ngStyle]="{ gap: guttersStyle }">
19153
+ <ng-content></ng-content>
19154
+ </div>
19155
+ <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
19156
+ <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div>
19157
+ `,
19158
+ standalone: true,
19159
+ imports: [NgClass, NgStyle, NgIf, ResizeSensorComponent, WatermarkOverlayComponent],
19160
+ }]
19161
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: FormService }]; }, propDecorators: { orientation: [{
19162
+ type: Input
19163
+ }], cols: [{
19164
+ type: Input
19165
+ }], gutters: [{
19166
+ type: Input
19167
+ }], formClass: [{
19168
+ type: HostBinding,
19169
+ args: ['class']
19170
+ }], horizontalClass: [{
19171
+ type: HostBinding,
19172
+ args: ['class.k-form-horizontal']
19173
+ }] } });
19174
+
19175
+ /**
19176
+ * Represents the Kendo UI Form Separator component for Angular.
19177
+ */
19178
+ class FormSeparatorComponent {
19179
+ renderer;
19180
+ hostElement;
19181
+ formService;
19182
+ hostClass = true;
19183
+ /**
19184
+ * Defines the colspan for the separator element related to the parent Form component columns.
19185
+ * Can be a number or an array of responsive breakpoints.
19186
+ */
19187
+ colSpan;
19188
+ _formWidth = null;
19189
+ _colSpanClass = null;
19190
+ _previousColSpan = null;
19191
+ subscriptions = new Subscription();
19192
+ constructor(renderer, hostElement, formService) {
19193
+ this.renderer = renderer;
19194
+ this.hostElement = hostElement;
19195
+ this.formService = formService;
19196
+ validatePackage(packageMetadata);
19197
+ this.subscriptions.add(this.formService.formWidth.pipe(filter((width) => width !== null)).subscribe((width) => {
19198
+ this._formWidth = width;
19199
+ this.updateColSpanClass();
19200
+ }));
19201
+ }
19202
+ ngOnChanges(changes) {
19203
+ if (changes['colSpan']) {
19204
+ this.updateColSpanClass();
19205
+ }
19206
+ }
19207
+ ngOnDestroy() {
19208
+ this.subscriptions.unsubscribe();
19209
+ }
19210
+ updateColSpanClass() {
19211
+ const hostElement = this.hostElement.nativeElement;
19212
+ const newColSpan = calculateColSpan(this.colSpan, this._formWidth);
19213
+ if (newColSpan !== this._previousColSpan) {
19214
+ const newClass = generateColSpanClass(newColSpan);
19215
+ if (this._colSpanClass) {
19216
+ this.renderer.removeClass(hostElement, this._colSpanClass);
19217
+ }
19218
+ if (newClass) {
19219
+ this.renderer.addClass(hostElement, newClass);
19220
+ }
19221
+ this._colSpanClass = newClass;
19222
+ this._previousColSpan = newColSpan;
19223
+ }
19224
+ }
19225
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormSeparatorComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: FormService }], target: i0.ɵɵFactoryTarget.Component });
19226
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormSeparatorComponent, isStandalone: true, selector: "kendo-form-separator", inputs: { colSpan: "colSpan" }, host: { properties: { "class.k-form-separator": "this.hostClass" } }, exportAs: ["kendoFormSeparator"], usesOnChanges: true, ngImport: i0, template: ``, isInline: true });
19227
+ }
19228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormSeparatorComponent, decorators: [{
19229
+ type: Component,
19230
+ args: [{
19231
+ exportAs: 'kendoFormSeparator',
19232
+ selector: 'kendo-form-separator',
19233
+ template: ``,
19234
+ standalone: true,
19235
+ }]
19236
+ }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: FormService }]; }, propDecorators: { hostClass: [{
19237
+ type: HostBinding,
19238
+ args: ['class.k-form-separator']
19239
+ }], colSpan: [{
19240
+ type: Input
19241
+ }] } });
19242
+
19243
+ /**
19244
+ * Represents the Kendo UI FormFieldSet component for Angular.
19245
+ *
19246
+ * @remarks
19247
+ * Supported children components are: {@link FormFieldComponent} and {@link FormSeparatorComponent}.
19248
+ */
19249
+ class FormFieldSetComponent {
19250
+ elementRef;
19251
+ renderer;
19252
+ formService;
19253
+ cdr;
19254
+ formFieldSetClass = true;
19255
+ /**
19256
+ * Defines the legend for the fieldset.
19257
+ */
19258
+ legend;
19259
+ /**
19260
+ * Defines the number of columns of the fieldset.
19261
+ * Can be a number or an array of responsive breakpoints.
19262
+ */
19263
+ cols;
19264
+ /**
19265
+ * Defines the gutters for the fieldset.
19266
+ * You can specify gutters for rows and columns.
19267
+ */
19268
+ gutters = { ...DEFAULT_FORMFIELDSET_GUTTERS };
19269
+ /**
19270
+ * Defines the colspan for the fieldset related to the parent Form component columns.
19271
+ * Can be a number or an array of responsive breakpoints.
19272
+ */
19273
+ colSpan;
19274
+ /**
19275
+ * @hidden
19276
+ */
19277
+ columnsClass = '';
19278
+ /**
19279
+ * @hidden
19280
+ */
19281
+ guttersStyle = '';
19282
+ _formColumnsNumber;
19283
+ _colSpanClass = null;
19284
+ _formWidth = null;
19285
+ _formGutters = { ...DEFAULT_FORMFIELDSET_GUTTERS };
19286
+ _previousColSpan = null;
19287
+ _previousCols = null;
19288
+ _previousGutters;
19289
+ subs = new Subscription();
19290
+ constructor(elementRef, renderer, formService, cdr) {
19291
+ this.elementRef = elementRef;
19292
+ this.renderer = renderer;
19293
+ this.formService = formService;
19294
+ this.cdr = cdr;
19295
+ validatePackage(packageMetadata);
19296
+ }
19297
+ ngOnInit() {
19298
+ this.subs.add(this.formService.formWidth.pipe(filter((width) => width !== null)).subscribe((width) => {
19299
+ this._formWidth = width;
19300
+ this.applyColumns();
19301
+ this.applyGutters();
19302
+ this.updateColSpanClass();
19303
+ }));
19304
+ }
19305
+ ngOnChanges(changes) {
19306
+ if (changes['colSpan']) {
19307
+ this.updateColSpanClass();
19308
+ }
19309
+ if (changes['cols']) {
19310
+ this.applyColumns();
19311
+ }
19312
+ if (changes['gutters']) {
19313
+ this.applyGutters();
19314
+ }
19315
+ }
19316
+ ngOnDestroy() {
19317
+ this.subs.unsubscribe();
19318
+ }
19319
+ applyColumns() {
19320
+ const containerWidth = this._formWidth;
19321
+ const newColumnsNumber = calculateColumns(this.cols, containerWidth);
19322
+ if (newColumnsNumber !== this._previousCols) {
19323
+ this._formColumnsNumber = newColumnsNumber;
19324
+ this.updateColumnClasses();
19325
+ this._previousCols = newColumnsNumber;
19326
+ }
19327
+ }
19328
+ applyGutters() {
19329
+ const containerWidth = this._formWidth;
19330
+ const newGutters = calculateGutters(this.gutters, containerWidth);
19331
+ if (newGutters && (newGutters.cols !== this._previousGutters?.cols || newGutters.rows !== this._previousGutters?.rows)) {
19332
+ this._formGutters = newGutters;
19333
+ this.updateGutterClasses();
19334
+ this._previousGutters = newGutters;
19335
+ }
19336
+ }
19337
+ updateColumnClasses() {
19338
+ this.columnsClass = generateColumnClass(this._formColumnsNumber);
19339
+ this.cdr.detectChanges();
19340
+ }
19341
+ updateGutterClasses() {
19342
+ this.guttersStyle = generateGuttersStyling(this._formGutters, { ...DEFAULT_FORMFIELDSET_GUTTERS });
19343
+ this.cdr.detectChanges();
19344
+ }
19345
+ updateColSpanClass() {
19346
+ const hostElement = this.elementRef.nativeElement;
19347
+ const newColSpan = calculateColSpan(this.colSpan, this._formWidth);
19348
+ if (newColSpan !== this._previousColSpan) {
19349
+ const newClass = generateColSpanClass(newColSpan);
19350
+ if (this._colSpanClass) {
19351
+ this.renderer.removeClass(hostElement, this._colSpanClass);
19352
+ }
19353
+ if (newClass) {
19354
+ this.renderer.addClass(hostElement, newClass);
19355
+ }
19356
+ this._colSpanClass = newClass;
19357
+ this._previousColSpan = newColSpan;
19358
+ this.cdr.detectChanges();
19359
+ }
19360
+ }
19361
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldSetComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: FormService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
19362
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldSetComponent, isStandalone: true, selector: "fieldset[kendoFormFieldSet]", inputs: { legend: "legend", cols: "cols", gutters: "gutters", colSpan: "colSpan" }, host: { properties: { "class.k-form-fieldset": "this.formFieldSetClass" } }, exportAs: ["kendoFormFieldSet"], usesOnChanges: true, ngImport: i0, template: `
19363
+ <legend *ngIf="legend" class="k-form-legend">
19364
+ {{ legend }}
19365
+ </legend>
19366
+ <div class="k-form-layout k-d-grid" [ngClass]="[columnsClass]" [ngStyle]="{'gap': guttersStyle}">
19367
+ <ng-content></ng-content>
19368
+ </div>
19369
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
19370
+ }
19371
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldSetComponent, decorators: [{
19372
+ type: Component,
19373
+ args: [{
19374
+ exportAs: 'kendoFormFieldSet',
19375
+ selector: 'fieldset[kendoFormFieldSet]',
19376
+ template: `
19377
+ <legend *ngIf="legend" class="k-form-legend">
19378
+ {{ legend }}
19379
+ </legend>
19380
+ <div class="k-form-layout k-d-grid" [ngClass]="[columnsClass]" [ngStyle]="{'gap': guttersStyle}">
19381
+ <ng-content></ng-content>
19382
+ </div>
19383
+ `,
19384
+ standalone: true,
19385
+ imports: [NgIf, NgClass, NgStyle],
19386
+ }]
19387
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: FormService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { formFieldSetClass: [{
19388
+ type: HostBinding,
19389
+ args: ['class.k-form-fieldset']
19390
+ }], legend: [{
19391
+ type: Input
19392
+ }], cols: [{
19393
+ type: Input
19394
+ }], gutters: [{
19395
+ type: Input
19396
+ }], colSpan: [{
19397
+ type: Input
19398
+ }] } });
19399
+
18813
19400
  /**
18814
19401
  * Use the `KENDO_TEXTBOX` utility array to add all TextBox-related components and directives to a standalone Angular component.
18815
19402
  *
@@ -18988,6 +19575,26 @@ const KENDO_FORMFIELD = [
18988
19575
  HintComponent,
18989
19576
  ErrorComponent
18990
19577
  ];
19578
+ /**
19579
+ * Use the `KENDO_FORM` utility array to add all Form-related components and directives to a standalone Angular component.
19580
+ *
19581
+ * @example
19582
+ * ```typescript
19583
+ * import { KENDO_FORM } from '@progress/kendo-angular-inputs';
19584
+ * @Component({
19585
+ * standalone: true,
19586
+ * imports: [KENDO_FORM],
19587
+ * template: `<form kendoForm>...</form>`
19588
+ * })
19589
+ * export class MyComponent {}
19590
+ * ```
19591
+ */
19592
+ const KENDO_FORM = [
19593
+ FormComponent,
19594
+ FormSeparatorComponent,
19595
+ FormFieldSetComponent,
19596
+ ...KENDO_FORMFIELD
19597
+ ];
18991
19598
  /**
18992
19599
  * Use the `KENDO_SLIDER` utility array to add all Slider-related components and directives to a standalone Angular component.
18993
19600
  *
@@ -19158,6 +19765,7 @@ const KENDO_INPUTS = [
19158
19765
  ...KENDO_CHECKBOX,
19159
19766
  ...KENDO_RADIOBUTTON,
19160
19767
  ...KENDO_SWITCH,
19768
+ ...KENDO_FORM,
19161
19769
  ...KENDO_FORMFIELD,
19162
19770
  ...KENDO_SLIDER,
19163
19771
  ...KENDO_RANGESLIDER,
@@ -19193,8 +19801,8 @@ const KENDO_INPUTS = [
19193
19801
  */
19194
19802
  class InputsModule {
19195
19803
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19196
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: InputsModule, imports: [TextBoxDirective, TextBoxComponent, InputSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, TextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, MaskedTextBoxComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, TextAreaComponent, TextAreaDirective, TextAreaPrefixComponent, TextAreaSuffixComponent, i7.SeparatorComponent, CheckBoxComponent, CheckBoxDirective, RadioButtonComponent, RadioButtonDirective, SwitchComponent, SwitchCustomMessagesComponent, FormFieldComponent, HintComponent, ErrorComponent, SliderComponent, SliderCustomMessagesComponent, LabelTemplateDirective, RangeSliderComponent, RangeSliderCustomMessagesComponent, LabelTemplateDirective, RatingComponent, RatingItemTemplateDirective, RatingHoveredItemTemplateDirective, RatingSelectedItemTemplateDirective, SignatureComponent, SignatureCustomMessagesComponent, ColorPickerComponent, ColorPickerCustomMessagesComponent, FlatColorPickerComponent, ColorPickerCustomMessagesComponent, ColorGradientComponent, ColorPickerCustomMessagesComponent, ColorPaletteComponent, ColorPickerCustomMessagesComponent, OTPInputComponent, OTPInputCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent], exports: [TextBoxDirective, TextBoxComponent, InputSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, TextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, MaskedTextBoxComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, TextAreaComponent, TextAreaDirective, TextAreaPrefixComponent, TextAreaSuffixComponent, i7.SeparatorComponent, CheckBoxComponent, CheckBoxDirective, RadioButtonComponent, RadioButtonDirective, SwitchComponent, SwitchCustomMessagesComponent, FormFieldComponent, HintComponent, ErrorComponent, SliderComponent, SliderCustomMessagesComponent, LabelTemplateDirective, RangeSliderComponent, RangeSliderCustomMessagesComponent, LabelTemplateDirective, RatingComponent, RatingItemTemplateDirective, RatingHoveredItemTemplateDirective, RatingSelectedItemTemplateDirective, SignatureComponent, SignatureCustomMessagesComponent, ColorPickerComponent, ColorPickerCustomMessagesComponent, FlatColorPickerComponent, ColorPickerCustomMessagesComponent, ColorGradientComponent, ColorPickerCustomMessagesComponent, ColorPaletteComponent, ColorPickerCustomMessagesComponent, OTPInputComponent, OTPInputCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent] });
19197
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputsModule, providers: [IconsService, PopupService, ResizeBatchService, DialogContainerService, DialogService, WindowService, WindowContainerService, AdaptiveService], imports: [TextBoxComponent, i7.SeparatorComponent, NumericTextBoxComponent, i7.SeparatorComponent, i7.SeparatorComponent, i7.SeparatorComponent, SliderComponent, RangeSliderComponent, RatingComponent, SignatureComponent, ColorPickerComponent, FlatColorPickerComponent, ColorGradientComponent, OTPInputComponent, i7.SeparatorComponent] });
19804
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: InputsModule, imports: [TextBoxDirective, TextBoxComponent, InputSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, TextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, MaskedTextBoxComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, TextAreaComponent, TextAreaDirective, TextAreaPrefixComponent, TextAreaSuffixComponent, i7.SeparatorComponent, CheckBoxComponent, CheckBoxDirective, RadioButtonComponent, RadioButtonDirective, SwitchComponent, SwitchCustomMessagesComponent, FormComponent, FormSeparatorComponent, FormFieldSetComponent, FormFieldComponent, HintComponent, ErrorComponent, FormFieldComponent, HintComponent, ErrorComponent, SliderComponent, SliderCustomMessagesComponent, LabelTemplateDirective, RangeSliderComponent, RangeSliderCustomMessagesComponent, LabelTemplateDirective, RatingComponent, RatingItemTemplateDirective, RatingHoveredItemTemplateDirective, RatingSelectedItemTemplateDirective, SignatureComponent, SignatureCustomMessagesComponent, ColorPickerComponent, ColorPickerCustomMessagesComponent, FlatColorPickerComponent, ColorPickerCustomMessagesComponent, ColorGradientComponent, ColorPickerCustomMessagesComponent, ColorPaletteComponent, ColorPickerCustomMessagesComponent, OTPInputComponent, OTPInputCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent], exports: [TextBoxDirective, TextBoxComponent, InputSeparatorComponent, TextBoxSuffixTemplateDirective, TextBoxPrefixTemplateDirective, TextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, MaskedTextBoxComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent, TextAreaComponent, TextAreaDirective, TextAreaPrefixComponent, TextAreaSuffixComponent, i7.SeparatorComponent, CheckBoxComponent, CheckBoxDirective, RadioButtonComponent, RadioButtonDirective, SwitchComponent, SwitchCustomMessagesComponent, FormComponent, FormSeparatorComponent, FormFieldSetComponent, FormFieldComponent, HintComponent, ErrorComponent, FormFieldComponent, HintComponent, ErrorComponent, SliderComponent, SliderCustomMessagesComponent, LabelTemplateDirective, RangeSliderComponent, RangeSliderCustomMessagesComponent, LabelTemplateDirective, RatingComponent, RatingItemTemplateDirective, RatingHoveredItemTemplateDirective, RatingSelectedItemTemplateDirective, SignatureComponent, SignatureCustomMessagesComponent, ColorPickerComponent, ColorPickerCustomMessagesComponent, FlatColorPickerComponent, ColorPickerCustomMessagesComponent, ColorGradientComponent, ColorPickerCustomMessagesComponent, ColorPaletteComponent, ColorPickerCustomMessagesComponent, OTPInputComponent, OTPInputCustomMessagesComponent, i7.PrefixTemplateDirective, i7.SuffixTemplateDirective, i7.SeparatorComponent] });
19805
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputsModule, providers: [IconsService, PopupService, ResizeBatchService, DialogContainerService, DialogService, WindowService, WindowContainerService, AdaptiveService], imports: [TextBoxComponent, i7.SeparatorComponent, NumericTextBoxComponent, i7.SeparatorComponent, i7.SeparatorComponent, i7.SeparatorComponent, FormComponent, SliderComponent, RangeSliderComponent, RatingComponent, SignatureComponent, ColorPickerComponent, FlatColorPickerComponent, ColorGradientComponent, OTPInputComponent, i7.SeparatorComponent] });
19198
19806
  }
19199
19807
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: InputsModule, decorators: [{
19200
19808
  type: NgModule,
@@ -19643,6 +20251,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19643
20251
  }]
19644
20252
  }] });
19645
20253
 
20254
+ //IMPORTANT: NgModule export kept for backwards compatibility
20255
+ /**
20256
+ * Defines the [NgModule](link:site.data.urls.angular['ngmoduleapi']) for the FormField, Error, and Hint components.
20257
+ *
20258
+ * Use this module to add Form features to your NgModule-based Angular application.
20259
+ *
20260
+ * @example
20261
+ * ```typescript
20262
+ * import { FormModule } from '@progress/kendo-angular-inputs';
20263
+ * import { NgModule } from '@angular/core';
20264
+ * import { BrowserModule } from '@angular/platform-browser';
20265
+ * import { AppComponent } from './app.component';
20266
+ *
20267
+ * @NgModule({
20268
+ * declarations: [AppComponent],
20269
+ * imports: [BrowserModule, FormModule],
20270
+ * bootstrap: [AppComponent]
20271
+ * })
20272
+ * export class AppModule {}
20273
+ * ```
20274
+ */
20275
+ class FormModule {
20276
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20277
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FormModule, imports: [FormComponent, FormSeparatorComponent, FormFieldSetComponent, FormFieldComponent, HintComponent, ErrorComponent], exports: [FormComponent, FormSeparatorComponent, FormFieldSetComponent, FormFieldComponent, HintComponent, ErrorComponent] });
20278
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormModule, imports: [FormComponent] });
20279
+ }
20280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormModule, decorators: [{
20281
+ type: NgModule,
20282
+ args: [{
20283
+ imports: [...KENDO_FORM],
20284
+ exports: [...KENDO_FORM]
20285
+ }]
20286
+ }] });
20287
+
19646
20288
  //IMPORTANT: NgModule export kept for backwards compatibility
19647
20289
  /**
19648
20290
  * Defines the [`NgModule`](link:site.data.urls.angular['ngmoduleapi']) for the Signature component.
@@ -19717,5 +20359,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
19717
20359
  * Generated bundle index. Do not edit.
19718
20360
  */
19719
20361
 
19720
- export { ActiveColorClickEvent, CheckBoxComponent, CheckBoxDirective, CheckBoxModule, ColorGradientComponent, ColorPaletteComponent, ColorPickerCancelEvent, ColorPickerCloseEvent, ColorPickerComponent, ColorPickerCustomMessagesComponent, ColorPickerModule, ColorPickerOpenEvent, ErrorComponent, FlatColorPickerComponent, FormFieldComponent, FormFieldModule, HintComponent, InputSeparatorComponent, InputsModule, KENDO_CHECKBOX, KENDO_COLORGRADIENT, KENDO_COLORPALETTE, KENDO_COLORPICKER, KENDO_FLATCOLORPICKER, KENDO_FORMFIELD, KENDO_INPUTS, KENDO_MASKEDTEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_OTPINPUT, KENDO_RADIOBUTTON, KENDO_RANGESLIDER, KENDO_RATING, KENDO_SIGNATURE, KENDO_SLIDER, KENDO_SWITCH, KENDO_TEXTAREA, KENDO_TEXTBOX, LabelTemplateDirective, LocalizedColorPickerMessagesDirective, LocalizedNumericTextBoxMessagesDirective, LocalizedRangeSliderMessagesDirective, LocalizedSignatureMessagesDirective, LocalizedSliderMessagesDirective, LocalizedSwitchMessagesDirective, LocalizedTextBoxMessagesDirective, MaskedTextBoxComponent, MaskedTextBoxModule, MaskingService, NumericLabelDirective, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, NumericTextBoxModule, OTPInputComponent, OTPInputCustomMessagesComponent, OTPInputModule, RadioButtonComponent, RadioButtonDirective, RadioButtonModule, RangeSliderComponent, RangeSliderCustomMessagesComponent, RangeSliderModule, RatingComponent, RatingHoveredItemTemplateDirective, RatingItemTemplateDirective, RatingModule, RatingSelectedItemTemplateDirective, SignatureCloseEvent, SignatureComponent, SignatureCustomMessagesComponent, SignatureMessages, SignatureModule, SignatureOpenEvent, SliderComponent, SliderCustomMessagesComponent, SliderModule, SliderTicksComponent, SwitchBlurEvent, SwitchComponent, SwitchCustomMessagesComponent, SwitchFocusEvent, SwitchModule, TextAreaComponent, TextAreaDirective, TextAreaModule, TextAreaPrefixComponent, TextAreaSuffixComponent, TextBoxComponent, TextBoxCustomMessagesComponent, TextBoxDirective, TextBoxModule, TextBoxPrefixTemplateDirective, TextBoxSuffixTemplateDirective };
20362
+ export { ActiveColorClickEvent, CheckBoxComponent, CheckBoxDirective, CheckBoxModule, ColorGradientComponent, ColorPaletteComponent, ColorPickerCancelEvent, ColorPickerCloseEvent, ColorPickerComponent, ColorPickerCustomMessagesComponent, ColorPickerModule, ColorPickerOpenEvent, ErrorComponent, FlatColorPickerComponent, FormComponent, FormFieldComponent, FormFieldModule, FormFieldSetComponent, FormModule, FormSeparatorComponent, HintComponent, InputSeparatorComponent, InputsModule, KENDO_CHECKBOX, KENDO_COLORGRADIENT, KENDO_COLORPALETTE, KENDO_COLORPICKER, KENDO_FLATCOLORPICKER, KENDO_FORM, KENDO_FORMFIELD, KENDO_INPUTS, KENDO_MASKEDTEXTBOX, KENDO_NUMERICTEXTBOX, KENDO_OTPINPUT, KENDO_RADIOBUTTON, KENDO_RANGESLIDER, KENDO_RATING, KENDO_SIGNATURE, KENDO_SLIDER, KENDO_SWITCH, KENDO_TEXTAREA, KENDO_TEXTBOX, LabelTemplateDirective, LocalizedColorPickerMessagesDirective, LocalizedNumericTextBoxMessagesDirective, LocalizedRangeSliderMessagesDirective, LocalizedSignatureMessagesDirective, LocalizedSliderMessagesDirective, LocalizedSwitchMessagesDirective, LocalizedTextBoxMessagesDirective, MaskedTextBoxComponent, MaskedTextBoxModule, MaskingService, NumericLabelDirective, NumericTextBoxComponent, NumericTextBoxCustomMessagesComponent, NumericTextBoxModule, OTPInputComponent, OTPInputCustomMessagesComponent, OTPInputModule, RadioButtonComponent, RadioButtonDirective, RadioButtonModule, RangeSliderComponent, RangeSliderCustomMessagesComponent, RangeSliderModule, RatingComponent, RatingHoveredItemTemplateDirective, RatingItemTemplateDirective, RatingModule, RatingSelectedItemTemplateDirective, SignatureCloseEvent, SignatureComponent, SignatureCustomMessagesComponent, SignatureMessages, SignatureModule, SignatureOpenEvent, SliderComponent, SliderCustomMessagesComponent, SliderModule, SliderTicksComponent, SwitchBlurEvent, SwitchComponent, SwitchCustomMessagesComponent, SwitchFocusEvent, SwitchModule, TextAreaComponent, TextAreaDirective, TextAreaModule, TextAreaPrefixComponent, TextAreaSuffixComponent, TextBoxComponent, TextBoxCustomMessagesComponent, TextBoxDirective, TextBoxModule, TextBoxPrefixTemplateDirective, TextBoxSuffixTemplateDirective };
19721
20363