UNPKG

@progress/kendo-angular-inputs

Version:

Kendo UI for Angular Inputs Package - Everything you need to build professional form functionality (Checkbox, ColorGradient, ColorPalette, ColorPicker, FlatColorPicker, FormField, MaskedTextBox, NumericTextBox, RadioButton, RangeSlider, Slider, Switch, Te

160 lines (159 loc) 7.22 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { NgClass, NgIf, NgStyle } from '@angular/common'; import { Component, ElementRef, HostBinding, Input, ChangeDetectorRef } from '@angular/core'; import { ResizeSensorComponent, shouldShowValidationUI, getLicenseMessage, WatermarkOverlayComponent, isDocumentAvailable } from '@progress/kendo-angular-common'; import { calculateColumns, calculateGutters, DEFAULT_FORM_GUTTERS, generateColumnClass, generateGuttersStyling, innerWidth } from './utils'; import { FormService } from '../common/formservice.service'; import { validatePackage } from '@progress/kendo-licensing'; import { packageMetadata } from '../package-metadata'; import * as i0 from "@angular/core"; import * as i1 from "../common/formservice.service"; /** * Represents the Kendo UI Form component for Angular. * * @remarks * Supported children components are: {@link FormFieldComponent}, {@link FormSeparatorComponent}, and {@link FormFieldSetComponent}. */ export class FormComponent { element; cdr; formService; /** * Defines the orientation of the form. * * @default 'vertical' */ orientation = 'vertical'; /** * Defines the number of columns in the form. * Can be a number or an array of responsive breakpoints. */ cols; /** * Defines the gutters for the form. * You can specify gutters for rows and columns. */ gutters = { ...DEFAULT_FORM_GUTTERS }; /** * @hidden */ columnsClass = ''; /** * @hidden */ guttersStyle = ''; /** * @hidden */ showLicenseWatermark = false; /** * @hidden */ licenseMessage; get formClass() { return 'k-form k-form-md'; } get horizontalClass() { return this.orientation === 'horizontal'; } _formColumnsNumber; _formGutters = { ...DEFAULT_FORM_GUTTERS }; constructor(element, cdr, formService) { this.element = element; this.cdr = cdr; this.formService = formService; const isValid = validatePackage(packageMetadata); this.licenseMessage = getLicenseMessage(packageMetadata); this.showLicenseWatermark = shouldShowValidationUI(isValid); } ngAfterContentInit() { if (!isDocumentAvailable()) { return; } this.applyColumns(); this.applyGutters(); this.formService.formWidth.next(innerWidth(this.element.nativeElement)); } ngOnChanges(changes) { if (!isDocumentAvailable()) { return; } if (changes['cols']) { this.applyColumns(); } if (changes['gutters']) { this.applyGutters(); } } /** * @hidden */ onResize() { this.formService.formWidth.next(innerWidth(this.element.nativeElement)); const previousColumnsNumber = this._formColumnsNumber; const previousGutters = this._formGutters; this.applyColumns(); this.applyGutters(); if (previousColumnsNumber !== this._formColumnsNumber) { this.cdr.detectChanges(); } if (previousGutters?.cols !== this._formGutters?.cols || previousGutters?.rows !== this._formGutters?.rows) { this.cdr.detectChanges(); } } applyColumns() { const containerWidth = innerWidth(this.element.nativeElement); this._formColumnsNumber = calculateColumns(this.cols, containerWidth); this.updateColumnClasses(); } applyGutters() { const containerWidth = innerWidth(this.element.nativeElement); this._formGutters = calculateGutters(this.gutters, containerWidth); this.updateGutterClasses(); } updateColumnClasses() { this.columnsClass = generateColumnClass(this._formColumnsNumber); } updateGutterClasses() { this.guttersStyle = generateGuttersStyling(this._formGutters, { ...DEFAULT_FORM_GUTTERS }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FormService }], target: i0.ɵɵFactoryTarget.Component }); 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: ` <div class="k-form-layout k-d-grid" [ngClass]="[columnsClass]" [ngStyle]="{ gap: guttersStyle }"> <ng-content></ng-content> </div> <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor> <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div> `, 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"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormComponent, decorators: [{ type: Component, args: [{ exportAs: 'kendoForm', selector: 'form[kendoForm]', template: ` <div class="k-form-layout k-d-grid" [ngClass]="[columnsClass]" [ngStyle]="{ gap: guttersStyle }"> <ng-content></ng-content> </div> <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor> <div kendoWatermarkOverlay *ngIf="showLicenseWatermark" [licenseMessage]="licenseMessage"></div> `, standalone: true, imports: [NgClass, NgStyle, NgIf, ResizeSensorComponent, WatermarkOverlayComponent], }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FormService }]; }, propDecorators: { orientation: [{ type: Input }], cols: [{ type: Input }], gutters: [{ type: Input }], formClass: [{ type: HostBinding, args: ['class'] }], horizontalClass: [{ type: HostBinding, args: ['class.k-form-horizontal'] }] } });