@taiga-ui/kit 4.38.0-canary.507d44d → 4.38.0-canary.99e3a33

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 (34) hide show
  1. package/components/files/input-files/input-files-validator.directive.d.ts +4 -5
  2. package/components/input-month/index.d.ts +1 -1
  3. package/components/input-month/{native-month-picker/native-month-picker.component.d.ts → input-month.component.d.ts} +4 -5
  4. package/components/input-month/input-month.d.ts +2 -2
  5. package/components/input-month/input-month.directive.d.ts +3 -3
  6. package/esm2022/components/action-bar/action-bar.component.mjs +2 -2
  7. package/esm2022/components/files/input-files/input-files-validator.directive.mjs +16 -19
  8. package/esm2022/components/input-month/index.mjs +2 -2
  9. package/esm2022/components/input-month/input-month.component.mjs +53 -0
  10. package/esm2022/components/input-month/input-month.directive.mjs +5 -5
  11. package/esm2022/components/input-month/input-month.mjs +3 -3
  12. package/esm2022/components/input-number/input-number.directive.mjs +3 -7
  13. package/esm2022/components/push/push.component.mjs +2 -2
  14. package/esm2022/directives/chevron/chevron.directive.mjs +2 -2
  15. package/esm2022/directives/unfinished-validator/unfinished.validator.mjs +2 -2
  16. package/esm2022/tokens/calendar-date-stream.mjs +2 -1
  17. package/esm2022/tokens/date-inputs-value-transformers.mjs +3 -3
  18. package/fesm2022/taiga-ui-kit-components-action-bar.mjs +2 -2
  19. package/fesm2022/taiga-ui-kit-components-files.mjs +16 -20
  20. package/fesm2022/taiga-ui-kit-components-files.mjs.map +1 -1
  21. package/fesm2022/taiga-ui-kit-components-input-month.mjs +18 -19
  22. package/fesm2022/taiga-ui-kit-components-input-month.mjs.map +1 -1
  23. package/fesm2022/taiga-ui-kit-components-input-number.mjs +2 -6
  24. package/fesm2022/taiga-ui-kit-components-input-number.mjs.map +1 -1
  25. package/fesm2022/taiga-ui-kit-components-push.mjs +2 -2
  26. package/fesm2022/taiga-ui-kit-directives-chevron.mjs +2 -2
  27. package/fesm2022/taiga-ui-kit-directives-chevron.mjs.map +1 -1
  28. package/fesm2022/taiga-ui-kit-directives-unfinished-validator.mjs +1 -1
  29. package/fesm2022/taiga-ui-kit-directives-unfinished-validator.mjs.map +1 -1
  30. package/fesm2022/taiga-ui-kit-tokens.mjs +3 -2
  31. package/fesm2022/taiga-ui-kit-tokens.mjs.map +1 -1
  32. package/package.json +43 -43
  33. package/tokens/calendar-date-stream.d.ts +1 -0
  34. package/esm2022/components/input-month/native-month-picker/native-month-picker.component.mjs +0 -55
@@ -143,12 +143,8 @@ class TuiInputNumberDirective extends TuiControl {
143
143
  this.postfix());
144
144
  }
