UNPKG

@taiga-ui/addon-commerce

Version:

Extension package for Taiga UI related to commerce, payment systems, currencies etc.

86 lines 14 kB
import { ChangeDetectionStrategy, Component, computed, inject, Input, Output, signal, ViewEncapsulation, } from '@angular/core'; import { toObservable, toSignal } from '@angular/core/rxjs-interop'; import { DefaultValueAccessor, NgControl } from '@angular/forms'; import { MaskitoDirective } from '@maskito/angular'; import { TUI_MASK_CARD } from '@taiga-ui/addon-commerce/constants'; import { TUI_PAYMENT_SYSTEM_ICONS } from '@taiga-ui/addon-commerce/tokens'; import { CHAR_NO_BREAK_SPACE } from '@taiga-ui/cdk/constants'; import { tuiControlValue } from '@taiga-ui/cdk/observables'; import { TuiTextfieldContent, TuiWithTextfield } from '@taiga-ui/core/components/textfield'; import { tuiInjectIconResolver } from '@taiga-ui/core/tokens'; import { tuiMaskito } from '@taiga-ui/kit/utils'; import { distinctUntilChanged, map, skip, startWith, switchMap, timer } from 'rxjs'; import { TUI_INPUT_CARD_OPTIONS } from './input-card.options'; import * as i0 from "@angular/core"; import * as i1 from "@maskito/angular"; import * as i2 from "@taiga-ui/core/components/textfield"; class TuiInputCard { constructor() { this.icons = inject(TUI_PAYMENT_SYSTEM_ICONS); this.options = inject(TUI_INPUT_CARD_OPTIONS); this.resolver = tuiInjectIconResolver(); this.control = inject(NgControl); this.value = toSignal(timer(0).pipe(switchMap(() => tuiControlValue(this.control))), { initialValue: '' }); this.icon = signal(this.options.icon); this.accessor = inject(DefaultValueAccessor, { self: true, optional: true, }); this.mask = tuiMaskito(TUI_MASK_CARD); this.image = computed(() => { const system = this.options.paymentSystemHandler(this.value()); const icon = system && this.icons[system] && this.resolver(this.icons[system]); const url = this.icon() || icon; return url && this.icon() !== '' ? url : null; }); /** @deprecated apparently "off" doesn't disable autocomplete */ this.autocomplete = this.options.autocomplete; this.binChange = toObservable(this.value).pipe(map((value) => (value.length < 6 ? null : value.replace(' ', '').slice(0, 6))), startWith(null), distinctUntilChanged(), skip(1)); } set iconValue(icon) { this.icon.set(icon); } ngOnInit() { if (!this.accessor) { return; } const onChanges = this.accessor.onChange.bind(this.accessor); this.accessor.onChange = (value) => onChanges(value.replaceAll(CHAR_NO_BREAK_SPACE, '')); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputCard, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiInputCard, isStandalone: true, selector: "input[tuiInputCard]", inputs: { autocomplete: "autocomplete", iconValue: ["icon", "iconValue"] }, outputs: { binChange: "binChange" }, host: { attributes: { "inputmode": "numeric", "placeholder": "0000 0000 0000 0000", "ngSkipHydration": "true", "autocomplete": "cc-number" } }, hostDirectives: [{ directive: i1.MaskitoDirective }, { directive: i2.TuiWithTextfield }], ngImport: i0, template: ` <img *tuiTextfieldContent alt="" class="t-payment-system" [hidden]="!image()" [src]="image()" /> `, isInline: true, styles: ["tui-textfield .t-payment-system{order:-1;inline-size:1.5rem}tui-textfield[data-size=l] .t-payment-system{inline-size:2rem}\n"], dependencies: [{ kind: "directive", type: TuiTextfieldContent, selector: "ng-template[tuiTextfieldContent]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); } } export { TuiInputCard }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiInputCard, decorators: [{ type: Component, args: [{ standalone: true, selector: 'input[tuiInputCard]', imports: [TuiTextfieldContent], template: ` <img *tuiTextfieldContent alt="" class="t-payment-system" [hidden]="!image()" [src]="image()" /> `, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [MaskitoDirective, TuiWithTextfield], host: { inputmode: 'numeric', placeholder: '0000 0000 0000 0000', ngSkipHydration: 'true', autocomplete: 'cc-number', }, styles: ["tui-textfield .t-payment-system{order:-1;inline-size:1.5rem}tui-textfield[data-size=l] .t-payment-system{inline-size:2rem}\n"] }] }], propDecorators: { autocomplete: [{ type: Input }], binChange: [{ type: Output }], iconValue: [{ type: Input, args: ['icon'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hZGRvbi1jb21tZXJjZS9jb21wb25lbnRzL2lucHV0LWNhcmQvaW5wdXQtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0s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U0FxQnBCLFlBQVk7NEZBQVosWUFBWTtrQkF4QnhCLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHFCQUFxQixXQUN0QixDQUFDLG1CQUFtQixDQUFDLFlBQ3BCOzs7Ozs7OztLQVFULGlCQUVjLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sa0JBQy9CLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsUUFDOUM7d0JBQ0YsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFdBQVcsRUFBRSxxQkFBcUI7d0JBQ2xDLGVBQWUsRUFBRSxNQUFNO3dCQUN2QixZQUFZLEVBQUUsV0FBVztxQkFDNUI7OEJBOEJNLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSVUsU0FBUztzQkFEeEIsTUFBTTtnQkFTSSxTQUFTO3NCQURuQixLQUFLO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgdHlwZSBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvT2JzZXJ2YWJsZSwgdG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7RGVmYXVsdFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXNraXRvRGlyZWN0aXZlfSBmcm9tICdAbWFza2l0by9hbmd1bGFyJztcbmltcG9ydCB7VFVJX01BU0tfQ0FSRH0gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlL2NvbnN0YW50cyc7XG5pbXBvcnQge1RVSV9QQVlNRU5UX1NZU1RFTV9JQ09OU30gZnJvbSAnQHRhaWdhLXVpL2FkZG9uLWNvbW1lcmNlL3Rva2Vucyc7XG5pbXBvcnQge0NIQVJfTk9fQlJFQUtfU1BBQ0V9IGZyb20gJ0B0YWlnYS11aS9jZGsvY29uc3RhbnRzJztcbmltcG9ydCB7dHVpQ29udHJvbFZhbHVlfSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7VHVpVGV4dGZpZWxkQ29udGVudCwgVHVpV2l0aFRleHRmaWVsZH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy90ZXh0ZmllbGQnO1xuaW1wb3J0IHt0dWlJbmplY3RJY29uUmVzb2x2ZXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlL3Rva2Vucyc7XG5pbXBvcnQge3R1aU1hc2tpdG99IGZyb20gJ0B0YWlnYS11aS9raXQvdXRpbHMnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBza2lwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGltZXJ9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1RVSV9JTlBVVF9DQVJEX09QVElPTlN9IGZyb20gJy4vaW5wdXQtY2FyZC5vcHRpb25zJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2lucHV0W3R1aUlucHV0Q2FyZF0nLFxuICAgIGltcG9ydHM6IFtUdWlUZXh0ZmllbGRDb250ZW50XSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8aW1nXG4gICAgICAgICAgICAqdHVpVGV4dGZpZWxkQ29udGVudFxuICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgIGNsYXNzPVwidC1wYXltZW50LXN5c3RlbVwiXG4gICAgICAgICAgICBbaGlkZGVuXT1cIiFpbWFnZSgpXCJcbiAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2UoKVwiXG4gICAgICAgIC8+XG4gICAgYCxcbiAgICBzdHlsZVVybHM6IFsnLi9pbnB1dC1jYXJkLnN0eWxlLmxlc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbTWFza2l0b0RpcmVjdGl2ZSwgVHVpV2l0aFRleHRmaWVsZF0sXG4gICAgaG9zdDoge1xuICAgICAgICBpbnB1dG1vZGU6ICdudW1lcmljJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICcwMDAwIDAwMDAgMDAwMCAwMDAwJyxcbiAgICAgICAgbmdTa2lwSHlkcmF0aW9uOiAndHJ1ZScsXG4gICAgICAgIGF1dG9jb21wbGV0ZTogJ2NjLW51bWJlcicsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpSW5wdXRDYXJkIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25zID0gaW5qZWN0KFRVSV9QQVlNRU5UX1NZU1RFTV9JQ09OUyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zID0gaW5qZWN0KFRVSV9JTlBVVF9DQVJEX09QVElPTlMpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x2ZXIgPSB0dWlJbmplY3RJY29uUmVzb2x2ZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2wgPSBpbmplY3QoTmdDb250cm9sKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlID0gdG9TaWduYWwoXG4gICAgICAgIHRpbWVyKDApLnBpcGUoc3dpdGNoTWFwKCgpID0+IHR1aUNvbnRyb2xWYWx1ZTxzdHJpbmc+KHRoaXMuY29udHJvbCkpKSxcbiAgICAgICAge2luaXRpYWxWYWx1ZTogJyd9LFxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb24gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4odGhpcy5vcHRpb25zLmljb24pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhY2Nlc3NvciA9IGluamVjdChEZWZhdWx0VmFsdWVBY2Nlc3Nvciwge1xuICAgICAgICBzZWxmOiB0cnVlLFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBtYXNrID0gdHVpTWFza2l0byhUVUlfTUFTS19DQVJEKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW1hZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN5c3RlbSA9IHRoaXMub3B0aW9ucy5wYXltZW50U3lzdGVtSGFuZGxlcih0aGlzLnZhbHVlKCkpO1xuICAgICAgICBjb25zdCBpY29uID0gc3lzdGVtICYmIHRoaXMuaWNvbnNbc3lzdGVtXSAmJiB0aGlzLnJlc29sdmVyKHRoaXMuaWNvbnNbc3lzdGVtXSk7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuaWNvbigpIHx8IGljb247XG5cbiAgICAgICAgcmV0dXJuIHVybCAmJiB0aGlzLmljb24oKSAhPT0gJycgPyB1cmwgOiBudWxsO1xuICAgIH0pO1xuXG4gICAgLyoqIEBkZXByZWNhdGVkIGFwcGFyZW50bHkgXCJvZmZcIiBkb2Vzbid0IGRpc2FibGUgYXV0b2NvbXBsZXRlICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlID0gdGhpcy5vcHRpb25zLmF1dG9jb21wbGV0ZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBiaW5DaGFuZ2UgPSB0b09ic2VydmFibGUodGhpcy52YWx1ZSkucGlwZShcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gKHZhbHVlLmxlbmd0aCA8IDYgPyBudWxsIDogdmFsdWUucmVwbGFjZSgnICcsICcnKS5zbGljZSgwLCA2KSkpLFxuICAgICAgICBzdGFydFdpdGgobnVsbCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHNraXAoMSksXG4gICAgKTtcblxuICAgIEBJbnB1dCgnaWNvbicpXG4gICAgcHVibGljIHNldCBpY29uVmFsdWUoaWNvbjogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLmljb24uc2V0KGljb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2Vzc29yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvbkNoYW5nZXMgPSB0aGlzLmFjY2Vzc29yLm9uQ2hhbmdlLmJpbmQodGhpcy5hY2Nlc3Nvcik7XG5cbiAgICAgICAgdGhpcy5hY2Nlc3Nvci5vbkNoYW5nZSA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgb25DaGFuZ2VzKHZhbHVlLnJlcGxhY2VBbGwoQ0hBUl9OT19CUkVBS19TUEFDRSwgJycpKTtcbiAgICB9XG59XG4iXX0=