UNPKG

@tangential/configurable-input-widgets

Version:

Input Widgets with persistable, dynamic configuration.

1 lines 129 kB
{"version":3,"file":"tangential-configurable-input-widgets.mjs","sources":["../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/configurable-input-ival.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/boolean/boolean-ival.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/configurable-input-type.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/boolean/boolean-type.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/date-time/date-time-ival.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/date-time/date-time-type.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/number/number-ival.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/number/number-type.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/duration/duration-type.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/text/text-ival.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/data-type/text/text-type.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/input-view-mode.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/input-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/checkbox/checkbox-widget-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/checkbox/checkbox-widget.template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/date-time-input/date-time-input-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/date-time-input/date-time-template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/duration-picker/duration-picker-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/duration-picker/duration-picker-template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/icon-rating-widget/icon-rating-widget-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/icon-rating-widget/icon-rating-widget.template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/number-input/number-input-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/number-input/number-template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/number-slider/number-slider-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/number-slider/number-slider-template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/number-spinner/number-spinner-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/number-spinner/number-spinner-template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/slide-toggle/slide-toggle-widget-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/slide-toggle/slide-toggle-widget.template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/text-input/text-input-config.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/widgets/text-input/text-template.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/input-types-registry.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/template-components/input-template-component/input-template.directive.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/template-components/input-template-component/input-template-container.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/choose-input-widget-dialog/choose-input-widget-dialog.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/choose-input-widget-dialog/choose-input-widget-dialog.html","../../../../projects/tangential/configurable-input-widgets/src/lib/support/edit-configurable-widget-component/edit-configurable-widget.component.ts","../../../../projects/tangential/configurable-input-widgets/src/lib/support/edit-configurable-widget-component/edit-configurable-widget.component.html","../../../../projects/tangential/configurable-input-widgets/src/lib/configurable-widget.module.ts","../../../../projects/tangential/configurable-input-widgets/src/public-api.ts","../../../../projects/tangential/configurable-input-widgets/src/tangential-configurable-input-widgets.ts"],"sourcesContent":["import {Jsonified, ObjectUtil} from '@tangential/core'\nimport {BaseMediaType, BaseMediaTypeJson} from '@tangential/media-types'\n\nexport interface ConfigurableInputIvalJson extends BaseMediaTypeJson {\n value?: any\n}\n\nconst Model: ConfigurableInputIvalJson = {\n value: null\n}\n\nexport class ConfigurableInputIval extends BaseMediaType implements Jsonified<ConfigurableInputIval, ConfigurableInputIvalJson>, ConfigurableInputIvalJson {\n static override $model: ConfigurableInputIvalJson = ObjectUtil.assignDeep({}, BaseMediaType.$model, Model)\n value: any\n\n constructor(config: any, key?: string) {\n super(config, key);\n }\n\n get uiValue(): string {\n return '' + this.value\n }\n\n set uiValue(val: string) {\n this.value = val\n }\n\n\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\nimport {ConfigurableInputIval, ConfigurableInputIvalJson} from '../configurable-input-ival'\n\nexport interface BooleanIvalIF extends ConfigurableInputIvalJson {\n value?: boolean\n}\n\nconst Model: BooleanIvalIF = {\n value: false\n}\n\nexport class BooleanIval extends ConfigurableInputIval implements Jsonified<BooleanIval, BooleanIvalIF>, BooleanIvalIF {\n static override $model: BooleanIvalIF = ObjectUtil.assignDeep({}, ConfigurableInputIval.$model, Model)\n override value: boolean\n\n\n constructor(cfg?: BooleanIvalIF, key?: string) {\n super(cfg, key)\n this.value = ( cfg.value === true )\n }\n\n}\n","import {Type} from '@angular/core'\nimport {Jsonified, ObjectUtil} from '@tangential/core'\nimport {StampedMediaType, StampedMediaTypeJson} from '@tangential/media-types'\nimport {ConfigurableInputIval} from './configurable-input-ival'\n\nexport interface ConfigurableInputTypeJson extends StampedMediaTypeJson {\n _inputTypeKey?: string\n defaultValue?: any\n}\n\n\nconst inputTypeRegistry = {}\n\nconst Model: ConfigurableInputTypeJson = {\n _inputTypeKey: null,\n defaultValue: null\n}\n\nexport abstract class ConfigurableInputType extends StampedMediaType implements Jsonified<ConfigurableInputType, ConfigurableInputTypeJson>, ConfigurableInputTypeJson {\n static override $model: ConfigurableInputTypeJson = ObjectUtil.assignDeep({}, StampedMediaType.$model, Model)\n\n static TYPE_NAME: string\n defaultValue?: any\n _inputTypeKey?: string\n\n constructor(config: any, key?: string) {\n super(config, key)\n this._inputTypeKey = this.getInputTypeKey()\n }\n\n abstract getInputTypeKey(): string\n\n abstract isNumeric(): boolean\n\n abstract createValue(valueConfig?: any, key?: string): ConfigurableInputIval\n\n static register<T extends ConfigurableInputType>(inputTypeCtor: Type<T>) {\n inputTypeRegistry[inputTypeCtor['TYPE_NAME']] = inputTypeCtor\n }\n\n static create(typeConfig: ConfigurableInputTypeJson, key?: string, inputTypeKey?: string) {\n typeConfig = typeConfig || {}\n key = key || typeConfig.$key\n inputTypeKey = inputTypeKey || typeConfig._inputTypeKey\n return new inputTypeRegistry[inputTypeKey](typeConfig, key)\n }\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\nimport {ConfigurableInputType, ConfigurableInputTypeJson} from '../configurable-input-type'\n\nimport {BooleanIval, BooleanIvalIF} from './boolean-ival'\n\nexport interface BooleanTypeIF extends ConfigurableInputTypeJson {\n defaultValue?: boolean\n}\n\nconst Model: BooleanTypeIF = {\n defaultValue: false\n}\n\nexport class BooleanType extends ConfigurableInputType implements Jsonified<BooleanType, BooleanTypeIF>, BooleanTypeIF {\n static override $model: BooleanTypeIF = ObjectUtil.assignDeep({}, ConfigurableInputType.$model, Model)\n\n static override TYPE_NAME = 'Boolean'\n override defaultValue?: boolean\n\n\n constructor(config?: BooleanTypeIF, key?: string) {\n super(config || {}, key)\n }\n\n getInputTypeKey(): string {\n return BooleanType.TYPE_NAME\n }\n\n isNumeric(): boolean {\n return false\n }\n\n createValue(cfg?: BooleanIvalIF, key?: string): BooleanIval {\n cfg = cfg || <any>{}\n return new BooleanIval({\n value: (cfg.value === true || cfg.value === false) ? cfg.value : this.defaultValue\n }, key || this.$key);\n }\n\n}\n\nConfigurableInputType.register(BooleanType)\n","import {Jsonified, ObjectUtil} from '@tangential/core'\n\nimport moment from 'moment'\nimport {ConfigurableInputIval, ConfigurableInputIvalJson} from '../configurable-input-ival'\n\nconst BROWSER_DATE_TIME_LOCAL_FORMAT = 'YYYY-MM-DDTHH:mm'\n\nexport interface DateTimeIvalIF extends ConfigurableInputIvalJson {\n value?: number\n recordedInTimeZone?: string\n}\n\nconst Model: DateTimeIvalIF = {\n value: 0,\n recordedInTimeZone: 'GMT'\n}\n\nexport class DateTimeIval extends ConfigurableInputIval implements Jsonified<DateTimeIval, DateTimeIvalIF>, DateTimeIvalIF {\n static override $model: DateTimeIvalIF = ObjectUtil.assignDeep({}, ConfigurableInputIval.$model, Model)\n\n\n override value: number\n recordedInTimeZone: string\n\n constructor(config?: DateTimeIvalIF, key?: string) {\n super(config, key)\n this.value = config.value || 0\n }\n\n override get uiValue(): string {\n return moment(this.value).format(BROWSER_DATE_TIME_LOCAL_FORMAT)\n }\n\n override set uiValue(val: string) {\n this.value = moment(val, BROWSER_DATE_TIME_LOCAL_FORMAT).valueOf()\n }\n\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\n\n\nimport moment from 'moment'\nimport {ConfigurableInputType, ConfigurableInputTypeJson} from '../configurable-input-type'\nimport {DateTimeIval, DateTimeIvalIF} from './date-time-ival'\n\nconst BROWSER_DATE_TIME_LOCAL_FORMAT = 'YYYY-MM-DDTHH:mm:ss'\n\nexport interface DateTimeTypeIF extends ConfigurableInputTypeJson {\n afterMils?: number\n beforeMils?: number\n defaultValue?: number\n defaultToNow?: boolean\n}\n\nconst Model: DateTimeTypeIF = {\n afterMils: null,\n beforeMils: null,\n defaultValue: null,\n defaultToNow: true\n}\n\nexport class DateTimeType extends ConfigurableInputType implements Jsonified<DateTimeType, DateTimeTypeIF>, DateTimeTypeIF {\n static override $model: DateTimeTypeIF = ObjectUtil.assignDeep({}, ConfigurableInputType.$model, Model)\n static override TYPE_NAME = 'DateTime'\n afterMils?: number\n beforeMils?: number\n override defaultValue?: number\n defaultToNow?: boolean\n\n constructor(config?: DateTimeTypeIF, key?: string) {\n super(config || {}, key)\n }\n\n getInputTypeKey(): string {\n return DateTimeType.TYPE_NAME\n }\n\n get uiValue(): string {\n return moment(this.defaultValue).format(BROWSER_DATE_TIME_LOCAL_FORMAT)\n }\n\n set uiValue(val: string) {\n this.defaultValue = moment(val, BROWSER_DATE_TIME_LOCAL_FORMAT).valueOf()\n }\n\n isNumeric(): boolean {\n return false\n }\n\n createValue(cfg?: DateTimeIvalIF, key?: string): DateTimeIval {\n cfg = cfg || <any>{}\n return new DateTimeIval({\n value: cfg.value || this.getDefaultValue(),\n recordedInTimeZone: cfg.recordedInTimeZone || 'GMT'\n }, key || this.$key);\n }\n\n getDefaultValue(): number {\n return this.defaultToNow ? Date.now() : this.defaultValue\n }\n\n\n}\n\nConfigurableInputType.register(DateTimeType)\n","import {Jsonified, ObjectUtil} from '@tangential/core'\nimport {ConfigurableInputIval, ConfigurableInputIvalJson} from '../configurable-input-ival'\n\n\nexport interface NumberIvalIF extends ConfigurableInputIvalJson {\n value?: number\n}\n\nconst Model: NumberIvalIF = {\n value: 0\n}\n\nexport class NumberIval extends ConfigurableInputIval implements Jsonified<NumberIval, NumberIvalIF>, NumberIvalIF {\n static override $model: NumberIvalIF = ObjectUtil.assignDeep({}, ConfigurableInputIval.$model, Model)\n override value: number\n\n\n constructor(config?: NumberIvalIF, key?: string) {\n super(config = config || {}, key)\n this.value = config.value || 0\n }\n\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\n\nimport {ConfigurableInputType, ConfigurableInputTypeJson} from '../configurable-input-type'\nimport {NumberIval, NumberIvalIF} from './number-ival'\n\nexport interface NumberTypeIF extends ConfigurableInputTypeJson {\n min?: number\n max?: number\n step?: number\n decimalPlaces?: number\n defaultValue?: number\n}\n\nconst Model: NumberTypeIF = {\n min: 0,\n max: 100,\n step: 1,\n decimalPlaces: 1,\n defaultValue: 50\n}\n\nexport class NumberType extends ConfigurableInputType implements Jsonified<NumberType, NumberTypeIF>, NumberTypeIF {\n static override $model: NumberTypeIF = ObjectUtil.assignDeep({}, ConfigurableInputType.$model, Model)\n\n\n static override TYPE_NAME = 'Number'\n min?: number\n max?: number\n step?: number\n decimalPlaces?: number\n override defaultValue?: number\n\n\n constructor(config?: NumberTypeIF, key?: string) {\n super(config || {}, key)\n }\n\n getInputTypeKey(): string {\n return NumberType.TYPE_NAME\n }\n\n isNumeric(): boolean {\n return true\n }\n\n createValue(cfg?: NumberIvalIF, key?: string): NumberIval {\n cfg = cfg || <any>{}\n return new NumberIval({\n value: isNumeric(cfg.value) ? cfg.value : this.defaultValue\n }, key || this.$key);\n }\n}\n\n// Was once exposed. Alas. Thanks to https://github.com/angular/angular/blob/4.3.x/packages/common/src/pipes/number_pipe.ts#L172\nexport function isNumeric(value: any): boolean {\n return !isNaN(value - parseFloat(value));\n}\n\nConfigurableInputType.register(NumberType)\n","import {Jsonified, ObjectUtil} from '@tangential/core'\n\nimport {isNumeric, NumberType, NumberTypeIF, NumberIval, NumberIvalIF} from '../number'\nimport {ConfigurableInputType} from '../configurable-input-type'\n\nexport interface DurationTypeJson extends NumberTypeIF {\n min?: number\n max?: number\n step?: number\n decimalPlaces?: number\n defaultValue?: number\n}\n\nconst Model: DurationTypeJson = {\n max: null,\n step: 1000,\n decimalPlaces: 0,\n defaultValue: 0\n}\n\nexport class DurationType extends NumberType implements Jsonified<DurationType, DurationTypeJson>, NumberTypeIF {\n static override $model: NumberTypeIF = ObjectUtil.assignDeep({}, ConfigurableInputType.$model, Model)\n\n static override TYPE_NAME = 'Duration'\n override max?: number\n override step?: number\n override decimalPlaces?: number\n override defaultValue?: number\n\n constructor(config?: DurationTypeJson, key?: string) {\n super(config || {}, key)\n }\n\n override getInputTypeKey(): string {\n return DurationType.TYPE_NAME\n }\n\n\n override createValue(cfg?: NumberIvalIF, key?: string): NumberIval {\n cfg = cfg || <any>{}\n return new NumberIval({\n value: isNumeric(cfg.value) ? cfg.value : this.defaultValue\n }, key || this.$key);\n }\n}\n\nConfigurableInputType.register(DurationType)\n","import {Jsonified, ObjectUtil} from '@tangential/core'\nimport {ConfigurableInputIval, ConfigurableInputIvalJson} from '../configurable-input-ival'\n\n\nexport interface TextIvalIF extends ConfigurableInputIvalJson {\n value?: string\n}\n\nconst Model: TextIvalIF = {\n value: ''\n}\n\nexport class TextIval extends ConfigurableInputIval implements Jsonified<TextIval, TextIvalIF>, TextIvalIF {\n static override $model: TextIvalIF = ObjectUtil.assignDeep({}, ConfigurableInputIval.$model, Model)\n\n override value: string\n\n constructor(config?: TextIvalIF, key?: string) {\n super(config, key)\n this.value = config.value || ''\n }\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\nimport {ConfigurableInputType, ConfigurableInputTypeJson} from '../configurable-input-type'\nimport {TextIval, TextIvalIF} from './text-ival'\n\n\nexport interface TextTypeIF extends ConfigurableInputTypeJson {\n maxLength?: number\n minLength?: number\n defaultValue?: string\n}\n\n/**\n * == Reporting\n * Text types can represent things like:\n * * Quick notes, such as idea, or a Capture for 'I met a new person', and the persons name is the value.\n * * Mood / Feeling\n * * Name of a food eaten\n * * Name of a place visited.\n * * Name of a medication taken.\n *\n *\n * === Charts/Graphs\n * A text value is hard to plot in isolation. But consider the case of 'met a person'. In this case we could\n * plot time on the horizontal axis and number of people met per range. This would become a stacked bar chart?\n *\n * For something like mood, let's consider two cases:\n * 1) The capture is 'When' and 'Mood'. In this case we can have an arbitrary number of points in a day,\n * and the user is probably going to want to correlate this value to time of day.\n * - Go with a scatter plot, with days of the week on the X and hour of day on the Y, with the field as the point\n * label.\n * 2) The capture is 'When', 'Feeling<text>', 'Weight<numeric>'.\n *\n */\n\n\nconst Model: TextTypeIF = {\n maxLength: 50,\n minLength: 0,\n defaultValue: null\n}\n\nexport class TextType extends ConfigurableInputType implements Jsonified<TextType, TextTypeIF>, TextTypeIF {\n static override $model: TextTypeIF = ObjectUtil.assignDeep({}, ConfigurableInputType.$model, Model)\n\n static override TYPE_NAME = 'Text'\n maxLength: number\n minLength: number\n override defaultValue: string\n\n constructor(config?: TextTypeIF) {\n super(config || {})\n }\n\n getInputTypeKey(): string {\n return TextType.TYPE_NAME\n }\n\n isNumeric(): boolean {\n return false\n }\n\n createValue(cfg?: TextIvalIF, key?: string): any {\n cfg = cfg || <any>{}\n return new TextIval({\n value: cfg.value || this.defaultValue\n }, key || this.$key);\n }\n\n}\n\nConfigurableInputType.register(TextType)\n","export type InputViewMode = 'CONFIGURE' | 'EDIT' | 'VIEW' | 'PREVIEW';\n\n\nexport const InputViewModes = {\n CONFIGURE: <InputViewMode>'CONFIGURE',\n EDIT: <InputViewMode>'EDIT',\n PREVIEW: <InputViewMode>'PREVIEW',\n VIEW: <InputViewMode>'VIEW',\n}\n","import {Type} from '@angular/core'\nimport {\n Jsonified,\n ObjectUtil\n} from '@tangential/core'\nimport {\n StampedMediaType,\n StampedMediaTypeJson\n} from '@tangential/media-types'\nimport {\n ConfigurableInputType,\n ConfigurableInputTypeJson\n} from './data-type/configurable-input-type'\n\n\nexport interface InputConfigJson extends StampedMediaTypeJson {\n $isSystem?: boolean\n _inputName?: string\n orderIndex?: number\n disabled?: boolean\n label?: string\n typeConfig?: ConfigurableInputTypeJson\n}\n\nconst Model: InputConfigJson = {\n $isSystem: false,\n _inputName: null,\n orderIndex: null,\n disabled: false,\n label: 'Label for this value',\n typeConfig: null\n}\n\nconst inputConfigRegistry = {}\n\nexport abstract class InputConfig extends StampedMediaType implements Jsonified<InputConfig, InputConfigJson>, InputConfigJson {\n static override $model: InputConfigJson = ObjectUtil.assignDeep({}, StampedMediaType.$model, Model)\n\n static INPUT_NAME: string\n $isSystem: boolean\n _inputName: string\n orderIndex?: number\n disabled?: boolean\n label: string\n typeConfig?: ConfigurableInputType\n\n constructor(_inputName: string, config: InputConfigJson, key?: string) {\n super(config, key)\n this._inputName = _inputName\n this.typeConfig = ConfigurableInputType.create(this.typeConfig)\n if (this.$key === 'when') {\n this.$isSystem = true\n }\n }\n\n abstract getDemoInstance()\n\n static register<T extends InputConfig>(inputConfigCtor: Type<T>) {\n inputConfigRegistry[inputConfigCtor['INPUT_NAME']] = inputConfigCtor\n }\n\n static create(config: InputConfigJson, key?: string, inputName?: string) {\n key = key || (config ? config.$key : null)\n inputName = inputName || (config ? config._inputName : null)\n return new inputConfigRegistry[inputName](config, key)\n }\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {BooleanType, BooleanTypeIF} from '../../data-type/boolean/boolean-type'\nimport {InputConfig, InputConfigJson} from '../../input-config'\n\n\nexport interface CheckboxConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after'\n typeConfig?: BooleanTypeIF\n}\n\nconst Model: CheckboxConfigIF = {\n label: 'Checkbox',\n labelPosition: 'before',\n disabled: false,\n typeConfig: {\n _inputTypeKey: BooleanType.TYPE_NAME,\n defaultValue: false\n }\n}\n\n\nconst demoConfig: CheckboxConfigIF = ObjectUtil.assignDeep({}, Model, {\n label: 'Checkbox',\n labelPosition: 'before',\n typeConfig: <BooleanTypeIF>{}\n})\n\nexport class CheckboxWidgetConfig extends InputConfig implements Jsonified<CheckboxWidgetConfig, CheckboxConfigIF>, CheckboxConfigIF {\n static override $model: CheckboxConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n static override INPUT_NAME = 'Checkbox'\n labelPosition: 'before' | 'after'\n override disabled: boolean\n override typeConfig: BooleanType\n\n constructor(config?: CheckboxConfigIF, key?: string) {\n super(CheckboxWidgetConfig.INPUT_NAME, config, key)\n this.typeConfig = new BooleanType(this.typeConfig)\n }\n\n getDemoInstance(): InputConfigJson {\n return new CheckboxWidgetConfig(demoConfig)\n }\n\n\n}\nInputConfig.register(CheckboxWidgetConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {BooleanIval} from '../../data-type/boolean/boolean-ival'\nimport {\n InputViewMode,\n InputViewModes\n} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {CheckboxWidgetConfig} from './checkbox-widget-config'\n\n\n@Component({\n selector: 'tanj-checkbox-widget-template',\n template: `\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-checkbox-widget\n [labelPosition]=\"config.labelPosition\"\n [disabled]=\" mode == viewModes.PREVIEW || config.disabled\"\n [(value)]=\"ival.value\"\n [label]=\"config.label\"\n [defaultValue]=\"config.typeConfig.defaultValue\">\n </tanj-checkbox-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-checkbox-widget-configure\n [labelPosition]=\"config.labelPosition\"\n [disabled]=\"config.disabled\"\n [(value)]=\"ival.value\"\n [(label)]=\"config.label\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\">\n </tanj-checkbox-widget-configure>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class CheckboxWidgetTemplateComponent implements OnInit, InputTemplateIF {\n\n @HostBinding('attr.flex') flex = '';\n @HostBinding('attr.layout') flexLayout = 'column';\n @HostBinding('attr.layout-align') flexLayoutAlign = 'start';\n\n /* Support for dynamic use. */\n @Input() config: CheckboxWidgetConfig\n /* Support for dynamic use. */\n @Input() ival: BooleanIval\n\n @Input() mode = <InputViewMode> InputViewModes.VIEW\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {\n }\n\n ngOnInit() {\n Hacks.materialDesignPlaceholderText(this.changeDetectorRef)\n }\n\n}\n","import {\n Jsonified,\n ObjectUtil\n} from '@tangential/core'\nimport moment from 'moment'\n//noinspection ES6PreferShortImport\nimport {\n DateTimeType,\n DateTimeTypeIF\n} from '../../data-type/date-time/date-time-type'\n//noinspection ES6PreferShortImport\nimport {NumberType} from '../../data-type/number/number-type'\nimport {\n InputConfig,\n InputConfigJson\n} from '../../input-config'\n\n\nexport interface DateTimeInputConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after'\n disabled?: boolean\n format?: string\n typeConfig?: DateTimeTypeIF\n}\n\nconst Model: DateTimeInputConfigIF = {\n label: 'Date & Time',\n labelPosition: 'before',\n disabled: false,\n format: 'YYYY-MM-dd HH:mm:ss',\n\n typeConfig: <DateTimeTypeIF>{\n _inputTypeKey: NumberType.TYPE_NAME,\n defaultToNow: true,\n beforeMils: null,\n afterMils: null,\n defaultValue: moment().startOf('hour').valueOf()\n }\n}\n\n\nconst demoConfig: DateTimeInputConfigIF = Object.assign({}, Model)\nconsole.log('Loading DateTimeInputConfig', '')\nexport class DateTimeInputConfig extends InputConfig\n implements Jsonified<DateTimeInputConfig, DateTimeInputConfigIF>, DateTimeInputConfigIF {\n static override $model: DateTimeInputConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n\n static override INPUT_NAME = 'DateTimeInput'\n labelPosition: 'before' | 'after'\n override disabled: boolean\n override typeConfig: DateTimeType\n\n\n constructor(config?: DateTimeInputConfigIF, key?: string) {\n super(DateTimeInputConfig.INPUT_NAME, config || {}, key)\n this.typeConfig = new DateTimeType(this.typeConfig)\n }\n\n getDemoInstance(): InputConfigJson {\n return new DateTimeInputConfig(demoConfig)\n }\n\n\n}\n\nInputConfig.register(DateTimeInputConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {DateTimeIval} from '../../data-type/date-time/date-time-ival'\nimport {\n InputViewMode,\n InputViewModes\n} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {DateTimeInputConfig} from './date-time-input-config'\n@Component({\n template: `<!-- -->\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-date-time-widget [labelPosition]=\"config.labelPosition\"\n [disabled]=\"mode === viewModes.PREVIEW || config.disabled\"\n [label]=\"config.label\"\n [(value)]=\"ival.value\"\n [defaultToNow]=\"config.typeConfig.defaultToNow\"\n [defaultValue]=\"config.typeConfig.defaultValue\">\n\n </tanj-date-time-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-date-time-configure\n [labelPosition]=\"config.labelPosition\"\n [(label)]=\"config.label\"\n [(value)]=\"ival.value\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\"\n [(defaultToNow)]=\"config.typeConfig.defaultToNow\">\n </tanj-date-time-configure>\n </ng-container>\n\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class DateTimeTemplateComponent implements OnInit, InputTemplateIF {\n\n @Input() config: DateTimeInputConfig\n @Input() ival: DateTimeIval\n @Input() mode = <InputViewMode>null\n\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {\n\n }\n\n ngOnInit(): void {\n Hacks.materialDesignPlaceholderText(this.changeDetectorRef)\n }\n\n}\n","import {\n Jsonified,\n ObjectUtil\n} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {\n DurationType,\n DurationTypeJson\n} from '../../data-type/duration/duration-type'\nimport {\n InputConfig,\n InputConfigJson\n} from '../../input-config'\n\nexport interface DurationFieldShowingState {\n day?: boolean\n h?: boolean\n min?: boolean\n s?: boolean\n ms?: boolean\n}\n\nexport interface DurationPickerConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after' | 'below'\n showDurationFields?: DurationFieldShowingState\n typeConfig?: DurationTypeJson,\n}\n\nconst Model: DurationPickerConfigIF = {\n label: 'Duration',\n labelPosition: 'before',\n showDurationFields: null,\n typeConfig: <DurationTypeJson>{\n _inputTypeKey: DurationType.TYPE_NAME,\n defaultValue: 0\n }\n}\n\nconst demoConfig: DurationPickerConfigIF = Object.assign({}, Model)\n\nexport class DurationPickerConfig extends InputConfig\n implements Jsonified<DurationPickerConfig, DurationPickerConfigIF>, DurationPickerConfigIF {\n static override $model: DurationPickerConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n\n static override INPUT_NAME = 'DurationPickerConfig'\n labelPosition: 'before' | 'after' | 'below' = 'before'\n override disabled: boolean\n showDurationFields?: DurationFieldShowingState\n override typeConfig: DurationType\n\n constructor(config?: DurationPickerConfigIF, key?: string) {\n super(DurationPickerConfig.INPUT_NAME, config || {}, key)\n this.typeConfig = new DurationType(this.typeConfig)\n if (!this.showDurationFields) {\n this.showDurationFields = {\n min: true,\n s: true,\n ms: true\n }\n }\n }\n\n getDemoInstance(): InputConfigJson {\n return new DurationPickerConfig(demoConfig)\n }\n\n}\n\nInputConfig.register(DurationPickerConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberIval} from '../../data-type/number/number-ival'\nimport {\n InputViewMode,\n InputViewModes\n} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {DurationPickerConfig} from './duration-picker-config'\n\n\n@Component({\n template: `<!-- -->\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-duration-picker-widget\n [(value)]=\"ival.value\"\n [labelPosition]=\"config.labelPosition\"\n [disabled]=\"mode === viewModes.PREVIEW || config.disabled\"\n [label]=\"config.label\"\n [showDays]=\"config?.showDurationFields.day\"\n [showHours]=\"config?.showDurationFields.h\"\n [showMinutes]=\"config?.showDurationFields.min\"\n [showSeconds]=\"config?.showDurationFields.s\"\n [showMilliseconds]=\"config?.showDurationFields.ms\"\n [max]=\"config.typeConfig.max\">\n\n </tanj-duration-picker-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-duration-picker-widget-configure\n [labelPosition]=\"config.labelPosition\"\n [(label)]=\"config.label\"\n [(value)]=\"ival.value\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\"\n [(showDays)]=\"config?.showDurationFields.day\"\n [(showHours)]=\"config?.showDurationFields.h\"\n [(showMinutes)]=\"config?.showDurationFields.min\"\n [(showSeconds)]=\"config?.showDurationFields.s\"\n [(showMilliseconds)]=\"config?.showDurationFields.ms\"\n [(max)]=\"config.typeConfig.max\">\n\n </tanj-duration-picker-widget-configure>\n </ng-container>\n\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class DurationPickerTemplateComponent implements OnInit, InputTemplateIF {\n\n @Input() config: DurationPickerConfig\n @Input() ival: NumberIval\n @Input() mode = <InputViewMode>null\n\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {\n\n }\n\n ngOnInit(): void {\n Hacks.materialDesignPlaceholderText(this.changeDetectorRef)\n }\n\n}\n","import {ObjectUtil} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberType, NumberTypeIF} from '../../data-type/number/number-type'\nimport {InputConfig, InputConfigJson} from '../../input-config'\n\n\nexport interface IconRatingWidgetConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after' | 'below'\n disabled?: boolean\n typeConfig?: NumberTypeIF\n iconCount?: number\n iconFont?: string\n offIconNames?: string[]\n onIconNames?: string[]\n}\nconst defaultIconCount = 5\nconst Model: IconRatingWidgetConfigIF = {\n label: 'Rating',\n labelPosition: 'below',\n iconFont: 'material-icons',\n offIconNames: [\n 'star_border'\n ],\n onIconNames: [\n 'star'\n ],\n disabled: false,\n typeConfig: <NumberTypeIF>{\n _inputTypeKey: NumberType.TYPE_NAME,\n defaultValue: defaultIconCount - 1,\n min: 0,\n max: defaultIconCount,\n step: 1,\n decimalPlaces: 0,\n }\n}\n\nconst demoConfig: IconRatingWidgetConfigIF = Object.assign({}, Model)\n\nexport class IconRatingWidgetConfig extends InputConfig implements IconRatingWidgetConfigIF {\n static override $model: IconRatingWidgetConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n static override INPUT_NAME = 'IconRatingWidget'\n labelPosition: 'before' | 'after' | 'below'\n override disabled: boolean\n override typeConfig: NumberType\n iconCount?: number\n iconFont?: string\n offIconNames?: string[]\n onIconNames?: string[]\n\n constructor(config?: IconRatingWidgetConfigIF, key?: string) {\n super(IconRatingWidgetConfig.INPUT_NAME, config || {}, key)\n this.typeConfig = new NumberType(this.typeConfig)\n if (this.typeConfig.max > 10) {\n this.typeConfig.max = 10\n }\n }\n\n getDemoInstance(): InputConfigJson {\n return new IconRatingWidgetConfig(demoConfig)\n }\n\n}\n\nInputConfig.register(IconRatingWidgetConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberIval} from '../../data-type/number/number-ival'\nimport {InputViewMode, InputViewModes} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {IconRatingWidgetConfig} from './icon-rating-widget-config'\n\n\n@Component({\n selector: 'tanj-icon-rating-widget-template',\n template: `\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-icon-rating-widget\n [labelPosition]=\"config.labelPosition\"\n [disabled]=\" mode == viewModes.PREVIEW || config.disabled\"\n [(value)]=\"ival.value\"\n [label]=\"config.label\"\n [defaultValue]=\"config.typeConfig.defaultValue\"\n [max]=\"config.typeConfig.max\"\n [iconFont]=\"config.iconFont\"\n [offIconNames]=\"config.offIconNames\"\n [onIconNames]=\"config.onIconNames\">\n </tanj-icon-rating-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-icon-rating-widget-configure\n [labelPosition]=\"config.labelPosition\"\n [disabled]=\"config.disabled\"\n [(value)]=\"ival.value\"\n [(label)]=\"config.label\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\"\n [(max)]=\"config.typeConfig.max\"\n [(iconFont)]=\"config.iconFont\"\n [(offIconNames)]=\"config.offIconNames\"\n [(onIconNames)]=\"config.onIconNames\">\n </tanj-icon-rating-widget-configure>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class IconRatingWidgetTemplateComponent implements OnInit, InputTemplateIF {\n\n @HostBinding('attr.flex') flex = '';\n @HostBinding('attr.layout') flexLayout = 'column';\n @HostBinding('attr.layout-align') flexLayoutAlign = 'start';\n\n /* Support for dynamic use. */\n @Input() config: IconRatingWidgetConfig\n /* Support for dynamic use. */\n @Input() ival: NumberIval\n\n @Input() mode = <InputViewMode> InputViewModes.VIEW\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {\n }\n\n\n ngOnInit() {\n Hacks.materialDesignPlaceholderText(this.changeDetectorRef)\n }\n\n\n emitChangeEvent() {\n this.change.emit()\n }\n\n}\n","import {ObjectUtil} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberType, NumberTypeIF} from '../../data-type/number/number-type'\nimport {InputConfig, InputConfigJson} from '../../input-config'\n\n\nexport interface NumberInputConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after'\n disabled?: boolean\n typeConfig?: NumberTypeIF\n}\n\nconst Model: NumberInputConfigIF = {\n label: 'Number',\n labelPosition: 'before',\n disabled: false,\n typeConfig: <NumberTypeIF>{\n _inputTypeKey: NumberType.TYPE_NAME,\n defaultValue: 0\n }\n}\n\nconst demoConfig: NumberInputConfigIF = Object.assign({}, Model)\n\nexport class NumberInputConfig extends InputConfig implements NumberInputConfigIF {\n static override $model: NumberInputConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n\n static override INPUT_NAME = 'NumberInput'\n labelPosition: 'before' | 'after'\n override disabled: boolean\n override typeConfig: NumberType\n\n constructor(config?: NumberInputConfigIF, key?: string) {\n super(NumberInputConfig.INPUT_NAME, config || {}, key)\n this.typeConfig = new NumberType(this.typeConfig)\n }\n\n getDemoInstance(): InputConfigJson {\n return new NumberInputConfig(demoConfig)\n }\n\n}\n\nInputConfig.register(NumberInputConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberIval} from '../../data-type/number/number-ival'\nimport {\n InputViewMode,\n InputViewModes\n} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {NumberInputConfig} from './number-input-config'\n@Component({\n template: `<!-- -->\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-number-widget [labelPosition]=\"config.labelPosition\"\n [disabled]=\"mode === viewModes.PREVIEW || config.disabled\"\n [label]=\"config.label\"\n [(value)]=\"ival.value\"\n [max]=\"config.typeConfig.max\"\n [min]=\"config.typeConfig.min\"\n [decimalPlaces]=\"config.typeConfig.decimalPlaces\"\n [step]=\"config.typeConfig.step\">\n\n </tanj-number-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-number-configure\n [labelPosition]=\"config.labelPosition\"\n [(label)]=\"config.label\"\n [(value)]=\"ival.value\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\"\n [(max)]=\"config.typeConfig.max\"\n [(min)]=\"config.typeConfig.min\"\n [(decimalPlaces)]=\"config.typeConfig.decimalPlaces\"\n [(step)]=\"config.typeConfig.step\">\n\n </tanj-number-configure>\n </ng-container>\n\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class NumberTemplateComponent implements OnInit, InputTemplateIF {\n\n @Input() config: NumberInputConfig\n @Input() ival: NumberIval\n @Input() mode = <InputViewMode>null\n\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n\n constructor(private _changeDetector: ChangeDetectorRef) {\n\n }\n\n ngOnInit(): void {\n Hacks.materialDesignPlaceholderText(this._changeDetector)\n }\n\n\n}\n","import {ObjectUtil} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberType, NumberTypeIF} from '../../data-type/number/number-type'\nimport {InputConfig, InputConfigJson} from '../../input-config'\n\n\nexport interface NumberSliderConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after' | 'below'\n disabled?: boolean\n typeConfig?: NumberTypeIF\n}\n\nconst Model: NumberSliderConfigIF = {\n label: 'Number Slider',\n labelPosition: 'below',\n disabled: false,\n typeConfig: <NumberTypeIF>{\n _inputTypeKey: NumberType.TYPE_NAME,\n defaultValue: 0\n }\n}\n\nconst demoConfig: NumberSliderConfigIF = Object.assign({}, Model)\n\nexport class NumberSliderConfig extends InputConfig implements NumberSliderConfigIF {\n static override $model: NumberSliderConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n\n static override INPUT_NAME = 'NumberSlider'\n labelPosition: 'before' | 'after' | 'below'\n override disabled: boolean\n override typeConfig: NumberType\n\n constructor(config?: NumberSliderConfigIF, key?: string) {\n super(NumberSliderConfig.INPUT_NAME, config || {}, key)\n this.typeConfig = new NumberType(this.typeConfig)\n }\n\n getDemoInstance(): InputConfigJson {\n return new NumberSliderConfig(demoConfig)\n }\n\n}\n\nInputConfig.register(NumberSliderConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberIval} from '../../data-type/number/number-ival'\nimport {\n InputViewMode,\n InputViewModes\n} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {NumberSliderConfig} from './number-slider-config'\n@Component({\n template: `<!-- -->\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-number-slider-widget [labelPosition]=\"config.labelPosition\"\n [disabled]=\"mode === viewModes.PREVIEW || config.disabled\"\n [label]=\"config.label\"\n [(value)]=\"ival.value\"\n [max]=\"config.typeConfig.max\"\n [min]=\"config.typeConfig.min\"\n [decimalPlaces]=\"config.typeConfig.decimalPlaces\"\n [step]=\"config.typeConfig.step\">\n\n </tanj-number-slider-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-number-slider-configure\n [labelPosition]=\"config.labelPosition\"\n [(label)]=\"config.label\"\n [(value)]=\"ival.value\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\"\n [(max)]=\"config.typeConfig.max\"\n [(min)]=\"config.typeConfig.min\"\n [(decimalPlaces)]=\"config.typeConfig.decimalPlaces\"\n [(step)]=\"config.typeConfig.step\">\n\n </tanj-number-slider-configure>\n </ng-container>\n\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class NumberSliderTemplateComponent implements OnInit, InputTemplateIF {\n\n @Input() config: NumberSliderConfig\n @Input() ival: NumberIval\n @Input() mode = <InputViewMode>null\n\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n\n constructor(private _changeDetector: ChangeDetectorRef) {\n\n }\n\n ngOnInit(): void {\n Hacks.materialDesignPlaceholderText(this._changeDetector)\n }\n\n}\n","import {ObjectUtil} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {NumberType, NumberTypeIF} from '../../data-type/number/number-type'\nimport {InputConfig, InputConfigJson} from '../../input-config'\n\n\nexport interface NumberSpinnerConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after' | 'below'\n disabled?: boolean\n typeConfig?: NumberTypeIF\n}\n\nconst Model: NumberSpinnerConfigIF = {\n label: 'Number Spinner',\n labelPosition: 'before',\n disabled: false,\n typeConfig: <NumberTypeIF>{\n _inputTypeKey: NumberType.TYPE_NAME,\n defaultValue: 0\n }\n}\n\nconst demoConfig: NumberSpinnerConfigIF = Object.assign({}, Model, {\n label: 'Number Spinner'\n})\n\nexport class NumberSpinnerConfig extends InputConfig implements NumberSpinnerConfigIF {\n static override $model: NumberSpinnerConfigIF = ObjectUtil.assignDeep({}, InputConfig.$model, Model)\n\n static override INPUT_NAME = 'NumberSpinner'\n labelPosition: 'before' | 'after' | 'below'\n override disabled: boolean\n override typeConfig: NumberType\n\n constructor(config?: NumberSpinnerConfigIF, key?: string) {\n super(NumberSpinnerConfig.INPUT_NAME, config || {}, key)\n this.typeConfig = new NumberType(super.typeConfig)\n }\n\n getDemoInstance(): InputConfigJson {\n return new NumberSpinnerConfig(demoConfig)\n }\n\n}\n\nInputConfig.register(NumberSpinnerConfig)\n","import {\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewEncapsulation\n} from '@angular/core'\nimport {Hacks} from '@tangential/core'\nimport {NumberType} from '../../data-type'\n//noinspection ES6PreferShortImport\nimport {NumberIval} from '../../data-type/number/number-ival'\nimport {\n InputViewMode,\n InputViewModes\n} from '../../support/input-view-mode'\n//noinspection ES6PreferShortImport\nimport {InputTemplateIF} from '../../support/template-components/input-template-component/input-template.component'\nimport {NumberSpinnerConfig} from './number-spinner-config'\n@Component({\n template: `<!-- -->\n <ng-container *ngIf=\"mode == viewModes.VIEW || mode == viewModes.PREVIEW || mode == viewModes.EDIT \">\n <tanj-number-spinner-widget [labelPosition]=\"config.labelPosition\"\n [disabled]=\"mode === viewModes.PREVIEW || config.disabled\"\n [label]=\"config.label\"\n [(value)]=\"ival.value\"\n [max]=\"config.typeConfig.max\"\n [min]=\"config.typeConfig.min\"\n [step]=\"config.typeConfig.step\">\n\n </tanj-number-spinner-widget>\n </ng-container>\n <ng-container *ngIf=\"mode == viewModes.CONFIGURE\">\n <tanj-number-spinner-configure\n [labelPosition]=\"config.labelPosition\"\n [(label)]=\"config.label\"\n [(value)]=\"ival.value\"\n [(defaultValue)]=\"config.typeConfig.defaultValue\"\n [(max)]=\"config.typeConfig.max\"\n [(min)]=\"config.typeConfig.min\"\n [(step)]=\"config.typeConfig.step\">\n\n </tanj-number-spinner-configure>\n </ng-container>\n\n `,\n encapsulation: ViewEncapsulation.None\n})\nexport class NumberSpinnerTemplateComponent implements OnInit, InputTemplateIF {\n\n @Input() config: NumberSpinnerConfig = new NumberSpinnerConfig()\n @Input() ival: NumberIval = NumberType.create({})\n @Input() mode: InputViewMode = InputViewModes.VIEW\n\n @Output() change: EventEmitter<any> = new EventEmitter(false)\n\n viewModes = InputViewModes\n\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {\n }\n\n ngOnInit(): void {\n Hacks.materialDesignPlaceholderText(this.changeDetectorRef)\n }\n\n}\n","import {Jsonified, ObjectUtil} from '@tangential/core'\n//noinspection ES6PreferShortImport\nimport {BooleanType, BooleanTypeIF} from '../../data-type/boolean/boolean-type'\nimport {InputConfig, InputConfigJson} from '../../input-config'\n\n\nexport interface SlideToggleConfigIF extends InputConfigJson {\n labelPosition?: 'before' | 'after'\n disabled?: boolean\n typeConfig?: BooleanTypeIF\n}\n\nconst Model: SlideToggleConfigIF = {\n label: 'Slide Toggle',\n labelPosition: 'before',\n disabled: false,\n typeConfig: <BooleanTypeIF>{\n _inputTypeKey: BooleanType.TY