145
145
  updateMinMaxLimits(nullableMin, nullableMax) {
146
- const min = this.transformer?.fromControlValue(nullableMin) ??
147
- nullableMin ??
148
- this.options.min;
149
- const max = this.transformer?.fromControlValue(nullableMax) ??
150
- nullableMax ??
151
- this.options.max;
146
+ const min = this.transformer.fromControlValue(nullableMin) ?? this.options.min;
147
+ const max = this.transformer.fromControlValue(nullableMax) ?? this.options.max;
152
148
  this.min.set(Math.min(min, max));
153
149
  this.max.set(Math.max(min, max));
154
150
  }
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-components-input-number.mjs","sources":["../../../projects/kit/components/input-number/input-number.options.ts","../../../projects/kit/components/input-number/input-number.directive.ts","../../../projects/kit/components/input-number/step/input-number-step.component.ts","../../../projects/kit/components/input-number/step/input-number-step.template.html","../../../projects/kit/components/input-number/input-number.ts","../../../projects/kit/components/input-number/taiga-ui-kit-components-input-number.ts"],"sourcesContent":["import type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiInputNumberOptions {\n readonly max: number;\n readonly min: number;\n readonly prefix: string;\n readonly postfix: string;\n readonly step: number;\n readonly icons: Readonly<{\n decrease: string;\n increase: string;\n }>;\n readonly valueTransformer: TuiValueTransformer<number | null, any> | null;\n}\n\nexport const TUI_INPUT_NUMBER_DEFAULT_OPTIONS: TuiInputNumberOptions = {\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n prefix: '',\n postfix: '',\n step: 0,\n icons: {\n increase: '@tui.plus',\n decrease: '@tui.minus',\n },\n valueTransformer: null,\n};\n\nexport const [TUI_INPUT_NUMBER_OPTIONS, tuiInputNumberOptionsProvider] = tuiCreateOptions(\n TUI_INPUT_NUMBER_DEFAULT_OPTIONS,\n);\n","import {computed, Directive, effect, inject, Input, signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {MaskitoDirective} from '@maskito/angular';\nimport type {MaskitoOptions} from '@maskito/core';\nimport {maskitoInitialCalibrationPlugin} from '@maskito/core';\nimport type {MaskitoNumberParams} from '@maskito/kit';\nimport {\n maskitoCaretGuard,\n maskitoNumberOptionsGenerator,\n maskitoParseNumber,\n} from '@maskito/kit';\nimport {tuiAsControl, TuiControl, tuiValueTransformerFrom} from '@taiga-ui/cdk/classes';\nimport {CHAR_HYPHEN, CHAR_MINUS, TUI_ALLOW_SIGNAL_WRITES} from '@taiga-ui/cdk/constants';\nimport {TUI_IS_IOS, tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiIsSafeToRound} from '@taiga-ui/cdk/utils/math';\nimport {\n TuiTextfieldDirective,\n TuiWithTextfield,\n} from '@taiga-ui/core/components/textfield';\nimport {TUI_DEFAULT_NUMBER_FORMAT, TUI_NUMBER_FORMAT} from '@taiga-ui/core/tokens';\nimport {tuiFormatNumber} from '@taiga-ui/core/utils/format';\nimport {tuiMaskito} from '@taiga-ui/kit/utils';\n\nimport {TUI_INPUT_NUMBER_OPTIONS} from './input-number.options';\n\nconst DEFAULT_MAX_LENGTH = 18;\n\n@Directive({\n standalone: true,\n selector: 'input[tuiInputNumber]',\n providers: [\n tuiAsControl(TuiInputNumberDirective),\n tuiFallbackValueProvider(null),\n tuiValueTransformerFrom(TUI_INPUT_NUMBER_OPTIONS),\n ],\n hostDirectives: [TuiWithTextfield, MaskitoDirective],\n host: {\n '[disabled]': 'disabled()',\n '[attr.inputMode]': 'inputMode()',\n '[attr.maxLength]':\n 'element.maxLength > 0 ? element.maxLength : defaultMaxLength()',\n '(blur)': 'onBlur()',\n '(focus)': 'onFocus()',\n },\n})\nexport class TuiInputNumberDirective extends TuiControl<number | null> {\n private readonly textfield = inject(TuiTextfieldDirective);\n private readonly isIOS = inject(TUI_IS_IOS);\n private readonly numberFormat = toSignal(inject(TUI_NUMBER_FORMAT), {\n initialValue: TUI_DEFAULT_NUMBER_FORMAT,\n });\n\n private readonly formatted = computed(() =>\n maskitoParseNumber(this.textfield.value(), this.numberFormat().decimalSeparator),\n );\n\n private readonly precision = computed(() =>\n Number.isNaN(this.numberFormat().precision) ? 2 : this.numberFormat().precision,\n );\n\n private readonly unfinished = computed((value = this.formatted()) =>\n value < 0 ? value > this.max() : value < this.min(),\n );\n\n protected readonly onChangeEffect = effect(() => {\n const value = this.formatted();\n\n if (Number.isNaN(value)) {\n this.onChange(null);\n\n return;\n }\n\n if (\n this.unfinished() ||\n value < this.min() ||\n value > this.max() ||\n this.value() === value\n ) {\n return;\n }\n\n this.onChange(value);\n }, TUI_ALLOW_SIGNAL_WRITES);\n\n protected readonly options = inject(TUI_INPUT_NUMBER_OPTIONS);\n protected readonly element = tuiInjectElement<HTMLInputElement>();\n\n protected readonly inputMode = computed(() => {\n if (this.isIOS && this.min() < 0) {\n // iPhone does not have minus sign if inputMode is equal to 'numeric' / 'decimal'\n return 'text';\n }\n\n return this.precision() ? 'decimal' : 'numeric';\n });\n\n protected readonly defaultMaxLength = computed(() => {\n const {decimalSeparator, thousandSeparator} = this.numberFormat();\n const decimalPart =\n !!this.precision() && this.textfield.value().includes(decimalSeparator);\n const precision = decimalPart ? Math.min(this.precision() + 1, 20) : 0;\n const takeThousand = thousandSeparator.repeat(5).length;\n\n return DEFAULT_MAX_LENGTH + precision + takeThousand;\n });\n\n protected readonly mask = tuiMaskito(\n computed(\n (\n {decimalMode, ...numberFormat} = this.numberFormat(),\n maximumFractionDigits = this.precision(),\n ) =>\n this.computeMask({\n ...numberFormat,\n maximumFractionDigits,\n min: this.min(),\n max: this.max(),\n prefix: this.prefix(),\n postfix: this.postfix(),\n minimumFractionDigits:\n decimalMode === 'always' ? maximumFractionDigits : 0,\n }),\n ),\n );\n\n public readonly min = signal(this.options.min);\n public readonly max = signal(this.options.max);\n public readonly prefix = signal(this.options.prefix);\n public readonly postfix = signal(this.options.postfix);\n\n @Input('min')\n public set minSetter(x: number | null) {\n this.updateMinMaxLimits(x, this.max());\n }\n\n @Input('max')\n public set maxSetter(x: number | null) {\n this.updateMinMaxLimits(this.min(), x);\n }\n\n // TODO(v5): replace with signal input\n @Input('prefix')\n public set prefixSetter(x: string) {\n this.prefix.set(x);\n }\n\n // TODO(v5): replace with signal input\n @Input('postfix')\n public set postfixSetter(x: string) {\n this.postfix.set(x);\n }\n\n public override writeValue(value: number | null): void {\n super.writeValue(value);\n this.setValue(this.value());\n }\n\n public setValue(value: number | null): void {\n this.textfield.value.set(this.formatNumber(value));\n }\n\n protected onBlur(): void {\n this.onTouched();\n\n if (!this.unfinished()) {\n this.setValue(this.value());\n }\n }\n\n protected onFocus(): void {\n if (Number.isNaN(this.formatted()) && !this.readOnly()) {\n this.textfield.value.set(this.prefix() + this.postfix());\n }\n }\n\n private formatNumber(value: number | null): string {\n if (value === null || Number.isNaN(value)) {\n return '';\n }\n\n return (\n (this.prefix() !== CHAR_MINUS ? this.prefix() : '') +\n tuiFormatNumber(value, {\n ...this.numberFormat(),\n /**\n * Number can satisfy interval [Number.MIN_SAFE_INTEGER; Number.MAX_SAFE_INTEGER]\n * but its rounding can violate it.\n * Before BigInt support there is no perfect solution – only trade off.\n * No rounding is better than lose precision and incorrect mutation of already valid value.\n */\n precision: tuiIsSafeToRound(value, this.precision())\n ? this.precision()\n : Infinity,\n }).replace(CHAR_HYPHEN, CHAR_MINUS) +\n this.postfix()\n );\n }\n\n private updateMinMaxLimits(\n nullableMin: number | null,\n nullableMax: number | null,\n ): void {\n const min =\n this.transformer?.fromControlValue(nullableMin) ??\n nullableMin ??\n this.options.min;\n const max =\n this.transformer?.fromControlValue(nullableMax) ??\n nullableMax ??\n this.options.max;\n\n this.min.set(Math.min(min, max));\n this.max.set(Math.max(min, max));\n }\n\n private computeMask(params: MaskitoNumberParams): MaskitoOptions {\n const {prefix = '', postfix = ''} = params;\n const {plugins, ...options} = maskitoNumberOptionsGenerator(params);\n const initialCalibrationPlugin = maskitoInitialCalibrationPlugin(\n maskitoNumberOptionsGenerator({\n ...params,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n }),\n );\n\n return {\n ...options,\n plugins: [\n ...plugins,\n initialCalibrationPlugin,\n maskitoCaretGuard((value) => [\n prefix.length,\n value.length - postfix.length,\n ]),\n ],\n };\n }\n}\n","import {NgIf} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Input,\n NgZone,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {\n TUI_TEXTFIELD_OPTIONS,\n TuiTextfieldContent,\n} from '@taiga-ui/core/components/textfield';\nimport {timer} from 'rxjs';\n\nimport {TuiInputNumberDirective} from '../input-number.directive';\nimport type {TuiInputNumberOptions} from '../input-number.options';\nimport {TUI_INPUT_NUMBER_OPTIONS} from '../input-number.options';\n\n@Component({\n standalone: true,\n selector: 'input[tuiInputNumber][step]',\n imports: [NgIf, TuiButton, TuiTextfieldContent],\n templateUrl: './input-number-step.template.html',\n styleUrls: ['./input-number-step.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n ngSkipHydration: 'true',\n '(keydown.arrowDown.prevent)': 'onStep(-step())',\n '(keydown.arrowUp.prevent)': 'onStep(step())',\n '[class._with-buttons]': 'step()',\n },\n})\nexport class TuiInputNumberStep {\n private readonly destroyRef = inject(DestroyRef);\n private readonly zone = inject(NgZone);\n\n protected readonly el = tuiInjectElement<HTMLInputElement>();\n protected readonly appearance = inject(TUI_TEXTFIELD_OPTIONS).appearance;\n protected readonly options = inject<TuiInputNumberOptions>(TUI_INPUT_NUMBER_OPTIONS);\n protected readonly input = inject(TuiInputNumberDirective, {self: true});\n protected readonly step = signal(this.options.step);\n protected readonly value = computed(() => this.input.value() ?? NaN);\n\n // TODO(v5): replace with signal input\n @Input('step')\n public set stepSetter(x: number) {\n this.step.set(x);\n }\n\n protected onStep(step: number): void {\n const current = Number.isNaN(this.value()) ? 0 : this.value();\n const value = tuiClamp(current + step, this.input.min(), this.input.max());\n\n if (Number.isNaN(this.value())) {\n timer(0)\n .pipe(tuiZonefree(this.zone), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const caretIndex = this.el.value.length - this.input.postfix().length;\n\n this.el.setSelectionRange(caretIndex, caretIndex);\n });\n }\n\n this.input.setValue(value);\n }\n}\n","<ng-container *tuiTextfieldContent>\n <section\n *ngIf=\"step()\"\n class=\"t-input-number-buttons\"\n >\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"appearance()\"\n [disabled]=\"!input.interactive() || value() >= input.max()\"\n [iconStart]=\"options.icons.increase\"\n (click.prevent)=\"onStep(step())\"\n (mousedown.prevent)=\"el.focus()\"\n >\n +\n </button>\n\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"appearance()\"\n [disabled]=\"!input.interactive() || value() <= input.min()\"\n [iconStart]=\"options.icons.decrease\"\n (click.prevent)=\"onStep(-step())\"\n (mousedown.prevent)=\"el.focus()\"\n >\n -\n </button>\n </section>\n</ng-container>\n","import {TuiInputNumberDirective} from './input-number.directive';\nimport {TuiInputNumberStep} from './step/input-number-step.component';\n\nexport const TuiInputNumber = [TuiInputNumberDirective, TuiInputNumberStep] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-kit-components-input-number.mjs","sources":["../../../projects/kit/components/input-number/input-number.options.ts","../../../projects/kit/components/input-number/input-number.directive.ts","../../../projects/kit/components/input-number/step/input-number-step.component.ts","../../../projects/kit/components/input-number/step/input-number-step.template.html","../../../projects/kit/components/input-number/input-number.ts","../../../projects/kit/components/input-number/taiga-ui-kit-components-input-number.ts"],"sourcesContent":["import type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\n\nexport interface TuiInputNumberOptions {\n readonly max: number;\n readonly min: number;\n readonly prefix: string;\n readonly postfix: string;\n readonly step: number;\n readonly icons: Readonly<{\n decrease: string;\n increase: string;\n }>;\n readonly valueTransformer: TuiValueTransformer<number | null, any> | null;\n}\n\nexport const TUI_INPUT_NUMBER_DEFAULT_OPTIONS: TuiInputNumberOptions = {\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n prefix: '',\n postfix: '',\n step: 0,\n icons: {\n increase: '@tui.plus',\n decrease: '@tui.minus',\n },\n valueTransformer: null,\n};\n\nexport const [TUI_INPUT_NUMBER_OPTIONS, tuiInputNumberOptionsProvider] = tuiCreateOptions(\n TUI_INPUT_NUMBER_DEFAULT_OPTIONS,\n);\n","import {computed, Directive, effect, inject, Input, signal} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {MaskitoDirective} from '@maskito/angular';\nimport type {MaskitoOptions} from '@maskito/core';\nimport {maskitoInitialCalibrationPlugin} from '@maskito/core';\nimport type {MaskitoNumberParams} from '@maskito/kit';\nimport {\n maskitoCaretGuard,\n maskitoNumberOptionsGenerator,\n maskitoParseNumber,\n} from '@maskito/kit';\nimport {tuiAsControl, TuiControl, tuiValueTransformerFrom} from '@taiga-ui/cdk/classes';\nimport {CHAR_HYPHEN, CHAR_MINUS, TUI_ALLOW_SIGNAL_WRITES} from '@taiga-ui/cdk/constants';\nimport {TUI_IS_IOS, tuiFallbackValueProvider} from '@taiga-ui/cdk/tokens';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiIsSafeToRound} from '@taiga-ui/cdk/utils/math';\nimport {\n TuiTextfieldDirective,\n TuiWithTextfield,\n} from '@taiga-ui/core/components/textfield';\nimport {TUI_DEFAULT_NUMBER_FORMAT, TUI_NUMBER_FORMAT} from '@taiga-ui/core/tokens';\nimport {tuiFormatNumber} from '@taiga-ui/core/utils/format';\nimport {tuiMaskito} from '@taiga-ui/kit/utils';\n\nimport {TUI_INPUT_NUMBER_OPTIONS} from './input-number.options';\n\nconst DEFAULT_MAX_LENGTH = 18;\n\n@Directive({\n standalone: true,\n selector: 'input[tuiInputNumber]',\n providers: [\n tuiAsControl(TuiInputNumberDirective),\n tuiFallbackValueProvider(null),\n tuiValueTransformerFrom(TUI_INPUT_NUMBER_OPTIONS),\n ],\n hostDirectives: [TuiWithTextfield, MaskitoDirective],\n host: {\n '[disabled]': 'disabled()',\n '[attr.inputMode]': 'inputMode()',\n '[attr.maxLength]':\n 'element.maxLength > 0 ? element.maxLength : defaultMaxLength()',\n '(blur)': 'onBlur()',\n '(focus)': 'onFocus()',\n },\n})\nexport class TuiInputNumberDirective extends TuiControl<number | null> {\n private readonly textfield = inject(TuiTextfieldDirective);\n private readonly isIOS = inject(TUI_IS_IOS);\n private readonly numberFormat = toSignal(inject(TUI_NUMBER_FORMAT), {\n initialValue: TUI_DEFAULT_NUMBER_FORMAT,\n });\n\n private readonly formatted = computed(() =>\n maskitoParseNumber(this.textfield.value(), this.numberFormat().decimalSeparator),\n );\n\n private readonly precision = computed(() =>\n Number.isNaN(this.numberFormat().precision) ? 2 : this.numberFormat().precision,\n );\n\n private readonly unfinished = computed((value = this.formatted()) =>\n value < 0 ? value > this.max() : value < this.min(),\n );\n\n protected readonly onChangeEffect = effect(() => {\n const value = this.formatted();\n\n if (Number.isNaN(value)) {\n this.onChange(null);\n\n return;\n }\n\n if (\n this.unfinished() ||\n value < this.min() ||\n value > this.max() ||\n this.value() === value\n ) {\n return;\n }\n\n this.onChange(value);\n }, TUI_ALLOW_SIGNAL_WRITES);\n\n protected readonly options = inject(TUI_INPUT_NUMBER_OPTIONS);\n protected readonly element = tuiInjectElement<HTMLInputElement>();\n\n protected readonly inputMode = computed(() => {\n if (this.isIOS && this.min() < 0) {\n // iPhone does not have minus sign if inputMode is equal to 'numeric' / 'decimal'\n return 'text';\n }\n\n return this.precision() ? 'decimal' : 'numeric';\n });\n\n protected readonly defaultMaxLength = computed(() => {\n const {decimalSeparator, thousandSeparator} = this.numberFormat();\n const decimalPart =\n !!this.precision() && this.textfield.value().includes(decimalSeparator);\n const precision = decimalPart ? Math.min(this.precision() + 1, 20) : 0;\n const takeThousand = thousandSeparator.repeat(5).length;\n\n return DEFAULT_MAX_LENGTH + precision + takeThousand;\n });\n\n protected readonly mask = tuiMaskito(\n computed(\n (\n {decimalMode, ...numberFormat} = this.numberFormat(),\n maximumFractionDigits = this.precision(),\n ) =>\n this.computeMask({\n ...numberFormat,\n maximumFractionDigits,\n min: this.min(),\n max: this.max(),\n prefix: this.prefix(),\n postfix: this.postfix(),\n minimumFractionDigits:\n decimalMode === 'always' ? maximumFractionDigits : 0,\n }),\n ),\n );\n\n public readonly min = signal(this.options.min);\n public readonly max = signal(this.options.max);\n public readonly prefix = signal(this.options.prefix);\n public readonly postfix = signal(this.options.postfix);\n\n @Input('min')\n public set minSetter(x: number | null) {\n this.updateMinMaxLimits(x, this.max());\n }\n\n @Input('max')\n public set maxSetter(x: number | null) {\n this.updateMinMaxLimits(this.min(), x);\n }\n\n // TODO(v5): replace with signal input\n @Input('prefix')\n public set prefixSetter(x: string) {\n this.prefix.set(x);\n }\n\n // TODO(v5): replace with signal input\n @Input('postfix')\n public set postfixSetter(x: string) {\n this.postfix.set(x);\n }\n\n public override writeValue(value: number | null): void {\n super.writeValue(value);\n this.setValue(this.value());\n }\n\n public setValue(value: number | null): void {\n this.textfield.value.set(this.formatNumber(value));\n }\n\n protected onBlur(): void {\n this.onTouched();\n\n if (!this.unfinished()) {\n this.setValue(this.value());\n }\n }\n\n protected onFocus(): void {\n if (Number.isNaN(this.formatted()) && !this.readOnly()) {\n this.textfield.value.set(this.prefix() + this.postfix());\n }\n }\n\n private formatNumber(value: number | null): string {\n if (value === null || Number.isNaN(value)) {\n return '';\n }\n\n return (\n (this.prefix() !== CHAR_MINUS ? this.prefix() : '') +\n tuiFormatNumber(value, {\n ...this.numberFormat(),\n /**\n * Number can satisfy interval [Number.MIN_SAFE_INTEGER; Number.MAX_SAFE_INTEGER]\n * but its rounding can violate it.\n * Before BigInt support there is no perfect solution – only trade off.\n * No rounding is better than lose precision and incorrect mutation of already valid value.\n */\n precision: tuiIsSafeToRound(value, this.precision())\n ? this.precision()\n : Infinity,\n }).replace(CHAR_HYPHEN, CHAR_MINUS) +\n this.postfix()\n );\n }\n\n private updateMinMaxLimits(\n nullableMin: number | null,\n nullableMax: number | null,\n ): void {\n const min = this.transformer.fromControlValue(nullableMin) ?? this.options.min;\n const max = this.transformer.fromControlValue(nullableMax) ?? this.options.max;\n\n this.min.set(Math.min(min, max));\n this.max.set(Math.max(min, max));\n }\n\n private computeMask(params: MaskitoNumberParams): MaskitoOptions {\n const {prefix = '', postfix = ''} = params;\n const {plugins, ...options} = maskitoNumberOptionsGenerator(params);\n const initialCalibrationPlugin = maskitoInitialCalibrationPlugin(\n maskitoNumberOptionsGenerator({\n ...params,\n min: Number.MIN_SAFE_INTEGER,\n max: Number.MAX_SAFE_INTEGER,\n }),\n );\n\n return {\n ...options,\n plugins: [\n ...plugins,\n initialCalibrationPlugin,\n maskitoCaretGuard((value) => [\n prefix.length,\n value.length - postfix.length,\n ]),\n ],\n };\n }\n}\n","import {NgIf} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n Input,\n NgZone,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {tuiZonefree} from '@taiga-ui/cdk/observables';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiClamp} from '@taiga-ui/cdk/utils/math';\nimport {TuiButton} from '@taiga-ui/core/components/button';\nimport {\n TUI_TEXTFIELD_OPTIONS,\n TuiTextfieldContent,\n} from '@taiga-ui/core/components/textfield';\nimport {timer} from 'rxjs';\n\nimport {TuiInputNumberDirective} from '../input-number.directive';\nimport type {TuiInputNumberOptions} from '../input-number.options';\nimport {TUI_INPUT_NUMBER_OPTIONS} from '../input-number.options';\n\n@Component({\n standalone: true,\n selector: 'input[tuiInputNumber][step]',\n imports: [NgIf, TuiButton, TuiTextfieldContent],\n templateUrl: './input-number-step.template.html',\n styleUrls: ['./input-number-step.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n ngSkipHydration: 'true',\n '(keydown.arrowDown.prevent)': 'onStep(-step())',\n '(keydown.arrowUp.prevent)': 'onStep(step())',\n '[class._with-buttons]': 'step()',\n },\n})\nexport class TuiInputNumberStep {\n private readonly destroyRef = inject(DestroyRef);\n private readonly zone = inject(NgZone);\n\n protected readonly el = tuiInjectElement<HTMLInputElement>();\n protected readonly appearance = inject(TUI_TEXTFIELD_OPTIONS).appearance;\n protected readonly options = inject<TuiInputNumberOptions>(TUI_INPUT_NUMBER_OPTIONS);\n protected readonly input = inject(TuiInputNumberDirective, {self: true});\n protected readonly step = signal(this.options.step);\n protected readonly value = computed(() => this.input.value() ?? NaN);\n\n // TODO(v5): replace with signal input\n @Input('step')\n public set stepSetter(x: number) {\n this.step.set(x);\n }\n\n protected onStep(step: number): void {\n const current = Number.isNaN(this.value()) ? 0 : this.value();\n const value = tuiClamp(current + step, this.input.min(), this.input.max());\n\n if (Number.isNaN(this.value())) {\n timer(0)\n .pipe(tuiZonefree(this.zone), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n const caretIndex = this.el.value.length - this.input.postfix().length;\n\n this.el.setSelectionRange(caretIndex, caretIndex);\n });\n }\n\n this.input.setValue(value);\n }\n}\n","<ng-container *tuiTextfieldContent>\n <section\n *ngIf=\"step()\"\n class=\"t-input-number-buttons\"\n >\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"appearance()\"\n [disabled]=\"!input.interactive() || value() >= input.max()\"\n [iconStart]=\"options.icons.increase\"\n (click.prevent)=\"onStep(step())\"\n (mousedown.prevent)=\"el.focus()\"\n >\n +\n </button>\n\n <button\n size=\"s\"\n tabindex=\"-1\"\n tuiIconButton\n type=\"button\"\n class=\"t-button\"\n [appearance]=\"appearance()\"\n [disabled]=\"!input.interactive() || value() <= input.min()\"\n [iconStart]=\"options.icons.decrease\"\n (click.prevent)=\"onStep(-step())\"\n (mousedown.prevent)=\"el.focus()\"\n >\n -\n </button>\n </section>\n</ng-container>\n","import {TuiInputNumberDirective} from './input-number.directive';\nimport {TuiInputNumberStep} from './step/input-number-step.component';\n\nexport const TuiInputNumber = [TuiInputNumberDirective, TuiInputNumberStep] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -28,13 +28,13 @@ class TuiPushComponent {
28
28
  this.close = new EventEmitter();
29
29
  }
30
30
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPushComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiPushComponent, isStandalone: true, selector: "tui-push", inputs: { heading: "heading", type: "type", lines: "lines", timestamp: "timestamp" }, outputs: { close: "close" }, host: { properties: { "style.--t-lines": "lines" } }, providers: [tuiButtonOptionsProvider({ size: 's', appearance: 'secondary' })], ngImport: i0, template: "<div class=\"t-image\">\n <ng-content select=\"img\" />\n</div>\n<button\n *ngIf=\"close.observed\"\n appearance=\"\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"close.emit()\"\n>\n {{ closeWord$ | async }}\n</button>\n<div class=\"t-top\">\n <span class=\"t-icon\">\n <ng-content select=\"tui-svg,tui-icon\" />\n </span>\n {{ type }}\n <span\n *ngIf=\"timestamp\"\n class=\"t-time\"\n [textContent]=\"isString(timestamp) ? timestamp : (timestamp | tuiFormatDate | async)\"\n ></span>\n</div>\n<h3\n automation-id=\"tui-push__heading\"\n class=\"t-heading\"\n>\n {{ heading }}\n</h3>\n<div class=\"t-content\">\n <ng-content />\n</div>\n<div class=\"t-actions\">\n <span class=\"t-button\">\n <ng-content select=\"[tuiButton]\" />\n </span>\n <span class=\"t-link\">\n <ng-content select=\"[tuiLink]\" />\n </span>\n</div>\n", styles: [":host{position:relative;display:block;inline-size:22.5rem;max-inline-size:100%;box-sizing:border-box;padding:1.25rem 1.25rem .25rem;overflow:hidden;font:var(--tui-font-text-m);border-radius:var(--tui-radius-xl);background:var(--tui-background-elevation-3);box-shadow:var(--tui-shadow-small)}.t-image{display:flex;flex-direction:column;max-block-size:10.625rem;overflow:hidden;margin:-1.25rem -1.25rem 1.25rem}.t-close{position:absolute;top:.75rem;right:.75rem;color:#0000008a;background:#f2f2f252;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.t-top{display:flex;align-items:center;font:var(--tui-font-text-s);color:var(--tui-text-secondary)}.t-icon{block-size:1.25rem;margin-right:.5rem;transform:scale(.833);transform-origin:top left;color:var(--tui-text-action)}.t-time:before{content:\"\\2022\";display:inline-block;inline-size:1rem;text-align:center}.t-heading{line-height:1.25rem;font-weight:700;margin:.75rem 0 .25rem}.t-heading,.t-content{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--t-lines);word-break:break-word;overflow:hidden}.t-actions{display:flex;align-items:center;font:var(--tui-font-text-s)}.t-button:not(:empty){margin:.75rem .75rem .75rem 0}.t-link{margin:.75rem 0}.t-link:empty{margin:.5rem}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: TuiFormatDatePipe, name: "tuiFormatDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiPushComponent, isStandalone: true, selector: "tui-push", inputs: { heading: "heading", type: "type", lines: "lines", timestamp: "timestamp" }, outputs: { close: "close" }, host: { properties: { "style.--t-lines": "lines" } }, providers: [tuiButtonOptionsProvider({ size: 's', appearance: 'secondary' })], ngImport: i0, template: "<div class=\"t-image\">\n <ng-content select=\"img\" />\n</div>\n<button\n *ngIf=\"close.observed\"\n appearance=\"\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"close.emit()\"\n>\n {{ closeWord$ | async }}\n</button>\n<div class=\"t-top\">\n <span class=\"t-icon\">\n <ng-content select=\"tui-svg,tui-icon\" />\n </span>\n {{ type }}\n <span\n *ngIf=\"timestamp\"\n class=\"t-time\"\n [textContent]=\"isString(timestamp) ? timestamp : (timestamp | tuiFormatDate | async)\"\n ></span>\n</div>\n<h3\n automation-id=\"tui-push__heading\"\n class=\"t-heading\"\n>\n {{ heading }}\n</h3>\n<div class=\"t-content\">\n <ng-content />\n</div>\n<div class=\"t-actions\">\n <span class=\"t-button\">\n <ng-content select=\"[tuiButton]\" />\n </span>\n <span class=\"t-link\">\n <ng-content select=\"[tuiLink]\" />\n </span>\n</div>\n", styles: [":host{position:relative;display:block;inline-size:22.5rem;max-inline-size:100%;box-sizing:border-box;padding:1.25rem 1.25rem .25rem;overflow:hidden;font:var(--tui-font-text-m);border-radius:var(--tui-radius-xl);background:var(--tui-background-elevation-2);box-shadow:var(--tui-shadow-small)}.t-image{display:flex;flex-direction:column;max-block-size:10.625rem;overflow:hidden;margin:-1.25rem -1.25rem 1.25rem}.t-close{position:absolute;top:.75rem;right:.75rem;color:#0000008a;background:#f2f2f252;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.t-top{display:flex;align-items:center;font:var(--tui-font-text-s);color:var(--tui-text-secondary)}.t-icon{block-size:1.25rem;margin-right:.5rem;transform:scale(.833);transform-origin:top left;color:var(--tui-text-action)}.t-time:before{content:\"\\2022\";display:inline-block;inline-size:1rem;text-align:center}.t-heading{line-height:1.25rem;font-weight:700;margin:.75rem 0 .25rem}.t-heading,.t-content{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--t-lines);word-break:break-word;overflow:hidden}.t-actions{display:flex;align-items:center;font:var(--tui-font-text-s)}.t-button:not(:empty){margin:.75rem .75rem .75rem 0}.t-link{margin:.75rem 0}.t-link:empty{margin:.5rem}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: TuiFormatDatePipe, name: "tuiFormatDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32
32
  }
33
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPushComponent, decorators: [{
34
34
  type: Component,
35
35
  args: [{ standalone: true, selector: 'tui-push', imports: [AsyncPipe, NgIf, TuiButton, TuiFormatDatePipe], changeDetection: ChangeDetectionStrategy.OnPush, providers: [tuiButtonOptionsProvider({ size: 's', appearance: 'secondary' })], host: {
36
36
  '[style.--t-lines]': 'lines',
37
- }, template: "<div class=\"t-image\">\n <ng-content select=\"img\" />\n</div>\n<button\n *ngIf=\"close.observed\"\n appearance=\"\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"close.emit()\"\n>\n {{ closeWord$ | async }}\n</button>\n<div class=\"t-top\">\n <span class=\"t-icon\">\n <ng-content select=\"tui-svg,tui-icon\" />\n </span>\n {{ type }}\n <span\n *ngIf=\"timestamp\"\n class=\"t-time\"\n [textContent]=\"isString(timestamp) ? timestamp : (timestamp | tuiFormatDate | async)\"\n ></span>\n</div>\n<h3\n automation-id=\"tui-push__heading\"\n class=\"t-heading\"\n>\n {{ heading }}\n</h3>\n<div class=\"t-content\">\n <ng-content />\n</div>\n<div class=\"t-actions\">\n <span class=\"t-button\">\n <ng-content select=\"[tuiButton]\" />\n </span>\n <span class=\"t-link\">\n <ng-content select=\"[tuiLink]\" />\n </span>\n</div>\n", styles: [":host{position:relative;display:block;inline-size:22.5rem;max-inline-size:100%;box-sizing:border-box;padding:1.25rem 1.25rem .25rem;overflow:hidden;font:var(--tui-font-text-m);border-radius:var(--tui-radius-xl);background:var(--tui-background-elevation-3);box-shadow:var(--tui-shadow-small)}.t-image{display:flex;flex-direction:column;max-block-size:10.625rem;overflow:hidden;margin:-1.25rem -1.25rem 1.25rem}.t-close{position:absolute;top:.75rem;right:.75rem;color:#0000008a;background:#f2f2f252;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.t-top{display:flex;align-items:center;font:var(--tui-font-text-s);color:var(--tui-text-secondary)}.t-icon{block-size:1.25rem;margin-right:.5rem;transform:scale(.833);transform-origin:top left;color:var(--tui-text-action)}.t-time:before{content:\"\\2022\";display:inline-block;inline-size:1rem;text-align:center}.t-heading{line-height:1.25rem;font-weight:700;margin:.75rem 0 .25rem}.t-heading,.t-content{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--t-lines);word-break:break-word;overflow:hidden}.t-actions{display:flex;align-items:center;font:var(--tui-font-text-s)}.t-button:not(:empty){margin:.75rem .75rem .75rem 0}.t-link{margin:.75rem 0}.t-link:empty{margin:.5rem}\n"] }]
37
+ }, template: "<div class=\"t-image\">\n <ng-content select=\"img\" />\n</div>\n<button\n *ngIf=\"close.observed\"\n appearance=\"\"\n size=\"xs\"\n tuiIconButton\n type=\"button\"\n class=\"t-close\"\n [iconStart]=\"icons.close\"\n [style.border-radius.%]=\"100\"\n (click)=\"close.emit()\"\n>\n {{ closeWord$ | async }}\n</button>\n<div class=\"t-top\">\n <span class=\"t-icon\">\n <ng-content select=\"tui-svg,tui-icon\" />\n </span>\n {{ type }}\n <span\n *ngIf=\"timestamp\"\n class=\"t-time\"\n [textContent]=\"isString(timestamp) ? timestamp : (timestamp | tuiFormatDate | async)\"\n ></span>\n</div>\n<h3\n automation-id=\"tui-push__heading\"\n class=\"t-heading\"\n>\n {{ heading }}\n</h3>\n<div class=\"t-content\">\n <ng-content />\n</div>\n<div class=\"t-actions\">\n <span class=\"t-button\">\n <ng-content select=\"[tuiButton]\" />\n </span>\n <span class=\"t-link\">\n <ng-content select=\"[tuiLink]\" />\n </span>\n</div>\n", styles: [":host{position:relative;display:block;inline-size:22.5rem;max-inline-size:100%;box-sizing:border-box;padding:1.25rem 1.25rem .25rem;overflow:hidden;font:var(--tui-font-text-m);border-radius:var(--tui-radius-xl);background:var(--tui-background-elevation-2);box-shadow:var(--tui-shadow-small)}.t-image{display:flex;flex-direction:column;max-block-size:10.625rem;overflow:hidden;margin:-1.25rem -1.25rem 1.25rem}.t-close{position:absolute;top:.75rem;right:.75rem;color:#0000008a;background:#f2f2f252;-webkit-backdrop-filter:blur(1rem);backdrop-filter:blur(1rem)}.t-top{display:flex;align-items:center;font:var(--tui-font-text-s);color:var(--tui-text-secondary)}.t-icon{block-size:1.25rem;margin-right:.5rem;transform:scale(.833);transform-origin:top left;color:var(--tui-text-action)}.t-time:before{content:\"\\2022\";display:inline-block;inline-size:1rem;text-align:center}.t-heading{line-height:1.25rem;font-weight:700;margin:.75rem 0 .25rem}.t-heading,.t-content{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--t-lines);word-break:break-word;overflow:hidden}.t-actions{display:flex;align-items:center;font:var(--tui-font-text-s)}.t-button:not(:empty){margin:.75rem .75rem .75rem 0}.t-link{margin:.75rem 0}.t-link:empty{margin:.5rem}\n"] }]
38
38
  }], propDecorators: { heading: [{
39
39
  type: Input
40
40
  }], type: [{
@@ -8,11 +8,11 @@ import { TUI_ICON_END } from '@taiga-ui/core/tokens';
8
8
  const TUI_CHEVRON = tuiCreateToken('@tui.chevron-down');
9
9
  class TuiChevronStyles {
10
10
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiChevronStyles, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiChevronStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-chevron" }, ngImport: i0, template: '', isInline: true, styles: ["[tuiChevron][tuiIcons]:after,tui-icon[tuiChevron]:after{transition-property:transform,color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;cursor:pointer}[tuiChevron][tuiIcons]:after{block-size:1rem}tui-textfield[tuiChevron][tuiIcons]:after{font-size:1rem}tui-textfield[data-size=s][tuiChevron][tuiIcons]:after{margin-inline-end:-.125rem}tui-textfield[data-size=m][tuiChevron][tuiIcons]:after{margin-inline-end:.125rem}tui-textfield[data-size=l][tuiChevron][tuiIcons]:after{margin-inline-end:.25rem}[tuiChevron][tuiIcons]._chevron-rotated:after,tui-icon[tuiChevron]._chevron-rotated:after{transform:rotate(180deg)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiChevronStyles, isStandalone: true, selector: "ng-component", host: { classAttribute: "tui-chevron" }, ngImport: i0, template: '', isInline: true, styles: ["[tuiChevron][tuiIcons]:after,tui-icon[tuiChevron]:after{transition-property:transform,color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;cursor:pointer}tui-textfield[tuiChevron][tuiIcons]:after{font-size:1rem}tui-textfield[data-size=s][tuiChevron][tuiIcons]:after{margin-inline-end:calc(-.125rem - var(--t-padding))}tui-textfield[data-size=m][tuiChevron][tuiIcons]:after{margin-inline-end:calc(.125rem - var(--t-padding))}tui-textfield[data-size=l][tuiChevron][tuiIcons]:after{margin-inline-end:calc(.25rem - var(--t-padding))}[tuiChevron][tuiIcons]._chevron-rotated:after,tui-icon[tuiChevron]._chevron-rotated:after{transform:rotate(180deg)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
12
12
  }
13
13
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiChevronStyles, decorators: [{
14
14
  type: Component,
15
- args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'tui-chevron' }, styles: ["[tuiChevron][tuiIcons]:after,tui-icon[tuiChevron]:after{transition-property:transform,color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;cursor:pointer}[tuiChevron][tuiIcons]:after{block-size:1rem}tui-textfield[tuiChevron][tuiIcons]:after{font-size:1rem}tui-textfield[data-size=s][tuiChevron][tuiIcons]:after{margin-inline-end:-.125rem}tui-textfield[data-size=m][tuiChevron][tuiIcons]:after{margin-inline-end:.125rem}tui-textfield[data-size=l][tuiChevron][tuiIcons]:after{margin-inline-end:.25rem}[tuiChevron][tuiIcons]._chevron-rotated:after,tui-icon[tuiChevron]._chevron-rotated:after{transform:rotate(180deg)}\n"] }]
15
+ args: [{ standalone: true, template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'tui-chevron' }, styles: ["[tuiChevron][tuiIcons]:after,tui-icon[tuiChevron]:after{transition-property:transform,color;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;cursor:pointer}tui-textfield[tuiChevron][tuiIcons]:after{font-size:1rem}tui-textfield[data-size=s][tuiChevron][tuiIcons]:after{margin-inline-end:calc(-.125rem - var(--t-padding))}tui-textfield[data-size=m][tuiChevron][tuiIcons]:after{margin-inline-end:calc(.125rem - var(--t-padding))}tui-textfield[data-size=l][tuiChevron][tuiIcons]:after{margin-inline-end:calc(.25rem - var(--t-padding))}[tuiChevron][tuiIcons]._chevron-rotated:after,tui-icon[tuiChevron]._chevron-rotated:after{transform:rotate(180deg)}\n"] }]
16
16
  }] });
17
17
  class TuiChevron {
18
18
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-directives-chevron.mjs","sources":["../../../projects/kit/directives/chevron/chevron.directive.ts","../../../projects/kit/directives/chevron/taiga-ui-kit-directives-chevron.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n effect,\n inject,\n Input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {\n tuiCreateToken,\n tuiProvide,\n tuiWithStyles,\n} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiDropdownDirective} from '@taiga-ui/core/directives/dropdown';\nimport {TUI_ICON_END} from '@taiga-ui/core/tokens';\n\nexport const TUI_CHEVRON = tuiCreateToken('@tui.chevron-down');\n\n@Component({\n standalone: true,\n template: '',\n styleUrls: ['./chevron.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {class: 'tui-chevron'},\n})\nclass TuiChevronStyles {}\n\n@Directive({\n standalone: true,\n selector: '[tuiChevron]',\n providers: [tuiProvide(TUI_ICON_END, TUI_CHEVRON)],\n host: {tuiChevron: ''},\n})\nexport class TuiChevron {\n private readonly el = tuiInjectElement();\n private readonly dropdown = inject(TuiDropdownDirective, {optional: true});\n\n protected readonly nothing = tuiWithStyles(TuiChevronStyles);\n protected readonly toggle = effect(() =>\n this.el.classList.toggle(\n '_chevron-rotated',\n this.chevron() || (this.chevron() === '' && !!this.dropdown?.ref()),\n ),\n );\n\n // TODO: refactor to signal inputs after Angular update\n public readonly chevron = signal<boolean | ''>('');\n\n @Input()\n public set tuiChevron(chevron: boolean | '') {\n this.chevron.set(chevron);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAmBa,WAAW,GAAG,cAAc,CAAC,mBAAmB,EAAE;AAE/D,MAQM,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,iHANR,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+oBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAMV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBARrB,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACN,QAAA,EAAA,EAAE,EAEG,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA,EAAC,KAAK,EAAE,aAAa,EAAC,EAAA,MAAA,EAAA,CAAA,+oBAAA,CAAA,EAAA,CAAA;;AAIhC,MAMa,UAAU,CAAA;AANvB,IAAA,WAAA,GAAA;QAOqB,IAAE,CAAA,EAAA,GAAG,gBAAgB,EAAE,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAExD,QAAA,IAAA,CAAA,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAC/B,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CACpB,kBAAkB,EAClB,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CACtE,CACJ,CAAC;;AAGc,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAe,EAAE,CAAC,CAAC;AAMtD,KAAA;IAJG,IACW,UAAU,CAAC,OAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC7B;+GAlBQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,EAAA,EAAA,SAAA,EAHR,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAGzC,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;oBACxB,SAAS,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAClD,oBAAA,IAAI,EAAE,EAAC,UAAU,EAAE,EAAE,EAAC;AACzB,iBAAA,CAAA;8BAiBc,UAAU,EAAA,CAAA;sBADpB,KAAK;;;ACpDV;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-kit-directives-chevron.mjs","sources":["../../../projects/kit/directives/chevron/chevron.directive.ts","../../../projects/kit/directives/chevron/taiga-ui-kit-directives-chevron.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n effect,\n inject,\n Input,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {\n tuiCreateToken,\n tuiProvide,\n tuiWithStyles,\n} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TuiDropdownDirective} from '@taiga-ui/core/directives/dropdown';\nimport {TUI_ICON_END} from '@taiga-ui/core/tokens';\n\nexport const TUI_CHEVRON = tuiCreateToken('@tui.chevron-down');\n\n@Component({\n standalone: true,\n template: '',\n styleUrls: ['./chevron.style.less'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {class: 'tui-chevron'},\n})\nclass TuiChevronStyles {}\n\n@Directive({\n standalone: true,\n selector: '[tuiChevron]',\n providers: [tuiProvide(TUI_ICON_END, TUI_CHEVRON)],\n host: {tuiChevron: ''},\n})\nexport class TuiChevron {\n private readonly el = tuiInjectElement();\n private readonly dropdown = inject(TuiDropdownDirective, {optional: true});\n\n protected readonly nothing = tuiWithStyles(TuiChevronStyles);\n protected readonly toggle = effect(() =>\n this.el.classList.toggle(\n '_chevron-rotated',\n this.chevron() || (this.chevron() === '' && !!this.dropdown?.ref()),\n ),\n );\n\n // TODO: refactor to signal inputs after Angular update\n public readonly chevron = signal<boolean | ''>('');\n\n @Input()\n public set tuiChevron(chevron: boolean | '') {\n this.chevron.set(chevron);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAmBa,WAAW,GAAG,cAAc,CAAC,mBAAmB,EAAE;AAE/D,MAQM,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,iHANR,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6qBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;;4FAMV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBARrB,SAAS;AACM,YAAA,IAAA,EAAA,CAAA,EAAA,UAAA,EAAA,IAAI,EACN,QAAA,EAAA,EAAE,EAEG,aAAA,EAAA,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EACzC,IAAA,EAAA,EAAC,KAAK,EAAE,aAAa,EAAC,EAAA,MAAA,EAAA,CAAA,6qBAAA,CAAA,EAAA,CAAA;;AAIhC,MAMa,UAAU,CAAA;AANvB,IAAA,WAAA,GAAA;QAOqB,IAAE,CAAA,EAAA,GAAG,gBAAgB,EAAE,CAAC;QACxB,IAAQ,CAAA,QAAA,GAAG,MAAM,CAAC,oBAAoB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAExD,QAAA,IAAA,CAAA,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAC1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAC/B,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CACpB,kBAAkB,EAClB,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CACtE,CACJ,CAAC;;AAGc,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAe,EAAE,CAAC,CAAC;AAMtD,KAAA;IAJG,IACW,UAAU,CAAC,OAAqB,EAAA;AACvC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KAC7B;+GAlBQ,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,YAAA,EAAA,EAAA,EAAA,EAAA,EAAA,SAAA,EAHR,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAGzC,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,cAAc;oBACxB,SAAS,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAClD,oBAAA,IAAI,EAAE,EAAC,UAAU,EAAE,EAAE,EAAC;AACzB,iBAAA,CAAA;8BAiBc,UAAU,EAAA,CAAA;sBADpB,KAAK;;;ACpDV;;AAEG;;;;"}
@@ -9,7 +9,7 @@ import { TUI_DEFAULT_ERROR_MESSAGE } from '@taiga-ui/core/tokens';
9
9
 
10
10
  function tuiCreateUnfinishedValidator(element, message) {
11
11
  return ({ value, }) => value === null && element.value !== ''
12
- ? { unfinished: new TuiValidationError(message) }
12
+ ? { tuiUnfinished: message ? new TuiValidationError(message) : '' }
13
13
  : null;
14
14
  }
15
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-directives-unfinished-validator.mjs","sources":["../../../projects/kit/directives/unfinished-validator/unfinished.validator.ts","../../../projects/kit/directives/unfinished-validator/unfinished-validator.directive.ts","../../../projects/kit/directives/unfinished-validator/taiga-ui-kit-directives-unfinished-validator.ts"],"sourcesContent":["import type {AbstractControl, ValidatorFn} from '@angular/forms';\nimport {TuiValidationError} from '@taiga-ui/cdk/classes';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport function tuiCreateUnfinishedValidator(\n element: HTMLInputElement,\n message: PolymorpheusContent,\n): ValidatorFn {\n return ({\n value,\n }: AbstractControl): {unfinished: TuiValidationError | string} | null =>\n value === null && element.value !== ''\n ? {unfinished: new TuiValidationError(message)}\n : null;\n}\n","import {Directive, inject, Input} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport type {Validator} from '@angular/forms';\nimport {NG_VALIDATORS} from '@angular/forms';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_DEFAULT_ERROR_MESSAGE} from '@taiga-ui/core/tokens';\n\nimport {tuiCreateUnfinishedValidator} from './unfinished.validator';\n\n@Directive({\n standalone: true,\n selector: 'input[tuiUnfinishedValidator]',\n providers: [tuiProvide(NG_VALIDATORS, TuiUnfinishedValidator, true)],\n})\nexport class TuiUnfinishedValidator implements Validator {\n private readonly default = toSignal(inject(TUI_DEFAULT_ERROR_MESSAGE));\n private readonly el = tuiInjectElement<HTMLInputElement>();\n\n @Input()\n public tuiUnfinishedValidator = '';\n\n public readonly validate = tuiCreateUnfinishedValidator(\n this.el,\n () => this.tuiUnfinishedValidator || this.default(),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAIgB,SAAA,4BAA4B,CACxC,OAAyB,EACzB,OAA4B,EAAA;AAE5B,IAAA,OAAO,CAAC,EACJ,KAAK,GACS,KACd,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE;UAChC,EAAC,UAAU,EAAE,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAC;UAC7C,IAAI,CAAC;AACnB;;ACJA,MAKa,sBAAsB,CAAA;AALnC,IAAA,WAAA,GAAA;QAMqB,IAAO,CAAA,OAAA,GAAG,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACtD,IAAE,CAAA,EAAA,GAAG,gBAAgB,EAAoB,CAAC;QAGpD,IAAsB,CAAA,sBAAA,GAAG,EAAE,CAAC;AAEnB,QAAA,IAAA,CAAA,QAAQ,GAAG,4BAA4B,CACnD,IAAI,CAAC,EAAE,EACP,MAAM,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,OAAO,EAAE,CACtD,CAAC;AACL,KAAA;+GAXY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAFpB,CAAC,UAAU,CAAC,aAAa,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAE3D,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,+BAA+B;oBACzC,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,EAA0B,sBAAA,EAAA,IAAI,CAAC,CAAC;AACvE,iBAAA,CAAA;8BAMU,sBAAsB,EAAA,CAAA;sBAD5B,KAAK;;;ACnBV;;AAEG;;;;"}
1
+ {"version":3,"file":"taiga-ui-kit-directives-unfinished-validator.mjs","sources":["../../../projects/kit/directives/unfinished-validator/unfinished.validator.ts","../../../projects/kit/directives/unfinished-validator/unfinished-validator.directive.ts","../../../projects/kit/directives/unfinished-validator/taiga-ui-kit-directives-unfinished-validator.ts"],"sourcesContent":["import type {AbstractControl, ValidatorFn} from '@angular/forms';\nimport {TuiValidationError} from '@taiga-ui/cdk/classes';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport function tuiCreateUnfinishedValidator(\n element: HTMLInputElement,\n message: PolymorpheusContent,\n): ValidatorFn {\n return ({\n value,\n }: AbstractControl): {tuiUnfinished: TuiValidationError | string} | null =>\n value === null && element.value !== ''\n ? {tuiUnfinished: message ? new TuiValidationError(message) : ''}\n : null;\n}\n","import {Directive, inject, Input} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport type {Validator} from '@angular/forms';\nimport {NG_VALIDATORS} from '@angular/forms';\nimport {tuiInjectElement} from '@taiga-ui/cdk/utils/dom';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_DEFAULT_ERROR_MESSAGE} from '@taiga-ui/core/tokens';\n\nimport {tuiCreateUnfinishedValidator} from './unfinished.validator';\n\n@Directive({\n standalone: true,\n selector: 'input[tuiUnfinishedValidator]',\n providers: [tuiProvide(NG_VALIDATORS, TuiUnfinishedValidator, true)],\n})\nexport class TuiUnfinishedValidator implements Validator {\n private readonly default = toSignal(inject(TUI_DEFAULT_ERROR_MESSAGE));\n private readonly el = tuiInjectElement<HTMLInputElement>();\n\n @Input()\n public tuiUnfinishedValidator = '';\n\n public readonly validate = tuiCreateUnfinishedValidator(\n this.el,\n () => this.tuiUnfinishedValidator || this.default(),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAIgB,SAAA,4BAA4B,CACxC,OAAyB,EACzB,OAA4B,EAAA;AAE5B,IAAA,OAAO,CAAC,EACJ,KAAK,GACS,KACd,KAAK,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE;AAClC,UAAE,EAAC,aAAa,EAAE,OAAO,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAC;UAC/D,IAAI,CAAC;AACnB;;ACJA,MAKa,sBAAsB,CAAA;AALnC,IAAA,WAAA,GAAA;QAMqB,IAAO,CAAA,OAAA,GAAG,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACtD,IAAE,CAAA,EAAA,GAAG,gBAAgB,EAAoB,CAAC;QAGpD,IAAsB,CAAA,sBAAA,GAAG,EAAE,CAAC;AAEnB,QAAA,IAAA,CAAA,QAAQ,GAAG,4BAA4B,CACnD,IAAI,CAAC,EAAE,EACP,MAAM,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,OAAO,EAAE,CACtD,CAAC;AACL,KAAA;+GAXY,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,SAAA,EAFpB,CAAC,UAAU,CAAC,aAAa,EAAE,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAE3D,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,+BAA+B;oBACzC,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,EAA0B,sBAAA,EAAA,IAAI,CAAC,CAAC;AACvE,iBAAA,CAAA;8BAMU,sBAAsB,EAAA,CAAA;sBAD5B,KAAK;;;ACnBV;;AAEG;;;;"}
@@ -3,6 +3,7 @@ import { NgControl } from '@angular/forms';
3
3
  import { tuiControlValue } from '@taiga-ui/cdk/observables';
4
4
  import { tuiCreateToken, tuiCreateTokenFromFactory, tuiProvideOptions } from '@taiga-ui/cdk/utils/miscellaneous';
5
5
  import { map, of } from 'rxjs';
6
+ import { TUI_IDENTITY_VALUE_TRANSFORMER } from '@taiga-ui/cdk/classes';
6
7
  import { tuiExtractI18n } from '@taiga-ui/i18n/utils';
7
8
  import { TUI_FIRST_DAY, TUI_LAST_DAY } from '@taiga-ui/cdk/date-time';
8
9
  import { tuiCreateOptions } from '@taiga-ui/cdk/utils/di';
@@ -13,6 +14,7 @@ import { TUI_MONTHS } from '@taiga-ui/core/tokens';
13
14
 
14
15
  /**
15
16
  * Stream that emits calendar data change
17
+ * @deprecated this should be rewritten in v5
16
18
  */
17
19
  const TUI_CALENDAR_DATE_STREAM = tuiCreateToken();
18
20
  function tuiDateStreamWithTransformer(transformer) {
@@ -31,11 +33,10 @@ function tuiControlValueFactory(control, transformer) {
31
33
  : of(null);
32
34
  }
33
35
 
34
- // TODO: Refactor to use `TuiValueTransformer` and add ability to provide it for all controls
35
36
  /**
36
37
  * Control value transformer of TuiDay to custom value format for InputDate* components
37
38
  */
38
- const TUI_DATE_VALUE_TRANSFORMER = tuiCreateToken();
39
+ const TUI_DATE_VALUE_TRANSFORMER = tuiCreateToken(TUI_IDENTITY_VALUE_TRANSFORMER);
39
40
  /**
40
41
  * Control value transformer for InputDateRange component
41
42
  */
@@ -1 +1 @@
1
- {"version":3,"file":"taiga-ui-kit-tokens.mjs","sources":["../../../projects/kit/tokens/calendar-date-stream.ts","../../../projects/kit/tokens/date-inputs-value-transformers.ts","../../../projects/kit/tokens/i18n.ts","../../../projects/kit/tokens/input-date-options.ts","../../../projects/kit/tokens/items-handlers.ts","../../../projects/kit/tokens/mobile-calendar.ts","../../../projects/kit/tokens/month-formatter.ts","../../../projects/kit/tokens/preview-icons.ts","../../../projects/kit/tokens/validation-errors.ts","../../../projects/kit/tokens/taiga-ui-kit-tokens.ts"],"sourcesContent":["import type {InjectionToken, Provider} from '@angular/core';\nimport {Optional, Self} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport type {TuiDay, TuiDayRange, TuiTime} from '@taiga-ui/cdk/date-time';\nimport {tuiControlValue} from '@taiga-ui/cdk/observables';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {Observable} from 'rxjs';\nimport {map, of} from 'rxjs';\n\n/**\n * Stream that emits calendar data change\n */\nexport const TUI_CALENDAR_DATE_STREAM =\n tuiCreateToken<Observable<TuiDay | TuiDayRange | null>>();\n\nexport function tuiDateStreamWithTransformer(\n transformer: InjectionToken<TuiValueTransformer<any>>,\n): Provider {\n return {\n provide: TUI_CALENDAR_DATE_STREAM,\n deps: [\n [new Optional(), new Self(), NgControl],\n [new Optional(), transformer],\n ],\n useFactory: tuiControlValueFactory,\n };\n}\n\nfunction tuiControlValueFactory<\n T extends TuiDay | TuiDayRange | [TuiDay, TuiTime | null],\n>(\n control: NgControl | null,\n transformer?: TuiValueTransformer<T> | null,\n): Observable<T | null> | null {\n return control\n ? tuiControlValue(control).pipe(\n map((value) =>\n transformer ? transformer?.fromControlValue(value) : (value as T),\n ),\n )\n : of(null);\n}\n","import type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport type {TuiDay, TuiDayRange, TuiTime} from '@taiga-ui/cdk/date-time';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\n\n// TODO: Refactor to use `TuiValueTransformer` and add ability to provide it for all controls\n\n/**\n * Control value transformer of TuiDay to custom value format for InputDate* components\n */\nexport const TUI_DATE_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<TuiDay | null>>();\n\n/**\n * Control value transformer for InputDateRange component\n */\nexport const TUI_DATE_RANGE_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<TuiDayRange | null>>();\n\n/**\n * Control value transformer for InputDateTime component\n */\nexport const TUI_DATE_TIME_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<[TuiDay, TuiTime | null]>>();\n\n/**\n * Control value transformer for InputTime component\n */\nexport const TUI_TIME_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<TuiTime | null>>();\n","import type {TuiDateMode} from '@taiga-ui/cdk/date-time';\nimport {tuiCreateTokenFromFactory} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {tuiExtractI18n} from '@taiga-ui/i18n/utils';\nimport type {Observable} from 'rxjs';\n\nexport const TUI_CONFIRM_WORDS = tuiCreateTokenFromFactory(tuiExtractI18n('confirm'));\n\nexport const TUI_CANCEL_WORD = tuiCreateTokenFromFactory(tuiExtractI18n('cancel'));\n\nexport const TUI_DONE_WORD = tuiCreateTokenFromFactory(tuiExtractI18n('done'));\n\nexport const TUI_MORE_WORD = tuiCreateTokenFromFactory(tuiExtractI18n('more'));\n\nexport const TUI_HIDE_TEXT = tuiCreateTokenFromFactory(tuiExtractI18n('hide'));\n\nexport const TUI_SHOW_ALL_TEXT = tuiCreateTokenFromFactory(tuiExtractI18n('showAll'));\n\nexport const TUI_OTHER_DATE_TEXT = tuiCreateTokenFromFactory(tuiExtractI18n('otherDate'));\n\nexport const TUI_CHOOSE_DAY_OR_RANGE_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('mobileCalendarTexts'),\n);\n\nexport const TUI_FROM_TO_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('range'));\n\nexport const TUI_PLUS_MINUS_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('countTexts'),\n);\n\nexport const TUI_TIME_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('time'));\n\nexport const TUI_DATE_TEXTS = tuiCreateTokenFromFactory<\n Observable<Record<TuiDateMode, string>>\n>(tuiExtractI18n('dateTexts'));\n\nexport const TUI_DIGITAL_INFORMATION_UNITS = tuiCreateTokenFromFactory(\n tuiExtractI18n('digitalInformationUnits'),\n);\n\nexport const TUI_COPY_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('copyTexts'));\n\nexport const TUI_PASSWORD_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('passwordTexts'),\n);\n\nexport const TUI_CALENDAR_MONTHS = tuiCreateTokenFromFactory(\n tuiExtractI18n('shortCalendarMonths'),\n);\n\nexport const TUI_FILE_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('fileTexts'));\n\nexport const TUI_PAGINATION_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('pagination'),\n);\n\nexport const TUI_INPUT_FILE_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('inputFileTexts'),\n);\n\nexport const TUI_MULTI_SELECT_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('multiSelectTexts'),\n);\n\nexport const TUI_COUNTRIES = tuiCreateTokenFromFactory<\n Observable<Record<TuiCountryIsoCode, string>>\n>(tuiExtractI18n('countries'));\n\nexport const TUI_PREVIEW_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('previewTexts'),\n);\n\nexport const TUI_PREVIEW_ZOOM_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('zoomTexts'),\n);\n\nexport const TUI_INTERNATIONAL_SEARCH = tuiCreateTokenFromFactory(\n tuiExtractI18n('phoneSearch'),\n);\n","import type {TuiDay} from '@taiga-ui/cdk/date-time';\nimport {TUI_FIRST_DAY, TUI_LAST_DAY} from '@taiga-ui/cdk/date-time';\nimport type {TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport type {TuiSizeL, TuiSizeS} from '@taiga-ui/core/types';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport interface TuiInputDateOptions {\n readonly icon: PolymorpheusContent<TuiContext<TuiSizeL | TuiSizeS>>;\n readonly max: TuiDay;\n readonly min: TuiDay;\n readonly nativePicker: boolean;\n}\n\nexport const TUI_INPUT_DATE_DEFAULT_OPTIONS: TuiInputDateOptions = {\n icon: () => '@tui.calendar',\n min: TUI_FIRST_DAY,\n max: TUI_LAST_DAY,\n nativePicker: false,\n};\n\n/**\n * Default parameters for InputDate component\n */\nexport const [TUI_INPUT_DATE_OPTIONS, tuiInputDateOptionsProvider] = tuiCreateOptions(\n TUI_INPUT_DATE_DEFAULT_OPTIONS,\n);\n","import type {Provider} from '@angular/core';\nimport {TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport type {\n TuiBooleanHandler,\n TuiIdentityMatcher,\n TuiStringHandler,\n} from '@taiga-ui/cdk/types';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport interface TuiItemsHandlers<T> {\n readonly disabledItemHandler: TuiBooleanHandler<T>;\n readonly identityMatcher: TuiIdentityMatcher<T>;\n readonly stringify: TuiStringHandler<T>;\n}\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport const TUI_DEFAULT_ITEMS_HANDLERS: TuiItemsHandlers<unknown> = {\n stringify: String,\n identityMatcher: TUI_DEFAULT_IDENTITY_MATCHER,\n disabledItemHandler: TUI_FALSE_HANDLER,\n};\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport const TUI_ITEMS_HANDLERS = tuiCreateToken(TUI_DEFAULT_ITEMS_HANDLERS);\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport function tuiItemsHandlersProvider<T>(\n options: Partial<TuiItemsHandlers<T>>,\n): Provider {\n return tuiProvideOptions(TUI_ITEMS_HANDLERS, options, TUI_DEFAULT_ITEMS_HANDLERS);\n}\n","import type {FactoryProvider, Type} from '@angular/core';\nimport {inject} from '@angular/core';\nimport {TUI_IS_MOBILE} from '@taiga-ui/cdk/tokens';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_DROPDOWN_COMPONENT} from '@taiga-ui/core/directives/dropdown';\n\n/**\n * A component for mobile data picker\n */\nexport const TUI_MOBILE_CALENDAR = tuiCreateToken<Type<unknown>>();\n\nexport const TUI_MOBILE_CALENDAR_PROVIDER: FactoryProvider = {\n provide: TUI_DROPDOWN_COMPONENT,\n useFactory: () =>\n (inject(TUI_IS_MOBILE) && inject(TUI_MOBILE_CALENDAR, {optional: true})) ||\n inject(TUI_DROPDOWN_COMPONENT, {skipSelf: true}),\n};\n","import {inject} from '@angular/core';\nimport type {TuiMonth} from '@taiga-ui/cdk/date-time';\nimport type {TuiHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateTokenFromFactory} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_MONTHS} from '@taiga-ui/core/tokens';\nimport type {Observable} from 'rxjs';\nimport {map} from 'rxjs';\n\nexport const TUI_MONTH_FORMATTER = tuiCreateTokenFromFactory<\n Observable<TuiHandler<TuiMonth | null, string>>\n>(() =>\n inject(TUI_MONTHS).pipe(\n map((months) => (date) => {\n if (!date) {\n return '';\n }\n\n return `${months[date.month] ?? ''} ${date.formattedYear}`;\n }),\n ),\n);\n","import type {Provider} from '@angular/core';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport interface TuiPreviewIcons {\n readonly next: string;\n readonly prev: string;\n readonly rotate: string;\n readonly zoomIn: string;\n readonly zoomOut: string;\n readonly zoomReset: string;\n}\n\nexport const TUI_PREVIEW_ICONS_DEFAULT: TuiPreviewIcons = {\n rotate: '@tui.rotate-ccw-square',\n prev: '@tui.arrow-left',\n next: '@tui.arrow-right',\n zoomIn: '@tui.plus',\n zoomOut: '@tui.minus',\n zoomReset: '@tui.minimize',\n};\n\nexport const TUI_PREVIEW_ICONS = tuiCreateToken(TUI_PREVIEW_ICONS_DEFAULT);\n\nexport function tuiPreviewIconsProvider(icons: Partial<TuiPreviewIcons>): Provider {\n return tuiProvideOptions(TUI_PREVIEW_ICONS, icons, TUI_PREVIEW_ICONS_DEFAULT);\n}\n","import type {Provider} from '@angular/core';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport type {Observable} from 'rxjs';\n\nexport const TUI_VALIDATION_ERRORS = tuiCreateToken<\n Record<string, Observable<PolymorpheusContent> | PolymorpheusContent>\n>({});\n\nexport const tuiValidationErrorsProvider = (\n useValue: Record<string, Observable<PolymorpheusContent> | PolymorpheusContent>,\n): Provider => ({provide: TUI_VALIDATION_ERRORS, useValue});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taiga-ui-kit-tokens.mjs","sources":["../../../projects/kit/tokens/calendar-date-stream.ts","../../../projects/kit/tokens/date-inputs-value-transformers.ts","../../../projects/kit/tokens/i18n.ts","../../../projects/kit/tokens/input-date-options.ts","../../../projects/kit/tokens/items-handlers.ts","../../../projects/kit/tokens/mobile-calendar.ts","../../../projects/kit/tokens/month-formatter.ts","../../../projects/kit/tokens/preview-icons.ts","../../../projects/kit/tokens/validation-errors.ts","../../../projects/kit/tokens/taiga-ui-kit-tokens.ts"],"sourcesContent":["import type {InjectionToken, Provider} from '@angular/core';\nimport {Optional, Self} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport type {TuiDay, TuiDayRange, TuiTime} from '@taiga-ui/cdk/date-time';\nimport {tuiControlValue} from '@taiga-ui/cdk/observables';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {Observable} from 'rxjs';\nimport {map, of} from 'rxjs';\n\n/**\n * Stream that emits calendar data change\n * @deprecated this should be rewritten in v5\n */\nexport const TUI_CALENDAR_DATE_STREAM =\n tuiCreateToken<Observable<TuiDay | TuiDayRange | null>>();\n\nexport function tuiDateStreamWithTransformer(\n transformer: InjectionToken<TuiValueTransformer<any>>,\n): Provider {\n return {\n provide: TUI_CALENDAR_DATE_STREAM,\n deps: [\n [new Optional(), new Self(), NgControl],\n [new Optional(), transformer],\n ],\n useFactory: tuiControlValueFactory,\n };\n}\n\nfunction tuiControlValueFactory<\n T extends TuiDay | TuiDayRange | [TuiDay, TuiTime | null],\n>(\n control: NgControl | null,\n transformer?: TuiValueTransformer<T> | null,\n): Observable<T | null> | null {\n return control\n ? tuiControlValue(control).pipe(\n map((value) =>\n transformer ? transformer?.fromControlValue(value) : (value as T),\n ),\n )\n : of(null);\n}\n","import type {TuiValueTransformer} from '@taiga-ui/cdk/classes';\nimport {TUI_IDENTITY_VALUE_TRANSFORMER} from '@taiga-ui/cdk/classes';\nimport type {TuiDay, TuiDayRange, TuiTime} from '@taiga-ui/cdk/date-time';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * Control value transformer of TuiDay to custom value format for InputDate* components\n */\nexport const TUI_DATE_VALUE_TRANSFORMER = tuiCreateToken<\n TuiValueTransformer<TuiDay | null>\n>(TUI_IDENTITY_VALUE_TRANSFORMER);\n\n/**\n * Control value transformer for InputDateRange component\n */\nexport const TUI_DATE_RANGE_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<TuiDayRange | null>>();\n\n/**\n * Control value transformer for InputDateTime component\n */\nexport const TUI_DATE_TIME_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<[TuiDay, TuiTime | null]>>();\n\n/**\n * Control value transformer for InputTime component\n */\nexport const TUI_TIME_VALUE_TRANSFORMER =\n tuiCreateToken<TuiValueTransformer<TuiTime | null>>();\n","import type {TuiDateMode} from '@taiga-ui/cdk/date-time';\nimport {tuiCreateTokenFromFactory} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {TuiCountryIsoCode} from '@taiga-ui/i18n/types';\nimport {tuiExtractI18n} from '@taiga-ui/i18n/utils';\nimport type {Observable} from 'rxjs';\n\nexport const TUI_CONFIRM_WORDS = tuiCreateTokenFromFactory(tuiExtractI18n('confirm'));\n\nexport const TUI_CANCEL_WORD = tuiCreateTokenFromFactory(tuiExtractI18n('cancel'));\n\nexport const TUI_DONE_WORD = tuiCreateTokenFromFactory(tuiExtractI18n('done'));\n\nexport const TUI_MORE_WORD = tuiCreateTokenFromFactory(tuiExtractI18n('more'));\n\nexport const TUI_HIDE_TEXT = tuiCreateTokenFromFactory(tuiExtractI18n('hide'));\n\nexport const TUI_SHOW_ALL_TEXT = tuiCreateTokenFromFactory(tuiExtractI18n('showAll'));\n\nexport const TUI_OTHER_DATE_TEXT = tuiCreateTokenFromFactory(tuiExtractI18n('otherDate'));\n\nexport const TUI_CHOOSE_DAY_OR_RANGE_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('mobileCalendarTexts'),\n);\n\nexport const TUI_FROM_TO_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('range'));\n\nexport const TUI_PLUS_MINUS_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('countTexts'),\n);\n\nexport const TUI_TIME_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('time'));\n\nexport const TUI_DATE_TEXTS = tuiCreateTokenFromFactory<\n Observable<Record<TuiDateMode, string>>\n>(tuiExtractI18n('dateTexts'));\n\nexport const TUI_DIGITAL_INFORMATION_UNITS = tuiCreateTokenFromFactory(\n tuiExtractI18n('digitalInformationUnits'),\n);\n\nexport const TUI_COPY_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('copyTexts'));\n\nexport const TUI_PASSWORD_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('passwordTexts'),\n);\n\nexport const TUI_CALENDAR_MONTHS = tuiCreateTokenFromFactory(\n tuiExtractI18n('shortCalendarMonths'),\n);\n\nexport const TUI_FILE_TEXTS = tuiCreateTokenFromFactory(tuiExtractI18n('fileTexts'));\n\nexport const TUI_PAGINATION_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('pagination'),\n);\n\nexport const TUI_INPUT_FILE_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('inputFileTexts'),\n);\n\nexport const TUI_MULTI_SELECT_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('multiSelectTexts'),\n);\n\nexport const TUI_COUNTRIES = tuiCreateTokenFromFactory<\n Observable<Record<TuiCountryIsoCode, string>>\n>(tuiExtractI18n('countries'));\n\nexport const TUI_PREVIEW_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('previewTexts'),\n);\n\nexport const TUI_PREVIEW_ZOOM_TEXTS = tuiCreateTokenFromFactory(\n tuiExtractI18n('zoomTexts'),\n);\n\nexport const TUI_INTERNATIONAL_SEARCH = tuiCreateTokenFromFactory(\n tuiExtractI18n('phoneSearch'),\n);\n","import type {TuiDay} from '@taiga-ui/cdk/date-time';\nimport {TUI_FIRST_DAY, TUI_LAST_DAY} from '@taiga-ui/cdk/date-time';\nimport type {TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiCreateOptions} from '@taiga-ui/cdk/utils/di';\nimport type {TuiSizeL, TuiSizeS} from '@taiga-ui/core/types';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport interface TuiInputDateOptions {\n readonly icon: PolymorpheusContent<TuiContext<TuiSizeL | TuiSizeS>>;\n readonly max: TuiDay;\n readonly min: TuiDay;\n readonly nativePicker: boolean;\n}\n\nexport const TUI_INPUT_DATE_DEFAULT_OPTIONS: TuiInputDateOptions = {\n icon: () => '@tui.calendar',\n min: TUI_FIRST_DAY,\n max: TUI_LAST_DAY,\n nativePicker: false,\n};\n\n/**\n * Default parameters for InputDate component\n */\nexport const [TUI_INPUT_DATE_OPTIONS, tuiInputDateOptionsProvider] = tuiCreateOptions(\n TUI_INPUT_DATE_DEFAULT_OPTIONS,\n);\n","import type {Provider} from '@angular/core';\nimport {TUI_DEFAULT_IDENTITY_MATCHER, TUI_FALSE_HANDLER} from '@taiga-ui/cdk/constants';\nimport type {\n TuiBooleanHandler,\n TuiIdentityMatcher,\n TuiStringHandler,\n} from '@taiga-ui/cdk/types';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport interface TuiItemsHandlers<T> {\n readonly disabledItemHandler: TuiBooleanHandler<T>;\n readonly identityMatcher: TuiIdentityMatcher<T>;\n readonly stringify: TuiStringHandler<T>;\n}\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport const TUI_DEFAULT_ITEMS_HANDLERS: TuiItemsHandlers<unknown> = {\n stringify: String,\n identityMatcher: TUI_DEFAULT_IDENTITY_MATCHER,\n disabledItemHandler: TUI_FALSE_HANDLER,\n};\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport const TUI_ITEMS_HANDLERS = tuiCreateToken(TUI_DEFAULT_ITEMS_HANDLERS);\n\n/**\n * @deprecated use it only for LEGACY controls. For new controls use the same entity from `@taiga-ui/kit`.\n * TODO(v5): delete\n */\nexport function tuiItemsHandlersProvider<T>(\n options: Partial<TuiItemsHandlers<T>>,\n): Provider {\n return tuiProvideOptions(TUI_ITEMS_HANDLERS, options, TUI_DEFAULT_ITEMS_HANDLERS);\n}\n","import type {FactoryProvider, Type} from '@angular/core';\nimport {inject} from '@angular/core';\nimport {TUI_IS_MOBILE} from '@taiga-ui/cdk/tokens';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_DROPDOWN_COMPONENT} from '@taiga-ui/core/directives/dropdown';\n\n/**\n * A component for mobile data picker\n */\nexport const TUI_MOBILE_CALENDAR = tuiCreateToken<Type<unknown>>();\n\nexport const TUI_MOBILE_CALENDAR_PROVIDER: FactoryProvider = {\n provide: TUI_DROPDOWN_COMPONENT,\n useFactory: () =>\n (inject(TUI_IS_MOBILE) && inject(TUI_MOBILE_CALENDAR, {optional: true})) ||\n inject(TUI_DROPDOWN_COMPONENT, {skipSelf: true}),\n};\n","import {inject} from '@angular/core';\nimport type {TuiMonth} from '@taiga-ui/cdk/date-time';\nimport type {TuiHandler} from '@taiga-ui/cdk/types';\nimport {tuiCreateTokenFromFactory} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {TUI_MONTHS} from '@taiga-ui/core/tokens';\nimport type {Observable} from 'rxjs';\nimport {map} from 'rxjs';\n\nexport const TUI_MONTH_FORMATTER = tuiCreateTokenFromFactory<\n Observable<TuiHandler<TuiMonth | null, string>>\n>(() =>\n inject(TUI_MONTHS).pipe(\n map((months) => (date) => {\n if (!date) {\n return '';\n }\n\n return `${months[date.month] ?? ''} ${date.formattedYear}`;\n }),\n ),\n);\n","import type {Provider} from '@angular/core';\nimport {tuiCreateToken, tuiProvideOptions} from '@taiga-ui/cdk/utils/miscellaneous';\n\nexport interface TuiPreviewIcons {\n readonly next: string;\n readonly prev: string;\n readonly rotate: string;\n readonly zoomIn: string;\n readonly zoomOut: string;\n readonly zoomReset: string;\n}\n\nexport const TUI_PREVIEW_ICONS_DEFAULT: TuiPreviewIcons = {\n rotate: '@tui.rotate-ccw-square',\n prev: '@tui.arrow-left',\n next: '@tui.arrow-right',\n zoomIn: '@tui.plus',\n zoomOut: '@tui.minus',\n zoomReset: '@tui.minimize',\n};\n\nexport const TUI_PREVIEW_ICONS = tuiCreateToken(TUI_PREVIEW_ICONS_DEFAULT);\n\nexport function tuiPreviewIconsProvider(icons: Partial<TuiPreviewIcons>): Provider {\n return tuiProvideOptions(TUI_PREVIEW_ICONS, icons, TUI_PREVIEW_ICONS_DEFAULT);\n}\n","import type {Provider} from '@angular/core';\nimport {tuiCreateToken} from '@taiga-ui/cdk/utils/miscellaneous';\nimport type {PolymorpheusContent} from '@taiga-ui/polymorpheus';\nimport type {Observable} from 'rxjs';\n\nexport const TUI_VALIDATION_ERRORS = tuiCreateToken<\n Record<string, Observable<PolymorpheusContent> | PolymorpheusContent>\n>({});\n\nexport const tuiValidationErrorsProvider = (\n useValue: Record<string, Observable<PolymorpheusContent> | PolymorpheusContent>,\n): Provider => ({provide: TUI_VALIDATION_ERRORS, useValue});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ui/kit",
3
- "version": "4.38.0-canary.507d44d",
3
+ "version": "4.38.0-canary.99e3a33",
4
4
  "description": "Taiga UI Angular main components kit",
5
5
  "keywords": [
6
6
  "angular",
@@ -29,18 +29,18 @@
29
29
  "esm": "./esm2022/components/taiga-ui-kit-components.mjs",
30
30
  "default": "./fesm2022/taiga-ui-kit-components.mjs"
31
31
  },
32
- "./pipes": {
33
- "types": "./pipes/index.d.ts",
34
- "esm2022": "./esm2022/pipes/taiga-ui-kit-pipes.mjs",
35
- "esm": "./esm2022/pipes/taiga-ui-kit-pipes.mjs",
36
- "default": "./fesm2022/taiga-ui-kit-pipes.mjs"
37
- },
38
32
  "./directives": {
39
33
  "types": "./directives/index.d.ts",
40
34
  "esm2022": "./esm2022/directives/taiga-ui-kit-directives.mjs",
41
35
  "esm": "./esm2022/directives/taiga-ui-kit-directives.mjs",
42
36
  "default": "./fesm2022/taiga-ui-kit-directives.mjs"
43
37
  },
38
+ "./pipes": {
39
+ "types": "./pipes/index.d.ts",
40
+ "esm2022": "./esm2022/pipes/taiga-ui-kit-pipes.mjs",
41
+ "esm": "./esm2022/pipes/taiga-ui-kit-pipes.mjs",
42
+ "default": "./fesm2022/taiga-ui-kit-pipes.mjs"
43
+ },
44
44
  "./tokens": {
45
45
  "types": "./tokens/index.d.ts",
46
46
  "esm2022": "./esm2022/tokens/taiga-ui-kit-tokens.mjs",
@@ -401,42 +401,6 @@
401
401
  "esm": "./esm2022/components/tree/taiga-ui-kit-components-tree.mjs",
402
402
  "default": "./fesm2022/taiga-ui-kit-components-tree.mjs"
403
403
  },
404
- "./pipes/emails": {
405
- "types": "./pipes/emails/index.d.ts",
406
- "esm2022": "./esm2022/pipes/emails/taiga-ui-kit-pipes-emails.mjs",
407
- "esm": "./esm2022/pipes/emails/taiga-ui-kit-pipes-emails.mjs",
408
- "default": "./fesm2022/taiga-ui-kit-pipes-emails.mjs"
409
- },
410
- "./pipes/field-error": {
411
- "types": "./pipes/field-error/index.d.ts",
412
- "esm2022": "./esm2022/pipes/field-error/taiga-ui-kit-pipes-field-error.mjs",
413
- "esm": "./esm2022/pipes/field-error/taiga-ui-kit-pipes-field-error.mjs",
414
- "default": "./fesm2022/taiga-ui-kit-pipes-field-error.mjs"
415
- },
416
- "./pipes/filter-by-input": {
417
- "types": "./pipes/filter-by-input/index.d.ts",
418
- "esm2022": "./esm2022/pipes/filter-by-input/taiga-ui-kit-pipes-filter-by-input.mjs",
419
- "esm": "./esm2022/pipes/filter-by-input/taiga-ui-kit-pipes-filter-by-input.mjs",
420
- "default": "./fesm2022/taiga-ui-kit-pipes-filter-by-input.mjs"
421
- },
422
- "./pipes/sort-countries": {
423
- "types": "./pipes/sort-countries/index.d.ts",
424
- "esm2022": "./esm2022/pipes/sort-countries/taiga-ui-kit-pipes-sort-countries.mjs",
425
- "esm": "./esm2022/pipes/sort-countries/taiga-ui-kit-pipes-sort-countries.mjs",
426
- "default": "./fesm2022/taiga-ui-kit-pipes-sort-countries.mjs"
427
- },
428
- "./pipes/stringify": {
429
- "types": "./pipes/stringify/index.d.ts",
430
- "esm2022": "./esm2022/pipes/stringify/taiga-ui-kit-pipes-stringify.mjs",
431
- "esm": "./esm2022/pipes/stringify/taiga-ui-kit-pipes-stringify.mjs",
432
- "default": "./fesm2022/taiga-ui-kit-pipes-stringify.mjs"
433
- },
434
- "./pipes/stringify-content": {
435
- "types": "./pipes/stringify-content/index.d.ts",
436
- "esm2022": "./esm2022/pipes/stringify-content/taiga-ui-kit-pipes-stringify-content.mjs",
437
- "esm": "./esm2022/pipes/stringify-content/taiga-ui-kit-pipes-stringify-content.mjs",
438
- "default": "./fesm2022/taiga-ui-kit-pipes-stringify-content.mjs"
439
- },
440
404
  "./directives/button-close": {
441
405
  "types": "./directives/button-close/index.d.ts",
442
406
  "esm2022": "./esm2022/directives/button-close/taiga-ui-kit-directives-button-close.mjs",
@@ -551,6 +515,42 @@
551
515
  "esm": "./esm2022/directives/unmask-handler/taiga-ui-kit-directives-unmask-handler.mjs",
552
516
  "default": "./fesm2022/taiga-ui-kit-directives-unmask-handler.mjs"
553
517
  },
518
+ "./pipes/emails": {
519
+ "types": "./pipes/emails/index.d.ts",
520
+ "esm2022": "./esm2022/pipes/emails/taiga-ui-kit-pipes-emails.mjs",
521
+ "esm": "./esm2022/pipes/emails/taiga-ui-kit-pipes-emails.mjs",
522
+ "default": "./fesm2022/taiga-ui-kit-pipes-emails.mjs"
523
+ },
524
+ "./pipes/field-error": {
525
+ "types": "./pipes/field-error/index.d.ts",
526
+ "esm2022": "./esm2022/pipes/field-error/taiga-ui-kit-pipes-field-error.mjs",
527
+ "esm": "./esm2022/pipes/field-error/taiga-ui-kit-pipes-field-error.mjs",
528
+ "default": "./fesm2022/taiga-ui-kit-pipes-field-error.mjs"
529
+ },
530
+ "./pipes/filter-by-input": {
531
+ "types": "./pipes/filter-by-input/index.d.ts",
532
+ "esm2022": "./esm2022/pipes/filter-by-input/taiga-ui-kit-pipes-filter-by-input.mjs",
533
+ "esm": "./esm2022/pipes/filter-by-input/taiga-ui-kit-pipes-filter-by-input.mjs",
534
+ "default": "./fesm2022/taiga-ui-kit-pipes-filter-by-input.mjs"
535
+ },
536
+ "./pipes/sort-countries": {
537
+ "types": "./pipes/sort-countries/index.d.ts",
538
+ "esm2022": "./esm2022/pipes/sort-countries/taiga-ui-kit-pipes-sort-countries.mjs",
539
+ "esm": "./esm2022/pipes/sort-countries/taiga-ui-kit-pipes-sort-countries.mjs",
540
+ "default": "./fesm2022/taiga-ui-kit-pipes-sort-countries.mjs"
541
+ },
542
+ "./pipes/stringify": {
543
+ "types": "./pipes/stringify/index.d.ts",
544
+ "esm2022": "./esm2022/pipes/stringify/taiga-ui-kit-pipes-stringify.mjs",
545
+ "esm": "./esm2022/pipes/stringify/taiga-ui-kit-pipes-stringify.mjs",
546
+ "default": "./fesm2022/taiga-ui-kit-pipes-stringify.mjs"
547
+ },
548
+ "./pipes/stringify-content": {
549
+ "types": "./pipes/stringify-content/index.d.ts",
550
+ "esm2022": "./esm2022/pipes/stringify-content/taiga-ui-kit-pipes-stringify-content.mjs",
551
+ "esm": "./esm2022/pipes/stringify-content/taiga-ui-kit-pipes-stringify-content.mjs",
552
+ "default": "./fesm2022/taiga-ui-kit-pipes-stringify-content.mjs"
553
+ },
554
554
  "./components/preview/preview-dialog": {
555
555
  "types": "./components/preview/preview-dialog/index.d.ts",
556
556
  "esm2022": "./esm2022/components/preview/preview-dialog/taiga-ui-kit-components-preview-preview-dialog.mjs",
@@ -4,6 +4,7 @@ import type { TuiDay, TuiDayRange } from '@taiga-ui/cdk/date-time';
4
4
  import type { Observable } from 'rxjs';
5
5
  /**
6
6
  * Stream that emits calendar data change
7
+ * @deprecated this should be rewritten in v5
7
8
  */
8
9
  export declare const TUI_CALENDAR_DATE_STREAM: InjectionToken<Observable<TuiDay | TuiDayRange | null>>;
9
10
  export declare function tuiDateStreamWithTransformer(transformer: InjectionToken<TuiValueTransformer<any>>): Provider;
@@ -1,55 +0,0 @@
1
- import { NgIf } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, effect, inject, Input, signal, ViewEncapsulation, } from '@angular/core';
3
- import { TuiControl } from '@taiga-ui/cdk/classes';
4
- import { TUI_ALLOW_SIGNAL_WRITES } from '@taiga-ui/cdk/constants';
5
- import { TUI_FIRST_DAY, TUI_LAST_DAY, TuiMonth } from '@taiga-ui/cdk/date-time';
6
- import { TuiTextfieldContent } from '@taiga-ui/core/components/textfield';
7
- import { TuiInputMonthDirective } from '../input-month.directive';
8
- import * as i0 from "@angular/core";
9
- class TuiNativeMonthPicker {
10
- constructor() {
11
- this.control = inject(TuiControl);
12
- this.host = inject(TuiInputMonthDirective);
13
- this.min = signal(null);
14
- this.max = signal(null);
15
- this.calendarSync = effect(() => {
16
- const calendar = this.host.calendar();
17
- if (calendar) {
18
- calendar.min.set(this.min() ?? TUI_FIRST_DAY); // TODO(v5): remove TUI_FIRST_DAY fallback
19
- calendar.max.set(this.max() ?? TUI_LAST_DAY); // TODO(v5): remove TUI_LAST_DAY fallback
20
- }
21
- }, TUI_ALLOW_SIGNAL_WRITES);
22
- }
23
- // TODO(v5): use signal inputs
24
- set minSetter(x) {
25
- this.min.set(x);
26
- }
27
- // TODO(v5): use signal inputs
28
- set maxSetter(x) {
29
- this.max.set(x);
30
- }
31
- onInput(value) {
32
- if (!value) {
33
- return this.control.onChange(null);
34
- }
35
- const [year = 0, month = 0] = value.split('-').map(Number);
36
- this.control.onChange(new TuiMonth(year, month - 1));
37
- }
38
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiNativeMonthPicker, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiNativeMonthPicker, isStandalone: true, selector: "input[tuiInputMonth][type=\"month\"]", inputs: { minSetter: ["min", "minSetter"], maxSetter: ["max", "maxSetter"] }, host: { attributes: { "ngSkipHydration": "true" }, properties: { "type": "\"text\"" } }, ngImport: i0, template: "<ng-container *ngIf=\"host.nativePickerEnabled\">\n <input\n *tuiTextfieldContent\n type=\"month\"\n [max]=\"max()?.toJSON()\"\n [min]=\"min()?.toJSON()\"\n [value]=\"host.value()?.toJSON()\"\n (click.stop.zoneless)=\"(0)\"\n (input)=\"onInput($any($event.target).value)\"\n (mousedown.stop.zoneless)=\"(0)\"\n />\n</ng-container>\n", styles: ["tui-textfield input[tuiInputMonth]+.t-content input[type=month]{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;opacity:0;border:0}tui-textfield input[tuiInputMonth]+.t-content input[type=month]::-webkit-calendar-picker-indicator{position:absolute;top:0;left:0;inline-size:100%;block-size:100%}tui-textfield:has(input[type=month]):after{pointer-events:none}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
40
- }
41
- export { TuiNativeMonthPicker };
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiNativeMonthPicker, decorators: [{
43
- type: Component,
44
- args: [{ standalone: true, selector: 'input[tuiInputMonth][type="month"]', imports: [NgIf, TuiTextfieldContent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
45
- ngSkipHydration: 'true',
46
- '[type]': '"text"',
47
- }, template: "<ng-container *ngIf=\"host.nativePickerEnabled\">\n <input\n *tuiTextfieldContent\n type=\"month\"\n [max]=\"max()?.toJSON()\"\n [min]=\"min()?.toJSON()\"\n [value]=\"host.value()?.toJSON()\"\n (click.stop.zoneless)=\"(0)\"\n (input)=\"onInput($any($event.target).value)\"\n (mousedown.stop.zoneless)=\"(0)\"\n />\n</ng-container>\n", styles: ["tui-textfield input[tuiInputMonth]+.t-content input[type=month]{position:absolute;top:0;left:0;inline-size:100%;block-size:100%;opacity:0;border:0}tui-textfield input[tuiInputMonth]+.t-content input[type=month]::-webkit-calendar-picker-indicator{position:absolute;top:0;left:0;inline-size:100%;block-size:100%}tui-textfield:has(input[type=month]):after{pointer-events:none}\n"] }]
48
- }], propDecorators: { minSetter: [{
49
- type: Input,
50
- args: ['min']
51
- }], maxSetter: [{
52
- type: Input,
53
- args: ['max']
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLW1vbnRoLXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9pbnB1dC1tb250aC9uYXRpdmUtbW9udGgtcGlja2VyL25hdGl2ZS1tb250aC1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvaW5wdXQtbW9udGgvbmF0aXZlLW1vbnRoLXBpY2tlci9uYXRpdmUtbW9udGgtcGlja2VyLnRlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3JDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzlFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBRXhFLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUVoRSxNQWFhLG9CQUFvQjtJQWJqQztRQWNxQixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTNCLFNBQUksR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0QyxRQUFHLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUNwQyxRQUFHLEdBQUcsTUFBTSxDQUFrQixJQUFJLENBQUMsQ0FBQztRQUNwQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUV0QyxJQUFJLFFBQVEsRUFBRTtnQkFDVixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQywwQ0FBMEM7Z0JBQ3pGLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLHlDQUF5QzthQUMxRjtRQUNMLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0tBdUIvQjtJQXJCRyw4QkFBOEI7SUFDOUIsSUFDVyxTQUFTLENBQUMsQ0FBa0I7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixJQUNXLFNBQVMsQ0FBQyxDQUFrQjtRQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRVMsT0FBTyxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEM7UUFFRCxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7K0dBbkNRLG9CQUFvQjttR0FBcEIsb0JBQW9CLHVRQzlCakMsNFlBWUEsaWJEUWMsSUFBSSw2RkFBRSxtQkFBbUI7O1NBVTFCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQWJoQyxTQUFTO2lDQUNNLElBQUksWUFDTixvQ0FBb0MsV0FDckMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsaUJBR3JCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsZUFBZSxFQUFFLE1BQU07d0JBQ3ZCLFFBQVEsRUFBRSxRQUFRO3FCQUNyQjs4QkFtQlUsU0FBUztzQkFEbkIsS0FBSzt1QkFBQyxLQUFLO2dCQU9ELFNBQVM7c0JBRG5CLEtBQUs7dUJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgc2lnbmFsLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHVpQ29udHJvbH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jbGFzc2VzJztcbmltcG9ydCB7VFVJX0FMTE9XX1NJR05BTF9XUklURVN9IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7VFVJX0ZJUlNUX0RBWSwgVFVJX0xBU1RfREFZLCBUdWlNb250aH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kYXRlLXRpbWUnO1xuaW1wb3J0IHtUdWlUZXh0ZmllbGRDb250ZW50fSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL3RleHRmaWVsZCc7XG5cbmltcG9ydCB7VHVpSW5wdXRNb250aERpcmVjdGl2ZX0gZnJvbSAnLi4vaW5wdXQtbW9udGguZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2lucHV0W3R1aUlucHV0TW9udGhdW3R5cGU9XCJtb250aFwiXScsXG4gICAgaW1wb3J0czogW05nSWYsIFR1aVRleHRmaWVsZENvbnRlbnRdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uYXRpdmUtbW9udGgtcGlja2VyLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25hdGl2ZS1tb250aC1waWNrZXIuc3R5bGUubGVzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBuZ1NraXBIeWRyYXRpb246ICd0cnVlJyxcbiAgICAgICAgJ1t0eXBlXSc6ICdcInRleHRcIicsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpTmF0aXZlTW9udGhQaWNrZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29udHJvbCA9IGluamVjdChUdWlDb250cm9sKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBob3N0ID0gaW5qZWN0KFR1aUlucHV0TW9udGhEaXJlY3RpdmUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtaW4gPSBzaWduYWw8VHVpTW9udGggfCBudWxsPihudWxsKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWF4ID0gc2lnbmFsPFR1aU1vbnRoIHwgbnVsbD4obnVsbCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbGVuZGFyU3luYyA9IGVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5ob3N0LmNhbGVuZGFyKCk7XG5cbiAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBjYWxlbmRhci5taW4uc2V0KHRoaXMubWluKCkgPz8gVFVJX0ZJUlNUX0RBWSk7IC8vIFRPRE8odjUpOiByZW1vdmUgVFVJX0ZJUlNUX0RBWSBmYWxsYmFja1xuICAgICAgICAgICAgY2FsZW5kYXIubWF4LnNldCh0aGlzLm1heCgpID8/IFRVSV9MQVNUX0RBWSk7IC8vIFRPRE8odjUpOiByZW1vdmUgVFVJX0xBU1RfREFZIGZhbGxiYWNrXG4gICAgICAgIH1cbiAgICB9LCBUVUlfQUxMT1dfU0lHTkFMX1dSSVRFUyk7XG5cbiAgICAvLyBUT0RPKHY1KTogdXNlIHNpZ25hbCBpbnB1dHNcbiAgICBASW5wdXQoJ21pbicpXG4gICAgcHVibGljIHNldCBtaW5TZXR0ZXIoeDogVHVpTW9udGggfCBudWxsKSB7XG4gICAgICAgIHRoaXMubWluLnNldCh4KTtcbiAgICB9XG5cbiAgICAvLyBUT0RPKHY1KTogdXNlIHNpZ25hbCBpbnB1dHNcbiAgICBASW5wdXQoJ21heCcpXG4gICAgcHVibGljIHNldCBtYXhTZXR0ZXIoeDogVHVpTW9udGggfCBudWxsKSB7XG4gICAgICAgIHRoaXMubWF4LnNldCh4KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25JbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2wub25DaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbeWVhciA9IDAsIG1vbnRoID0gMF0gPSB2YWx1ZS5zcGxpdCgnLScpLm1hcChOdW1iZXIpO1xuXG4gICAgICAgIHRoaXMuY29udHJvbC5vbkNoYW5nZShuZXcgVHVpTW9udGgoeWVhciwgbW9udGggLSAxKSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImhvc3QubmF0aXZlUGlja2VyRW5hYmxlZFwiPlxuICAgIDxpbnB1dFxuICAgICAgICAqdHVpVGV4dGZpZWxkQ29udGVudFxuICAgICAgICB0eXBlPVwibW9udGhcIlxuICAgICAgICBbbWF4XT1cIm1heCgpPy50b0pTT04oKVwiXG4gICAgICAgIFttaW5dPVwibWluKCk/LnRvSlNPTigpXCJcbiAgICAgICAgW3ZhbHVlXT1cImhvc3QudmFsdWUoKT8udG9KU09OKClcIlxuICAgICAgICAoY2xpY2suc3RvcC56b25lbGVzcyk9XCIoMClcIlxuICAgICAgICAoaW5wdXQpPVwib25JbnB1dCgkYW55KCRldmVudC50YXJnZXQpLnZhbHVlKVwiXG4gICAgICAgIChtb3VzZWRvd24uc3RvcC56b25lbGVzcyk9XCIoMClcIlxuICAgIC8+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==