@taiga-ui/addon-commerce 4.0.0-rc.1 → 4.0.0-rc.10

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 (67) hide show
  1. package/components/index.d.ts +1 -1
  2. package/components/input-card/input-card.directive.d.ts +1 -1
  3. package/components/input-card-group/index.d.ts +3 -0
  4. package/components/{input-card-grouped/input-card-grouped.component.d.ts → input-card-group/input-card-group.component.d.ts} +10 -10
  5. package/components/{input-card-grouped/input-card-grouped.options.d.ts → input-card-group/input-card-group.options.d.ts} +3 -3
  6. package/components/{input-card-grouped/input-card-grouped.providers.d.ts → input-card-group/input-card-group.providers.d.ts} +2 -2
  7. package/components/input-cvc/input-cvc.directive.d.ts +2 -4
  8. package/components/input-expire/input-expire.directive.d.ts +2 -4
  9. package/components/thumbnail-card/index.d.ts +1 -0
  10. package/components/thumbnail-card/thumbnail-card.component.d.ts +6 -5
  11. package/components/thumbnail-card/thumbnail-card.options.d.ts +9 -0
  12. package/esm2022/components/index.mjs +2 -2
  13. package/esm2022/components/input-card/input-card.directive.mjs +4 -5
  14. package/esm2022/components/input-card-group/index.mjs +4 -0
  15. package/esm2022/components/input-card-group/input-card-group.component.mjs +278 -0
  16. package/esm2022/components/input-card-group/input-card-group.options.mjs +15 -0
  17. package/esm2022/components/input-card-group/input-card-group.providers.mjs +29 -0
  18. package/esm2022/components/input-card-group/taiga-ui-addon-commerce-components-input-card-group.mjs +5 -0
  19. package/esm2022/components/input-cvc/input-cvc.directive.mjs +5 -10
  20. package/esm2022/components/input-expire/input-expire.directive.mjs +3 -6
  21. package/esm2022/components/thumbnail-card/index.mjs +2 -1
  22. package/esm2022/components/thumbnail-card/thumbnail-card.component.mjs +13 -20
  23. package/esm2022/components/thumbnail-card/thumbnail-card.options.mjs +9 -0
  24. package/esm2022/constants/default-card-validator.mjs +2 -2
  25. package/esm2022/constants/mask-card-holder.mjs +2 -2
  26. package/esm2022/constants/mask-cvc.mjs +2 -2
  27. package/esm2022/pipes/amount/amount.options.mjs +2 -2
  28. package/esm2022/pipes/amount/amount.pipe.mjs +4 -3
  29. package/esm2022/pipes/decimal/decimal.pipe.mjs +28 -0
  30. package/esm2022/pipes/decimal/index.mjs +2 -0
  31. package/esm2022/pipes/decimal/taiga-ui-addon-commerce-pipes-decimal.mjs +5 -0
  32. package/esm2022/pipes/index.mjs +2 -1
  33. package/esm2022/tokens/i18n.mjs +2 -2
  34. package/fesm2022/taiga-ui-addon-commerce-components-input-card-group.mjs +318 -0
  35. package/fesm2022/taiga-ui-addon-commerce-components-input-card-group.mjs.map +1 -0
  36. package/fesm2022/taiga-ui-addon-commerce-components-input-card.mjs +3 -4
  37. package/fesm2022/taiga-ui-addon-commerce-components-input-card.mjs.map +1 -1
  38. package/fesm2022/taiga-ui-addon-commerce-components-input-cvc.mjs +4 -9
  39. package/fesm2022/taiga-ui-addon-commerce-components-input-cvc.mjs.map +1 -1
  40. package/fesm2022/taiga-ui-addon-commerce-components-input-expire.mjs +2 -5
  41. package/fesm2022/taiga-ui-addon-commerce-components-input-expire.mjs.map +1 -1
  42. package/fesm2022/taiga-ui-addon-commerce-components-thumbnail-card.mjs +20 -20
  43. package/fesm2022/taiga-ui-addon-commerce-components-thumbnail-card.mjs.map +1 -1
  44. package/fesm2022/taiga-ui-addon-commerce-components.mjs +1 -1
  45. package/fesm2022/taiga-ui-addon-commerce-constants.mjs +3 -3
  46. package/fesm2022/taiga-ui-addon-commerce-constants.mjs.map +1 -1
  47. package/fesm2022/taiga-ui-addon-commerce-pipes-amount.mjs +4 -3
  48. package/fesm2022/taiga-ui-addon-commerce-pipes-amount.mjs.map +1 -1
  49. package/fesm2022/taiga-ui-addon-commerce-pipes-decimal.mjs +34 -0
  50. package/fesm2022/taiga-ui-addon-commerce-pipes-decimal.mjs.map +1 -0
  51. package/fesm2022/taiga-ui-addon-commerce-pipes.mjs +1 -0
  52. package/fesm2022/taiga-ui-addon-commerce-pipes.mjs.map +1 -1
  53. package/fesm2022/taiga-ui-addon-commerce-tokens.mjs +1 -1
  54. package/fesm2022/taiga-ui-addon-commerce-tokens.mjs.map +1 -1
  55. package/package.json +21 -15
  56. package/pipes/decimal/decimal.pipe.d.ts +11 -0
  57. package/pipes/decimal/index.d.ts +1 -0
  58. package/pipes/index.d.ts +1 -0
  59. package/tokens/i18n.d.ts +2 -2
  60. package/components/input-card-grouped/index.d.ts +0 -3
  61. package/esm2022/components/input-card-grouped/index.mjs +0 -4
  62. package/esm2022/components/input-card-grouped/input-card-grouped.component.mjs +0 -288
  63. package/esm2022/components/input-card-grouped/input-card-grouped.options.mjs +0 -15
  64. package/esm2022/components/input-card-grouped/input-card-grouped.providers.mjs +0 -29
  65. package/esm2022/components/input-card-grouped/taiga-ui-addon-commerce-components-input-card-grouped.mjs +0 -5
  66. package/fesm2022/taiga-ui-addon-commerce-components-input-card-grouped.mjs +0 -328
  67. package/fesm2022/taiga-ui-addon-commerce-components-input-card-grouped.mjs.map +0 -1
