UNPKG

@taiga-ui/kit

Version:
144 lines • 17.8 kB
import { __decorate, __extends, __param } from "tslib"; import { DOCUMENT } from '@angular/common'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, HostBinding, Inject, Input, Optional, Self, ViewChild, } from '@angular/core'; import { NgControl } from '@angular/forms'; import { AbstractTuiControl, TUI_FOCUSABLE_ITEM_ACCESSOR, tuiDefaultProp, tuiPure, } from '@taiga-ui/cdk'; import { TUI_TEXTFIELD_SIZE, TUI_VALUE_ACCESSOR_PROVIDER, TuiDirection, TuiHintMode, TuiPrimitiveTextfieldComponent, TuiTextfieldSizeDirective, } from '@taiga-ui/core'; import { TUI_COPY_TEXTS } from '@taiga-ui/kit/tokens'; import { merge, Observable, of, Subject, timer } from 'rxjs'; import { mapTo, startWith, switchMap } from 'rxjs/operators'; // @dynamic var TuiInputCopyComponent = /** @class */ (function (_super) { __extends(TuiInputCopyComponent, _super); function TuiInputCopyComponent(control, changeDetectorRef, documentRef, textfieldSize, copyTexts$) { var _this = _super.call(this, control, changeDetectorRef) || this; _this.documentRef = documentRef; _this.textfieldSize = textfieldSize; _this.copyTexts$ = copyTexts$; _this.successMessage = ''; _this.messageDirection = 'bottom-left'; _this.messageMode = null; _this.copy$ = new Subject(); return _this; } TuiInputCopyComponent_1 = TuiInputCopyComponent; Object.defineProperty(TuiInputCopyComponent.prototype, "hasValue", { get: function () { return !!this.value; }, enumerable: true, configurable: true }); Object.defineProperty(TuiInputCopyComponent.prototype, "hintText$", { get: function () { var _this = this; return this.copyTexts$.pipe(switchMap(function (texts) { return _this.copy$.pipe(switchMap(function () { return merge(of(_this.successMessage || texts[1]), timer(3000).pipe(mapTo(texts[0]))); }), startWith(texts[0])); })); }, enumerable: true, configurable: true }); Object.defineProperty(TuiInputCopyComponent.prototype, "nativeFocusableElement", { get: function () { return this.computedDisabled || !this.textfield ? null : this.textfield.nativeFocusableElement; }, enumerable: true, configurable: true }); Object.defineProperty(TuiInputCopyComponent.prototype, "focused", { get: function () { return !!this.textfield && this.textfield.focused; }, enumerable: true, configurable: true }); Object.defineProperty(TuiInputCopyComponent.prototype, "icon", { get: function () { return this.textfieldSize.size === 's' ? 'tuiIconCopy' : 'tuiIconCopyLarge'; }, enumerable: true, configurable: true }); TuiInputCopyComponent.prototype.onValueChange = function (value) { this.updateValue(value); }; TuiInputCopyComponent.prototype.onFocused = function (focused) { this.updateFocused(focused); }; TuiInputCopyComponent.prototype.onHovered = function (hovered) { this.updateHovered(hovered); }; TuiInputCopyComponent.prototype.onPressed = function (pressed) { this.updatePressed(pressed); }; TuiInputCopyComponent.prototype.copy = function () { if (!this.textfield || !this.textfield.nativeFocusableElement) { return; } this.textfield.nativeFocusableElement.select(); this.documentRef.execCommand('copy'); this.copy$.next(); }; TuiInputCopyComponent.prototype.getFallbackValue = function () { return ''; }; var TuiInputCopyComponent_1; TuiInputCopyComponent.ctorParameters = function () { return [ { type: NgControl, decorators: [{ type: Optional }, { type: Self }, { type: Inject, args: [NgControl,] }] }, { type: ChangeDetectorRef, decorators: [{ type: Inject, args: [ChangeDetectorRef,] }] }, { type: Document, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: TuiTextfieldSizeDirective, decorators: [{ type: Inject, args: [TUI_TEXTFIELD_SIZE,] }] }, { type: Observable, decorators: [{ type: Inject, args: [TUI_COPY_TEXTS,] }] } ]; }; __decorate([ Input(), tuiDefaultProp() ], TuiInputCopyComponent.prototype, "successMessage", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiInputCopyComponent.prototype, "messageDirection", void 0); __decorate([ Input(), tuiDefaultProp() ], TuiInputCopyComponent.prototype, "messageMode", void 0); __decorate([ ViewChild(TuiPrimitiveTextfieldComponent) ], TuiInputCopyComponent.prototype, "textfield", void 0); __decorate([ HostBinding('class._has-value') ], TuiInputCopyComponent.prototype, "hasValue", null); __decorate([ tuiPure ], TuiInputCopyComponent.prototype, "hintText$", null); TuiInputCopyComponent = TuiInputCopyComponent_1 = __decorate([ Component({ selector: 'tui-input-copy', template: "<tui-primitive-textfield\n class=\"textfield\"\n [pseudoFocused]=\"pseudoFocused\"\n [pseudoHovered]=\"pseudoHovered\"\n [pseudoPressed]=\"pseudoPressed\"\n [invalid]=\"computedInvalid\"\n [focusable]=\"focusable\"\n [nativeId]=\"nativeId\"\n [disabled]=\"disabled\"\n [readOnly]=\"readOnly\"\n [iconContent]=\"!disabled ? iconContent : null\"\n [value]=\"value\"\n (valueChange)=\"onValueChange($event)\"\n (focusedChange)=\"onFocused($event)\"\n (hoveredChange)=\"onHovered($event)\"\n (pressedChange)=\"onPressed($event)\"\n>\n <ng-content></ng-content>\n</tui-primitive-textfield>\n\n<ng-template #iconContent>\n <tui-svg\n automation-id=\"tui-copy__icon\"\n class=\"icon\"\n tuiHintId=\"not_required\"\n [tuiHint]=\"hint\"\n [tuiHintDirection]=\"messageDirection\"\n [tuiHintMode]=\"messageMode\"\n [src]=\"icon\"\n (click)=\"copy()\"\n ></tui-svg>\n</ng-template>\n\n<ng-template #hint>\n <div polymorpheus-outlet [content]=\"hintText$ | async\"></div>\n</ng-template>\n", changeDetection: ChangeDetectionStrategy.OnPush, providers: [ TUI_VALUE_ACCESSOR_PROVIDER, { provide: TUI_FOCUSABLE_ITEM_ACCESSOR, useExisting: forwardRef(function () { return TuiInputCopyComponent_1; }), }, ], styles: [":host{display:block;border-radius:var(--tui-radius-m)}.icon{position:relative;cursor:pointer;pointer-events:auto;color:var(--tui-base-06)}:host:not(._has-value) .icon{pointer-events:none;opacity:var(--tui-disabled-opacity)}.textfield{border-radius:inherit}"] }), __param(0, Optional()), __param(0, Self()), __param(0, Inject(NgControl)), __param(1, Inject(ChangeDetectorRef)), __param(2, Inject(DOCUMENT)), __param(3, Inject(TUI_TEXTFIELD_SIZE)), __param(4, Inject(TUI_COPY_TEXTS)) ], TuiInputCopyComponent); return TuiInputCopyComponent; }(AbstractTuiControl)); export { TuiInputCopyComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtY29weS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGFpZ2EtdWkva2l0L2NvbXBvbmVudHMvaW5wdXQtY29weS8iLCJzb3VyY2VzIjpbImlucHV0LWNvcHkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUNILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUNILGtCQUFrQixFQUNsQiwyQkFBMkIsRUFDM0IsY0FBYyxFQUdkLE9BQU8sR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLDJCQUEyQixFQUMzQixZQUFZLEVBQ1osV0FBVyxFQUNYLDhCQUE4QixFQUM5Qix5QkFBeUIsR0FDNUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsT0FBTyxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsV0FBVztBQWNYO0lBQ1kseUNBQTBCO0lBbUJsQywrQkFJSSxPQUF5QixFQUNFLGlCQUFvQyxFQUM1QixXQUFxQixFQUV2QyxhQUF3QyxFQUNoQixVQUF3QztRQVRyRixZQVdJLGtCQUFNLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxTQUNwQztRQU5z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LENBQ1ksa0JBQWtCLEdBa0c3QjtTQW5HWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgZm9yd2FyZFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOZ0NvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RUdWlDb250cm9sLFxuICAgIFRVSV9GT0NVU0FCTEVfSVRFTV9BQ0NFU1NPUixcbiAgICB0dWlEZWZhdWx0UHJvcCxcbiAgICBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3IsXG4gICAgVHVpTmF0aXZlRm9jdXNhYmxlRWxlbWVudCxcbiAgICB0dWlQdXJlLFxufSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7XG4gICAgVFVJX1RFWFRGSUVMRF9TSVpFLFxuICAgIFRVSV9WQUxVRV9BQ0NFU1NPUl9QUk9WSURFUixcbiAgICBUdWlEaXJlY3Rpb24sXG4gICAgVHVpSGludE1vZGUsXG4gICAgVHVpUHJpbWl0aXZlVGV4dGZpZWxkQ29tcG9uZW50LFxuICAgIFR1aVRleHRmaWVsZFNpemVEaXJlY3RpdmUsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7VFVJX0NPUFlfVEVYVFN9IGZyb20gJ0B0YWlnYS11aS9raXQvdG9rZW5zJztcbmltcG9ydCB7UG9seW1vcnBoZXVzQ29udGVudH0gZnJvbSAnQHRpbmtvZmYvbmctcG9seW1vcnBoZXVzJztcbmltcG9ydCB7bWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcFRvLCBzdGFydFdpdGgsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0dWktaW5wdXQtY29weScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LWNvcHkudGVtcGxhdGUuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtY29weS5zdHlsZS5sZXNzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFRVSV9WQUxVRV9BQ0NFU1NPUl9QUk9WSURFUixcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVFVJX0ZPQ1VTQUJMRV9JVEVNX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHVpSW5wdXRDb3B5Q29tcG9uZW50KSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUdWlJbnB1dENvcHlDb21wb25lbnRcbiAgICBleHRlbmRzIEFic3RyYWN0VHVpQ29udHJvbDxzdHJpbmc+XG4gICAgaW1wbGVtZW50cyBUdWlGb2N1c2FibGVFbGVtZW50QWNjZXNzb3Ige1xuICAgIEBJbnB1dCgpXG4gICAgQHR1aURlZmF1bHRQcm9wKClcbiAgICBzdWNjZXNzTWVzc2FnZTogUG9seW1vcnBoZXVzQ29udGVudCA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBAdHVpRGVmYXVsdFByb3AoKVxuICAgIG1lc3NhZ2VEaXJlY3Rpb246IFR1aURpcmVjdGlvbiA9ICdib3R0b20tbGVmdCc7XG5cbiAgICBASW5wdXQoKVxuICAgIEB0dWlEZWZhdWx0UHJvcCgpXG4gICAgbWVzc2FnZU1vZGU6IFR1aUhpbnRNb2RlIHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvcHkkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoVHVpUHJpbWl0aXZlVGV4dGZpZWxkQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGV4dGZpZWxkPzogVHVpUHJpbWl0aXZlVGV4dGZpZWxkQ29tcG9uZW50O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIEBTZWxmKClcbiAgICAgICAgQEluamVjdChOZ0NvbnRyb2wpXG4gICAgICAgIGNvbnRyb2w6IE5nQ29udHJvbCB8IG51bGwsXG4gICAgICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFJlZjogRG9jdW1lbnQsXG4gICAgICAgIEBJbmplY3QoVFVJX1RFWFRGSUVMRF9TSVpFKVxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRleHRmaWVsZFNpemU6IFR1aVRleHRmaWVsZFNpemVEaXJlY3RpdmUsXG4gICAgICAgIEBJbmplY3QoVFVJX0NPUFlfVEVYVFMpIHByaXZhdGUgcmVhZG9ubHkgY29weVRleHRzJDogT2JzZXJ2YWJsZTxbc3RyaW5nLCBzdHJpbmddPixcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29udHJvbCwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuX2hhcy12YWx1ZScpXG4gICAgZ2V0IGhhc1ZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnZhbHVlO1xuICAgIH1cblxuICAgIEB0dWlQdXJlXG4gICAgZ2V0IGhpbnRUZXh0JCgpOiBPYnNlcnZhYmxlPFBvbHltb3JwaGV1c0NvbnRlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29weVRleHRzJC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHRleHRzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5jb3B5JC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mKHRoaXMuc3VjY2Vzc01lc3NhZ2UgfHwgdGV4dHNbMV0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyKDMwMDApLnBpcGUobWFwVG8odGV4dHNbMF0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0ZXh0c1swXSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQoKTogVHVpTmF0aXZlRm9jdXNhYmxlRWxlbWVudCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5jb21wdXRlZERpc2FibGVkIHx8ICF0aGlzLnRleHRmaWVsZFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHRoaXMudGV4dGZpZWxkLm5hdGl2ZUZvY3VzYWJsZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IGZvY3VzZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudGV4dGZpZWxkICYmIHRoaXMudGV4dGZpZWxkLmZvY3VzZWQ7XG4gICAgfVxuXG4gICAgZ2V0IGljb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dGZpZWxkU2l6ZS5zaXplID09PSAncycgPyAndHVpSWNvbkNvcHknIDogJ3R1aUljb25Db3B5TGFyZ2UnO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzZWQoZm9jdXNlZCk7XG4gICAgfVxuXG4gICAgb25Ib3ZlcmVkKGhvdmVyZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVIb3ZlcmVkKGhvdmVyZWQpO1xuICAgIH1cblxuICAgIG9uUHJlc3NlZChwcmVzc2VkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJlc3NlZChwcmVzc2VkKTtcbiAgICB9XG5cbiAgICBjb3B5KCkge1xuICAgICAgICBpZiAoIXRoaXMudGV4dGZpZWxkIHx8ICF0aGlzLnRleHRmaWVsZC5uYXRpdmVGb2N1c2FibGVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHRmaWVsZC5uYXRpdmVGb2N1c2FibGVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50UmVmLmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIHRoaXMuY29weSQubmV4dCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRGYWxsYmFja1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG59XG4iXX0=