@@ -1,288 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { NgIf } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, computed, EventEmitter, inject, Input, Output, ViewChild, } from '@angular/core';
4
- import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
5
- import { FormsModule } from '@angular/forms';
6
- import { MaskitoDirective } from '@maskito/angular';
7
- import { ResizeObserverDirective } from '@ng-web-apis/resize-observer';
8
- import { TUI_MASK_CARD, TUI_MASK_CVC, TUI_MASK_EXPIRE, } from '@taiga-ui/addon-commerce/constants';
9
- import { TuiFormatCardPipe } from '@taiga-ui/addon-commerce/pipes';
10
- import { TUI_PAYMENT_SYSTEM_ICONS } from '@taiga-ui/addon-commerce/tokens';
11
- import { tuiAsControl, TuiControl } from '@taiga-ui/cdk/classes';
12
- import { TUI_NON_DIGIT_REGEXP } from '@taiga-ui/cdk/constants';
13
- import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
14
- import { tuiHovered, TuiHoveredService } from '@taiga-ui/cdk/directives/hovered';
15
- import { TuiLet } from '@taiga-ui/cdk/directives/let';
16
- import { tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
17
- import { TuiMapperPipe } from '@taiga-ui/cdk/pipes/mapper';
18
- import { TuiIdService } from '@taiga-ui/cdk/services';
19
- import { tuiInjectElement, tuiIsElement, tuiIsInput } from '@taiga-ui/cdk/utils/dom';
20
- import { tuiIsNativeFocused, tuiIsNativeFocusedIn } from '@taiga-ui/cdk/utils/focus';
21
- import { tuiDirectiveBinding, tuiPure } from '@taiga-ui/cdk/utils/miscellaneous';
22
- import { tuiAsDataListHost, TuiWithDataList } from '@taiga-ui/core/components/data-list';
23
- import { TuiIcon, TuiIconPipe } from '@taiga-ui/core/components/icon';
24
- import { TUI_TEXTFIELD_OPTIONS } from '@taiga-ui/core/components/textfield';
25
- import { TuiAppearance, tuiAppearanceOptionsProvider, } from '@taiga-ui/core/directives/appearance';
26
- import { TuiDropdownDirective, TuiDropdownOpen, tuiDropdownOptionsProvider, } from '@taiga-ui/core/directives/dropdown';
27
- import { TUI_COMMON_ICONS } from '@taiga-ui/core/tokens';
28
- import { TuiChevron } from '@taiga-ui/kit/directives/chevron';
29
- import { PolymorpheusOutlet, PolymorpheusTemplate } from '@taiga-ui/polymorpheus';
30
- import { map, merge } from 'rxjs';
31
- import { TUI_INPUT_CARD_GROUPED_OPTIONS } from './input-card-grouped.options';
32
- import { TUI_INPUT_CARD_GROUPED_TEXTS } from './input-card-grouped.providers';
33
- import * as i0 from "@angular/core";
34
- import * as i1 from "@taiga-ui/core/directives/appearance";
35
- import * as i2 from "@taiga-ui/core/directives/dropdown";
36
- import * as i3 from "@taiga-ui/core/components/data-list";
37
- import * as i4 from "@angular/forms";
38
- class TuiInputCardGroup extends TuiControl {
39
- constructor() {
40
- super(...arguments);
41
- this.expirePrefilled = false;
42
- this.paymentSystems = inject(TUI_PAYMENT_SYSTEM_ICONS);
43
- this.options = inject(TUI_INPUT_CARD_GROUPED_OPTIONS);
44
- this.el = tuiInjectElement();
45
- this.hover = tuiHovered();
46
- this.focusedIn = toSignal(merge(tuiTypedFromEvent(this.el, 'focusin'), tuiTypedFromEvent(this.el, 'focusout')).pipe(map(() => tuiIsNativeFocusedIn(this.el))), { initialValue: false });
47
- this.exampleTextCVC = this.options.exampleTextCVC;
48
- this.cvcHidden = this.options.cvcHidden;
49
- this.maskCVC = TUI_MASK_CVC(3);
50
- this.dropdown = inject(TuiDropdownDirective);
51
- this.maskCard = TUI_MASK_CARD;
52
- this.maskExpire = TUI_MASK_EXPIRE;
53
- this.icons = inject(TUI_COMMON_ICONS);
54
- this.texts = toSignal(inject(TUI_INPUT_CARD_GROUPED_TEXTS));
55
- this.open = tuiDirectiveBinding(TuiDropdownOpen, 'tuiDropdownOpen', false);
56
- this.state = tuiDirectiveBinding(TuiAppearance, 'tuiAppearanceState',
57
- // eslint-disable-next-line no-nested-ternary
58
- computed(() => (this.disabled() ? 'disabled' : this.hover() ? 'hover' : null)));
59
- this.focus = tuiDirectiveBinding(TuiAppearance, 'tuiAppearanceFocus', computed(() => this.open() || this.focusedIn()));
60
- this.sub = inject(TuiDropdownOpen)
61
- .tuiDropdownOpenChange.pipe(takeUntilDestroyed())
62
- .subscribe(open => {
63
- this.open.set(open);
64
- });
65
- this.labelRaised = computed(() => (this.focus() && !this.readOnly()) || !!this.value()?.card);
66
- this.hasCleaner = computed(() => !!this.value()?.card && this.interactive());
67
- this.exampleText = this.options.exampleText;
68
- this.cardValidator = this.options.cardValidator;
69
- this.icon = this.options.icon;
70
- this.id = inject(TuiIdService).generate();
71
- this.autocomplete = this.options.autocomplete;
72
- this.binChange = new EventEmitter();
73
- }
74
- set codeLength(length) {
75
- this.exampleTextCVC = '0'.repeat(length);
76
- this.maskCVC = TUI_MASK_CVC(length);
77
- }
78
- get bin() {
79
- return this.card.length < 6 ? null : this.card.slice(0, 6);
80
- }
81
- writeValue(value) {
82
- const { bin } = this;
83
- super.writeValue(value);
84
- this.updateBin(bin);
85
- this.expirePrefilled = !!this.expire && this.cardPrefilled;
86
- }
87
- /** Public API for manual focus management */
88
- focusCard() {
89
- this.inputCard?.nativeElement.focus({ preventScroll: true });
90
- }
91
- focusExpire() {
92
- this.inputExpire?.nativeElement.focus({ preventScroll: true });
93
- }
94
- focusCVC() {
95
- this.inputCVC?.nativeElement.focus({ preventScroll: true });
96
- }
97
- handleOption(option) {
98
- const { card = '', expire = '', cvc = '' } = option || {};
99
- const { bin } = this;
100
- const element = (!card && this.inputCard?.nativeElement) ||
101
- (!expire && this.inputExpire?.nativeElement) ||
102
- this.inputCVC?.nativeElement;
103
- this.onChange({ card, expire, cvc });
104
- this.updateBin(bin);
105
- this.open.set(false);
106
- this.expirePrefilled = !!expire;
107
- element?.focus();
108
- }
109
- clear() {
110
- this.expirePrefilled = false;
111
- this.onChange(null);
112
- this.focusCard();
113
- }
114
- get content() {
115
- const system = this.getPaymentSystem(this.card);
116
- return this.icon || (system && this.paymentSystems[system]);
117
- }
118
- get card() {
119
- return this.value()?.card || '';
120
- }
121
- get expire() {
122
- return this.value()?.expire || '';
123
- }
124
- get cvc() {
125
- return this.value()?.cvc || '';
126
- }
127
- get cardCollapsed() {
128
- return (this.isFocusable(this.card) &&
129
- !tuiIsNativeFocused(this.inputCard?.nativeElement));
130
- }
131
- get tailLength() {
132
- return this.card.length % 4 > 0 ? 5 : 4;
133
- }
134
- get cardPrefilled() {
135
- return !!this.card.match(TUI_NON_DIGIT_REGEXP);
136
- }
137
- get cvcPrefilled() {
138
- return !!this.cvc.match(TUI_NON_DIGIT_REGEXP);
139
- }
140
- get cardFocusable() {
141
- return !this.cardPrefilled;
142
- }
143
- get expireFocusable() {
144
- return this.isFocusable(this.card) && !this.expirePrefilled;
145
- }
146
- get cvcFocusable() {
147
- return this.isFocusable(this.card);
148
- }
149
- get masked() {
150
- return this.cardPrefilled ? `*${this.card.slice(-4)}` : '*';
151
- }
152
- onCardChange(card) {
153
- const { value, bin } = this;
154
- const parsed = card.split(' ').join('');
155
- if (value()?.card === parsed) {
156
- return;
157
- }
158
- this.updateProperty(parsed, 'card');
159
- this.updateBin(bin);
160
- if (this.cardValidator(this.card) && !value()?.expire && this.inputExpire) {
161
- this.focusExpire();
162
- }
163
- }
164
- onExpireChange(expire) {
165
- this.updateProperty(expire, 'expire');
166
- if (Number(this.inputExpire?.nativeElement.selectionStart) === 5 // MM/YY
167
- ) {
168
- this.focusCVC();
169
- }
170
- }
171
- onCVCChange(cvc) {
172
- this.updateProperty(cvc, 'cvc');
173
- }
174
- transform({ offsetWidth }) {
175
- return this.cardCollapsed ? `translate3d(${offsetWidth}px, 0, 0)` : '';
176
- }
177
- onMouseDown(event) {
178
- if (tuiIsElement(event.target) && tuiIsInput(event.target)) {
179
- return;
180
- }
181
- event.preventDefault();
182
- this.focusInput();
183
- }
184
- toggle() {
185
- this.open.set(!this.open());
186
- }
187
- isFocusable(card) {
188
- return this.cardValidator(card) || this.cardPrefilled;
189
- }
190
- getPaymentSystem(value) {
191
- return this.options.paymentSystemHandler(value);
192
- }
193
- updateBin(oldBin) {
194
- const { bin } = this;
195
- if (bin !== oldBin && !this.cardPrefilled) {
196
- this.binChange.emit(bin);
197
- }
198
- }
199
- updateProperty(value, propName) {
200
- const { card = '', expire = '', cvc = '' } = this.value() || {};
201
- const newValue = { card, expire, cvc };
202
- newValue[propName] = value;
203
- this.onChange(newValue.expire || newValue.cvc || newValue.card ? newValue : null);
204
- }
205
- focusInput() {
206
- const element = (this.cardFocusable && this.inputCard?.nativeElement) ||
207
- (this.expireFocusable && this.inputExpire?.nativeElement) ||
208
- this.inputCVC?.nativeElement;
209
- element?.focus();
210
- }
211
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputCardGroup, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
212
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputCardGroup, isStandalone: true, selector: "tui-input-card-grouped", inputs: { exampleText: "exampleText", cardValidator: "cardValidator", icon: "icon", id: "id", autocomplete: "autocomplete", codeLength: "codeLength" }, outputs: { binChange: "binChange" }, host: { attributes: { "data-size": "l" }, listeners: { "mousedown": "onMouseDown($event)" }, properties: { "attr.data-mode": "mode()" } }, providers: [
213
- tuiAsDataListHost(TuiInputCardGroup),
214
- tuiAsControl(TuiInputCardGroup),
215
- tuiDropdownOptionsProvider({ limitWidth: 'fixed' }),
216
- tuiAppearanceOptionsProvider(TUI_TEXTFIELD_OPTIONS),
217
- TuiHoveredService,
218
- ], viewQueries: [{ propertyName: "inputCard", first: true, predicate: ["inputCard"], descendants: true }, { propertyName: "inputExpire", first: true, predicate: ["inputExpire"], descendants: true }, { propertyName: "inputCVC", first: true, predicate: ["inputCVC"], descendants: true }], usesInheritance: true, hostDirectives: [{ directive: i1.TuiAppearance }, { directive: i2.TuiDropdownDirective }, { directive: i3.TuiWithDataList }, { directive: i2.TuiDropdownOpen, inputs: ["tuiDropdownOpen", "open"], outputs: ["tuiDropdownOpenChange", "openChange"] }], ngImport: i0, template: "<div class=\"t-wrapper\">\n <label\n *tuiLet=\"value()?.card | tuiFormatCard: cardPrefilled as formattedCard\"\n (click.silent.prevent)=\"(0)\"\n >\n <input\n #inputCard\n automation-id=\"tui-input-card-grouped__card\"\n inputmode=\"numeric\"\n translate=\"no\"\n type=\"text\"\n class=\"t-input t-input_card\"\n [attr.aria-invalid]=\"!cardPrefilled && !(this.card | tuiMapper: cardValidator)\"\n [attr.id]=\"id + '_card'\"\n [autocomplete]=\"autocomplete ? 'cc-number' : 'off'\"\n [class.t-input_hidden]=\"!card.length && focus()\"\n [class.t-input_inert]=\"cardPrefilled\"\n [disabled]=\"disabled()\"\n [maskito]=\"maskCard\"\n [ngModel]=\"formattedCard\"\n [placeholder]=\"cardPrefilled ? '' : exampleText\"\n [readOnly]=\"readOnly()\"\n [tabIndex]=\"cardFocusable ? 0 : -1\"\n (focus)=\"(0)\"\n (ngModelChange)=\"onCardChange($event)\"\n />\n <span\n aria-hidden=\"true\"\n translate=\"no\"\n class=\"t-collapsed\"\n [attr.data-before]=\"masked\"\n [class.t-collapsed_enable-mask]=\"cardCollapsed\"\n (waResizeObserver)=\"(0)\"\n >\n <span\n #ghost\n class=\"t-ghost\"\n [textContent]=\"formattedCard.slice(-tailLength)\"\n ></span>\n\n <span class=\"t-collapsed-wrapper\">\n <span\n class=\"t-value\"\n [style.transform]=\"transform(ghost)\"\n >\n {{ formattedCard }}\n </span>\n </span>\n </span>\n <div\n class=\"t-label\"\n [class.t-label_raised]=\"labelRaised()\"\n >\n {{ texts()?.cardNumberText }}\n </div>\n </label>\n</div>\n<div\n class=\"t-wrapper t-wrapper_expire\"\n [class.t-wrapper_active]=\"cardCollapsed\"\n>\n <label (click.silent.prevent)=\"(0)\">\n <input\n #inputExpire\n automation-id=\"tui-input-card-grouped__expire\"\n inputmode=\"numeric\"\n placeholder=\"00/00\"\n translate=\"no\"\n class=\"t-input\"\n [attr.id]=\"id + '_expire'\"\n [attr.name]=\"autocomplete ? 'ccexpiryyear' : null\"\n [autocomplete]=\"autocomplete ? 'cc-exp' : 'off'\"\n [class.t-input_inert]=\"!expireFocusable\"\n [disabled]=\"disabled()\"\n [maskito]=\"maskExpire\"\n [ngModel]=\"expire\"\n [readOnly]=\"readOnly()\"\n [tabIndex]=\"expireFocusable ? 0 : -1\"\n (focus)=\"(0)\"\n (ngModelChange)=\"onExpireChange($event)\"\n />\n <div\n class=\"t-label\"\n [class.t-label_raised]=\"labelRaised()\"\n >\n {{ texts()?.expiryText }}\n </div>\n </label>\n</div>\n<div\n class=\"t-wrapper t-wrapper_cvc\"\n [class.t-wrapper_active]=\"cardCollapsed\"\n>\n <label (click.silent.prevent)=\"(0)\">\n <input\n #inputCVC\n automation-id=\"tui-input-card-grouped__cvc\"\n inputmode=\"numeric\"\n translate=\"no\"\n type=\"text\"\n class=\"t-input\"\n [attr.id]=\"id + '_cvc'\"\n [autocomplete]=\"autocomplete ? 'cc-csc' : 'off'\"\n [class.t-input_cvc_hidden]=\"cvcHidden\"\n [class.t-input_prefilled]=\"cvcPrefilled\"\n [disabled]=\"disabled()\"\n [maskito]=\"maskCVC\"\n [ngModel]=\"cvc\"\n [placeholder]=\"cvcPrefilled ? '\u2022\u2022\u2022' : exampleTextCVC\"\n [readOnly]=\"readOnly() || cvcPrefilled\"\n [tabIndex]=\"cvcFocusable ? 0 : -1\"\n (focus)=\"(0)\"\n (ngModelChange)=\"onCVCChange($event)\"\n />\n <div\n class=\"t-label\"\n [class.t-label_raised]=\"labelRaised()\"\n >\n {{ texts()?.cvcText }}\n </div>\n </label>\n</div>\n<div class=\"t-icons\">\n <div\n *ngIf=\"content\"\n class=\"t-icon-outlet\"\n >\n <img\n *polymorpheusOutlet=\"content as src\"\n alt=\"\"\n automation-id=\"tui-input-card-grouped__icon\"\n class=\"t-card\"\n [src]=\"src | tuiIcon\"\n />\n </div>\n <tui-icon\n *ngIf=\"hasCleaner()\"\n automation-id=\"tui-input-card-grouped__cleaner\"\n tuiAppearance=\"icon\"\n class=\"t-icon\"\n [icon]=\"icons.close\"\n (click)=\"clear()\"\n />\n <tui-icon\n *ngIf=\"dropdown.content\"\n automation-id=\"tui-input-card-grouped__dropdown\"\n tuiAppearance=\"icon\"\n tuiChevron\n (click)=\"toggle()\"\n />\n</div>\n", styles: [":host{position:relative;display:block;height:var(--tui-height-l);width:29.5rem;border-radius:var(--tui-radius-l);overflow:clip}:host :host-context(tui-root._mobile){width:18rem}.t-outline{height:100%;width:100%}.t-wrapper{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;width:100%;height:100%}.t-wrapper_cvc{margin-left:7.1875rem;transform:translate3d(100%,0,0)}:host-context(tui-root._mobile) .t-wrapper_cvc{margin-left:4.0625rem}.t-wrapper_expire{transform:translate3d(100%,0,0)}.t-wrapper_active{transform:translate3d(6.5625rem,0,0)}:host-context(tui-root._mobile) .t-wrapper_active{transform:translate3d(4.125rem,0,0)}.t-card{width:2rem;height:2rem}.t-collapsed{position:absolute;top:0;left:0;width:100%;height:100%;padding:1.25rem var(--tui-padding-l) 0;box-sizing:border-box;font:var(--tui-font-text-s);line-height:2.25rem;color:var(--tui-text-primary);white-space:nowrap;pointer-events:none}.t-collapsed_enable-mask:before{content:attr(data-before)}.t-collapsed_enable-mask .t-collapsed-wrapper{left:1.375rem}.t-collapsed-wrapper{position:absolute;top:0;display:block;width:100%;height:100%;overflow:hidden}.t-value{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;bottom:0;right:100%;display:block;transform:translate3d(100%,0,0)}.t-input{position:absolute;top:0;left:0;width:100%;height:100%;border:0;margin:0;padding:1.25rem var(--tui-padding-l) 0;outline:none;background:transparent;box-sizing:border-box;font:var(--tui-font-text-s);color:var(--tui-text-primary)}.t-input::placeholder{color:var(--tui-text-tertiary)}.t-input.t-input.t-input_card:not(.t-input_hidden),.t-input.t-input.t-input_card:not(.t-input_hidden)::placeholder,.t-input.t-input.t-input_card:not(.t-input_hidden):-webkit-autofill{caret-color:var(--tui-text-primary);color:transparent!important;-webkit-text-fill-color:transparent!important}.t-input.t-input.t-input_card::-webkit-credit-card-auto-fill-button{content:none!important;position:absolute;left:-62.4375rem;top:-62.4375rem;z-index:-999;display:none!important;background:transparent!important;pointer-events:none!important}.t-input_inert{pointer-events:none}.t-input_cvc_hidden{-webkit-text-security:disc}@supports (-webkit-touch-callout: none){.t-input:active{font-size:1rem}}.t-icons{position:absolute;right:.75rem;display:flex;align-items:center;height:100%}.t-icon-outlet{display:flex;margin-right:.25rem}.t-icon{cursor:pointer;border:.25rem solid transparent}.t-label{transition-property:all;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:1.125rem 1rem;font:var(--tui-font-text-m);line-height:1.25rem;color:var(--tui-text-secondary)}.t-label_raised{font-size:.8156rem;transform:translateY(-.7em)}:host([data-mode=\"invalid\"]) .t-label{color:var(--tui-status-negative)}:host([data-focus=\"true\"]) .t-label{color:var(--tui-text-primary)}.t-ghost{visibility:hidden}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "directive", type: ResizeObserverDirective, selector: "[waResizeObserver]", outputs: ["waResizeObserver"] }, { kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "pipe", type: TuiFormatCardPipe, name: "tuiFormatCard" }, { kind: "pipe", type: TuiMapperPipe, name: "tuiMapper" }, { kind: "directive", type: TuiLet, selector: "[tuiLet]", inputs: ["tuiLet"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "directive", type: TuiChevron, selector: "[tuiChevron]", inputs: ["tuiChevron"] }, { kind: "directive", type: TuiAppearance, selector: "[tuiAppearance]", inputs: ["tuiAppearance", "tuiAppearanceState", "tuiAppearanceFocus"] }, { kind: "pipe", type: TuiIconPipe, name: "tuiIcon" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
219
- }
220
- __decorate([
221
- tuiPure
222
- ], TuiInputCardGroup.prototype, "isFocusable", null);
223
- __decorate([
224
- tuiPure
225
- ], TuiInputCardGroup.prototype, "getPaymentSystem", null);
226
- export { TuiInputCardGroup };
227
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputCardGroup, decorators: [{
228
- type: Component,
229
- args: [{ standalone: true, selector: 'tui-input-card-grouped', imports: [
230
- NgIf,
231
- FormsModule,
232
- MaskitoDirective,
233
- ResizeObserverDirective,
234
- PolymorpheusOutlet,
235
- PolymorpheusTemplate,
236
- TuiActiveZone,
237
- TuiFormatCardPipe,
238
- TuiMapperPipe,
239
- TuiLet,
240
- TuiIcon,
241
- TuiChevron,
242
- TuiAppearance,
243
- TuiIconPipe,
244
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
245
- tuiAsDataListHost(TuiInputCardGroup),
246
- tuiAsControl(TuiInputCardGroup),
247
- tuiDropdownOptionsProvider({ limitWidth: 'fixed' }),
248
- tuiAppearanceOptionsProvider(TUI_TEXTFIELD_OPTIONS),
249
- TuiHoveredService,
250
- ], hostDirectives: [
251
- TuiAppearance,
252
- TuiDropdownDirective,
253
- TuiWithDataList,
254
- {
255
- directive: TuiDropdownOpen,
256
- inputs: ['tuiDropdownOpen: open'],
257
- outputs: ['tuiDropdownOpenChange: openChange'],
258
- },
259
- ], host: {
260
- 'data-size': 'l',
261
- '[attr.data-mode]': 'mode()',
262
- '(mousedown)': 'onMouseDown($event)',
263
- }, template: "<div class=\"t-wrapper\">\n <label\n *tuiLet=\"value()?.card | tuiFormatCard: cardPrefilled as formattedCard\"\n (click.silent.prevent)=\"(0)\"\n >\n <input\n #inputCard\n automation-id=\"tui-input-card-grouped__card\"\n inputmode=\"numeric\"\n translate=\"no\"\n type=\"text\"\n class=\"t-input t-input_card\"\n [attr.aria-invalid]=\"!cardPrefilled && !(this.card | tuiMapper: cardValidator)\"\n [attr.id]=\"id + '_card'\"\n [autocomplete]=\"autocomplete ? 'cc-number' : 'off'\"\n [class.t-input_hidden]=\"!card.length && focus()\"\n [class.t-input_inert]=\"cardPrefilled\"\n [disabled]=\"disabled()\"\n [maskito]=\"maskCard\"\n [ngModel]=\"formattedCard\"\n [placeholder]=\"cardPrefilled ? '' : exampleText\"\n [readOnly]=\"readOnly()\"\n [tabIndex]=\"cardFocusable ? 0 : -1\"\n (focus)=\"(0)\"\n (ngModelChange)=\"onCardChange($event)\"\n />\n <span\n aria-hidden=\"true\"\n translate=\"no\"\n class=\"t-collapsed\"\n [attr.data-before]=\"masked\"\n [class.t-collapsed_enable-mask]=\"cardCollapsed\"\n (waResizeObserver)=\"(0)\"\n >\n <span\n #ghost\n class=\"t-ghost\"\n [textContent]=\"formattedCard.slice(-tailLength)\"\n ></span>\n\n <span class=\"t-collapsed-wrapper\">\n <span\n class=\"t-value\"\n [style.transform]=\"transform(ghost)\"\n >\n {{ formattedCard }}\n </span>\n </span>\n </span>\n <div\n class=\"t-label\"\n [class.t-label_raised]=\"labelRaised()\"\n >\n {{ texts()?.cardNumberText }}\n </div>\n </label>\n</div>\n<div\n class=\"t-wrapper t-wrapper_expire\"\n [class.t-wrapper_active]=\"cardCollapsed\"\n>\n <label (click.silent.prevent)=\"(0)\">\n <input\n #inputExpire\n automation-id=\"tui-input-card-grouped__expire\"\n inputmode=\"numeric\"\n placeholder=\"00/00\"\n translate=\"no\"\n class=\"t-input\"\n [attr.id]=\"id + '_expire'\"\n [attr.name]=\"autocomplete ? 'ccexpiryyear' : null\"\n [autocomplete]=\"autocomplete ? 'cc-exp' : 'off'\"\n [class.t-input_inert]=\"!expireFocusable\"\n [disabled]=\"disabled()\"\n [maskito]=\"maskExpire\"\n [ngModel]=\"expire\"\n [readOnly]=\"readOnly()\"\n [tabIndex]=\"expireFocusable ? 0 : -1\"\n (focus)=\"(0)\"\n (ngModelChange)=\"onExpireChange($event)\"\n />\n <div\n class=\"t-label\"\n [class.t-label_raised]=\"labelRaised()\"\n >\n {{ texts()?.expiryText }}\n </div>\n </label>\n</div>\n<div\n class=\"t-wrapper t-wrapper_cvc\"\n [class.t-wrapper_active]=\"cardCollapsed\"\n>\n <label (click.silent.prevent)=\"(0)\">\n <input\n #inputCVC\n automation-id=\"tui-input-card-grouped__cvc\"\n inputmode=\"numeric\"\n translate=\"no\"\n type=\"text\"\n class=\"t-input\"\n [attr.id]=\"id + '_cvc'\"\n [autocomplete]=\"autocomplete ? 'cc-csc' : 'off'\"\n [class.t-input_cvc_hidden]=\"cvcHidden\"\n [class.t-input_prefilled]=\"cvcPrefilled\"\n [disabled]=\"disabled()\"\n [maskito]=\"maskCVC\"\n [ngModel]=\"cvc\"\n [placeholder]=\"cvcPrefilled ? '\u2022\u2022\u2022' : exampleTextCVC\"\n [readOnly]=\"readOnly() || cvcPrefilled\"\n [tabIndex]=\"cvcFocusable ? 0 : -1\"\n (focus)=\"(0)\"\n (ngModelChange)=\"onCVCChange($event)\"\n />\n <div\n class=\"t-label\"\n [class.t-label_raised]=\"labelRaised()\"\n >\n {{ texts()?.cvcText }}\n </div>\n </label>\n</div>\n<div class=\"t-icons\">\n <div\n *ngIf=\"content\"\n class=\"t-icon-outlet\"\n >\n <img\n *polymorpheusOutlet=\"content as src\"\n alt=\"\"\n automation-id=\"tui-input-card-grouped__icon\"\n class=\"t-card\"\n [src]=\"src | tuiIcon\"\n />\n </div>\n <tui-icon\n *ngIf=\"hasCleaner()\"\n automation-id=\"tui-input-card-grouped__cleaner\"\n tuiAppearance=\"icon\"\n class=\"t-icon\"\n [icon]=\"icons.close\"\n (click)=\"clear()\"\n />\n <tui-icon\n *ngIf=\"dropdown.content\"\n automation-id=\"tui-input-card-grouped__dropdown\"\n tuiAppearance=\"icon\"\n tuiChevron\n (click)=\"toggle()\"\n />\n</div>\n", styles: [":host{position:relative;display:block;height:var(--tui-height-l);width:29.5rem;border-radius:var(--tui-radius-l);overflow:clip}:host :host-context(tui-root._mobile){width:18rem}.t-outline{height:100%;width:100%}.t-wrapper{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;width:100%;height:100%}.t-wrapper_cvc{margin-left:7.1875rem;transform:translate3d(100%,0,0)}:host-context(tui-root._mobile) .t-wrapper_cvc{margin-left:4.0625rem}.t-wrapper_expire{transform:translate3d(100%,0,0)}.t-wrapper_active{transform:translate3d(6.5625rem,0,0)}:host-context(tui-root._mobile) .t-wrapper_active{transform:translate3d(4.125rem,0,0)}.t-card{width:2rem;height:2rem}.t-collapsed{position:absolute;top:0;left:0;width:100%;height:100%;padding:1.25rem var(--tui-padding-l) 0;box-sizing:border-box;font:var(--tui-font-text-s);line-height:2.25rem;color:var(--tui-text-primary);white-space:nowrap;pointer-events:none}.t-collapsed_enable-mask:before{content:attr(data-before)}.t-collapsed_enable-mask .t-collapsed-wrapper{left:1.375rem}.t-collapsed-wrapper{position:absolute;top:0;display:block;width:100%;height:100%;overflow:hidden}.t-value{transition-property:transform;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;position:absolute;bottom:0;right:100%;display:block;transform:translate3d(100%,0,0)}.t-input{position:absolute;top:0;left:0;width:100%;height:100%;border:0;margin:0;padding:1.25rem var(--tui-padding-l) 0;outline:none;background:transparent;box-sizing:border-box;font:var(--tui-font-text-s);color:var(--tui-text-primary)}.t-input::placeholder{color:var(--tui-text-tertiary)}.t-input.t-input.t-input_card:not(.t-input_hidden),.t-input.t-input.t-input_card:not(.t-input_hidden)::placeholder,.t-input.t-input.t-input_card:not(.t-input_hidden):-webkit-autofill{caret-color:var(--tui-text-primary);color:transparent!important;-webkit-text-fill-color:transparent!important}.t-input.t-input.t-input_card::-webkit-credit-card-auto-fill-button{content:none!important;position:absolute;left:-62.4375rem;top:-62.4375rem;z-index:-999;display:none!important;background:transparent!important;pointer-events:none!important}.t-input_inert{pointer-events:none}.t-input_cvc_hidden{-webkit-text-security:disc}@supports (-webkit-touch-callout: none){.t-input:active{font-size:1rem}}.t-icons{position:absolute;right:.75rem;display:flex;align-items:center;height:100%}.t-icon-outlet{display:flex;margin-right:.25rem}.t-icon{cursor:pointer;border:.25rem solid transparent}.t-label{transition-property:all;transition-duration:var(--tui-duration, .3s);transition-timing-function:ease-in-out;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:1.125rem 1rem;font:var(--tui-font-text-m);line-height:1.25rem;color:var(--tui-text-secondary)}.t-label_raised{font-size:.8156rem;transform:translateY(-.7em)}:host([data-mode=\"invalid\"]) .t-label{color:var(--tui-status-negative)}:host([data-focus=\"true\"]) .t-label{color:var(--tui-text-primary)}.t-ghost{visibility:hidden}\n"] }]
264
- }], propDecorators: { inputCard: [{
265
- type: ViewChild,
266
- args: ['inputCard']
267
- }], inputExpire: [{
268
- type: ViewChild,
269
- args: ['inputExpire']
270
- }], inputCVC: [{
271
- type: ViewChild,
272
- args: ['inputCVC']
273
- }], exampleText: [{
274
- type: Input
275
- }], cardValidator: [{
276
- type: Input
277
- }], icon: [{
278
- type: Input
279
- }], id: [{
280
- type: Input
281
- }], autocomplete: [{
282
- type: Input
283
- }], binChange: [{
284
- type: Output
285
- }], codeLength: [{
286
- type: Input
287
- }], isFocusable: [], getPaymentSystem: [] } });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2FyZC1ncm91cGVkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLWNvbW1lcmNlL2NvbXBvbmVudHMvaW5wdXQtY2FyZC1ncm91cGVkL2lucHV0LWNhcmQtZ3JvdXBlZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQtZ3JvdXBlZC9pbnB1dC1jYXJkLWdyb3VwZWQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXJDLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUNILGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNsQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRXpFLE9BQU8sRUFBQyxZQUFZLEVBQUUsVUFBVSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJB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O3dCQUM1QixhQUFhLEVBQUUscUJBQXFCO3FCQUN2Qzs4QkFPZ0IsU0FBUztzQkFEekIsU0FBUzt1QkFBQyxXQUFXO2dCQUlMLFdBQVc7c0JBRDNCLFNBQVM7dUJBQUMsYUFBYTtnQkFJUCxRQUFRO3NCQUR4QixTQUFTO3VCQUFDLFVBQVU7Z0JBMkRkLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxJQUFJO3NCQURWLEtBQUs7Z0JBSUMsRUFBRTtzQkFEUixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSVUsU0FBUztzQkFEeEIsTUFBTTtnQkFJSSxVQUFVO3NCQURwQixLQUFLO2dCQTBKRSxXQUFXLE1BS1gsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHR5cGUge0VsZW1lbnRSZWYsIFdyaXRhYmxlU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWFza2l0b0RpcmVjdGl2ZX0gZnJvbSAnQG1hc2tpdG8vYW5ndWxhcic7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyRGlyZWN0aXZlfSBmcm9tICdAbmctd2ViLWFwaXMvcmVzaXplLW9ic2VydmVyJztcbmltcG9ydCB7XG4gICAgVFVJX01BU0tfQ0FSRCxcbiAgICBUVUlfTUFTS19DVkMsXG4gICAgVFVJX01BU0tfRVhQSVJFLFxufSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY29tbWVyY2UvY29uc3RhbnRzJztcbmltcG9ydCB7VHVpRm9ybWF0Q2FyZFBpcGV9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS9waXBlcyc7XG5pbXBvcnQge1RVSV9QQVlNRU5UX1NZU1RFTV9JQ09OU30gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlL3Rva2Vucyc7XG5pbXBvcnQgdHlwZSB7VHVpUGF5bWVudFN5c3RlbX0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlL3R5cGVzJztcbmltcG9ydCB7dHVpQXNDb250cm9sLCBUdWlDb250cm9sfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHtUVUlfTk9OX0RJR0lUX1JFR0VYUH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9jb25zdGFudHMnO1xuaW1wb3J0IHtUdWlBY3RpdmVab25lfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvYWN0aXZlLXpvbmUnO1xuaW1wb3J0IHt0dWlIb3ZlcmVkLCBUdWlIb3ZlcmVkU2VydmljZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay9kaXJlY3RpdmVzL2hvdmVyZWQnO1xuaW1wb3J0IHtUdWlMZXR9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9sZXQnO1xuaW1wb3J0IHt0dWlUeXBlZEZyb21FdmVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge1R1aU1hcHBlclBpcGV9IGZyb20gJ0B0YWlnYS11aS9jZGsvcGlwZXMvbWFwcGVyJztcbmltcG9ydCB7VHVpSWRTZXJ2aWNlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3NlcnZpY2VzJztcbmltcG9ydCB0eXBlIHtUdWlCb29sZWFuSGFuZGxlcn0gZnJvbSAnQHRhaWdhLXVpL2Nkay90eXBlcyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnQsIHR1aUlzRWxlbWVudCwgdHVpSXNJbnB1dH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlJc05hdGl2ZUZvY3VzZWQsIHR1aUlzTmF0aXZlRm9jdXNlZElufSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2ZvY3VzJztcbmltcG9ydCB7dHVpRGlyZWN0aXZlQmluZGluZywgdHVpUHVyZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB0eXBlIHtUdWlEYXRhTGlzdEhvc3R9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvZGF0YS1saXN0JztcbmltcG9ydCB7dHVpQXNEYXRhTGlzdEhvc3QsIFR1aVdpdGhEYXRhTGlzdH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9kYXRhLWxpc3QnO1xuaW1wb3J0IHtUdWlJY29uLCBUdWlJY29uUGlwZX0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7VFVJX1RFWFRGSUVMRF9PUFRJT05TfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9jb21wb25lbnRzL3RleHRmaWVsZCc7XG5pbXBvcnQge1xuICAgIFR1aUFwcGVhcmFuY2UsXG4gICAgdHVpQXBwZWFyYW5jZU9wdGlvbnNQcm92aWRlcixcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9hcHBlYXJhbmNlJztcbmltcG9ydCB7XG4gICAgVHVpRHJvcGRvd25EaXJlY3RpdmUsXG4gICAgVHVpRHJvcGRvd25PcGVuLFxuICAgIHR1aURyb3Bkb3duT3B0aW9uc1Byb3ZpZGVyLFxufSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2Ryb3Bkb3duJztcbmltcG9ydCB7VFVJX0NPTU1PTl9JQ09OU30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdG9rZW5zJztcbmltcG9ydCB7VHVpQ2hldnJvbn0gZnJvbSAnQHRhaWdhLXVpL2tpdC9kaXJlY3RpdmVzL2NoZXZyb24nO1xuaW1wb3J0IHR5cGUge1BvbHltb3JwaGV1c0NvbnRlbnR9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHtQb2x5bW9ycGhldXNPdXRsZXQsIFBvbHltb3JwaGV1c1RlbXBsYXRlfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7bWFwLCBtZXJnZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9PUFRJT05TfSBmcm9tICcuL2lucHV0LWNhcmQtZ3JvdXBlZC5vcHRpb25zJztcbmltcG9ydCB7VFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9URVhUU30gZnJvbSAnLi9pbnB1dC1jYXJkLWdyb3VwZWQucHJvdmlkZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBUdWlDYXJkIHtcbiAgICBjYXJkOiBzdHJpbmc7XG4gICAgY3ZjOiBzdHJpbmc7XG4gICAgZXhwaXJlOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICd0dWktaW5wdXQtY2FyZC1ncm91cGVkJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBNYXNraXRvRGlyZWN0aXZlLFxuICAgICAgICBSZXNpemVPYnNlcnZlckRpcmVjdGl2ZSxcbiAgICAgICAgUG9seW1vcnBoZXVzT3V0bGV0LFxuICAgICAgICBQb2x5bW9ycGhldXNUZW1wbGF0ZSxcbiAgICAgICAgVHVpQWN0aXZlWm9uZSxcbiAgICAgICAgVHVpRm9ybWF0Q2FyZFBpcGUsXG4gICAgICAgIFR1aU1hcHBlclBpcGUsXG4gICAgICAgIFR1aUxldCxcbiAgICAgICAgVHVpSWNvbixcbiAgICAgICAgVHVpQ2hldnJvbixcbiAgICAgICAgVHVpQXBwZWFyYW5jZSxcbiAgICAgICAgVHVpSWNvblBpcGUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQtY2FyZC1ncm91cGVkLnRlbXBsYXRlLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2lucHV0LWNhcmQtZ3JvdXBlZC5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHR1aUFzRGF0YUxpc3RIb3N0KFR1aUlucHV0Q2FyZEdyb3VwKSxcbiAgICAgICAgdHVpQXNDb250cm9sKFR1aUlucHV0Q2FyZEdyb3VwKSxcbiAgICAgICAgdHVpRHJvcGRvd25PcHRpb25zUHJvdmlkZXIoe2xpbWl0V2lkdGg6ICdmaXhlZCd9KSxcbiAgICAgICAgdHVpQXBwZWFyYW5jZU9wdGlvbnNQcm92aWRlcihUVUlfVEVYVEZJRUxEX09QVElPTlMpLFxuICAgICAgICBUdWlIb3ZlcmVkU2VydmljZSxcbiAgICBdLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIFR1aUFwcGVhcmFuY2UsXG4gICAgICAgIFR1aURyb3Bkb3duRGlyZWN0aXZlLFxuICAgICAgICBUdWlXaXRoRGF0YUxpc3QsXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogVHVpRHJvcGRvd25PcGVuLFxuICAgICAgICAgICAgaW5wdXRzOiBbJ3R1aURyb3Bkb3duT3Blbjogb3BlbiddLFxuICAgICAgICAgICAgb3V0cHV0czogWyd0dWlEcm9wZG93bk9wZW5DaGFuZ2U6IG9wZW5DaGFuZ2UnXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2RhdGEtc2l6ZSc6ICdsJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtbW9kZV0nOiAnbW9kZSgpJyxcbiAgICAgICAgJyhtb3VzZWRvd24pJzogJ29uTW91c2VEb3duKCRldmVudCknLFxuICAgIH0sXG59KVxuZXhwb3J0IGNsYXNzIFR1aUlucHV0Q2FyZEdyb3VwXG4gICAgZXh0ZW5kcyBUdWlDb250cm9sPFR1aUNhcmQgfCBudWxsPlxuICAgIGltcGxlbWVudHMgVHVpRGF0YUxpc3RIb3N0PFBhcnRpYWw8VHVpQ2FyZD4+XG57XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRDYXJkJylcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0Q2FyZD86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dEV4cGlyZScpXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dEV4cGlyZT86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dENWQycpXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dENWQz86IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBwcml2YXRlIGV4cGlyZVByZWZpbGxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGF5bWVudFN5c3RlbXMgPSBpbmplY3QoVFVJX1BBWU1FTlRfU1lTVEVNX0lDT05TKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnMgPSBpbmplY3QoVFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9PUFRJT05TKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaG92ZXIgPSB0dWlIb3ZlcmVkKCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb2N1c2VkSW4gPSB0b1NpZ25hbChcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudCh0aGlzLmVsLCAnZm9jdXNpbicpLFxuICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQodGhpcy5lbCwgJ2ZvY3Vzb3V0JyksXG4gICAgICAgICkucGlwZShtYXAoKCkgPT4gdHVpSXNOYXRpdmVGb2N1c2VkSW4odGhpcy5lbCkpKSxcbiAgICAgICAge2luaXRpYWxWYWx1ZTogZmFsc2V9LFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgZXhhbXBsZVRleHRDVkMgPSB0aGlzLm9wdGlvbnMuZXhhbXBsZVRleHRDVkM7XG4gICAgcHJvdGVjdGVkIGN2Y0hpZGRlbiA9IHRoaXMub3B0aW9ucy5jdmNIaWRkZW47XG4gICAgcHJvdGVjdGVkIG1hc2tDVkMgPSBUVUlfTUFTS19DVkMoMyk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyb3Bkb3duID0gaW5qZWN0KFR1aURyb3Bkb3duRGlyZWN0aXZlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbWFza0NhcmQgPSBUVUlfTUFTS19DQVJEO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXNrRXhwaXJlID0gVFVJX01BU0tfRVhQSVJFO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpY29ucyA9IGluamVjdChUVUlfQ09NTU9OX0lDT05TKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGV4dHMgPSB0b1NpZ25hbChpbmplY3QoVFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9URVhUUykpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wZW46IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gdHVpRGlyZWN0aXZlQmluZGluZyhcbiAgICAgICAgVHVpRHJvcGRvd25PcGVuLFxuICAgICAgICAndHVpRHJvcGRvd25PcGVuJyxcbiAgICAgICAgZmFsc2UsXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdGF0ZSA9IHR1aURpcmVjdGl2ZUJpbmRpbmcoXG4gICAgICAgIFR1aUFwcGVhcmFuY2UsXG4gICAgICAgICd0dWlBcHBlYXJhbmNlU3RhdGUnLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgICAgICAgY29tcHV0ZWQoKCkgPT4gKHRoaXMuZGlzYWJsZWQoKSA/ICdkaXNhYmxlZCcgOiB0aGlzLmhvdmVyKCkgPyAnaG92ZXInIDogbnVsbCkpLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9jdXMgPSB0dWlEaXJlY3RpdmVCaW5kaW5nKFxuICAgICAgICBUdWlBcHBlYXJhbmNlLFxuICAgICAgICAndHVpQXBwZWFyYW5jZUZvY3VzJyxcbiAgICAgICAgY29tcHV0ZWQoKCkgPT4gdGhpcy5vcGVuKCkgfHwgdGhpcy5mb2N1c2VkSW4oKSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdWIgPSBpbmplY3QoVHVpRHJvcGRvd25PcGVuKVxuICAgICAgICAudHVpRHJvcGRvd25PcGVuQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUob3BlbiA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wZW4uc2V0KG9wZW4pO1xuICAgICAgICB9KTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBsYWJlbFJhaXNlZCA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiAodGhpcy5mb2N1cygpICYmICF0aGlzLnJlYWRPbmx5KCkpIHx8ICEhdGhpcy52YWx1ZSgpPy5jYXJkLFxuICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFzQ2xlYW5lciA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiAhIXRoaXMudmFsdWUoKT8uY2FyZCAmJiB0aGlzLmludGVyYWN0aXZlKCksXG4gICAgKTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGV4YW1wbGVUZXh0ID0gdGhpcy5vcHRpb25zLmV4YW1wbGVUZXh0O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY2FyZFZhbGlkYXRvcjogVHVpQm9vbGVhbkhhbmRsZXI8c3RyaW5nPiA9IHRoaXMub3B0aW9ucy5jYXJkVmFsaWRhdG9yO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWNvbjogUG9seW1vcnBoZXVzQ29udGVudCA9IHRoaXMub3B0aW9ucy5pY29uO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBpbmplY3QoVHVpSWRTZXJ2aWNlKS5nZW5lcmF0ZSgpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlID0gdGhpcy5vcHRpb25zLmF1dG9jb21wbGV0ZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBiaW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgY29kZUxlbmd0aChsZW5ndGg6IDMgfCA0KSB7XG4gICAgICAgIHRoaXMuZXhhbXBsZVRleHRDVkMgPSAnMCcucmVwZWF0KGxlbmd0aCk7XG4gICAgICAgIHRoaXMubWFza0NWQyA9IFRVSV9NQVNLX0NWQyhsZW5ndGgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYmluKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJkLmxlbmd0aCA8IDYgPyBudWxsIDogdGhpcy5jYXJkLnNsaWNlKDAsIDYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3cml0ZVZhbHVlKHZhbHVlOiBUdWlDYXJkIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7YmlufSA9IHRoaXM7XG5cbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlQmluKGJpbik7XG4gICAgICAgIHRoaXMuZXhwaXJlUHJlZmlsbGVkID0gISF0aGlzLmV4cGlyZSAmJiB0aGlzLmNhcmRQcmVmaWxsZWQ7XG4gICAgfVxuXG4gICAgLyoqIFB1YmxpYyBBUEkgZm9yIG1hbnVhbCBmb2N1cyBtYW5hZ2VtZW50ICovXG4gICAgcHVibGljIGZvY3VzQ2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbnB1dENhcmQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNFeHBpcmUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRFeHBpcmU/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNDVkMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5wdXRDVkM/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6IHRydWV9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlT3B0aW9uKG9wdGlvbjogUGFydGlhbDxUdWlDYXJkPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge2NhcmQgPSAnJywgZXhwaXJlID0gJycsIGN2YyA9ICcnfSA9IG9wdGlvbiB8fCB7fTtcbiAgICAgICAgY29uc3Qge2Jpbn0gPSB0aGlzO1xuICAgICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgICAgICghY2FyZCAmJiB0aGlzLmlucHV0Q2FyZD8ubmF0aXZlRWxlbWVudCkgfHxcbiAgICAgICAgICAgICghZXhwaXJlICYmIHRoaXMuaW5wdXRFeHBpcmU/Lm5hdGl2ZUVsZW1lbnQpIHx8XG4gICAgICAgICAgICB0aGlzLmlucHV0Q1ZDPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2Uoe2NhcmQsIGV4cGlyZSwgY3ZjfSk7XG4gICAgICAgIHRoaXMudXBkYXRlQmluKGJpbik7XG4gICAgICAgIHRoaXMub3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmV4cGlyZVByZWZpbGxlZCA9ICEhZXhwaXJlO1xuXG4gICAgICAgIGVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4cGlyZVByZWZpbGxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgICAgICB0aGlzLmZvY3VzQ2FyZCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgY29udGVudCgpOiBQb2x5bW9ycGhldXNDb250ZW50IHtcbiAgICAgICAgY29uc3Qgc3lzdGVtID0gdGhpcy5nZXRQYXltZW50U3lzdGVtKHRoaXMuY2FyZCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaWNvbiB8fCAoc3lzdGVtICYmIHRoaXMucGF5bWVudFN5c3RlbXNbc3lzdGVtXSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBjYXJkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlKCk/LmNhcmQgfHwgJyc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBleHBpcmUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUoKT8uZXhwaXJlIHx8ICcnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgY3ZjKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlKCk/LmN2YyB8fCAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGNhcmRDb2xsYXBzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzRm9jdXNhYmxlKHRoaXMuY2FyZCkgJiZcbiAgICAgICAgICAgICF0dWlJc05hdGl2ZUZvY3VzZWQodGhpcy5pbnB1dENhcmQ/Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCB0YWlsTGVuZ3RoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhcmQubGVuZ3RoICUgNCA+IDAgPyA1IDogNDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGNhcmRQcmVmaWxsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY2FyZC5tYXRjaChUVUlfTk9OX0RJR0lUX1JFR0VYUCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBjdmNQcmVmaWxsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuY3ZjLm1hdGNoKFRVSV9OT05fRElHSVRfUkVHRVhQKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGNhcmRGb2N1c2FibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jYXJkUHJlZmlsbGVkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZXhwaXJlRm9jdXNhYmxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZvY3VzYWJsZSh0aGlzLmNhcmQpICYmICF0aGlzLmV4cGlyZVByZWZpbGxlZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGN2Y0ZvY3VzYWJsZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGb2N1c2FibGUodGhpcy5jYXJkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IG1hc2tlZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJkUHJlZmlsbGVkID8gYCoke3RoaXMuY2FyZC5zbGljZSgtNCl9YCA6ICcqJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25DYXJkQ2hhbmdlKGNhcmQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7dmFsdWUsIGJpbn0gPSB0aGlzO1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBjYXJkLnNwbGl0KCcgJykuam9pbignJyk7XG5cbiAgICAgICAgaWYgKHZhbHVlKCk/LmNhcmQgPT09IHBhcnNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eShwYXJzZWQsICdjYXJkJyk7XG4gICAgICAgIHRoaXMudXBkYXRlQmluKGJpbik7XG5cbiAgICAgICAgaWYgKHRoaXMuY2FyZFZhbGlkYXRvcih0aGlzLmNhcmQpICYmICF2YWx1ZSgpPy5leHBpcmUgJiYgdGhpcy5pbnB1dEV4cGlyZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0V4cGlyZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRXhwaXJlQ2hhbmdlKGV4cGlyZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkoZXhwaXJlLCAnZXhwaXJlJyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgTnVtYmVyKHRoaXMuaW5wdXRFeHBpcmU/Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQpID09PSA1IC8vIE1NL1lZXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0NWQygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uQ1ZDQ2hhbmdlKGN2Yzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJvcGVydHkoY3ZjLCAnY3ZjJyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyYW5zZm9ybSh7b2Zmc2V0V2lkdGh9OiBIVE1MU3BhbkVsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJkQ29sbGFwc2VkID8gYHRyYW5zbGF0ZTNkKCR7b2Zmc2V0V2lkdGh9cHgsIDAsIDApYCA6ICcnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodHVpSXNFbGVtZW50KGV2ZW50LnRhcmdldCkgJiYgdHVpSXNJbnB1dChldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wZW4uc2V0KCF0aGlzLm9wZW4oKSk7XG4gICAgfVxuXG4gICAgQHR1aVB1cmVcbiAgICBwcml2YXRlIGlzRm9jdXNhYmxlKGNhcmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jYXJkVmFsaWRhdG9yKGNhcmQpIHx8IHRoaXMuY2FyZFByZWZpbGxlZDtcbiAgICB9XG5cbiAgICBAdHVpUHVyZVxuICAgIHByaXZhdGUgZ2V0UGF5bWVudFN5c3RlbSh2YWx1ZTogc3RyaW5nKTogVHVpUGF5bWVudFN5c3RlbSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnBheW1lbnRTeXN0ZW1IYW5kbGVyKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUJpbihvbGRCaW46IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge2Jpbn0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChiaW4gIT09IG9sZEJpbiAmJiAhdGhpcy5jYXJkUHJlZmlsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLmJpbkNoYW5nZS5lbWl0KGJpbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByb3BlcnR5KHZhbHVlOiBzdHJpbmcsIHByb3BOYW1lOiAnY2FyZCcgfCAnY3ZjJyB8ICdleHBpcmUnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHtjYXJkID0gJycsIGV4cGlyZSA9ICcnLCBjdmMgPSAnJ30gPSB0aGlzLnZhbHVlKCkgfHwge307XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlOiBUdWlDYXJkID0ge2NhcmQsIGV4cGlyZSwgY3ZjfTtcblxuICAgICAgICBuZXdWYWx1ZVtwcm9wTmFtZV0gPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1ZhbHVlLmV4cGlyZSB8fCBuZXdWYWx1ZS5jdmMgfHwgbmV3VmFsdWUuY2FyZCA/IG5ld1ZhbHVlIDogbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0lucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID1cbiAgICAgICAgICAgICh0aGlzLmNhcmRGb2N1c2FibGUgJiYgdGhpcy5pbnB1dENhcmQ/Lm5hdGl2ZUVsZW1lbnQpIHx8XG4gICAgICAgICAgICAodGhpcy5leHBpcmVGb2N1c2FibGUgJiYgdGhpcy5pbnB1dEV4cGlyZT8ubmF0aXZlRWxlbWVudCkgfHxcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDVkM/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgZWxlbWVudD8uZm9jdXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidC13cmFwcGVyXCI+XG4gICAgPGxhYmVsXG4gICAgICAgICp0dWlMZXQ9XCJ2YWx1ZSgpPy5jYXJkIHwgdHVpRm9ybWF0Q2FyZDogY2FyZFByZWZpbGxlZCBhcyBmb3JtYXR0ZWRDYXJkXCJcbiAgICAgICAgKGNsaWNrLnNpbGVudC5wcmV2ZW50KT1cIigwKVwiXG4gICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dENhcmRcbiAgICAgICAgICAgIGF1dG9tYXRpb24taWQ9XCJ0dWktaW5wdXQtY2FyZC1ncm91cGVkX19jYXJkXCJcbiAgICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICAgdHJhbnNsYXRlPVwibm9cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWlucHV0IHQtaW5wdXRfY2FyZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWludmFsaWRdPVwiIWNhcmRQcmVmaWxsZWQgJiYgISh0aGlzLmNhcmQgfCB0dWlNYXBwZXI6IGNhcmRWYWxpZGF0b3IpXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlkICsgJ19jYXJkJ1wiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSA/ICdjYy1udW1iZXInIDogJ29mZidcIlxuICAgICAgICAgICAgW2NsYXNzLnQtaW5wdXRfaGlkZGVuXT1cIiFjYXJkLmxlbmd0aCAmJiBmb2N1cygpXCJcbiAgICAgICAgICAgIFtjbGFzcy50LWlucHV0X2luZXJ0XT1cImNhcmRQcmVmaWxsZWRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgICAgICAgW21hc2tpdG9dPVwibWFza0NhcmRcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZm9ybWF0dGVkQ2FyZFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiY2FyZFByZWZpbGxlZCA/ICcnIDogZXhhbXBsZVRleHRcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRPbmx5KClcIlxuICAgICAgICAgICAgW3RhYkluZGV4XT1cImNhcmRGb2N1c2FibGUgPyAwIDogLTFcIlxuICAgICAgICAgICAgKGZvY3VzKT1cIigwKVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhcmRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgdHJhbnNsYXRlPVwibm9cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWNvbGxhcHNlZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJlZm9yZV09XCJtYXNrZWRcIlxuICAgICAgICAgICAgW2NsYXNzLnQtY29sbGFwc2VkX2VuYWJsZS1tYXNrXT1cImNhcmRDb2xsYXBzZWRcIlxuICAgICAgICAgICAgKHdhUmVzaXplT2JzZXJ2ZXIpPVwiKDApXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAjZ2hvc3RcbiAgICAgICAgICAgICAgICBjbGFzcz1cInQtZ2hvc3RcIlxuICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJmb3JtYXR0ZWRDYXJkLnNsaWNlKC10YWlsTGVuZ3RoKVwiXG4gICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInQtY29sbGFwc2VkLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInQtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cInRyYW5zZm9ybShnaG9zdClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0dGVkQ2FyZCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInQtbGFiZWxcIlxuICAgICAgICAgICAgW2NsYXNzLnQtbGFiZWxfcmFpc2VkXT1cImxhYmVsUmFpc2VkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyB0ZXh0cygpPy5jYXJkTnVtYmVyVGV4dCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2xhYmVsPlxuPC9kaXY+XG48ZGl2XG4gICAgY2xhc3M9XCJ0LXdyYXBwZXIgdC13cmFwcGVyX2V4cGlyZVwiXG4gICAgW2NsYXNzLnQtd3JhcHBlcl9hY3RpdmVdPVwiY2FyZENvbGxhcHNlZFwiXG4+XG4gICAgPGxhYmVsIChjbGljay5zaWxlbnQucHJldmVudCk9XCIoMClcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRFeHBpcmVcbiAgICAgICAgICAgIGF1dG9tYXRpb24taWQ9XCJ0dWktaW5wdXQtY2FyZC1ncm91cGVkX19leHBpcmVcIlxuICAgICAgICAgICAgaW5wdXRtb2RlPVwibnVtZXJpY1wiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjAwLzAwXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZT1cIm5vXCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1pbnB1dFwiXG4gICAgICAgICAgICBbYXR0ci5pZF09XCJpZCArICdfZXhwaXJlJ1wiXG4gICAgICAgICAgICBbYXR0ci5uYW1lXT1cImF1dG9jb21wbGV0ZSA/ICdjY2V4cGlyeXllYXInIDogbnVsbFwiXG4gICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZSA/ICdjYy1leHAnIDogJ29mZidcIlxuICAgICAgICAgICAgW2NsYXNzLnQtaW5wdXRfaW5lcnRdPVwiIWV4cGlyZUZvY3VzYWJsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICBbbWFza2l0b109XCJtYXNrRXhwaXJlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImV4cGlyZVwiXG4gICAgICAgICAgICBbcmVhZE9ubHldPVwicmVhZE9ubHkoKVwiXG4gICAgICAgICAgICBbdGFiSW5kZXhdPVwiZXhwaXJlRm9jdXNhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCIoMClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FeHBpcmVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidC1sYWJlbFwiXG4gICAgICAgICAgICBbY2xhc3MudC1sYWJlbF9yYWlzZWRdPVwibGFiZWxSYWlzZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHRleHRzKCk/LmV4cGlyeVRleHQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9sYWJlbD5cbjwvZGl2PlxuPGRpdlxuICAgIGNsYXNzPVwidC13cmFwcGVyIHQtd3JhcHBlcl9jdmNcIlxuICAgIFtjbGFzcy50LXdyYXBwZXJfYWN0aXZlXT1cImNhcmRDb2xsYXBzZWRcIlxuPlxuICAgIDxsYWJlbCAoY2xpY2suc2lsZW50LnByZXZlbnQpPVwiKDApXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0Q1ZDXG4gICAgICAgICAgICBhdXRvbWF0aW9uLWlkPVwidHVpLWlucHV0LWNhcmQtZ3JvdXBlZF9fY3ZjXCJcbiAgICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICAgdHJhbnNsYXRlPVwibm9cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0LWlucHV0XCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlkICsgJ19jdmMnXCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlID8gJ2NjLWNzYycgOiAnb2ZmJ1wiXG4gICAgICAgICAgICBbY2xhc3MudC1pbnB1dF9jdmNfaGlkZGVuXT1cImN2Y0hpZGRlblwiXG4gICAgICAgICAgICBbY2xhc3MudC1pbnB1dF9wcmVmaWxsZWRdPVwiY3ZjUHJlZmlsbGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcbiAgICAgICAgICAgIFttYXNraXRvXT1cIm1hc2tDVkNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiY3ZjXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjdmNQcmVmaWxsZWQgPyAn4oCi4oCi4oCiJyA6IGV4YW1wbGVUZXh0Q1ZDXCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCJyZWFkT25seSgpIHx8IGN2Y1ByZWZpbGxlZFwiXG4gICAgICAgICAgICBbdGFiSW5kZXhdPVwiY3ZjRm9jdXNhYmxlID8gMCA6IC0xXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCIoMClcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DVkNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidC1sYWJlbFwiXG4gICAgICAgICAgICBbY2xhc3MudC1sYWJlbF9yYWlzZWRdPVwibGFiZWxSYWlzZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHRleHRzKCk/LmN2Y1RleHQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9sYWJlbD5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cInQtaWNvbnNcIj5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwiY29udGVudFwiXG4gICAgICAgIGNsYXNzPVwidC1pY29uLW91dGxldFwiXG4gICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgICAqcG9seW1vcnBoZXVzT3V0bGV0PVwiY29udGVudCBhcyBzcmNcIlxuICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgIGF1dG9tYXRpb24taWQ9XCJ0dWktaW5wdXQtY2FyZC1ncm91cGVkX19pY29uXCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1jYXJkXCJcbiAgICAgICAgICAgIFtzcmNdPVwic3JjIHwgdHVpSWNvblwiXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG4gICAgPHR1aS1pY29uXG4gICAgICAgICpuZ0lmPVwiaGFzQ2xlYW5lcigpXCJcbiAgICAgICAgYXV0b21hdGlvbi1pZD1cInR1aS1pbnB1dC1jYXJkLWdyb3VwZWRfX2NsZWFuZXJcIlxuICAgICAgICB0dWlBcHBlYXJhbmNlPVwiaWNvblwiXG4gICAgICAgIGNsYXNzPVwidC1pY29uXCJcbiAgICAgICAgW2ljb25dPVwiaWNvbnMuY2xvc2VcIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgLz5cbiAgICA8dHVpLWljb25cbiAgICAgICAgKm5nSWY9XCJkcm9wZG93bi5jb250ZW50XCJcbiAgICAgICAgYXV0b21hdGlvbi1pZD1cInR1aS1pbnB1dC1jYXJkLWdyb3VwZWRfX2Ryb3Bkb3duXCJcbiAgICAgICAgdHVpQXBwZWFyYW5jZT1cImljb25cIlxuICAgICAgICB0dWlDaGV2cm9uXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGUoKVwiXG4gICAgLz5cbjwvZGl2PlxuIl19
@@ -1,15 +0,0 @@
1
- import { TUI_INPUT_CARD_DEFAULT_OPTIONS } from '@taiga-ui/addon-commerce/components/input-card';
2
- import { tuiDefaultCardValidator } from '@taiga-ui/addon-commerce/constants';
3
- import { tuiCreateToken, tuiProvideOptions } from '@taiga-ui/cdk/utils/miscellaneous';
4
- export const TUI_INPUT_CARD_GROUPED_DEFAULT_OPTIONS = {
5
- ...TUI_INPUT_CARD_DEFAULT_OPTIONS,
6
- cardValidator: tuiDefaultCardValidator,
7
- exampleText: '0000 0000 0000 0000',
8
- exampleTextCVC: '000',
9
- cvcHidden: true,
10
- };
11
- export const TUI_INPUT_CARD_GROUPED_OPTIONS = tuiCreateToken(TUI_INPUT_CARD_GROUPED_DEFAULT_OPTIONS);
12
- export function tuiInputCardGroupedOptionsProvider(options) {
13
- return tuiProvideOptions(TUI_INPUT_CARD_GROUPED_OPTIONS, options, TUI_INPUT_CARD_GROUPED_DEFAULT_OPTIONS);
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2FyZC1ncm91cGVkLm9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQtZ3JvdXBlZC9pbnB1dC1jYXJkLWdyb3VwZWQub3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUUzRSxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFTcEYsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQTZCO0lBQzVFLEdBQUcsOEJBQThCO0lBQ2pDLGFBQWEsRUFBRSx1QkFBdUI7SUFDdEMsV0FBVyxFQUFFLHFCQUFxQjtJQUNsQyxjQUFjLEVBQUUsS0FBSztJQUNyQixTQUFTLEVBQUUsSUFBSTtDQUNsQixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsY0FBYyxDQUN4RCxzQ0FBc0MsQ0FDekMsQ0FBQztBQUVGLE1BQU0sVUFBVSxrQ0FBa0MsQ0FDOUMsT0FBMEM7SUFFMUMsT0FBTyxpQkFBaUIsQ0FDcEIsOEJBQThCLEVBQzlCLE9BQU8sRUFDUCxzQ0FBc0MsQ0FDekMsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7UHJvdmlkZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1R1aUlucHV0Q2FyZE9wdGlvbnN9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQnO1xuaW1wb3J0IHtUVUlfSU5QVVRfQ0FSRF9ERUZBVUxUX09QVElPTlN9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQnO1xuaW1wb3J0IHt0dWlEZWZhdWx0Q2FyZFZhbGlkYXRvcn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7VHVpQm9vbGVhbkhhbmRsZXJ9IGZyb20gJ0B0YWlnYS11aS9jZGsvdHlwZXMnO1xuaW1wb3J0IHt0dWlDcmVhdGVUb2tlbiwgdHVpUHJvdmlkZU9wdGlvbnN9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVpSW5wdXRDYXJkR3JvdXBPcHRpb25zIGV4dGVuZHMgVHVpSW5wdXRDYXJkT3B0aW9ucyB7XG4gICAgcmVhZG9ubHkgY2FyZFZhbGlkYXRvcjogVHVpQm9vbGVhbkhhbmRsZXI8c3RyaW5nPjtcbiAgICByZWFkb25seSBleGFtcGxlVGV4dDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGV4YW1wbGVUZXh0Q1ZDOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY3ZjSGlkZGVuOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgVFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9ERUZBVUxUX09QVElPTlM6IFR1aUlucHV0Q2FyZEdyb3VwT3B0aW9ucyA9IHtcbiAgICAuLi5UVUlfSU5QVVRfQ0FSRF9ERUZBVUxUX09QVElPTlMsXG4gICAgY2FyZFZhbGlkYXRvcjogdHVpRGVmYXVsdENhcmRWYWxpZGF0b3IsXG4gICAgZXhhbXBsZVRleHQ6ICcwMDAwIDAwMDAgMDAwMCAwMDAwJyxcbiAgICBleGFtcGxlVGV4dENWQzogJzAwMCcsXG4gICAgY3ZjSGlkZGVuOiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IFRVSV9JTlBVVF9DQVJEX0dST1VQRURfT1BUSU9OUyA9IHR1aUNyZWF0ZVRva2VuKFxuICAgIFRVSV9JTlBVVF9DQVJEX0dST1VQRURfREVGQVVMVF9PUFRJT05TLFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHR1aUlucHV0Q2FyZEdyb3VwZWRPcHRpb25zUHJvdmlkZXIoXG4gICAgb3B0aW9uczogUGFydGlhbDxUdWlJbnB1dENhcmRHcm91cE9wdGlvbnM+LFxuKTogUHJvdmlkZXIge1xuICAgIHJldHVybiB0dWlQcm92aWRlT3B0aW9ucyhcbiAgICAgICAgVFVJX0lOUFVUX0NBUkRfR1JPVVBFRF9PUFRJT05TLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBUVUlfSU5QVVRfQ0FSRF9HUk9VUEVEX0RFRkFVTFRfT1BUSU9OUyxcbiAgICApO1xufVxuIl19
@@ -1,29 +0,0 @@
1
- import { inject } from '@angular/core';
2
- import { WINDOW } from '@ng-web-apis/common';
3
- import { TUI_CARD_CVC_TEXTS, TUI_CARD_EXPIRY_TEXTS, TUI_CARD_NUMBER_TEXTS, } from '@taiga-ui/addon-commerce/tokens';
4
- import { tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
5
- import { tuiCreateTokenFromFactory } from '@taiga-ui/cdk/utils/miscellaneous';
6
- import { TUI_MEDIA } from '@taiga-ui/core/tokens';
7
- import { combineLatest, map, of, startWith, switchMap } from 'rxjs';
8
- /**
9
- * InputCardGrouped texts
10
- */
11
- export const TUI_INPUT_CARD_GROUPED_TEXTS = tuiCreateTokenFromFactory(() => {
12
- const win = inject(WINDOW);
13
- const cardNumberTexts = inject(TUI_CARD_NUMBER_TEXTS);
14
- const expiryTexts = inject(TUI_CARD_EXPIRY_TEXTS);
15
- const cvcTexts = inject(TUI_CARD_CVC_TEXTS);
16
- const { desktopSmall } = inject(TUI_MEDIA);
17
- const media = win.matchMedia(`screen and (min-width: ${(desktopSmall - 1) / 16}em)`);
18
- return tuiTypedFromEvent(media, 'change').pipe(startWith(null), switchMap(() => combineLatest([
19
- of(Number(media.matches)),
20
- cardNumberTexts,
21
- expiryTexts,
22
- cvcTexts,
23
- ])), map(([index, cardNumber, expiry, cvcTexts]) => ({
24
- cardNumberText: cardNumber[index],
25
- expiryText: expiry[index],
26
- cvcText: cvcTexts[index],
27
- })));
28
- });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2FyZC1ncm91cGVkLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FkZG9uLWNvbW1lcmNlL2NvbXBvbmVudHMvaW5wdXQtY2FyZC1ncm91cGVkL2lucHV0LWNhcmQtZ3JvdXBlZC5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxFQUNILGtCQUFrQixFQUNsQixxQkFBcUIsRUFDckIscUJBQXFCLEdBQ3hCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE9BQU8sRUFBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBUWxFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcseUJBQXlCLENBRW5FLEdBQUcsRUFBRTtJQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM1QyxNQUFNLEVBQUMsWUFBWSxFQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsMEJBQTBCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFckYsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQ2YsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNYLGFBQWEsQ0FBQztRQUNWLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLGVBQWU7UUFDZixXQUFXO1FBQ1gsUUFBUTtLQUNYLENBQUMsQ0FDTCxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDakMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDekIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUM7S0FDM0IsQ0FBQyxDQUFDLENBQ04sQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtXSU5ET1d9IGZyb20gJ0BuZy13ZWItYXBpcy9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBUVUlfQ0FSRF9DVkNfVEVYVFMsXG4gICAgVFVJX0NBUkRfRVhQSVJZX1RFWFRTLFxuICAgIFRVSV9DQVJEX05VTUJFUl9URVhUUyxcbn0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlL3Rva2Vucyc7XG5pbXBvcnQge3R1aVR5cGVkRnJvbUV2ZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpQ3JlYXRlVG9rZW5Gcm9tRmFjdG9yeX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9taXNjZWxsYW5lb3VzJztcbmltcG9ydCB7VFVJX01FRElBfSBmcm9tICdAdGFpZ2EtdWkvY29yZS90b2tlbnMnO1xuaW1wb3J0IHR5cGUge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBtYXAsIG9mLCBzdGFydFdpdGgsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHVpQ2FyZEdyb3VwZWRUZXh0cyB7XG4gICAgcmVhZG9ubHkgY2FyZE51bWJlclRleHQ6IHN0cmluZztcbiAgICByZWFkb25seSBjdmNUZXh0OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgZXhwaXJ5VGV4dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIElucHV0Q2FyZEdyb3VwZWQgdGV4dHNcbiAqL1xuZXhwb3J0IGNvbnN0IFRVSV9JTlBVVF9DQVJEX0dST1VQRURfVEVYVFMgPSB0dWlDcmVhdGVUb2tlbkZyb21GYWN0b3J5PFxuICAgIE9ic2VydmFibGU8VHVpQ2FyZEdyb3VwZWRUZXh0cz5cbj4oKCkgPT4ge1xuICAgIGNvbnN0IHdpbiA9IGluamVjdChXSU5ET1cpO1xuICAgIGNvbnN0IGNhcmROdW1iZXJUZXh0cyA9IGluamVjdChUVUlfQ0FSRF9OVU1CRVJfVEVYVFMpO1xuICAgIGNvbnN0IGV4cGlyeVRleHRzID0gaW5qZWN0KFRVSV9DQVJEX0VYUElSWV9URVhUUyk7XG4gICAgY29uc3QgY3ZjVGV4dHMgPSBpbmplY3QoVFVJX0NBUkRfQ1ZDX1RFWFRTKTtcbiAgICBjb25zdCB7ZGVza3RvcFNtYWxsfSA9IGluamVjdChUVUlfTUVESUEpO1xuXG4gICAgY29uc3QgbWVkaWEgPSB3aW4ubWF0Y2hNZWRpYShgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAkeyhkZXNrdG9wU21hbGwgLSAxKSAvIDE2fWVtKWApO1xuXG4gICAgcmV0dXJuIHR1aVR5cGVkRnJvbUV2ZW50KG1lZGlhLCAnY2hhbmdlJykucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgICAgIG9mKE51bWJlcihtZWRpYS5tYXRjaGVzKSksXG4gICAgICAgICAgICAgICAgY2FyZE51bWJlclRleHRzLFxuICAgICAgICAgICAgICAgIGV4cGlyeVRleHRzLFxuICAgICAgICAgICAgICAgIGN2Y1RleHRzLFxuICAgICAgICAgICAgXSksXG4gICAgICAgICksXG4gICAgICAgIG1hcCgoW2luZGV4LCBjYXJkTnVtYmVyLCBleHBpcnksIGN2Y1RleHRzXSkgPT4gKHtcbiAgICAgICAgICAgIGNhcmROdW1iZXJUZXh0OiBjYXJkTnVtYmVyW2luZGV4XSxcbiAgICAgICAgICAgIGV4cGlyeVRleHQ6IGV4cGlyeVtpbmRleF0sXG4gICAgICAgICAgICBjdmNUZXh0OiBjdmNUZXh0c1tpbmRleF0sXG4gICAgICAgIH0pKSxcbiAgICApO1xufSk7XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFpZ2EtdWktYWRkb24tY29tbWVyY2UtY29tcG9uZW50cy1pbnB1dC1jYXJkLWdyb3VwZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQtZ3JvdXBlZC90YWlnYS11aS1hZGRvbi1jb21tZXJjZS1jb21wb25lbnRzLWlucHV0LWNhcmQtZ3JvdXBlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==