carriera-intern-components 0.0.1 → 0.0.3
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.
- package/fesm2022/carriera-intern-components.mjs +3 -3
- package/fesm2022/carriera-intern-components.mjs.map +1 -1
- package/package.json +1 -1
- package/public/assets/exampledoc.png +0 -0
- package/public/assets/icons/ArrowDown.svg +3 -0
- package/public/assets/icons/ArrowLeft.svg +3 -0
- package/public/assets/icons/ArrowRight.svg +3 -0
- package/public/assets/icons/Cancel.svg +3 -0
- package/public/assets/icons/Checkmark.svg +3 -0
- package/public/assets/icons/Delete.svg +4 -0
- package/public/assets/icons/Download.svg +3 -0
- package/public/assets/icons/Email.svg +3 -0
- package/public/assets/icons/Label.svg +3 -0
- package/public/assets/icons/Minus.svg +3 -0
- package/public/assets/icons/PasswordHidden.svg +3 -0
- package/public/assets/icons/PasswordKey.svg +3 -0
- package/public/assets/icons/PasswordShown.svg +3 -0
- package/public/assets/icons/Plus.svg +3 -0
- package/public/assets/icons/Reset.svg +3 -0
- package/public/assets/icons/Warning.svg +3 -0
- package/public/assets/icons/drop-zone.svg +43 -0
- package/public/assets/json/icons.json +73 -0
- package/public/assets/truck.png +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Pipe, input, HostListener, Directive, signal, computed, ViewChild, Optional, Self, Component, output, Injectable, inject } from '@angular/core';
|
|
2
|
+
import { Pipe, input, HostListener, Directive, signal, computed, ViewChild, Optional, Self, ViewEncapsulation, Component, output, Injectable, inject } from '@angular/core';
|
|
3
3
|
import { SvgIconComponent } from 'angular-svg-icon';
|
|
4
4
|
import * as i2 from '@ng-bootstrap/ng-bootstrap';
|
|
5
5
|
import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
|
|
@@ -891,7 +891,7 @@ class InputComponent {
|
|
|
891
891
|
this.dropdown.close();
|
|
892
892
|
}
|
|
893
893
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: InputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
894
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: InputComponent, isStandalone: true, selector: "app-input", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, dropdownOptions: { classPropertyName: "dropdownOptions", publicName: "dropdownOptions", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "realValueChange": "onRealValueChange($event)" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "PasswordDirective", first: true, predicate: PasswordDirective, descendants: true }, { propertyName: "NumberFormatDirective", first: true, predicate: NumberFormatDirective, descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "@let valid = ngControl?.valid && ngControl?.touched && ngControl?.dirty; @let\ninvalid = ngControl?.invalid && ngControl?.touched && ngControl?.dirty; @let\ntype = config().type; @let icon = config().icon; @let alignment =\nconfig().alignment; @let inverse = config().inverse; @let name = config().name;\n@let required = config().required; @let reveal = config().reveal; @let password\n= type === 'password'; @let number = type === 'number'; @let ariaLabel = type\n=== 'password' ? 'Password' : config().name; @let hasDropdown =\nconfig().dropdown;\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-error': invalid,\n 'has-valid': valid,\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown\n }\"\n ngbDropdown\n [autoClose]=\"'outside'\"\n #dropdown=\"ngbDropdown\"\n>\n @if (config().icon && !password && !number) {\n <div class=\"icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n <div class=\"separator\"></div>\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div class=\"password-icons\">\n <svg-icon class=\"icon password-key\" name=\"password-key\"></svg-icon>\n <svg-icon class=\"icon password-shown\" name=\"password-shown\"></svg-icon>\n <svg-icon class=\"icon password-hidden\" name=\"password-hidden\"></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"'text'\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n placeholder=\"\"\n autocomplete=\"off\"\n #inputRef\n [appPassword]=\"password\"\n [reveal]=\"reveal || 0\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n (focus)=\"hasDropdown && dropdown.open()\"\n (click)=\"hasDropdown && dropdown.open()\"\n ngbDropdownAnchor\n />\n <label class=\"app-input-label\">\n {{ name }}\n </label>\n @if(number){\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <svg-icon\n name=\"plus\"\n class=\"bg-icon plus-icon\"\n (mousedown)=\"increment($event)\"\n ></svg-icon>\n <svg-icon\n name=\"minus\"\n class=\"bg-icon minus-icon\"\n (mousedown)=\"decrement($event)\"\n ></svg-icon>\n </div>\n </div>\n }\n <svg-icon name=\"checkmark\" class=\"app-input-icon positive-icon\"></svg-icon>\n <svg-icon name=\"warning\" class=\"app-input-icon warning-icon\"></svg-icon>\n <div class=\"app-input-error\">\n @if (invalid) { @for (error of ngControl?.errors | errorMessage ; track\n $index) {\n {{ error }}\n } }\n </div>\n <button\n type=\"button\"\n class=\"app-input-icon cancel-icon bg-icon\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n >\n <svg-icon name=\"cancel\"></svg-icon>\n </button>\n @if(hasDropdown) {\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @if (!options().length) {\n <p class=\"dropdown-item no-results\">No results</p>\n } @for(option of options(); track $index ){\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': value() === option,\n }\"\n >\n <p [innerHTML]=\"formatOption(option)\"></p>\n <svg-icon name=\"checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n </div>\n <div class=\"icon-container\">\n <svg-icon name=\"arrow-down\" class=\"dropdown-icon icon\"></svg-icon>\n </div>\n }\n</div>\n", styles: [".app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;margin:18px 0;min-width:208px;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .2s ease-in-out;display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:has(.app-input:disabled.app-input:not(:placeholder-shown)) .app-input-label{color:#424242!important}.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:not(:placeholder-shown)) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:required) .app-input-label:after{content:\"*\";color:var(--color-text-negative)}.app-input-label{position:absolute;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out;transform:translateY(0)}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .2s ease-in-out;color:var(--color-text)}.app-input:focus-visible{color:var(--color-text-inverse)}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out,transform .2s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error:has(.app-input:placeholder-shown:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-error .icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon{color:var(--color-icon-negative)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)){background-color:var(--color-surface-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .icon{color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .password-key{opacity:0}.app-input-icon{position:absolute;right:4px;top:50%;transform:translateY(-50%);pointer-events:none;transition:color .2s ease-in-out,background-color .2s ease-in-out,opacity .2s ease-in-out}.cancel-icon{opacity:0;pointer-events:none}.cancel-icon:hover{cursor:pointer}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .2s ease-in-out,color .2s ease-in-out,opacity .2s ease-in-out}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon{color:var(--color-icon-inverse)}.app-input-container.has-icon:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-password:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon{color:var(--color-icon-disable)}.app-input-container.has-icon .positive-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .warning-icon{opacity:0!important}.app-input-container.has-icon .icon,.app-input-container.has-password .icon,.app-input-container.has-dropdown .icon{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .2s ease-in-out,opacity .2s ease-in-out;opacity:1}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:28px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .2s ease-in-out;opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon{position:absolute;opacity:0}.has-password:has(.app-input:placeholder-shown.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .cancel-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-dropdown .dropdown-menu{width:100%;background-color:#2f2f2f;border:0;border-radius:3px;padding:4px;margin-top:4px;max-height:244px;overflow-y:auto}.has-dropdown .dropdown-menu::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:6px}.has-dropdown .dropdown-menu::-webkit-scrollbar-thumb{background-color:#919191;width:2px;border:2px solid #2f2f2f;border-radius:3px}.has-dropdown .dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;transition:background-color .2s ease-in-out;border-radius:2px;position:relative}.has-dropdown .dropdown-item:hover{background-color:#424242}.has-dropdown .dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.has-dropdown .dropdown-item:not(:first-child){margin-top:4px}.has-dropdown .no-results{color:#919191;font-weight:700}.has-dropdown .selected{font-weight:700}.has-dropdown .selected .dropdown-item-icon{opacity:1}.has-dropdown .dropdown-item-icon{position:absolute;opacity:0;right:6px;top:50%;transform:translateY(-50%);color:#92b1f5}.has-dropdown .app-input-icon{right:26px}.has-dropdown .icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;pointer-events:none}.has-dropdown .dropdown-icon{transition:transform .1s ease-in-out,color .2s ease-in-out!important;transform:rotate(0)}.has-dropdown:has(.app-input:focus-visible) .dropdown-icon{transform:rotate(180deg)}.has-right .app-input{text-align:right}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .app-input{order:1}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-password .icon-container .icon{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .icon-container{left:4px}.has-right:has(.app-input:placeholder-shown) .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}:host ::ng-deep .highlight{background-color:#3b73ed33!important;color:#92b1f5!important}:host ::ng-deep .selected .highlight{background-color:transparent!important;color:#fff!important}\n"], dependencies: [{ kind: "pipe", type: ErrorMessagePipe, name: "errorMessage" }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "svgClass", "class", "viewBox", "svgAriaLabel", "onSVGLoaded", "svgStyle"] }, { kind: "directive", type: PasswordDirective, selector: "[appPassword]", inputs: ["appPassword", "visible", "reveal"] }, { kind: "directive", type: NumberFormatDirective, selector: "[appNumberFormat]", inputs: ["appNumberFormat"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownAnchor, selector: "[ngbDropdownAnchor]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }] });
|
|
894
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.14", type: InputComponent, isStandalone: true, selector: "app-input", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, dropdownOptions: { classPropertyName: "dropdownOptions", publicName: "dropdownOptions", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "realValueChange": "onRealValueChange($event)" } }, viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputRef"], descendants: true }, { propertyName: "PasswordDirective", first: true, predicate: PasswordDirective, descendants: true }, { propertyName: "NumberFormatDirective", first: true, predicate: NumberFormatDirective, descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "@let valid = ngControl?.valid && ngControl?.touched && ngControl?.dirty; @let\ninvalid = ngControl?.invalid && ngControl?.touched && ngControl?.dirty; @let\ntype = config().type; @let icon = config().icon; @let alignment =\nconfig().alignment; @let inverse = config().inverse; @let name = config().name;\n@let required = config().required; @let reveal = config().reveal; @let password\n= type === 'password'; @let number = type === 'number'; @let ariaLabel = type\n=== 'password' ? 'Password' : config().name; @let hasDropdown =\nconfig().dropdown;\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-error': invalid,\n 'has-valid': valid,\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown\n }\"\n ngbDropdown\n [autoClose]=\"'outside'\"\n #dropdown=\"ngbDropdown\"\n>\n @if (config().icon && !password && !number) {\n <div class=\"icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n <div class=\"separator\"></div>\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div class=\"password-icons\">\n <svg-icon class=\"icon password-key\" name=\"password-key\"></svg-icon>\n <svg-icon class=\"icon password-shown\" name=\"password-shown\"></svg-icon>\n <svg-icon class=\"icon password-hidden\" name=\"password-hidden\"></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"'text'\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n placeholder=\"\"\n autocomplete=\"off\"\n #inputRef\n [appPassword]=\"password\"\n [reveal]=\"reveal || 0\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n (focus)=\"hasDropdown && dropdown.open()\"\n (click)=\"hasDropdown && dropdown.open()\"\n ngbDropdownAnchor\n />\n <label class=\"app-input-label\">\n {{ name }}\n </label>\n @if(number){\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <svg-icon\n name=\"plus\"\n class=\"bg-icon plus-icon\"\n (mousedown)=\"increment($event)\"\n ></svg-icon>\n <svg-icon\n name=\"minus\"\n class=\"bg-icon minus-icon\"\n (mousedown)=\"decrement($event)\"\n ></svg-icon>\n </div>\n </div>\n }\n <svg-icon name=\"checkmark\" class=\"app-input-icon positive-icon\"></svg-icon>\n <svg-icon name=\"warning\" class=\"app-input-icon warning-icon\"></svg-icon>\n <div class=\"app-input-error\">\n @if (invalid) { @for (error of ngControl?.errors | errorMessage ; track\n $index) {\n {{ error }}\n } }\n </div>\n <button\n type=\"button\"\n class=\"app-input-icon cancel-icon bg-icon\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n >\n <svg-icon name=\"cancel\"></svg-icon>\n </button>\n @if(hasDropdown) {\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @if (!options().length) {\n <p class=\"dropdown-item no-results\">No results</p>\n } @for(option of options(); track $index ){\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': value() === option,\n }\"\n >\n <p [innerHTML]=\"formatOption(option)\"></p>\n <svg-icon name=\"checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n </div>\n <div class=\"icon-container\">\n <svg-icon name=\"arrow-down\" class=\"dropdown-icon icon\"></svg-icon>\n </div>\n }\n</div>\n", styles: ["html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4}body{margin:0;line-height:inherit;background-color:#fff;color:#111827;font-family:Montserrat,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;margin:18px 0;min-width:208px;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .2s ease-in-out;display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:has(.app-input:disabled.app-input:not(:placeholder-shown)) .app-input-label{color:#424242!important}.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:not(:placeholder-shown)) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:required) .app-input-label:after{content:\"*\";color:var(--color-text-negative)}.app-input-label{position:absolute;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out;transform:translateY(0)}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .2s ease-in-out;color:var(--color-text)}.app-input:focus-visible{color:var(--color-text-inverse)}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out,transform .2s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error:has(.app-input:placeholder-shown:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-error .icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon{color:var(--color-icon-negative)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)){background-color:var(--color-surface-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .icon{color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .password-key{opacity:0}.app-input-icon{position:absolute;right:4px;top:50%;transform:translateY(-50%);pointer-events:none;transition:color .2s ease-in-out,background-color .2s ease-in-out,opacity .2s ease-in-out}.cancel-icon{opacity:0;pointer-events:none}.cancel-icon:hover{cursor:pointer}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .2s ease-in-out,color .2s ease-in-out,opacity .2s ease-in-out}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon{color:var(--color-icon-inverse)}.app-input-container.has-icon:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-password:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon{color:var(--color-icon-disable)}.app-input-container.has-icon .positive-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .warning-icon{opacity:0!important}.app-input-container.has-icon .icon,.app-input-container.has-password .icon,.app-input-container.has-dropdown .icon{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .2s ease-in-out,opacity .2s ease-in-out;opacity:1}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:28px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .2s ease-in-out;opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon{position:absolute;opacity:0}.has-password:has(.app-input:placeholder-shown.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .cancel-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-dropdown .dropdown-menu{width:100%;background-color:#2f2f2f;border:0;border-radius:3px;padding:4px;margin-top:4px;max-height:244px;overflow-y:auto}.has-dropdown .dropdown-menu::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:6px}.has-dropdown .dropdown-menu::-webkit-scrollbar-thumb{background-color:#919191;width:2px;border:2px solid #2f2f2f;border-radius:3px}.has-dropdown .dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;transition:background-color .2s ease-in-out;border-radius:2px;position:relative}.has-dropdown .dropdown-item:hover{background-color:#424242}.has-dropdown .dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.has-dropdown .dropdown-item:not(:first-child){margin-top:4px}.has-dropdown .no-results{color:#919191;font-weight:700}.has-dropdown .selected{font-weight:700}.has-dropdown .selected .dropdown-item-icon{opacity:1}.has-dropdown .dropdown-item-icon{position:absolute;opacity:0;right:6px;top:50%;transform:translateY(-50%);color:#92b1f5}.has-dropdown .app-input-icon{right:26px}.has-dropdown .icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;pointer-events:none}.has-dropdown .dropdown-icon{transition:transform .1s ease-in-out,color .2s ease-in-out!important;transform:rotate(0)}.has-dropdown:has(.app-input:focus-visible) .dropdown-icon{transform:rotate(180deg)}.has-right .app-input{text-align:right}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .app-input{order:1}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-password .icon-container .icon{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .icon-container{left:4px}.has-right:has(.app-input:placeholder-shown) .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}:host ::ng-deep .highlight{background-color:#3b73ed33!important;color:#92b1f5!important}:host ::ng-deep .selected .highlight{background-color:transparent!important;color:#fff!important}\n"], dependencies: [{ kind: "pipe", type: ErrorMessagePipe, name: "errorMessage" }, { kind: "component", type: SvgIconComponent, selector: "svg-icon", inputs: ["src", "name", "stretch", "applyClass", "svgClass", "class", "viewBox", "svgAriaLabel", "onSVGLoaded", "svgStyle"] }, { kind: "directive", type: PasswordDirective, selector: "[appPassword]", inputs: ["appPassword", "visible", "reveal"] }, { kind: "directive", type: NumberFormatDirective, selector: "[appNumberFormat]", inputs: ["appNumberFormat"] }, { kind: "ngmodule", type: NgbDropdownModule }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownAnchor, selector: "[ngbDropdownAnchor]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }], encapsulation: i0.ViewEncapsulation.ShadowDom });
|
|
895
895
|
}
|
|
896
896
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: InputComponent, decorators: [{
|
|
897
897
|
type: Component,
|
|
@@ -901,7 +901,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
901
901
|
PasswordDirective,
|
|
902
902
|
NumberFormatDirective,
|
|
903
903
|
NgbDropdownModule,
|
|
904
|
-
], template: "@let valid = ngControl?.valid && ngControl?.touched && ngControl?.dirty; @let\ninvalid = ngControl?.invalid && ngControl?.touched && ngControl?.dirty; @let\ntype = config().type; @let icon = config().icon; @let alignment =\nconfig().alignment; @let inverse = config().inverse; @let name = config().name;\n@let required = config().required; @let reveal = config().reveal; @let password\n= type === 'password'; @let number = type === 'number'; @let ariaLabel = type\n=== 'password' ? 'Password' : config().name; @let hasDropdown =\nconfig().dropdown;\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-error': invalid,\n 'has-valid': valid,\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown\n }\"\n ngbDropdown\n [autoClose]=\"'outside'\"\n #dropdown=\"ngbDropdown\"\n>\n @if (config().icon && !password && !number) {\n <div class=\"icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n <div class=\"separator\"></div>\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div class=\"password-icons\">\n <svg-icon class=\"icon password-key\" name=\"password-key\"></svg-icon>\n <svg-icon class=\"icon password-shown\" name=\"password-shown\"></svg-icon>\n <svg-icon class=\"icon password-hidden\" name=\"password-hidden\"></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"'text'\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n placeholder=\"\"\n autocomplete=\"off\"\n #inputRef\n [appPassword]=\"password\"\n [reveal]=\"reveal || 0\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n (focus)=\"hasDropdown && dropdown.open()\"\n (click)=\"hasDropdown && dropdown.open()\"\n ngbDropdownAnchor\n />\n <label class=\"app-input-label\">\n {{ name }}\n </label>\n @if(number){\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <svg-icon\n name=\"plus\"\n class=\"bg-icon plus-icon\"\n (mousedown)=\"increment($event)\"\n ></svg-icon>\n <svg-icon\n name=\"minus\"\n class=\"bg-icon minus-icon\"\n (mousedown)=\"decrement($event)\"\n ></svg-icon>\n </div>\n </div>\n }\n <svg-icon name=\"checkmark\" class=\"app-input-icon positive-icon\"></svg-icon>\n <svg-icon name=\"warning\" class=\"app-input-icon warning-icon\"></svg-icon>\n <div class=\"app-input-error\">\n @if (invalid) { @for (error of ngControl?.errors | errorMessage ; track\n $index) {\n {{ error }}\n } }\n </div>\n <button\n type=\"button\"\n class=\"app-input-icon cancel-icon bg-icon\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n >\n <svg-icon name=\"cancel\"></svg-icon>\n </button>\n @if(hasDropdown) {\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @if (!options().length) {\n <p class=\"dropdown-item no-results\">No results</p>\n } @for(option of options(); track $index ){\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': value() === option,\n }\"\n >\n <p [innerHTML]=\"formatOption(option)\"></p>\n <svg-icon name=\"checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n </div>\n <div class=\"icon-container\">\n <svg-icon name=\"arrow-down\" class=\"dropdown-icon icon\"></svg-icon>\n </div>\n }\n</div>\n", styles: [".app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;margin:18px 0;min-width:208px;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .2s ease-in-out;display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:has(.app-input:disabled.app-input:not(:placeholder-shown)) .app-input-label{color:#424242!important}.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:not(:placeholder-shown)) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:required) .app-input-label:after{content:\"*\";color:var(--color-text-negative)}.app-input-label{position:absolute;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out;transform:translateY(0)}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .2s ease-in-out;color:var(--color-text)}.app-input:focus-visible{color:var(--color-text-inverse)}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out,transform .2s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error:has(.app-input:placeholder-shown:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-error .icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon{color:var(--color-icon-negative)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)){background-color:var(--color-surface-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .icon{color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .password-key{opacity:0}.app-input-icon{position:absolute;right:4px;top:50%;transform:translateY(-50%);pointer-events:none;transition:color .2s ease-in-out,background-color .2s ease-in-out,opacity .2s ease-in-out}.cancel-icon{opacity:0;pointer-events:none}.cancel-icon:hover{cursor:pointer}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .2s ease-in-out,color .2s ease-in-out,opacity .2s ease-in-out}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon{color:var(--color-icon-inverse)}.app-input-container.has-icon:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-password:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon{color:var(--color-icon-disable)}.app-input-container.has-icon .positive-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .warning-icon{opacity:0!important}.app-input-container.has-icon .icon,.app-input-container.has-password .icon,.app-input-container.has-dropdown .icon{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .2s ease-in-out,opacity .2s ease-in-out;opacity:1}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:28px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .2s ease-in-out;opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon{position:absolute;opacity:0}.has-password:has(.app-input:placeholder-shown.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .cancel-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-dropdown .dropdown-menu{width:100%;background-color:#2f2f2f;border:0;border-radius:3px;padding:4px;margin-top:4px;max-height:244px;overflow-y:auto}.has-dropdown .dropdown-menu::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:6px}.has-dropdown .dropdown-menu::-webkit-scrollbar-thumb{background-color:#919191;width:2px;border:2px solid #2f2f2f;border-radius:3px}.has-dropdown .dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;transition:background-color .2s ease-in-out;border-radius:2px;position:relative}.has-dropdown .dropdown-item:hover{background-color:#424242}.has-dropdown .dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.has-dropdown .dropdown-item:not(:first-child){margin-top:4px}.has-dropdown .no-results{color:#919191;font-weight:700}.has-dropdown .selected{font-weight:700}.has-dropdown .selected .dropdown-item-icon{opacity:1}.has-dropdown .dropdown-item-icon{position:absolute;opacity:0;right:6px;top:50%;transform:translateY(-50%);color:#92b1f5}.has-dropdown .app-input-icon{right:26px}.has-dropdown .icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;pointer-events:none}.has-dropdown .dropdown-icon{transition:transform .1s ease-in-out,color .2s ease-in-out!important;transform:rotate(0)}.has-dropdown:has(.app-input:focus-visible) .dropdown-icon{transform:rotate(180deg)}.has-right .app-input{text-align:right}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .app-input{order:1}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-password .icon-container .icon{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .icon-container{left:4px}.has-right:has(.app-input:placeholder-shown) .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}:host ::ng-deep .highlight{background-color:#3b73ed33!important;color:#92b1f5!important}:host ::ng-deep .selected .highlight{background-color:transparent!important;color:#fff!important}\n"] }]
|
|
904
|
+
], encapsulation: ViewEncapsulation.ShadowDom, template: "@let valid = ngControl?.valid && ngControl?.touched && ngControl?.dirty; @let\ninvalid = ngControl?.invalid && ngControl?.touched && ngControl?.dirty; @let\ntype = config().type; @let icon = config().icon; @let alignment =\nconfig().alignment; @let inverse = config().inverse; @let name = config().name;\n@let required = config().required; @let reveal = config().reveal; @let password\n= type === 'password'; @let number = type === 'number'; @let ariaLabel = type\n=== 'password' ? 'Password' : config().name; @let hasDropdown =\nconfig().dropdown;\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-error': invalid,\n 'has-valid': valid,\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown\n }\"\n ngbDropdown\n [autoClose]=\"'outside'\"\n #dropdown=\"ngbDropdown\"\n>\n @if (config().icon && !password && !number) {\n <div class=\"icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n <div class=\"separator\"></div>\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div class=\"password-icons\">\n <svg-icon class=\"icon password-key\" name=\"password-key\"></svg-icon>\n <svg-icon class=\"icon password-shown\" name=\"password-shown\"></svg-icon>\n <svg-icon class=\"icon password-hidden\" name=\"password-hidden\"></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"'text'\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n placeholder=\"\"\n autocomplete=\"off\"\n #inputRef\n [appPassword]=\"password\"\n [reveal]=\"reveal || 0\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n (focus)=\"hasDropdown && dropdown.open()\"\n (click)=\"hasDropdown && dropdown.open()\"\n ngbDropdownAnchor\n />\n <label class=\"app-input-label\">\n {{ name }}\n </label>\n @if(number){\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <svg-icon\n name=\"plus\"\n class=\"bg-icon plus-icon\"\n (mousedown)=\"increment($event)\"\n ></svg-icon>\n <svg-icon\n name=\"minus\"\n class=\"bg-icon minus-icon\"\n (mousedown)=\"decrement($event)\"\n ></svg-icon>\n </div>\n </div>\n }\n <svg-icon name=\"checkmark\" class=\"app-input-icon positive-icon\"></svg-icon>\n <svg-icon name=\"warning\" class=\"app-input-icon warning-icon\"></svg-icon>\n <div class=\"app-input-error\">\n @if (invalid) { @for (error of ngControl?.errors | errorMessage ; track\n $index) {\n {{ error }}\n } }\n </div>\n <button\n type=\"button\"\n class=\"app-input-icon cancel-icon bg-icon\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n >\n <svg-icon name=\"cancel\"></svg-icon>\n </button>\n @if(hasDropdown) {\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @if (!options().length) {\n <p class=\"dropdown-item no-results\">No results</p>\n } @for(option of options(); track $index ){\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': value() === option,\n }\"\n >\n <p [innerHTML]=\"formatOption(option)\"></p>\n <svg-icon name=\"checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n </div>\n <div class=\"icon-container\">\n <svg-icon name=\"arrow-down\" class=\"dropdown-icon icon\"></svg-icon>\n </div>\n }\n</div>\n", styles: ["html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4}body{margin:0;line-height:inherit;background-color:#fff;color:#111827;font-family:Montserrat,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"}*,*:before,*:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}p,ul,ol,dl,blockquote,figure,pre{margin:0}button,input,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle;max-width:100%;height:auto}ul,ol{padding-left:1.5rem;list-style-position:outside}a{color:inherit;text-decoration:inherit}table{border-collapse:collapse;border-spacing:0}:focus:not(:focus-visible){outline:none}.app-input-container{--color-text: #2f2f2f;--color-text-negative: #df3c3c;--color-text-heading: #424242;--color-text-subtle: #919191;--color-text-inverse: #ffffff;--color-icon-neutral: #919191;--color-icon-negative: #e66767;--color-icon-positive: #6692f1;--color-icon-inverse: rgba(255, 255, 255, .6980392157);--color-icon-disable: #cccccc;--color-surface-neutral: #eeeeee;--color-surface-neutral-hover: #dadada;--color-surface-neutral-focus: #1d1d1d;--color-surface-positive: #e9effd;--color-surface-positive-hover: #bed0f9;--color-surface-positive-focus: #0b49d1;--color-surface-negative: #fbe9e9;--color-surface-negative-hover: #f4bebe;--color-surface-negative-focus: #c20c0c;--color-surface-disable: #f7f7f7;position:relative;margin:18px 0;min-width:208px;border-radius:2px;background-color:var(--color-surface-neutral);color:var(--color-text);transition:background-color .2s ease-in-out;display:flex}.app-input-container.inverse{--color-text: #ffffff;--color-text-negative: #ed9292;--color-text-heading: #ffffff;--color-text-inverse: #ffffff;--color-icon-neutral: #aaaaaa;--color-icon-negative: #ed9292;--color-icon-positive: #92b1f5;--color-icon-disable: #6c6c6c;--color-surface-neutral: #424242;--color-surface-neutral-hover: #6c6c6c;--color-surface-neutral-focus: #dadada;--color-surface-positive: rgba(59, 115, 237, .2);--color-surface-positive-hover: #2f519a;--color-surface-positive-focus: #0b49d1;--color-surface-negative: rgba(223, 60, 60, .2);--color-surface-negative-hover: #923030;--color-surface-negative-focus: #c20c0c;--color-surface-disable: rgba(66, 66, 66, .4)}.app-input-container.inverse:not(.has-error):not(.has-valid) .app-input:focus-visible{color:#2f2f2f}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:not(.has-error):not(.has-valid):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .icon{color:#919191!important}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .bg-icon{background-color:#919191!important;color:#dadada}.app-input-container.inverse:has(.app-input:placeholder-shown):has(.app-input:focus-visible) .separator{background-color:#919191!important}.app-input-container.inverse:has(.app-input:disabled.app-input:not(:placeholder-shown)) .app-input-label{color:#424242!important}.app-input-container:hover{background-color:var(--color-surface-neutral-hover)}.app-input-container:has(.app-input:focus-visible){background-color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-neutral-focus)}.app-input-container:has(.app-input:focus-visible) .separator{background-color:var(--color-icon-inverse)!important}.app-input-container:has(.app-input:not(:placeholder-shown)) .app-input-label{transform:translateY(-20px);font-weight:600;font-size:11px;color:var(--color-text-heading)!important}.app-input-container:has(.app-input:disabled){background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):hover{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled):focus{background-color:var(--color-surface-disable)}.app-input-container:has(.app-input:disabled) .app-input-label{color:var(--color-text-subtle)}.app-input-container:has(.app-input:disabled) .separator{background-color:var(--color-icon-disable)}.app-input-container:has(.app-input:required) .app-input-label:after{content:\"*\";color:var(--color-text-negative)}.app-input-label{position:absolute;left:0;font-size:14px;line-height:18px;font-weight:400;pointer-events:none;padding:.25rem 6px;color:var(--color-text);transition:transform .1s ease-in-out,font-weight .1s ease-in-out,color .1s ease-in-out,font-size .1s ease-in-out;transform:translateY(0)}.app-input{padding:.25rem 6px;width:100%;font-size:14px;line-height:18px;font-weight:400;border:0;outline:none;margin-top:auto;background-color:transparent;transition:color .2s ease-in-out;color:var(--color-text)}.app-input:focus-visible{color:var(--color-text-inverse)}.app-input-error{position:absolute;bottom:-16px;right:6px;font-size:11px;font-weight:600;opacity:0;pointer-events:none;transition:opacity .2s ease-in-out,transform .2s ease-in-out;color:var(--color-text-negative);transform:translateY(-10px)}.app-input-container.has-error{background-color:var(--color-surface-negative)}.app-input-container.has-error:hover{background-color:var(--color-surface-negative-hover)}.app-input-container.has-error:hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-error:hover .bg-icon{background-color:var(--color-icon-negative);color:var(--color-surface-negative-hover)}.app-input-container.has-error:has(.app-input:focus-visible){background-color:var(--color-surface-negative-focus);color:var(--color-text-inverse)}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:placeholder-shown) .app-input-error{opacity:0}.app-input-container.has-error:has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-error:has(.app-input:focus-visible) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-negative-focus)}.app-input-container.has-error:has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .warning-icon,.app-input-container.has-error:has(.app-input:placeholder-shown:not(:focus-visible)) .warning-icon{opacity:1!important}.app-input-container.has-error .app-input-error{opacity:1;transform:translateY(0);pointer-events:auto}.app-input-container.has-error .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-error .icon-container .separator{background-color:var(--color-icon-negative)}.app-input-container.has-error .icon-container .icon{color:var(--color-icon-negative)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)){background-color:var(--color-surface-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover{background-color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover:has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1;pointer-events:auto}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):hover .bg-icon{background-color:var(--color-icon-positive);color:var(--color-surface-positive-hover)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible){background-color:var(--color-surface-positive-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .cancel-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:not(:placeholder-shown)) .bg-icon{background-color:var(--color-icon-inverse);color:var(--color-surface-positive-focus)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:focus-visible):has(.app-input:placeholder-shown){background-color:var(--color-surface-neutral-focus)!important}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)):has(.app-input:not(:focus-visible)).app-input-container:not(:hover) .positive-icon{opacity:1}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .app-input::selection{background-color:var(--color-surface-neutral-focus);color:var(--color-text-inverse)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .separator{background-color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .icon{color:var(--color-icon-positive)}.app-input-container.has-valid:has(.app-input:not(:placeholder-shown)) .icon-container .password-key{opacity:0}.app-input-icon{position:absolute;right:4px;top:50%;transform:translateY(-50%);pointer-events:none;transition:color .2s ease-in-out,background-color .2s ease-in-out,opacity .2s ease-in-out}.cancel-icon{opacity:0;pointer-events:none}.cancel-icon:hover{cursor:pointer}.bg-icon{background-color:var(--color-icon-neutral);color:var(--color-surface-neutral);border-radius:1px;height:18px;width:18px;padding:0;display:grid;place-items:center;transition:background-color .2s ease-in-out,color .2s ease-in-out,opacity .2s ease-in-out}.positive-icon{color:var(--color-icon-positive);height:18px;width:18px;display:grid;place-items:center;opacity:0}.warning-icon{color:var(--color-icon-negative);height:18px;width:18px;display:grid;place-items:center;opacity:0}.app-input-container.has-icon:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-password:has(.app-input:focus-visible) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:focus-visible) .icon-container .icon{color:var(--color-icon-inverse)}.app-input-container.has-icon:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-password:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon,.app-input-container.has-dropdown:has(.app-input:disabled.app-input:placeholder-shown) .icon-container .icon{color:var(--color-icon-disable)}.app-input-container.has-icon .positive-icon,.app-input-container.has-password .positive-icon,.app-input-container.has-dropdown .positive-icon,.app-input-container.has-icon .warning-icon,.app-input-container.has-password .warning-icon,.app-input-container.has-dropdown .warning-icon{opacity:0!important}.app-input-container.has-icon .icon,.app-input-container.has-password .icon,.app-input-container.has-dropdown .icon{height:18px;width:18px;display:grid;place-items:center;color:var(--color-icon-neutral);transition:color .2s ease-in-out,opacity .2s ease-in-out;opacity:1}.app-input-container.has-icon .icon-container,.app-input-container.has-password .icon-container{height:26px;display:flex;justify-items:center;align-items:center;gap:4px;padding:.25rem 0 .25rem 6px}.app-input-container.has-icon .icon-container:hover,.app-input-container.has-password .icon-container:hover{cursor:text}.app-input-container.has-icon .app-input-label,.app-input-container.has-password .app-input-label{left:28px}.app-input-container.has-icon .app-input,.app-input-container.has-password .app-input{padding-left:4px}.separator{height:14px;width:1px;border-radius:2px;background-color:var(--color-icon-neutral);transition:background-color .2s ease-in-out;opacity:40%}.has-password .password-icons{display:grid;place-items:center;position:relative;height:18px;width:18px}.has-password .password-icons .icon{position:absolute;opacity:0}.has-password:has(.app-input:placeholder-shown.app-input:not(:focus-visible)) .password-key{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-password:has(.app-input:focus-visible) .password-hidden{opacity:1!important}.has-password:has(.app-input:not(:placeholder-shown)) .password-hidden:hover,.has-password:has(.app-input:focus-visible) .password-hidden:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown,.has-visible:has(.app-input:focus-visible) .password-shown{opacity:1!important}.has-visible:has(.app-input:not(:placeholder-shown)) .password-shown:hover,.has-visible:has(.app-input:focus-visible) .password-shown:hover{cursor:pointer}.has-visible:has(.app-input:not(:placeholder-shown)) .password-hidden,.has-visible:has(.app-input:focus-visible) .password-hidden{opacity:0!important}.has-number .number-container{position:relative;display:flex;justify-content:center;align-items:center;right:4px;pointer-events:none}.has-number .number-buttons{display:flex;gap:4px;position:absolute;right:0;justify-content:center;align-items:center;opacity:0;transition:opacity .2s ease-in-out;pointer-events:none}.has-number .plus-icon,.has-number .minus-icon{cursor:pointer;pointer-events:none}.has-number:has(.app-input:focus-visible){cursor:text}.has-number:has(.app-input:focus-visible) .number-buttons{opacity:1}.has-number:has(.app-input:focus-visible) .plus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .minus-icon{pointer-events:auto}.has-number:has(.app-input:focus-visible) .cancel-icon{opacity:0!important;pointer-events:none!important}.has-number:has(.app-input:focus-visible) .number-container{width:60px}.has-dropdown .dropdown-menu{width:100%;background-color:#2f2f2f;border:0;border-radius:3px;padding:4px;margin-top:4px;max-height:244px;overflow-y:auto}.has-dropdown .dropdown-menu::-webkit-scrollbar{background-color:#2f2f2f;border-radius:0 3px 3px 0;width:6px}.has-dropdown .dropdown-menu::-webkit-scrollbar-thumb{background-color:#919191;width:2px;border:2px solid #2f2f2f;border-radius:3px}.has-dropdown .dropdown-item{color:#fff;font-weight:400;font-size:14px;line-height:18px;height:26px;padding:4px;transition:background-color .2s ease-in-out;border-radius:2px;position:relative}.has-dropdown .dropdown-item:hover{background-color:#424242}.has-dropdown .dropdown-item:focus-visible{background-color:#424242;border:0;outline:none}.has-dropdown .dropdown-item:not(:first-child){margin-top:4px}.has-dropdown .no-results{color:#919191;font-weight:700}.has-dropdown .selected{font-weight:700}.has-dropdown .selected .dropdown-item-icon{opacity:1}.has-dropdown .dropdown-item-icon{position:absolute;opacity:0;right:6px;top:50%;transform:translateY(-50%);color:#92b1f5}.has-dropdown .app-input-icon{right:26px}.has-dropdown .icon-container{position:absolute;right:4px;top:50%;transform:translateY(-50%);width:18px;height:18px;display:grid;place-items:center;pointer-events:none}.has-dropdown .dropdown-icon{transition:transform .1s ease-in-out,color .2s ease-in-out!important;transform:rotate(0)}.has-dropdown:has(.app-input:focus-visible) .dropdown-icon{transform:rotate(180deg)}.has-right .app-input{text-align:right}.has-right .positive-icon,.has-right .app-input-icon{left:4px;right:auto}.has-right .app-input{order:1}.has-right.has-icon .app-input,.has-right.has-password .app-input{padding-right:0!important}.has-right.has-icon .app-input-label,.has-right.has-password .app-input-label{left:0!important}.has-right.has-icon .icon-container,.has-right.has-password .icon-container{width:30px;padding-left:4px}.has-right.has-icon .icon-container .icon,.has-right.has-password .icon-container .icon{order:2}.has-right.has-dropdown .app-input-icon{left:26px}.has-right.has-dropdown .icon-container{left:4px}.has-right:has(.app-input:placeholder-shown) .warning-icon{display:none!important}.has-right.has-number .separator{order:3}.has-right.has-number .number-buttons{left:0;right:unset}.has-right.has-number .number-container{left:4px;right:unset}.has-right .icon-container{order:2;margin-right:4px}.has-right .icon-container .password-icons{order:2}:host ::ng-deep .highlight{background-color:#3b73ed33!important;color:#92b1f5!important}:host ::ng-deep .selected .highlight{background-color:transparent!important;color:#fff!important}\n"] }]
|
|
905
905
|
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
906
906
|
type: Optional
|
|
907
907
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carriera-intern-components.mjs","sources":["../../../projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts","../../../projects/carriera-intern-components/src/app/pipes/error-message.pipe.ts","../../../projects/carriera-intern-components/src/app/directives/password.directive.ts","../../../projects/carriera-intern-components/src/app/directives/number-format.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.html","../../../projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html","../../../projects/carriera-intern-components/src/app/services/document.service.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html","../../../projects/carriera-intern-components/src/public-api.ts","../../../projects/carriera-intern-components/src/carriera-intern-components.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberFormat',\n})\nexport class NumberFormatPipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return '';\n\n if (value.includes('.')) {\n const [integerPart, decimalPart] = value.split('.');\n \n // Cap decimal places to maximum 2\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n \n // Format the integer part with commas\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n // If there's a decimal part, show it (capped at 2 places)\n if (decimalPart !== undefined) {\n return `${formattedInteger}.${cappedDecimalPart}`;\n }\n \n // If user just typed a decimal point, show it\n return `${formattedInteger}.`;\n }\n\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { NumberFormatPipe } from './number-format.pipe';\n\n@Pipe({\n name: 'errorMessage'\n})\nexport class ErrorMessagePipe implements PipeTransform {\n numberFormatPipe = new NumberFormatPipe();\n\n transform(errors: ValidationErrors | null | undefined): string[] {\n if (!errors) return [];\n\n const messages: Record<string, (value?: any) => string> = {\n required: () => 'Required',\n minlength: (value: any) => `Minimum length is ${value.requiredLength}`,\n maxlength: (value: any) => `Maximum length is ${value.requiredLength}`,\n min: (value: any) => `Minimum value is ${this.numberFormatPipe.transform(String(value.min))}` ,\n max: (value: any) => `Maximum value is ${this.numberFormatPipe.transform(String(value.max))}` ,\n email: () => 'Invalid email format',\n pattern: () => 'Invalid format',\n };\n\n return Object.entries(errors).map(([key, value]) => {\n const getMessage = messages[key];\n return getMessage ? getMessage(value) : 'Invalid field.';\n });\n }\n\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[appPassword]',\n})\nexport class PasswordDirective implements OnInit {\n /**\n * Input property to enable or disable the password masking behavior.\n */\n appPassword = input<boolean>(true);\n\n /**\n * Input property to hide or show the password\n */\n visible = input<boolean>(false);\n\n /**\n * Input property to specify how many characters from the end of the\n * password should be revealed. Defaults to 0 (fully masked).\n */\n reveal = input<number>(0);\n\n /**\n * Stores the actual, unmasked password value,\n * while the input element displays a masked version.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook called after Angular initializes the directive's data-bound properties.\n * If password masking is enabled, it sets up the initial masking.\n */\n ngOnInit(): void {\n if (this.appPassword()) {\n this.setupPasswordMasking();\n }\n }\n\n /**\n * Sets up the initial state for password masking.\n * It reads the initial value from the input (if any) as the `realValue`\n * and then updates the input's display to show the masked version.\n */\n private setupPasswordMasking(): void {\n const input = this.el.nativeElement;\n this.realValue = input.value || ''; // Assume initial value is unmasked or is the real one\n this.updateDisplayValue();\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This is the core logic for synchronizing `realValue` with user input\n * on the masked field. It infers changes to `realValue`\n * based on `event.data`, cursor position, and the difference in length\n * between the input's current display value and the previous `realValue`.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appPassword()) return;\n\n const input = this.el.nativeElement; // Using el.nativeElement as in original code\n const cursorPosition = input.selectionStart || 0;\n const displayValue = input.value; // Value after browser's immediate processing of input\n\n // Calculate difference from the *previous* realValue length\n const lengthDiff = displayValue.length - this.realValue.length;\n\n if (event.data && lengthDiff <= 0) {\n // Text replacement or complex change: e.g., typing over a selection.\n // `event.data` contains the newly typed character(s).\n // `lengthDiff` helps determine how many characters were replaced.\n const deletedCount = Math.abs(lengthDiff) + event.data.length;\n const replaceStart = cursorPosition - event.data.length;\n\n this.realValue =\n this.realValue.slice(0, Math.max(0, replaceStart)) + // Ensure replaceStart isn't negative\n event.data +\n this.realValue.slice(Math.max(0, replaceStart) + deletedCount);\n } else if (lengthDiff > 0) {\n // Pure addition of characters (typing without prior selection, or pasting).\n // `event.data` contains the added character(s), or we infer from displayValue.\n const addedChars =\n event.data ||\n displayValue.slice(cursorPosition - lengthDiff, cursorPosition);\n const insertPosition = cursorPosition - addedChars.length;\n this.realValue =\n this.realValue.slice(0, Math.max(0, insertPosition)) +\n addedChars +\n this.realValue.slice(Math.max(0, insertPosition));\n } else if (lengthDiff < 0) {\n // Pure deletion (e.g., Backspace, Delete key).\n // `event.data` is null for these operations.\n const deletedCount = Math.abs(lengthDiff);\n // `cursorPosition` is where the cursor is *after* deletion.\n // The deletion happened *before* this `cursorPosition`.\n this.realValue =\n this.realValue.slice(0, cursorPosition) +\n this.realValue.slice(cursorPosition + deletedCount);\n }\n // If lengthDiff is 0 and no event.data (e.g. moving cursor with arrow keys inside text), realValue should not change.\n // The current logic handles this as no branch is taken.\n\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition); // Restore cursor as displayValue changed\n this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents default cut behavior to operate on `realValue`.\n * It copies the corresponding part of `realValue` to the clipboard\n * and updates `realValue` and the display.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appPassword()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut action\n const cutText = this.realValue.slice(start, end); // Cut from realValue\n event.clipboardData?.setData('text/plain', cutText);\n\n this.realValue =\n this.realValue.slice(0, start) + this.realValue.slice(end);\n\n this.updateDisplayValue();\n this.setCursorPosition(start); // Set cursor to the start of the cut area\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents default copy behavior to ensure the unmasked `realValue` segment is copied.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appPassword()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy action\n const copiedText = this.realValue.slice(start, end); // Copy from realValue\n event.clipboardData?.setData('text/plain', copiedText);\n }\n }\n\n /**\n * Updates the input element's display value with a masked version of `realValue`.\n * Uses '•' for masked characters. Respects the `reveal` input to show\n * a specified number of characters from the end of the password.\n * This method is responsible for creating the visual masking.\n */\n private updateDisplayValue(): void {\n if (this.visible()) {\n this.el.nativeElement.value = this.realValue;\n return;\n }\n\n const revealCount = this.reveal();\n const realLength = this.realValue.length;\n let displayValue = '';\n\n if (revealCount > 0 && realLength > revealCount) {\n const actualRevealCount = Math.min(revealCount, realLength);\n // Calculate how many characters to mask\n const maskedCharsCount = realLength - actualRevealCount;\n\n if (maskedCharsCount > 0) {\n // Get the part of the real value that should be revealed\n const revealedPart = this.realValue.slice(maskedCharsCount); // Corrected from slice(realLength - actualRevealCount)\n displayValue = '•'.repeat(maskedCharsCount) + revealedPart;\n } else {\n // If all characters are to be revealed (revealCount >= realLength)\n displayValue = this.realValue;\n }\n } else {\n // Fully mask if revealCount is 0 or realValue is lesser than revealCount\n displayValue = '•'.repeat(realLength);\n }\n\n this.el.nativeElement.value = displayValue;\n }\n\n /**\n * Sets the cursor position within the input field.\n * This is crucial after `updateDisplayValue` changes the entire input value,\n * to maintain a natural cursor behavior for the user.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n * @param position - The desired cursor position.\n */\n private setCursorPosition(position: number): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick\n setTimeout(() => {\n // Clamp position to be within the bounds of the current display value's length\n const currentLength = input.value.length;\n const newPosition = Math.max(0, Math.min(position, currentLength));\n input.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unmasked `realValue`.\n * This allows parent components (like your `InputComponent`) to listen for\n * changes to the actual password.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" password value.\n * @returns The real password value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" password value from outside the directive\n * (e.g., when the parent form control's value is changed programmatically).\n * It updates the internal `realValue` and then refreshes the masked display.\n * @param value - The new real password value to set.\n */\n setRealValue(value: string): void {\n this.realValue = value || '';\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { NumberFormatPipe } from '../pipes/number-format.pipe';\n\n@Directive({\n selector: '[appNumberFormat]',\n providers: [NumberFormatPipe],\n})\nexport class NumberFormatDirective implements OnInit {\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n appNumberFormat = input<boolean>(true);\n\n /**\n * Stores the unformatted, \"real\" numeric value of the input.\n * This is the value that should be used for calculations or form submissions,\n * as opposed to the formatted display value.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook that is called after Angular has initialized all data-bound\n * properties of a directive.\n * If number formatting is enabled, it sets up the initial formatting.\n */\n ngOnInit(): void {\n if (this.appNumberFormat()) {\n this.setupNumberFormatting();\n }\n }\n\n /**\n * Initializes the number formatting on the input element.\n * It extracts the initial numeric value from the input's current value\n * and then updates the display with the formatted version.\n */\n private setupNumberFormatting(): void {\n const input = this.el.nativeElement;\n // Extract numeric value from whatever might be in the input initially\n this.realValue = this.extractNumericValue(input.value || '');\n this.updateDisplayValue(); // Format and display it\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This triggers whenever the user types or pastes content into the input.\n * It extracts the numeric value from the current input, updates the\n * display with the formatted number, moves the cursor to the end,\n * and dispatches a 'realValueChange' event with the unformatted numeric value.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appNumberFormat()) return; // Do nothing if formatting is disabled\n\n const input = this.el.nativeElement;\n const displayValue = input.value;\n\n this.realValue = this.extractNumericValue(displayValue);\n this.updateDisplayValue();\n this.setCursorToEnd(); // Important for UX after reformatting\n this.dispatchRealValueChange(); // Notify parent components of the raw value change\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents the default cut behavior to manually handle the value change.\n * It reconstructs the value after the cut, extracts the numeric part,\n * updates the display, sets the cursor, and dispatches the real value.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut\n const cutText = input.value.slice(start, end);\n event.clipboardData?.setData('text', this.extractNumericValue(cutText)); // Put numeric part on clipboard\n\n // Reconstruct value without the cut part\n const newValue = input.value.slice(0, start) + input.value.slice(end);\n this.realValue = this.extractNumericValue(newValue);\n\n this.updateDisplayValue();\n this.setCursorToEnd();\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents the default copy behavior if there's a selection to ensure\n * that the copied text is the unformatted numeric value of the selection,\n * rather than the potentially formatted display text.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy\n const selectedText = input.value.slice(start, end);\n // Copy the underlying numeric value of the selection\n event.clipboardData?.setData(\n 'text',\n this.extractNumericValue(selectedText)\n );\n }\n }\n\n /**\n * HostListener for the 'keydown' event.\n * Filters key presses to allow only digits, a single decimal point,\n * and control keys (Backspace, Arrows, Tab, etc.).\n * This helps maintain a valid numeric input format before the 'input' event fires.\n * @param event - The KeyboardEvent object.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n\n // Allow control keys, and modifier key combinations (Ctrl+A, Ctrl+C, etc.)\n if (\n controlKeys.includes(event.key) ||\n event.ctrlKey ||\n event.metaKey ||\n event.altKey\n ) {\n return; // Don't prevent default for these\n }\n\n // Allow a single decimal point if not already present in the realValue\n if (event.key === '.' && !this.realValue.includes('.')) {\n return;\n }\n\n // Prevent non-digit keys\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n }\n\n /**\n * Extracts a clean numeric string from a given value.\n * It removes any non-digit characters except for a single decimal point.\n * It also ensures that there's only one decimal point and limits\n * the decimal part to two digits.\n * @param value - The string value to clean.\n * @returns A string representing the extracted numeric value.\n */\n private extractNumericValue(value: string): string {\n // Remove all non-digit characters except for the decimal point\n let cleanValue = value.replace(/[^\\d.]/g, '');\n\n // Handle multiple decimal points: keep only the first one\n const parts = cleanValue.split('.');\n if (parts.length > 1) {\n const integerPart = parts[0];\n const decimalPart = parts.slice(1).join(''); // Join back any subsequent parts\n cleanValue = `${integerPart}.${decimalPart}`;\n }\n\n // Limit decimal part to two digits\n if (cleanValue.includes('.')) {\n const [integerPart, decimalPart] = cleanValue.split('.');\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n cleanValue = `${integerPart}.${cappedDecimalPart}`;\n }\n\n return cleanValue;\n }\n\n /**\n * Updates the input element's display value with the formatted version\n * of the current `realValue`.\n * It uses the `NumberFormatPipe` for formatting.\n */\n private updateDisplayValue(): void {\n const input = this.el.nativeElement;\n const formattedValue = new NumberFormatPipe().transform(this.realValue);\n this.el.nativeElement.value = formattedValue;\n }\n\n /**\n * Sets the cursor position to the end of the input field.\n * This is typically called after the input value is reformatted to prevent\n * the cursor from jumping to an unexpected position.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n */\n private setCursorToEnd(): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick,\n // allowing the value to be fully set in the input before moving the cursor.\n setTimeout(() => {\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unformatted `realValue`.\n * This allows parent components or other directives to listen for changes\n * to the underlying numeric value.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unformatted \"real\" numeric value.\n * @returns The real numeric value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" numeric value from outside the directive.\n * It extracts the numeric part from the provided value and updates the\n * input's display with the formatted version.\n * @param value - The new value to set (can be formatted or unformatted).\n */\n setRealValue(value: string): void {\n this.realValue = this.extractNumericValue(value || '');\n this.updateDisplayValue();\n }\n}\n","import {\n Component,\n computed,\n ElementRef,\n HostListener,\n input,\n Optional,\n Self,\n signal,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { ErrorMessagePipe } from '../../pipes/error-message.pipe';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { PasswordDirective } from '../../directives/password.directive';\nimport { NumberFormatDirective } from '../../directives/number-format.directive';\nimport { NgbDropdownModule, NgbPopover } from '@ng-bootstrap/ng-bootstrap';\n\nexport interface InputConfig {\n type?: 'text' | 'password' | 'number';\n name?: string;\n required?: boolean;\n alignment?: 'left' | 'right';\n inverse?: boolean;\n reveal?: number; // Revealed character count from the end of the password\n icon?: string | null;\n dropdown?: boolean;\n search?: boolean;\n}\n/**\n * A reusable input component that integrates with Angular Forms and supports\n * various input types, including text, password (with reveal functionality),\n * and numbers (with formatting and step controls). It also provides error\n * message display and icon support.\n */\n@Component({\n selector: 'app-input',\n imports: [\n ErrorMessagePipe,\n SvgIconComponent,\n PasswordDirective,\n NumberFormatDirective,\n NgbDropdownModule,\n ],\n templateUrl: './input.component.html',\n styleUrl: './input.component.scss',\n})\nexport class InputComponent implements ControlValueAccessor {\n /**\n * Defines the unique identifier for the input element.\n * This ID is crucial for accessibility, linking the `<label>` to the\n * native `<input>` via the `for` attribute.\n * It is provided by the parent component as an Angular `input()` signal.\n */\n id = input<string>('');\n\n /**\n * Configuration object for the input's behavior and appearance.\n * This `input()` signal accepts an `InputConfig` object to customize\n * properties like the input type (`text`, `password`, `number`),\n * placeholder/label text (`name`), validation (`required`), and other\n * special behaviors.\n */\n config = input<InputConfig>({});\n\n /**\n * Internal signal to track the disabled state of the input.\n * This state is managed by the `ControlValueAccessor`'s `setDisabledState`\n * method, which is called by Angular's Forms API when the associated\n * form control's status changes. Defaults to `false`.\n */\n disabled = signal<boolean>(false);\n\n /**\n * Holds the internal, unmasked, and unformatted value of the input.\n * This signal represents the component's \"source of truth\" for its value.\n * It is updated by user input (via `onInput` or `onRealValueChange`) and\n * programmatically by the `ControlValueAccessor`'s `writeValue` method.\n * The value from this signal is what is propagated back to the parent `FormControl`.\n */\n value = signal<string>('');\n\n /**\n * Tracks the visibility state for inputs of `type='password'`.\n * When `true`, the password's characters are shown; when `false`, they are\n * masked. This is toggled by the `toggleVisibility` method.\n * Defaults to `false`.\n */\n visible = signal<boolean>(false);\n\n /**\n * A computed signal that dynamically calculates the step value for number inputs.\n * The step value changes based on the magnitude of the current `value()`.\n * This allows for more intuitive incrementing and decrementing (e.g., smaller\n * steps for smaller numbers, larger steps for larger numbers). It derives its\n * value from the `getStepValue` method and automatically updates when the\n * input's `value` signal changes.\n */\n step = computed(() => this.getStepValue());\n\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n @ViewChild(PasswordDirective) PasswordDirective!: PasswordDirective;\n @ViewChild(NumberFormatDirective)\n NumberFormatDirective!: NumberFormatDirective;\n\n @ViewChild('dropdown') dropdown!: NgbPopover;\n\n /**\n * Constructor for the InputComponent.\n * It injects NgControl to integrate with Angular's forms API.\n * If NgControl is present, it sets this component as the value accessor\n * for the form control.\n * @param ngControl - Optional NgControl instance for form integration.\n */\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles the native 'input' event from the HTMLInputElement.\n * Updates the component's internal value and notifies Angular forms\n * about the change.\n * For 'password' type (when not visible) and 'number' type, it relies\n * on associated directives (PasswordDirective, NumberFormatDirective)\n * to get the real value, as the displayed value might be\n * masked or formatted.\n * @param event - The input event object.\n */\n onInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n\n // Handle inputs normally for all inputs other than password and number\n if (this.config().type === 'password' || this.config().type === 'number') {\n return;\n }\n this.value.set(inputElement.value);\n\n if (this.config().search) {\n return;\n }\n\n this.onChange(this.value());\n }\n\n /**\n * Listens for a custom 'realValueChange' event.\n * This event is expected to be emitted by child directives (PasswordDirective, NumberFormatDirective)\n * when their internal \"real\" value changes, allowing the parent input component\n * to stay in sync.\n * @param event - A CustomEvent containing the new real value in `event.detail`.\n */\n @HostListener('realValueChange', ['$event'])\n onRealValueChange(event: CustomEvent): void {\n this.value.set(event.detail);\n this.onChange(event.detail);\n }\n\n /**\n * Increments the value of a number input by the current step.\n * If the current value is not a valid number, it starts from the `min` input.\n * After updating, it notifies forms, updates the view, and focuses the input.\n * @param event - The MouseEvent that triggered the increment.\n */\n increment(event: MouseEvent): void {\n this.value.update((v) =>\n String((parseFloat(v) ? parseFloat(v) : 0) + this.step())\n );\n this.onChange(this.value());\n this.setValue(); // Ensure the view (e.g., formatted number) is updated\n this.focus(event);\n }\n\n /**\n * Decrements the value of a number input by the current step.\n * If the current value is not a valid number, it starts from the `min` input.\n * The value will not go below the minimum value.\n * After updating, it notifies forms, updates the view, and focuses the input.\n * @param event - The MouseEvent that triggered the decrement.\n */\n decrement(event: MouseEvent): void {\n this.value.update((v) => {\n const currentValue = parseFloat(v) ? parseFloat(v) : 0;\n const nextValue = currentValue - this.step();\n return String(nextValue <= 0 ? 0 : nextValue);\n });\n this.onChange(this.value());\n this.setValue(); // Ensure the view (e.g., formatted number) is updated\n this.focus(event);\n }\n\n /**\n * Calculates the step value for number inputs based on the current value.\n * The step dynamically adjusts:\n * - 1000 if value < 20000\n * - 5000 if value < 50000\n * - 10000 if value < 100000\n * - 20000 otherwise\n * Uses `min()` as a fallback if the current value is not a valid number.\n * @returns The calculated step value.\n */\n getStepValue(): number {\n const numericValue = parseFloat(this.value() || '0');\n const value = numericValue || 0;\n\n if (value < 20000) return 1000;\n else if (value < 50000) return 5000;\n else if (value < 100000) return 10000;\n else return 20000;\n }\n\n /**\n * Toggles the visibility of the password input.\n * Toggles the `visible` state and updates the input's displayed value.\n * @param event - The MouseEvent that triggered the toggle.\n */\n toggleVisibility(event: MouseEvent): void {\n if (this.config().type !== 'password') {\n return;\n }\n\n this.focus(event); // Ensure input remains focused after toggle\n this.visible.update((v) => !v);\n setTimeout(() => this.setValue(), 0);\n }\n\n /**\n * Sets the value in the actual HTML input element or updates the\n * \"real\" value in the associated directive.\n * - For 'password' type: If not visible, it updates the PasswordDirective's real value.\n * If visible, it falls through to the default behavior.\n * - For 'number' type: It updates the NumberFormatDirective's real value.\n * - For other types (or visible password): It sets the `value` property of the native input element.\n */\n setValue(): void {\n // Ensure inputRef is available\n if (!this.inputRef || !this.inputRef.nativeElement) {\n return;\n }\n\n switch (this.config().type) {\n case 'password':\n if (this.PasswordDirective) {\n // When password is not visible, the directive handles the masking.\n // We set the real value on the directive.\n this.PasswordDirective.setRealValue(this.value());\n } else {\n // When password is visible, or no directive, set directly.\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'number':\n if (this.NumberFormatDirective) {\n // NumberFormatDirective handles formatting, so we set the real value on it.\n this.NumberFormatDirective.setRealValue(this.value());\n } else {\n // If no directive, set directly.\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n default:\n // For text, email, etc., set the value directly on the input element.\n this.inputRef.nativeElement.value = this.value();\n break;\n }\n }\n\n /**\n * Focuses the input element.\n * Prevents the default action of the mouse event to avoid unintended behaviors\n * like double focus or focus loss.\n * @param event - The MouseEvent that initiated the focus action.\n */\n focus(event: MouseEvent): void {\n event.preventDefault();\n if (this.inputRef && this.inputRef.nativeElement) {\n this.inputRef.nativeElement.focus();\n }\n }\n\n // ControlValueAccessor methods\n onChange = (_: any) => {};\n onTouched = () => {};\n\n /**\n * Writes a new value to the element. (ControlValueAccessor)\n * This method is called by the Forms API to update the view when\n * the form control's value changes programmatically.\n * Uses `setTimeout` to ensure that `setValue` is called after the\n * view (and potentially child directives) has been initialized,\n * especially relevant if `writeValue` is called early in the component lifecycle.\n * @param value - The new value to write.\n */\n writeValue(value: string): void {\n this.value.set(value || '');\n // Use setTimeout to ensure directives like PasswordDirective or NumberFormatDirective\n // are initialized and ready to receive the value, especially during component init.\n setTimeout(() => {\n this.setValue();\n });\n }\n\n /**\n * Registers a callback function that should be called when the\n * control's value changes in the UI. (ControlValueAccessor)\n * @param fn - The callback function to register.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers a callback function that should be called when the\n * control receives a blur event. (ControlValueAccessor)\n * @param fn - The callback function to register.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * This function is called by the Forms API when the control's disabled\n * state changes. (ControlValueAccessor)\n * @param isDisabled - True if the control should be disabled, false otherwise.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Called when the input element loses focus (blur event).\n * Triggers the `onTouched` callback to notify Angular Forms that the\n * input has been interacted with.\n */\n onBlur(): void {\n this.onTouched();\n }\n\n /**\n * Resets the input field's value to an empty string.\n * Notifies Angular Forms of the change and updates the view.\n */\n reset(): void {\n this.value.set('');\n this.onChange(''); // Notify form control of the change\n this.setValue(); // Update the actual input element\n }\n\n /**\n * Represents the base list of options available for the dropdown.\n * This is an input signal, meaning its value can be set from a parent component.\n * @type {Signal<string[]>}\n */\n dropdownOptions = input<string[]>([]);\n\n /**\n * A computed signal that provides the current list of options to display in the dropdown.\n *\n * If `search` is `false`, it returns the full `dropdownOptions`.\n * If `search` is `true`, it filters `dropdownOptions` based on the `value` signal,\n * performing a case-insensitive partial text match.\n *\n * @type {Signal<string[]>}\n */\n options = computed(() => {\n if (!this.config().search) {\n return this.dropdownOptions();\n }\n\n const searchValue = this.value();\n const filteredOptions = this.dropdownOptions().filter((option) =>\n option.toLowerCase().includes(searchValue.toLowerCase())\n );\n if (filteredOptions.length > 0) {\n return filteredOptions;\n }\n\n return [];\n });\n\n /**\n * Formats an option for the dropdown by highlighting the search value if it exists in the option.\n * @param option - The option to format.\n * @returns The formatted option.\n */\n formatOption(option: string): string {\n if (!this.config().search) {\n return option;\n }\n\n const searchValue = this.value();\n\n if (!searchValue || searchValue.trim() === '') {\n return option;\n }\n\n const escapedSearchValue = searchValue.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n );\n\n const regex = new RegExp(escapedSearchValue, 'gi');\n\n if (option.toLowerCase().includes(searchValue.toLowerCase())) {\n return option.replace(regex, '<span class=\"highlight\" >$&</span>');\n }\n\n return option;\n }\n\n /**\n * Handles when an option is selected from the dropdown.\n * @param option - The selected option.\n * @param event - The MouseEvent that initiated the selection action.\n */\n handleOption(option: string, event: MouseEvent) {\n this.focus(event);\n this.value.set(option);\n this.onChange(option);\n this.setValue();\n this.dropdown.close();\n }\n}\n","@let valid = ngControl?.valid && ngControl?.touched && ngControl?.dirty; @let\ninvalid = ngControl?.invalid && ngControl?.touched && ngControl?.dirty; @let\ntype = config().type; @let icon = config().icon; @let alignment =\nconfig().alignment; @let inverse = config().inverse; @let name = config().name;\n@let required = config().required; @let reveal = config().reveal; @let password\n= type === 'password'; @let number = type === 'number'; @let ariaLabel = type\n=== 'password' ? 'Password' : config().name; @let hasDropdown =\nconfig().dropdown;\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-error': invalid,\n 'has-valid': valid,\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown\n }\"\n ngbDropdown\n [autoClose]=\"'outside'\"\n #dropdown=\"ngbDropdown\"\n>\n @if (config().icon && !password && !number) {\n <div class=\"icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n <div class=\"separator\"></div>\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div class=\"password-icons\">\n <svg-icon class=\"icon password-key\" name=\"password-key\"></svg-icon>\n <svg-icon class=\"icon password-shown\" name=\"password-shown\"></svg-icon>\n <svg-icon class=\"icon password-hidden\" name=\"password-hidden\"></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"'text'\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n placeholder=\"\"\n autocomplete=\"off\"\n #inputRef\n [appPassword]=\"password\"\n [reveal]=\"reveal || 0\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n (focus)=\"hasDropdown && dropdown.open()\"\n (click)=\"hasDropdown && dropdown.open()\"\n ngbDropdownAnchor\n />\n <label class=\"app-input-label\">\n {{ name }}\n </label>\n @if(number){\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <svg-icon\n name=\"plus\"\n class=\"bg-icon plus-icon\"\n (mousedown)=\"increment($event)\"\n ></svg-icon>\n <svg-icon\n name=\"minus\"\n class=\"bg-icon minus-icon\"\n (mousedown)=\"decrement($event)\"\n ></svg-icon>\n </div>\n </div>\n }\n <svg-icon name=\"checkmark\" class=\"app-input-icon positive-icon\"></svg-icon>\n <svg-icon name=\"warning\" class=\"app-input-icon warning-icon\"></svg-icon>\n <div class=\"app-input-error\">\n @if (invalid) { @for (error of ngControl?.errors | errorMessage ; track\n $index) {\n {{ error }}\n } }\n </div>\n <button\n type=\"button\"\n class=\"app-input-icon cancel-icon bg-icon\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n >\n <svg-icon name=\"cancel\"></svg-icon>\n </button>\n @if(hasDropdown) {\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @if (!options().length) {\n <p class=\"dropdown-item no-results\">No results</p>\n } @for(option of options(); track $index ){\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': value() === option,\n }\"\n >\n <p [innerHTML]=\"formatOption(option)\"></p>\n <svg-icon name=\"checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n </div>\n <div class=\"icon-container\">\n <svg-icon name=\"arrow-down\" class=\"dropdown-icon icon\"></svg-icon>\n </div>\n }\n</div>\n","// src/app/bytes-to-human-readable.pipe.ts\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytesToHumanReadable',\n})\nexport class BytesToHumanReadablePipe implements PipeTransform {\n transform(bytes: number | null | undefined, precision: number = 2): string {\n if (bytes === null || bytes === undefined || isNaN(bytes)) {\n return '';\n }\n\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n const unitIndex = Math.min(i, units.length - 1);\n\n const value = bytes / Math.pow(1024, unitIndex);\n\n const formattedValue = parseFloat(value.toFixed(precision));\n\n return `${formattedValue} ${units[unitIndex]}`;\n }\n}","import { Component, ElementRef, input, output, signal, ViewChild } from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { AppFile } from '../../models/appFile.model';\nimport { BytesToHumanReadablePipe } from '../../pipes/bytes-to-human-readable.pipe';\n/**\n * This component displays a preview of a document, including its name, size,\n * and provides actions to delete, download, and tag the document.\n */\n@Component({\n selector: 'app-document-preview',\n imports: [SvgIconComponent, BytesToHumanReadablePipe],\n templateUrl: './document-preview.component.html',\n styleUrl: './document-preview.component.scss',\n})\nexport class DocumentPreviewComponent {\n\n showDeleteModal = signal<boolean>(false);\n /**\n * The application file to be displayed in the preview. This is a required input.\n * @type {InputSignal<AppFile>}\n */\n file = input.required<AppFile>();\n /**\n * An output event that emits the file name when the delete action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDelete = output<string>();\n\n /**\n * An output event that emits the file name when the download action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDownload = output<string>();\n\n /**\n * Handles the delete action. Emits the `fileName` of the current `file` via the `onDelete` output.\n */\n handleDelete() {\n this.showDeleteModal.set(true);\n }\n\n /**\n * Handles the download action. Emits the `fileName` of the current `file` via the `onDownload` output.\n */\n handleDownload() {\n this.onDownload.emit(this.file().fileName);\n }\n\n /**\n * Handles the tag action. Currently, it logs a message to the console.\n * A \"TODO\" indicates that further logic for tagging needs to be implemented here.\n */\n handleTag() {\n console.log('Tag event');\n // TODO: Add tag logic\n }\n\n cancelDelete() {\n this.showDeleteModal.set(false);\n }\n\n confirmDelete()\n {\n this.onDelete.emit(this.file().fileName);\n this.showDeleteModal.set(false);\n }\n \n}","@let fileType = file().type; @let documentName = file().baseName; @let fileSize\n= file().size; @let pdf = fileType === 'pdf'; @let video = ['avi', 'mp4',\n'mov'].includes(fileType); @let image = ['jpg', 'png', 'jpeg',\n'gif'].includes(fileType); @let pageCount = file().pageCount; @let\nimagePreviewUrl = file().imagePreviewUrl;\n\n<div class=\"document\" [class.noTouch]=\"showDeleteModal()\"> \n <div class=\"document-image-container\">\n <img src=\"{{ imagePreviewUrl }}\" class=\"document-image\" />\n <div class=\"badge-tag-container\">\n <div class=\"badges\">\n <p class=\"tag\">No Tag</p>\n </div>\n <div class=\"badges\">\n <p\n class=\"badge file-type\"\n [class]=\"{\n pdf: pdf,\n video: video,\n image: image\n }\"\n >\n {{ fileType }}\n </p>\n <p class=\"badge\">\n @if(pdf && pageCount) {\n <span>{{ pageCount }} p.</span>\n }\n <span class=\"file-size\"> {{ fileSize | bytesToHumanReadable }}</span>\n </p>\n </div>\n </div>\n </div>\n <p class=\"document-name\">\n {{ documentName }}\n </p>\n <div class=\"document-actions\">\n <div class=\"document-actions-container\">\n <button class=\"document-actions-button\" (click)=\"handleTag()\">\n <svg-icon name=\"label\" class=\"icon\"></svg-icon>\n </button>\n </div>\n <div class=\"document-actions-container\">\n <button class=\"document-actions-button\" (click)=\"handleDownload()\">\n <svg-icon name=\"download\" class=\"icon\"></svg-icon>\n </button>\n <button class=\"document-actions-button\" (click)=\"handleDelete()\">\n <svg-icon name=\"delete\" class=\"icon\"></svg-icon>\n </button>\n </div>\n </div>\n <div class=\"delete-modal\">\n <div class=\"modal-buttons\">\n <button class=\"delete-button\" (click)=\"confirmDelete()\">Delete</button>\n <button class=\"cancel-button\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n</div>\n\n\n","import { Injectable } from '@angular/core';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { FileExtension } from '../models/appFile.model';\n\npdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/pdf.worker.min.mjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentService {\n /**\n * Generates a data URL thumbnail for a given file.\n * Handles PDFs, videos, and images.\n * @param file The file to generate a thumbnail for.\n * @returns A promise that resolves to a data URL string for the thumbnail.\n */\n async generateThumbnail(file: File): Promise<string> {\n const extension: FileExtension = file.name.split('.').pop()?.toLowerCase() as FileExtension;\n\n switch (extension) {\n case 'pdf':\n try {\n return await this.generatePdfThumbnail(file);\n } catch (error) {\n console.error('Error generating PDF thumbnail:', error);\n return '/assets/exampledoc.png';\n }\n case 'mp4':\n case 'mov':\n case 'avi':\n try {\n return await this.generateVideoThumbnail(file);\n } catch (error) {\n console.error('Error generating video thumbnail:', error);\n return '/assets/truck.png';\n }\n case 'jpg':\n case 'jpeg':\n case 'png':\n case 'gif':\n return URL.createObjectURL(file);\n default:\n return '/assets/exampledoc.png';\n }\n }\n\n private generatePdfThumbnail(file: Blob): Promise<string> {\n const fileReader = new FileReader();\n return new Promise<string>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n const page = await pdf.getPage(1);\n const viewport = page.getViewport({ scale: 1 });\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const desiredWidth = 280;\n const scale = desiredWidth / viewport.width;\n const scaledViewport = page.getViewport({ scale });\n canvas.height = scaledViewport.height;\n canvas.width = scaledViewport.width;\n\n if (!context) {\n return reject('Could not get canvas context');\n }\n\n await page.render({ canvasContext: context, viewport: scaledViewport })\n .promise;\n resolve(canvas.toDataURL('image/png'));\n } catch (error) {\n reject(error);\n }\n };\n fileReader.onerror = () => reject(fileReader.error);\n fileReader.readAsArrayBuffer(file);\n });\n }\n\n private generateVideoThumbnail(file: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n video.autoplay = true;\n video.muted = true;\n video.src = URL.createObjectURL(file);\n\n video.onloadeddata = () => {\n video.currentTime = Math.min(0.1, video.duration / 2);\n };\n\n video.onseeked = () => {\n const desiredWidth = 280;\n const scale = desiredWidth / video.videoWidth;\n canvas.width = desiredWidth;\n canvas.height = video.videoHeight * scale;\n\n if (context) {\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.pause();\n URL.revokeObjectURL(video.src);\n resolve(canvas.toDataURL('image/png'));\n } else {\n reject('Could not get canvas context for video thumbnail');\n }\n };\n\n video.onerror = (e) => {\n URL.revokeObjectURL(video.src);\n reject('Error loading video for thumbnail: ' + e);\n };\n });\n }\n\n /**\n * Reads a PDF file and returns the total number of pages.\n *\n * @param file The PDF Blob or File.\n * @returns A promise that resolves to the page count (number).\n * @throws If the file is not a valid PDF or an error occurs during processing.\n */\n async getPdfPageCount(file: Blob): Promise<number> {\n const fileReader = new FileReader();\n\n return new Promise<number>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n resolve(pdf.numPages);\n } catch (error) {\n console.error('Error getting PDF page count:', error);\n reject(new Error('Failed to load PDF or get page count.'));\n }\n };\n fileReader.onerror = () => {\n reject(new Error('FileReader error during PDF page count operation.'));\n };\n fileReader.readAsArrayBuffer(file);\n });\n }\n}","import {\n Component,\n ElementRef,\n signal,\n ViewChild,\n inject,\n computed,\n input,\n} from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { DocumentPreviewComponent } from '../document-preview/document-preview.component';\nimport { AppFile, FileExtension } from '../../models/appFile.model';\nimport { DocumentService } from '../../services/document.service';\n\n/**\n * A component that provides a user interface for file uploading via\n * drag-and-drop or a file input dialog. It displays previews of the\n * selected files in a carousel.\n */\n@Component({\n selector: 'app-drop-zone',\n imports: [SvgIconComponent, DocumentPreviewComponent],\n templateUrl: './drop-zone.component.html',\n styleUrl: './drop-zone.component.scss',\n})\nexport class DropZoneComponent {\n /**\n * Injects the DocumentService for file processing tasks like\n * thumbnail generation and PDF page counting.\n * @private\n */\n private documentService = inject(DocumentService);\n\n /**\n * An array of file extensions that should be excluded from the supported list.\n * @defaultValue `[]` (an empty array)\n * @type {FileExtension[]}\n */\n excludedFileTypes = input<FileExtension[]>([]);\n\n /**\n * The base array of all file extensions that are generally allowed.\n * Supported file types will be derived from this list, after excluding\n * any types specified in `excludedFileTypes`.\n *\n * @defaultValue `['avi', 'mov', 'mp4', 'pdf', 'gif', 'png', 'jpg', 'jpeg']`\n * @type {FileExtension[]}\n */\n fileTypes = input<FileExtension[]>([\n 'pdf',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'avi',\n 'mov',\n 'mp4',\n ]);\n\n /**\n * A computed signal that derives the list of currently supported file extensions.\n * It filters the base `fileTypes` array, removing any extensions present\n * in the `excludedFileTypes` input.\n */\n supportedFileTypes = computed(() => [\n ...this.fileTypes().filter(\n (type) => !this.excludedFileTypes().includes(type)\n ),\n ]);\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n */\n docs = signal<AppFile[]>([]);\n\n /**\n * A signal that acts as a boolean flag. It is set to `true` when the user\n * attempts to upload a file with an unsupported extension.\n */\n unsupported = signal(false);\n\n /**\n * Handles the 'change' event from the hidden file input. It extracts the\n * selected files and passes them to the `processFiles` method.\n * @param event The `Event` object from the file input element.\n */\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const files = target.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Handles the 'drop' event on the component. It prevents the browser's\n * default file handling, extracts the dropped files, and passes them to\n * the `processFiles` method.\n * @param event The `DragEvent` object containing the dropped files.\n */\n onDrop(event: DragEvent) {\n event.preventDefault();\n const files = event.dataTransfer?.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Asynchronously processes a list of files. For each file, it validates\n * the extension against `supportedFileTypes`. If valid, it generates a\n * thumbnail, counts pages for PDFs, creates an `AppFile` object, and adds\n * it to the `docs` signal. If any file is unsupported, the `unsupported`\n * flag is set.\n * @param files The `FileList` object to be processed.\n */\n async processFiles(files: FileList) {\n this.unsupported.set(false);\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\n\n if (\n !fileExtension ||\n !this.supportedFileTypes().includes(fileExtension as FileExtension)\n ) {\n this.unsupported.set(true);\n continue;\n }\n\n let pageCount: number | undefined;\n\n if (fileExtension === 'pdf') {\n try {\n pageCount = await this.documentService.getPdfPageCount(file);\n } catch (error) {\n console.error(`Failed to get page count for ${file.name}:`, error);\n }\n }\n\n const imagePreviewUrl = await this.documentService.generateThumbnail(\n file\n );\n\n const filePreview: AppFile = {\n fileName: file.name,\n baseName: file.name.split('.').slice(0, -1).join('.'),\n type: fileExtension as FileExtension,\n size: file.size,\n imagePreviewUrl: imagePreviewUrl,\n file: file,\n pageCount: pageCount,\n };\n\n this.docs.update((docs) => [...docs, filePreview]);\n\n if (this.docs().length > 2) {\n this.carouselIndex.set(this.docs().length - 2);\n }\n }\n }\n\n /**\n * Handles the download action for a specific file.\n * Note: This is a placeholder and currently only logs the file name.\n * @param fileName The name of the file to be downloaded.\n */\n handleDownload(fileName: string) {\n console.log(fileName);\n }\n\n /**\n * A ViewChild reference to the native `<input type='file'>` element.\n * Used to programmatically trigger the file selection dialog.\n */\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n /**\n * Resets the component's state after an unsupported file type error\n * by setting the `unsupported` signal to `false`.\n */\n cancel() {\n this.unsupported.set(false);\n }\n\n /**\n * Programmatically triggers a click on the hidden file input element,\n * which opens the system's file selection dialog.\n */\n handleClickToAdd() {\n this.inputRef.nativeElement.click();\n }\n\n /**\n * Deletes a file from the preview list. It filters the `docs` array to\n * remove the specified file and adjusts the carousel position.\n * @param fileName The name of the file to be deleted.\n */\n handleDelete(fileName: string) {\n this.carouselLeft();\n\n this.docs.set(this.docs().filter((doc) => doc.fileName !== fileName));\n\n if (this.docs().length === 0) {\n this.unsupported.set(false);\n }\n }\n\n // Carousel logic\n\n /**\n * A signal that stores the current index for the file preview carousel.\n * This determines which part of the carousel is visible.\n */\n carouselIndex = signal(0);\n\n /**\n * A computed signal that calculates the CSS `translateX` value for the\n * carousel container. This creates the sliding effect based on the\n * `carouselIndex`.\n */\n carouselTransform = computed(() => {\n const offset = (148 + 6) * this.carouselIndex() * -1; // 148px width + 6px gap\n return `translateX(${offset}px)`;\n });\n\n /**\n * Navigates the carousel one step to the left by decrementing the\n * `carouselIndex`. The index will not go below 0.\n */\n carouselLeft() {\n this.carouselIndex.update((i) => Math.max(0, i - 1));\n }\n\n /**\n * Navigates the carousel one step to the right by incrementing the\n * `carouselIndex`. The index will not exceed the maximum possible value\n * based on the number of documents.\n */\n carouselRight() {\n const maxIndex = Math.max(0, this.docs().length - 2);\n this.carouselIndex.update((i) => Math.min(maxIndex, i + 1));\n }\n}\n","@let docCount = docs().length;\n\n<div class=\"container\">\n <!-- Carousel -->\n @if(docCount > 0) {\n <div class=\"docs\">\n <div class=\"doc-container\" [style.transform]=\"carouselTransform()\">\n @for (doc of docs(); track $index) {\n <app-document-preview\n class=\"doc\"\n [file]=\"doc\"\n (onDelete)=\"handleDelete($event)\"\n (onDownload)=\"handleDownload($event)\"\n ></app-document-preview>\n }\n </div>\n @if(docCount > 2) {\n <button class=\"carousel-button carousel-left\" (click)=\"carouselLeft()\">\n <svg-icon name=\"arrow-left\" class=\"arrow\"></svg-icon>\n </button>\n <button class=\"carousel-button carousel-right\" (click)=\"carouselRight()\">\n <svg-icon name=\"arrow-right\" class=\"arrow\"></svg-icon>\n </button>\n }\n </div>\n }\n\n <!-- Drop Zone -->\n <div\n class=\"drop-zone-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"$event.preventDefault()\"\n [class]=\"{\n 'more-docs': docCount >= 2,\n unsupported: unsupported()\n }\"\n >\n <!-- Drop Zone -->\n <div class=\"drop-zone\" (click)=\"handleClickToAdd()\">\n <svg-icon name=\"drop-zone\" class=\"illustration\"></svg-icon>\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n DRAG FILES @if (docCount < 1) {\n <span>HERE</span>\n }\n </p>\n <p class=\"subtext\">OR CLICK TO ADD</p>\n </div>\n <input\n type=\"file\"\n aria-hidden=\"true\"\n multiple\n class=\"drop-zone-input\"\n #inputRef\n (input)=\"onInput($event)\"\n />\n </div>\n\n <!-- Drop Zone Error -->\n <div class=\"drop-zone-error\">\n <div class=\"drop-zone-text\">\n <p class=\"heading invalid\">INVALID FILE TYPE</p>\n <p class=\"subtext\">SUPPORTED FORMATS</p>\n </div>\n <div class=\"file-types\">\n @for (type of supportedFileTypes(); track $index) {\n <p\n class=\"badge\"\n [class]=\"{\n pdf: type === 'pdf',\n video: ['avi', 'mp4', 'mov'].includes(type),\n image: ['jpg', 'png', 'jpeg', 'gif'].includes(type)\n }\"\n >\n {{ type }}\n </p>\n }\n </div>\n <button class=\"cancel-button\">\n <svg-icon name=\"cancel\" (click)=\"cancel()\"></svg-icon>\n </button>\n </div>\n </div>\n</div>\n","/*\n * Public API Surface of ca-components\n */\n\nexport * from './app/components/input/input.component';\nexport * from './app/components/drop-zone/drop-zone.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"carriera-intern-components.mjs","sources":["../../../projects/carriera-intern-components/src/app/pipes/number-format.pipe.ts","../../../projects/carriera-intern-components/src/app/pipes/error-message.pipe.ts","../../../projects/carriera-intern-components/src/app/directives/password.directive.ts","../../../projects/carriera-intern-components/src/app/directives/number-format.directive.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.ts","../../../projects/carriera-intern-components/src/app/components/input/input.component.html","../../../projects/carriera-intern-components/src/app/pipes/bytes-to-human-readable.pipe.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.ts","../../../projects/carriera-intern-components/src/app/components/document-preview/document-preview.component.html","../../../projects/carriera-intern-components/src/app/services/document.service.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.ts","../../../projects/carriera-intern-components/src/app/components/drop-zone/drop-zone.component.html","../../../projects/carriera-intern-components/src/public-api.ts","../../../projects/carriera-intern-components/src/carriera-intern-components.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'numberFormat',\n})\nexport class NumberFormatPipe implements PipeTransform {\n transform(value: string): string {\n if (!value) return '';\n\n if (value.includes('.')) {\n const [integerPart, decimalPart] = value.split('.');\n \n // Cap decimal places to maximum 2\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n \n // Format the integer part with commas\n const formattedInteger = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n \n // If there's a decimal part, show it (capped at 2 places)\n if (decimalPart !== undefined) {\n return `${formattedInteger}.${cappedDecimalPart}`;\n }\n \n // If user just typed a decimal point, show it\n return `${formattedInteger}.`;\n }\n\n return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { NumberFormatPipe } from './number-format.pipe';\n\n@Pipe({\n name: 'errorMessage'\n})\nexport class ErrorMessagePipe implements PipeTransform {\n numberFormatPipe = new NumberFormatPipe();\n\n transform(errors: ValidationErrors | null | undefined): string[] {\n if (!errors) return [];\n\n const messages: Record<string, (value?: any) => string> = {\n required: () => 'Required',\n minlength: (value: any) => `Minimum length is ${value.requiredLength}`,\n maxlength: (value: any) => `Maximum length is ${value.requiredLength}`,\n min: (value: any) => `Minimum value is ${this.numberFormatPipe.transform(String(value.min))}` ,\n max: (value: any) => `Maximum value is ${this.numberFormatPipe.transform(String(value.max))}` ,\n email: () => 'Invalid email format',\n pattern: () => 'Invalid format',\n };\n\n return Object.entries(errors).map(([key, value]) => {\n const getMessage = messages[key];\n return getMessage ? getMessage(value) : 'Invalid field.';\n });\n }\n\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[appPassword]',\n})\nexport class PasswordDirective implements OnInit {\n /**\n * Input property to enable or disable the password masking behavior.\n */\n appPassword = input<boolean>(true);\n\n /**\n * Input property to hide or show the password\n */\n visible = input<boolean>(false);\n\n /**\n * Input property to specify how many characters from the end of the\n * password should be revealed. Defaults to 0 (fully masked).\n */\n reveal = input<number>(0);\n\n /**\n * Stores the actual, unmasked password value,\n * while the input element displays a masked version.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook called after Angular initializes the directive's data-bound properties.\n * If password masking is enabled, it sets up the initial masking.\n */\n ngOnInit(): void {\n if (this.appPassword()) {\n this.setupPasswordMasking();\n }\n }\n\n /**\n * Sets up the initial state for password masking.\n * It reads the initial value from the input (if any) as the `realValue`\n * and then updates the input's display to show the masked version.\n */\n private setupPasswordMasking(): void {\n const input = this.el.nativeElement;\n this.realValue = input.value || ''; // Assume initial value is unmasked or is the real one\n this.updateDisplayValue();\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This is the core logic for synchronizing `realValue` with user input\n * on the masked field. It infers changes to `realValue`\n * based on `event.data`, cursor position, and the difference in length\n * between the input's current display value and the previous `realValue`.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appPassword()) return;\n\n const input = this.el.nativeElement; // Using el.nativeElement as in original code\n const cursorPosition = input.selectionStart || 0;\n const displayValue = input.value; // Value after browser's immediate processing of input\n\n // Calculate difference from the *previous* realValue length\n const lengthDiff = displayValue.length - this.realValue.length;\n\n if (event.data && lengthDiff <= 0) {\n // Text replacement or complex change: e.g., typing over a selection.\n // `event.data` contains the newly typed character(s).\n // `lengthDiff` helps determine how many characters were replaced.\n const deletedCount = Math.abs(lengthDiff) + event.data.length;\n const replaceStart = cursorPosition - event.data.length;\n\n this.realValue =\n this.realValue.slice(0, Math.max(0, replaceStart)) + // Ensure replaceStart isn't negative\n event.data +\n this.realValue.slice(Math.max(0, replaceStart) + deletedCount);\n } else if (lengthDiff > 0) {\n // Pure addition of characters (typing without prior selection, or pasting).\n // `event.data` contains the added character(s), or we infer from displayValue.\n const addedChars =\n event.data ||\n displayValue.slice(cursorPosition - lengthDiff, cursorPosition);\n const insertPosition = cursorPosition - addedChars.length;\n this.realValue =\n this.realValue.slice(0, Math.max(0, insertPosition)) +\n addedChars +\n this.realValue.slice(Math.max(0, insertPosition));\n } else if (lengthDiff < 0) {\n // Pure deletion (e.g., Backspace, Delete key).\n // `event.data` is null for these operations.\n const deletedCount = Math.abs(lengthDiff);\n // `cursorPosition` is where the cursor is *after* deletion.\n // The deletion happened *before* this `cursorPosition`.\n this.realValue =\n this.realValue.slice(0, cursorPosition) +\n this.realValue.slice(cursorPosition + deletedCount);\n }\n // If lengthDiff is 0 and no event.data (e.g. moving cursor with arrow keys inside text), realValue should not change.\n // The current logic handles this as no branch is taken.\n\n this.updateDisplayValue();\n this.setCursorPosition(cursorPosition); // Restore cursor as displayValue changed\n this.dispatchRealValueChange();\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents default cut behavior to operate on `realValue`.\n * It copies the corresponding part of `realValue` to the clipboard\n * and updates `realValue` and the display.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appPassword()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut action\n const cutText = this.realValue.slice(start, end); // Cut from realValue\n event.clipboardData?.setData('text/plain', cutText);\n\n this.realValue =\n this.realValue.slice(0, start) + this.realValue.slice(end);\n\n this.updateDisplayValue();\n this.setCursorPosition(start); // Set cursor to the start of the cut area\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents default copy behavior to ensure the unmasked `realValue` segment is copied.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appPassword()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy action\n const copiedText = this.realValue.slice(start, end); // Copy from realValue\n event.clipboardData?.setData('text/plain', copiedText);\n }\n }\n\n /**\n * Updates the input element's display value with a masked version of `realValue`.\n * Uses '•' for masked characters. Respects the `reveal` input to show\n * a specified number of characters from the end of the password.\n * This method is responsible for creating the visual masking.\n */\n private updateDisplayValue(): void {\n if (this.visible()) {\n this.el.nativeElement.value = this.realValue;\n return;\n }\n\n const revealCount = this.reveal();\n const realLength = this.realValue.length;\n let displayValue = '';\n\n if (revealCount > 0 && realLength > revealCount) {\n const actualRevealCount = Math.min(revealCount, realLength);\n // Calculate how many characters to mask\n const maskedCharsCount = realLength - actualRevealCount;\n\n if (maskedCharsCount > 0) {\n // Get the part of the real value that should be revealed\n const revealedPart = this.realValue.slice(maskedCharsCount); // Corrected from slice(realLength - actualRevealCount)\n displayValue = '•'.repeat(maskedCharsCount) + revealedPart;\n } else {\n // If all characters are to be revealed (revealCount >= realLength)\n displayValue = this.realValue;\n }\n } else {\n // Fully mask if revealCount is 0 or realValue is lesser than revealCount\n displayValue = '•'.repeat(realLength);\n }\n\n this.el.nativeElement.value = displayValue;\n }\n\n /**\n * Sets the cursor position within the input field.\n * This is crucial after `updateDisplayValue` changes the entire input value,\n * to maintain a natural cursor behavior for the user.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n * @param position - The desired cursor position.\n */\n private setCursorPosition(position: number): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick\n setTimeout(() => {\n // Clamp position to be within the bounds of the current display value's length\n const currentLength = input.value.length;\n const newPosition = Math.max(0, Math.min(position, currentLength));\n input.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unmasked `realValue`.\n * This allows parent components (like your `InputComponent`) to listen for\n * changes to the actual password.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unmasked \"real\" password value.\n * @returns The real password value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" password value from outside the directive\n * (e.g., when the parent form control's value is changed programmatically).\n * It updates the internal `realValue` and then refreshes the masked display.\n * @param value - The new real password value to set.\n */\n setRealValue(value: string): void {\n this.realValue = value || '';\n this.updateDisplayValue();\n }\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n input,\n OnInit,\n} from '@angular/core';\nimport { NumberFormatPipe } from '../pipes/number-format.pipe';\n\n@Directive({\n selector: '[appNumberFormat]',\n providers: [NumberFormatPipe],\n})\nexport class NumberFormatDirective implements OnInit {\n /**\n * Input property to enable or disable the number formatting.\n * Defaults to true, meaning formatting is active by default.\n */\n appNumberFormat = input<boolean>(true);\n\n /**\n * Stores the unformatted, \"real\" numeric value of the input.\n * This is the value that should be used for calculations or form submissions,\n * as opposed to the formatted display value.\n */\n private realValue: string = '';\n\n constructor(private el: ElementRef<HTMLInputElement>) {}\n\n /**\n * Lifecycle hook that is called after Angular has initialized all data-bound\n * properties of a directive.\n * If number formatting is enabled, it sets up the initial formatting.\n */\n ngOnInit(): void {\n if (this.appNumberFormat()) {\n this.setupNumberFormatting();\n }\n }\n\n /**\n * Initializes the number formatting on the input element.\n * It extracts the initial numeric value from the input's current value\n * and then updates the display with the formatted version.\n */\n private setupNumberFormatting(): void {\n const input = this.el.nativeElement;\n // Extract numeric value from whatever might be in the input initially\n this.realValue = this.extractNumericValue(input.value || '');\n this.updateDisplayValue(); // Format and display it\n }\n\n /**\n * HostListener for the 'input' event on the host element.\n * This triggers whenever the user types or pastes content into the input.\n * It extracts the numeric value from the current input, updates the\n * display with the formatted number, moves the cursor to the end,\n * and dispatches a 'realValueChange' event with the unformatted numeric value.\n * @param event - The InputEvent object.\n */\n @HostListener('input', ['$event'])\n onInput(event: InputEvent): void {\n if (!this.appNumberFormat()) return; // Do nothing if formatting is disabled\n\n const input = this.el.nativeElement;\n const displayValue = input.value;\n\n this.realValue = this.extractNumericValue(displayValue);\n this.updateDisplayValue();\n this.setCursorToEnd(); // Important for UX after reformatting\n this.dispatchRealValueChange(); // Notify parent components of the raw value change\n }\n\n /**\n * HostListener for the 'cut' event.\n * Prevents the default cut behavior to manually handle the value change.\n * It reconstructs the value after the cut, extracts the numeric part,\n * updates the display, sets the cursor, and dispatches the real value.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('cut', ['$event'])\n onCut(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default cut\n const cutText = input.value.slice(start, end);\n event.clipboardData?.setData('text', this.extractNumericValue(cutText)); // Put numeric part on clipboard\n\n // Reconstruct value without the cut part\n const newValue = input.value.slice(0, start) + input.value.slice(end);\n this.realValue = this.extractNumericValue(newValue);\n\n this.updateDisplayValue();\n this.setCursorToEnd();\n this.dispatchRealValueChange();\n }\n }\n\n /**\n * HostListener for the 'copy' event.\n * Prevents the default copy behavior if there's a selection to ensure\n * that the copied text is the unformatted numeric value of the selection,\n * rather than the potentially formatted display text.\n * @param event - The ClipboardEvent object.\n */\n @HostListener('copy', ['$event'])\n onCopy(event: ClipboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const input = this.el.nativeElement;\n const start = input.selectionStart || 0;\n const end = input.selectionEnd || 0;\n\n if (start !== end) {\n // If there's a selection\n event.preventDefault(); // Prevent default copy\n const selectedText = input.value.slice(start, end);\n // Copy the underlying numeric value of the selection\n event.clipboardData?.setData(\n 'text',\n this.extractNumericValue(selectedText)\n );\n }\n }\n\n /**\n * HostListener for the 'keydown' event.\n * Filters key presses to allow only digits, a single decimal point,\n * and control keys (Backspace, Arrows, Tab, etc.).\n * This helps maintain a valid numeric input format before the 'input' event fires.\n * @param event - The KeyboardEvent object.\n */\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n if (!this.appNumberFormat()) return;\n\n const controlKeys = [\n 'Backspace',\n 'Delete',\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Tab',\n 'Enter',\n 'Escape',\n 'Home',\n 'End',\n ];\n\n // Allow control keys, and modifier key combinations (Ctrl+A, Ctrl+C, etc.)\n if (\n controlKeys.includes(event.key) ||\n event.ctrlKey ||\n event.metaKey ||\n event.altKey\n ) {\n return; // Don't prevent default for these\n }\n\n // Allow a single decimal point if not already present in the realValue\n if (event.key === '.' && !this.realValue.includes('.')) {\n return;\n }\n\n // Prevent non-digit keys\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n }\n }\n\n /**\n * Extracts a clean numeric string from a given value.\n * It removes any non-digit characters except for a single decimal point.\n * It also ensures that there's only one decimal point and limits\n * the decimal part to two digits.\n * @param value - The string value to clean.\n * @returns A string representing the extracted numeric value.\n */\n private extractNumericValue(value: string): string {\n // Remove all non-digit characters except for the decimal point\n let cleanValue = value.replace(/[^\\d.]/g, '');\n\n // Handle multiple decimal points: keep only the first one\n const parts = cleanValue.split('.');\n if (parts.length > 1) {\n const integerPart = parts[0];\n const decimalPart = parts.slice(1).join(''); // Join back any subsequent parts\n cleanValue = `${integerPart}.${decimalPart}`;\n }\n\n // Limit decimal part to two digits\n if (cleanValue.includes('.')) {\n const [integerPart, decimalPart] = cleanValue.split('.');\n const cappedDecimalPart = decimalPart ? decimalPart.substring(0, 2) : '';\n cleanValue = `${integerPart}.${cappedDecimalPart}`;\n }\n\n return cleanValue;\n }\n\n /**\n * Updates the input element's display value with the formatted version\n * of the current `realValue`.\n * It uses the `NumberFormatPipe` for formatting.\n */\n private updateDisplayValue(): void {\n const input = this.el.nativeElement;\n const formattedValue = new NumberFormatPipe().transform(this.realValue);\n this.el.nativeElement.value = formattedValue;\n }\n\n /**\n * Sets the cursor position to the end of the input field.\n * This is typically called after the input value is reformatted to prevent\n * the cursor from jumping to an unexpected position.\n * Uses `setTimeout` to ensure the operation occurs after Angular's view update.\n */\n private setCursorToEnd(): void {\n const input = this.el.nativeElement;\n // setTimeout ensures this runs after the current browser rendering tick,\n // allowing the value to be fully set in the input before moving the cursor.\n setTimeout(() => {\n const length = input.value.length;\n input.setSelectionRange(length, length);\n }, 0);\n }\n\n /**\n * Dispatches a custom event named 'realValueChange' from the host element.\n * The event's `detail` property contains the unformatted `realValue`.\n * This allows parent components or other directives to listen for changes\n * to the underlying numeric value.\n */\n private dispatchRealValueChange(): void {\n const customEvent = new CustomEvent('realValueChange', {\n bubbles: true, // Allows event to bubble up the DOM\n composed: true, // Allows event to cross Shadow DOM boundaries\n detail: this.realValue,\n });\n this.el.nativeElement.dispatchEvent(customEvent);\n }\n\n /**\n * Public method to get the current unformatted \"real\" numeric value.\n * @returns The real numeric value as a string.\n */\n getRealValue(): string {\n return this.realValue;\n }\n\n /**\n * Public method to set the \"real\" numeric value from outside the directive.\n * It extracts the numeric part from the provided value and updates the\n * input's display with the formatted version.\n * @param value - The new value to set (can be formatted or unformatted).\n */\n setRealValue(value: string): void {\n this.realValue = this.extractNumericValue(value || '');\n this.updateDisplayValue();\n }\n}\n","import {\n Component,\n computed,\n ElementRef,\n HostListener,\n input,\n Optional,\n Self,\n signal,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { ErrorMessagePipe } from '../../pipes/error-message.pipe';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { PasswordDirective } from '../../directives/password.directive';\nimport { NumberFormatDirective } from '../../directives/number-format.directive';\nimport { NgbDropdownModule, NgbPopover } from '@ng-bootstrap/ng-bootstrap';\n\nexport interface InputConfig {\n type?: 'text' | 'password' | 'number';\n name?: string;\n required?: boolean;\n alignment?: 'left' | 'right';\n inverse?: boolean;\n reveal?: number; // Revealed character count from the end of the password\n icon?: string | null;\n dropdown?: boolean;\n search?: boolean;\n}\n/**\n * A reusable input component that integrates with Angular Forms and supports\n * various input types, including text, password (with reveal functionality),\n * and numbers (with formatting and step controls). It also provides error\n * message display and icon support.\n */\n@Component({\n selector: 'app-input',\n imports: [\n ErrorMessagePipe,\n SvgIconComponent,\n PasswordDirective,\n NumberFormatDirective,\n NgbDropdownModule,\n ],\n templateUrl: './input.component.html', \n styleUrl: './input.component.scss',\n encapsulation: ViewEncapsulation.ShadowDom\n})\nexport class InputComponent implements ControlValueAccessor {\n /**\n * Defines the unique identifier for the input element.\n * This ID is crucial for accessibility, linking the `<label>` to the\n * native `<input>` via the `for` attribute.\n * It is provided by the parent component as an Angular `input()` signal.\n */\n id = input<string>('');\n\n /**\n * Configuration object for the input's behavior and appearance.\n * This `input()` signal accepts an `InputConfig` object to customize\n * properties like the input type (`text`, `password`, `number`),\n * placeholder/label text (`name`), validation (`required`), and other\n * special behaviors.\n */\n config = input<InputConfig>({});\n\n /**\n * Internal signal to track the disabled state of the input.\n * This state is managed by the `ControlValueAccessor`'s `setDisabledState`\n * method, which is called by Angular's Forms API when the associated\n * form control's status changes. Defaults to `false`.\n */\n disabled = signal<boolean>(false);\n\n /**\n * Holds the internal, unmasked, and unformatted value of the input.\n * This signal represents the component's \"source of truth\" for its value.\n * It is updated by user input (via `onInput` or `onRealValueChange`) and\n * programmatically by the `ControlValueAccessor`'s `writeValue` method.\n * The value from this signal is what is propagated back to the parent `FormControl`.\n */\n value = signal<string>('');\n\n /**\n * Tracks the visibility state for inputs of `type='password'`.\n * When `true`, the password's characters are shown; when `false`, they are\n * masked. This is toggled by the `toggleVisibility` method.\n * Defaults to `false`.\n */\n visible = signal<boolean>(false);\n\n /**\n * A computed signal that dynamically calculates the step value for number inputs.\n * The step value changes based on the magnitude of the current `value()`.\n * This allows for more intuitive incrementing and decrementing (e.g., smaller\n * steps for smaller numbers, larger steps for larger numbers). It derives its\n * value from the `getStepValue` method and automatically updates when the\n * input's `value` signal changes.\n */\n step = computed(() => this.getStepValue());\n\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n @ViewChild(PasswordDirective) PasswordDirective!: PasswordDirective;\n @ViewChild(NumberFormatDirective)\n NumberFormatDirective!: NumberFormatDirective;\n\n @ViewChild('dropdown') dropdown!: NgbPopover;\n\n /**\n * Constructor for the InputComponent.\n * It injects NgControl to integrate with Angular's forms API.\n * If NgControl is present, it sets this component as the value accessor\n * for the form control.\n * @param ngControl - Optional NgControl instance for form integration.\n */\n constructor(@Optional() @Self() public ngControl: NgControl | null) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles the native 'input' event from the HTMLInputElement.\n * Updates the component's internal value and notifies Angular forms\n * about the change.\n * For 'password' type (when not visible) and 'number' type, it relies\n * on associated directives (PasswordDirective, NumberFormatDirective)\n * to get the real value, as the displayed value might be\n * masked or formatted.\n * @param event - The input event object.\n */\n onInput(event: Event): void {\n const inputElement = event.target as HTMLInputElement;\n\n // Handle inputs normally for all inputs other than password and number\n if (this.config().type === 'password' || this.config().type === 'number') {\n return;\n }\n this.value.set(inputElement.value);\n\n if (this.config().search) {\n return;\n }\n\n this.onChange(this.value());\n }\n\n /**\n * Listens for a custom 'realValueChange' event.\n * This event is expected to be emitted by child directives (PasswordDirective, NumberFormatDirective)\n * when their internal \"real\" value changes, allowing the parent input component\n * to stay in sync.\n * @param event - A CustomEvent containing the new real value in `event.detail`.\n */\n @HostListener('realValueChange', ['$event'])\n onRealValueChange(event: CustomEvent): void {\n this.value.set(event.detail);\n this.onChange(event.detail);\n }\n\n /**\n * Increments the value of a number input by the current step.\n * If the current value is not a valid number, it starts from the `min` input.\n * After updating, it notifies forms, updates the view, and focuses the input.\n * @param event - The MouseEvent that triggered the increment.\n */\n increment(event: MouseEvent): void {\n this.value.update((v) =>\n String((parseFloat(v) ? parseFloat(v) : 0) + this.step())\n );\n this.onChange(this.value());\n this.setValue(); // Ensure the view (e.g., formatted number) is updated\n this.focus(event);\n }\n\n /**\n * Decrements the value of a number input by the current step.\n * If the current value is not a valid number, it starts from the `min` input.\n * The value will not go below the minimum value.\n * After updating, it notifies forms, updates the view, and focuses the input.\n * @param event - The MouseEvent that triggered the decrement.\n */\n decrement(event: MouseEvent): void {\n this.value.update((v) => {\n const currentValue = parseFloat(v) ? parseFloat(v) : 0;\n const nextValue = currentValue - this.step();\n return String(nextValue <= 0 ? 0 : nextValue);\n });\n this.onChange(this.value());\n this.setValue(); // Ensure the view (e.g., formatted number) is updated\n this.focus(event);\n }\n\n /**\n * Calculates the step value for number inputs based on the current value.\n * The step dynamically adjusts:\n * - 1000 if value < 20000\n * - 5000 if value < 50000\n * - 10000 if value < 100000\n * - 20000 otherwise\n * Uses `min()` as a fallback if the current value is not a valid number.\n * @returns The calculated step value.\n */\n getStepValue(): number {\n const numericValue = parseFloat(this.value() || '0');\n const value = numericValue || 0;\n\n if (value < 20000) return 1000;\n else if (value < 50000) return 5000;\n else if (value < 100000) return 10000;\n else return 20000;\n }\n\n /**\n * Toggles the visibility of the password input.\n * Toggles the `visible` state and updates the input's displayed value.\n * @param event - The MouseEvent that triggered the toggle.\n */\n toggleVisibility(event: MouseEvent): void {\n if (this.config().type !== 'password') {\n return;\n }\n\n this.focus(event); // Ensure input remains focused after toggle\n this.visible.update((v) => !v);\n setTimeout(() => this.setValue(), 0);\n }\n\n /**\n * Sets the value in the actual HTML input element or updates the\n * \"real\" value in the associated directive.\n * - For 'password' type: If not visible, it updates the PasswordDirective's real value.\n * If visible, it falls through to the default behavior.\n * - For 'number' type: It updates the NumberFormatDirective's real value.\n * - For other types (or visible password): It sets the `value` property of the native input element.\n */\n setValue(): void {\n // Ensure inputRef is available\n if (!this.inputRef || !this.inputRef.nativeElement) {\n return;\n }\n\n switch (this.config().type) {\n case 'password':\n if (this.PasswordDirective) {\n // When password is not visible, the directive handles the masking.\n // We set the real value on the directive.\n this.PasswordDirective.setRealValue(this.value());\n } else {\n // When password is visible, or no directive, set directly.\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n case 'number':\n if (this.NumberFormatDirective) {\n // NumberFormatDirective handles formatting, so we set the real value on it.\n this.NumberFormatDirective.setRealValue(this.value());\n } else {\n // If no directive, set directly.\n this.inputRef.nativeElement.value = this.value();\n }\n break;\n default:\n // For text, email, etc., set the value directly on the input element.\n this.inputRef.nativeElement.value = this.value();\n break;\n }\n }\n\n /**\n * Focuses the input element.\n * Prevents the default action of the mouse event to avoid unintended behaviors\n * like double focus or focus loss.\n * @param event - The MouseEvent that initiated the focus action.\n */\n focus(event: MouseEvent): void {\n event.preventDefault();\n if (this.inputRef && this.inputRef.nativeElement) {\n this.inputRef.nativeElement.focus();\n }\n }\n\n // ControlValueAccessor methods\n onChange = (_: any) => {};\n onTouched = () => {};\n\n /**\n * Writes a new value to the element. (ControlValueAccessor)\n * This method is called by the Forms API to update the view when\n * the form control's value changes programmatically.\n * Uses `setTimeout` to ensure that `setValue` is called after the\n * view (and potentially child directives) has been initialized,\n * especially relevant if `writeValue` is called early in the component lifecycle.\n * @param value - The new value to write.\n */\n writeValue(value: string): void {\n this.value.set(value || '');\n // Use setTimeout to ensure directives like PasswordDirective or NumberFormatDirective\n // are initialized and ready to receive the value, especially during component init.\n setTimeout(() => {\n this.setValue();\n });\n }\n\n /**\n * Registers a callback function that should be called when the\n * control's value changes in the UI. (ControlValueAccessor)\n * @param fn - The callback function to register.\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * Registers a callback function that should be called when the\n * control receives a blur event. (ControlValueAccessor)\n * @param fn - The callback function to register.\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * This function is called by the Forms API when the control's disabled\n * state changes. (ControlValueAccessor)\n * @param isDisabled - True if the control should be disabled, false otherwise.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * Called when the input element loses focus (blur event).\n * Triggers the `onTouched` callback to notify Angular Forms that the\n * input has been interacted with.\n */\n onBlur(): void {\n this.onTouched();\n }\n\n /**\n * Resets the input field's value to an empty string.\n * Notifies Angular Forms of the change and updates the view.\n */\n reset(): void {\n this.value.set('');\n this.onChange(''); // Notify form control of the change\n this.setValue(); // Update the actual input element\n }\n\n /**\n * Represents the base list of options available for the dropdown.\n * This is an input signal, meaning its value can be set from a parent component.\n * @type {Signal<string[]>}\n */\n dropdownOptions = input<string[]>([]);\n\n /**\n * A computed signal that provides the current list of options to display in the dropdown.\n *\n * If `search` is `false`, it returns the full `dropdownOptions`.\n * If `search` is `true`, it filters `dropdownOptions` based on the `value` signal,\n * performing a case-insensitive partial text match.\n *\n * @type {Signal<string[]>}\n */\n options = computed(() => {\n if (!this.config().search) {\n return this.dropdownOptions();\n }\n\n const searchValue = this.value();\n const filteredOptions = this.dropdownOptions().filter((option) =>\n option.toLowerCase().includes(searchValue.toLowerCase())\n );\n if (filteredOptions.length > 0) {\n return filteredOptions;\n }\n\n return [];\n });\n\n /**\n * Formats an option for the dropdown by highlighting the search value if it exists in the option.\n * @param option - The option to format.\n * @returns The formatted option.\n */\n formatOption(option: string): string {\n if (!this.config().search) {\n return option;\n }\n\n const searchValue = this.value();\n\n if (!searchValue || searchValue.trim() === '') {\n return option;\n }\n\n const escapedSearchValue = searchValue.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&'\n );\n\n const regex = new RegExp(escapedSearchValue, 'gi');\n\n if (option.toLowerCase().includes(searchValue.toLowerCase())) {\n return option.replace(regex, '<span class=\"highlight\" >$&</span>');\n }\n\n return option;\n }\n\n /**\n * Handles when an option is selected from the dropdown.\n * @param option - The selected option.\n * @param event - The MouseEvent that initiated the selection action.\n */\n handleOption(option: string, event: MouseEvent) {\n this.focus(event);\n this.value.set(option);\n this.onChange(option);\n this.setValue();\n this.dropdown.close();\n }\n}\n","@let valid = ngControl?.valid && ngControl?.touched && ngControl?.dirty; @let\ninvalid = ngControl?.invalid && ngControl?.touched && ngControl?.dirty; @let\ntype = config().type; @let icon = config().icon; @let alignment =\nconfig().alignment; @let inverse = config().inverse; @let name = config().name;\n@let required = config().required; @let reveal = config().reveal; @let password\n= type === 'password'; @let number = type === 'number'; @let ariaLabel = type\n=== 'password' ? 'Password' : config().name; @let hasDropdown =\nconfig().dropdown;\n\n<div\n class=\"app-input-container\"\n [class]=\"{\n 'has-error': invalid,\n 'has-valid': valid,\n 'has-icon': icon,\n 'has-password': password,\n 'has-visible': password && visible(),\n 'has-number': number,\n 'has-right': alignment === 'right',\n inverse: inverse,\n 'has-dropdown': hasDropdown\n }\"\n ngbDropdown\n [autoClose]=\"'outside'\"\n #dropdown=\"ngbDropdown\"\n>\n @if (config().icon && !password && !number) {\n <div class=\"icon-container\" (mousedown)=\"focus($event)\">\n <svg-icon class=\"icon\" name=\"{{ icon }}\"></svg-icon>\n <div class=\"separator\"></div>\n </div>\n } @if (password){\n <div class=\"icon-container\" (mousedown)=\"toggleVisibility($event)\">\n <div class=\"password-icons\">\n <svg-icon class=\"icon password-key\" name=\"password-key\"></svg-icon>\n <svg-icon class=\"icon password-shown\" name=\"password-shown\"></svg-icon>\n <svg-icon class=\"icon password-hidden\" name=\"password-hidden\"></svg-icon>\n </div>\n <div class=\"separator\"></div>\n </div>\n }\n\n <input\n class=\"app-input\"\n [type]=\"'text'\"\n [name]=\"name\"\n [required]=\"required\"\n [disabled]=\"disabled()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n [id]=\"id()\"\n [attr.aria-label]=\"ariaLabel\"\n placeholder=\"\"\n autocomplete=\"off\"\n #inputRef\n [appPassword]=\"password\"\n [reveal]=\"reveal || 0\"\n [visible]=\"visible()\"\n [appNumberFormat]=\"number\"\n (focus)=\"hasDropdown && dropdown.open()\"\n (click)=\"hasDropdown && dropdown.open()\"\n ngbDropdownAnchor\n />\n <label class=\"app-input-label\">\n {{ name }}\n </label>\n @if(number){\n <div class=\"number-container\">\n <div class=\"number-buttons\">\n <div class=\"separator\"></div>\n <svg-icon\n name=\"plus\"\n class=\"bg-icon plus-icon\"\n (mousedown)=\"increment($event)\"\n ></svg-icon>\n <svg-icon\n name=\"minus\"\n class=\"bg-icon minus-icon\"\n (mousedown)=\"decrement($event)\"\n ></svg-icon>\n </div>\n </div>\n }\n <svg-icon name=\"checkmark\" class=\"app-input-icon positive-icon\"></svg-icon>\n <svg-icon name=\"warning\" class=\"app-input-icon warning-icon\"></svg-icon>\n <div class=\"app-input-error\">\n @if (invalid) { @for (error of ngControl?.errors | errorMessage ; track\n $index) {\n {{ error }}\n } }\n </div>\n <button\n type=\"button\"\n class=\"app-input-icon cancel-icon bg-icon\"\n (click)=\"reset()\"\n [tabIndex]=\"-1\"\n >\n <svg-icon name=\"cancel\"></svg-icon>\n </button>\n @if(hasDropdown) {\n <div class=\"dropdown-menu\" ngbDropdownMenu>\n @if (!options().length) {\n <p class=\"dropdown-item no-results\">No results</p>\n } @for(option of options(); track $index ){\n <button\n class=\"dropdown-item\"\n (click)=\"handleOption(option, $event)\"\n [class]=\"{\n 'selected': value() === option,\n }\"\n >\n <p [innerHTML]=\"formatOption(option)\"></p>\n <svg-icon name=\"checkmark\" class=\"dropdown-item-icon\"></svg-icon>\n </button>\n }\n </div>\n <div class=\"icon-container\">\n <svg-icon name=\"arrow-down\" class=\"dropdown-icon icon\"></svg-icon>\n </div>\n }\n</div>\n","// src/app/bytes-to-human-readable.pipe.ts\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'bytesToHumanReadable',\n})\nexport class BytesToHumanReadablePipe implements PipeTransform {\n transform(bytes: number | null | undefined, precision: number = 2): string {\n if (bytes === null || bytes === undefined || isNaN(bytes)) {\n return '';\n }\n\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n const units = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n\n const unitIndex = Math.min(i, units.length - 1);\n\n const value = bytes / Math.pow(1024, unitIndex);\n\n const formattedValue = parseFloat(value.toFixed(precision));\n\n return `${formattedValue} ${units[unitIndex]}`;\n }\n}","import { Component, ElementRef, input, output, signal, ViewChild } from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { AppFile } from '../../models/appFile.model';\nimport { BytesToHumanReadablePipe } from '../../pipes/bytes-to-human-readable.pipe';\n/**\n * This component displays a preview of a document, including its name, size,\n * and provides actions to delete, download, and tag the document.\n */\n@Component({\n selector: 'app-document-preview',\n imports: [SvgIconComponent, BytesToHumanReadablePipe],\n templateUrl: './document-preview.component.html',\n styleUrl: './document-preview.component.scss',\n})\nexport class DocumentPreviewComponent {\n\n showDeleteModal = signal<boolean>(false);\n /**\n * The application file to be displayed in the preview. This is a required input.\n * @type {InputSignal<AppFile>}\n */\n file = input.required<AppFile>();\n /**\n * An output event that emits the file name when the delete action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDelete = output<string>();\n\n /**\n * An output event that emits the file name when the download action is triggered.\n * @type {OutputEmitterRef<string>}\n */\n onDownload = output<string>();\n\n /**\n * Handles the delete action. Emits the `fileName` of the current `file` via the `onDelete` output.\n */\n handleDelete() {\n this.showDeleteModal.set(true);\n }\n\n /**\n * Handles the download action. Emits the `fileName` of the current `file` via the `onDownload` output.\n */\n handleDownload() {\n this.onDownload.emit(this.file().fileName);\n }\n\n /**\n * Handles the tag action. Currently, it logs a message to the console.\n * A \"TODO\" indicates that further logic for tagging needs to be implemented here.\n */\n handleTag() {\n console.log('Tag event');\n // TODO: Add tag logic\n }\n\n cancelDelete() {\n this.showDeleteModal.set(false);\n }\n\n confirmDelete()\n {\n this.onDelete.emit(this.file().fileName);\n this.showDeleteModal.set(false);\n }\n \n}","@let fileType = file().type; @let documentName = file().baseName; @let fileSize\n= file().size; @let pdf = fileType === 'pdf'; @let video = ['avi', 'mp4',\n'mov'].includes(fileType); @let image = ['jpg', 'png', 'jpeg',\n'gif'].includes(fileType); @let pageCount = file().pageCount; @let\nimagePreviewUrl = file().imagePreviewUrl;\n\n<div class=\"document\" [class.noTouch]=\"showDeleteModal()\"> \n <div class=\"document-image-container\">\n <img src=\"{{ imagePreviewUrl }}\" class=\"document-image\" />\n <div class=\"badge-tag-container\">\n <div class=\"badges\">\n <p class=\"tag\">No Tag</p>\n </div>\n <div class=\"badges\">\n <p\n class=\"badge file-type\"\n [class]=\"{\n pdf: pdf,\n video: video,\n image: image\n }\"\n >\n {{ fileType }}\n </p>\n <p class=\"badge\">\n @if(pdf && pageCount) {\n <span>{{ pageCount }} p.</span>\n }\n <span class=\"file-size\"> {{ fileSize | bytesToHumanReadable }}</span>\n </p>\n </div>\n </div>\n </div>\n <p class=\"document-name\">\n {{ documentName }}\n </p>\n <div class=\"document-actions\">\n <div class=\"document-actions-container\">\n <button class=\"document-actions-button\" (click)=\"handleTag()\">\n <svg-icon name=\"label\" class=\"icon\"></svg-icon>\n </button>\n </div>\n <div class=\"document-actions-container\">\n <button class=\"document-actions-button\" (click)=\"handleDownload()\">\n <svg-icon name=\"download\" class=\"icon\"></svg-icon>\n </button>\n <button class=\"document-actions-button\" (click)=\"handleDelete()\">\n <svg-icon name=\"delete\" class=\"icon\"></svg-icon>\n </button>\n </div>\n </div>\n <div class=\"delete-modal\">\n <div class=\"modal-buttons\">\n <button class=\"delete-button\" (click)=\"confirmDelete()\">Delete</button>\n <button class=\"cancel-button\" (click)=\"cancelDelete()\">Cancel</button>\n </div>\n </div>\n</div>\n\n\n","import { Injectable } from '@angular/core';\nimport * as pdfjsLib from 'pdfjs-dist';\nimport { FileExtension } from '../models/appFile.model';\n\npdfjsLib.GlobalWorkerOptions.workerSrc = '/pdfjs/pdf.worker.min.mjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentService {\n /**\n * Generates a data URL thumbnail for a given file.\n * Handles PDFs, videos, and images.\n * @param file The file to generate a thumbnail for.\n * @returns A promise that resolves to a data URL string for the thumbnail.\n */\n async generateThumbnail(file: File): Promise<string> {\n const extension: FileExtension = file.name.split('.').pop()?.toLowerCase() as FileExtension;\n\n switch (extension) {\n case 'pdf':\n try {\n return await this.generatePdfThumbnail(file);\n } catch (error) {\n console.error('Error generating PDF thumbnail:', error);\n return '/assets/exampledoc.png';\n }\n case 'mp4':\n case 'mov':\n case 'avi':\n try {\n return await this.generateVideoThumbnail(file);\n } catch (error) {\n console.error('Error generating video thumbnail:', error);\n return '/assets/truck.png';\n }\n case 'jpg':\n case 'jpeg':\n case 'png':\n case 'gif':\n return URL.createObjectURL(file);\n default:\n return '/assets/exampledoc.png';\n }\n }\n\n private generatePdfThumbnail(file: Blob): Promise<string> {\n const fileReader = new FileReader();\n return new Promise<string>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n const page = await pdf.getPage(1);\n const viewport = page.getViewport({ scale: 1 });\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n const desiredWidth = 280;\n const scale = desiredWidth / viewport.width;\n const scaledViewport = page.getViewport({ scale });\n canvas.height = scaledViewport.height;\n canvas.width = scaledViewport.width;\n\n if (!context) {\n return reject('Could not get canvas context');\n }\n\n await page.render({ canvasContext: context, viewport: scaledViewport })\n .promise;\n resolve(canvas.toDataURL('image/png'));\n } catch (error) {\n reject(error);\n }\n };\n fileReader.onerror = () => reject(fileReader.error);\n fileReader.readAsArrayBuffer(file);\n });\n }\n\n private generateVideoThumbnail(file: Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const video = document.createElement('video');\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n\n video.autoplay = true;\n video.muted = true;\n video.src = URL.createObjectURL(file);\n\n video.onloadeddata = () => {\n video.currentTime = Math.min(0.1, video.duration / 2);\n };\n\n video.onseeked = () => {\n const desiredWidth = 280;\n const scale = desiredWidth / video.videoWidth;\n canvas.width = desiredWidth;\n canvas.height = video.videoHeight * scale;\n\n if (context) {\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\n video.pause();\n URL.revokeObjectURL(video.src);\n resolve(canvas.toDataURL('image/png'));\n } else {\n reject('Could not get canvas context for video thumbnail');\n }\n };\n\n video.onerror = (e) => {\n URL.revokeObjectURL(video.src);\n reject('Error loading video for thumbnail: ' + e);\n };\n });\n }\n\n /**\n * Reads a PDF file and returns the total number of pages.\n *\n * @param file The PDF Blob or File.\n * @returns A promise that resolves to the page count (number).\n * @throws If the file is not a valid PDF or an error occurs during processing.\n */\n async getPdfPageCount(file: Blob): Promise<number> {\n const fileReader = new FileReader();\n\n return new Promise<number>((resolve, reject) => {\n fileReader.onload = async () => {\n const typedArray = new Uint8Array(fileReader.result as ArrayBuffer);\n try {\n const pdf = await pdfjsLib.getDocument(typedArray).promise;\n resolve(pdf.numPages);\n } catch (error) {\n console.error('Error getting PDF page count:', error);\n reject(new Error('Failed to load PDF or get page count.'));\n }\n };\n fileReader.onerror = () => {\n reject(new Error('FileReader error during PDF page count operation.'));\n };\n fileReader.readAsArrayBuffer(file);\n });\n }\n}","import {\n Component,\n ElementRef,\n signal,\n ViewChild,\n inject,\n computed,\n input,\n} from '@angular/core';\nimport { SvgIconComponent } from 'angular-svg-icon';\nimport { DocumentPreviewComponent } from '../document-preview/document-preview.component';\nimport { AppFile, FileExtension } from '../../models/appFile.model';\nimport { DocumentService } from '../../services/document.service';\n\n/**\n * A component that provides a user interface for file uploading via\n * drag-and-drop or a file input dialog. It displays previews of the\n * selected files in a carousel.\n */\n@Component({\n selector: 'app-drop-zone',\n imports: [SvgIconComponent, DocumentPreviewComponent],\n templateUrl: './drop-zone.component.html',\n styleUrl: './drop-zone.component.scss',\n})\nexport class DropZoneComponent {\n /**\n * Injects the DocumentService for file processing tasks like\n * thumbnail generation and PDF page counting.\n * @private\n */\n private documentService = inject(DocumentService);\n\n /**\n * An array of file extensions that should be excluded from the supported list.\n * @defaultValue `[]` (an empty array)\n * @type {FileExtension[]}\n */\n excludedFileTypes = input<FileExtension[]>([]);\n\n /**\n * The base array of all file extensions that are generally allowed.\n * Supported file types will be derived from this list, after excluding\n * any types specified in `excludedFileTypes`.\n *\n * @defaultValue `['avi', 'mov', 'mp4', 'pdf', 'gif', 'png', 'jpg', 'jpeg']`\n * @type {FileExtension[]}\n */\n fileTypes = input<FileExtension[]>([\n 'pdf',\n 'png',\n 'jpg',\n 'jpeg',\n 'gif',\n 'avi',\n 'mov',\n 'mp4',\n ]);\n\n /**\n * A computed signal that derives the list of currently supported file extensions.\n * It filters the base `fileTypes` array, removing any extensions present\n * in the `excludedFileTypes` input.\n */\n supportedFileTypes = computed(() => [\n ...this.fileTypes().filter(\n (type) => !this.excludedFileTypes().includes(type)\n ),\n ]);\n\n /**\n * A signal that holds an array of `AppFile` objects representing the files\n * that have been selected or dropped by the user.\n */\n docs = signal<AppFile[]>([]);\n\n /**\n * A signal that acts as a boolean flag. It is set to `true` when the user\n * attempts to upload a file with an unsupported extension.\n */\n unsupported = signal(false);\n\n /**\n * Handles the 'change' event from the hidden file input. It extracts the\n * selected files and passes them to the `processFiles` method.\n * @param event The `Event` object from the file input element.\n */\n onInput(event: Event) {\n const target = event.target as HTMLInputElement;\n const files = target.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Handles the 'drop' event on the component. It prevents the browser's\n * default file handling, extracts the dropped files, and passes them to\n * the `processFiles` method.\n * @param event The `DragEvent` object containing the dropped files.\n */\n onDrop(event: DragEvent) {\n event.preventDefault();\n const files = event.dataTransfer?.files as FileList;\n this.processFiles(files);\n }\n\n /**\n * Asynchronously processes a list of files. For each file, it validates\n * the extension against `supportedFileTypes`. If valid, it generates a\n * thumbnail, counts pages for PDFs, creates an `AppFile` object, and adds\n * it to the `docs` signal. If any file is unsupported, the `unsupported`\n * flag is set.\n * @param files The `FileList` object to be processed.\n */\n async processFiles(files: FileList) {\n this.unsupported.set(false);\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const fileExtension = file.name.split('.').pop()?.toLowerCase();\n\n if (\n !fileExtension ||\n !this.supportedFileTypes().includes(fileExtension as FileExtension)\n ) {\n this.unsupported.set(true);\n continue;\n }\n\n let pageCount: number | undefined;\n\n if (fileExtension === 'pdf') {\n try {\n pageCount = await this.documentService.getPdfPageCount(file);\n } catch (error) {\n console.error(`Failed to get page count for ${file.name}:`, error);\n }\n }\n\n const imagePreviewUrl = await this.documentService.generateThumbnail(\n file\n );\n\n const filePreview: AppFile = {\n fileName: file.name,\n baseName: file.name.split('.').slice(0, -1).join('.'),\n type: fileExtension as FileExtension,\n size: file.size,\n imagePreviewUrl: imagePreviewUrl,\n file: file,\n pageCount: pageCount,\n };\n\n this.docs.update((docs) => [...docs, filePreview]);\n\n if (this.docs().length > 2) {\n this.carouselIndex.set(this.docs().length - 2);\n }\n }\n }\n\n /**\n * Handles the download action for a specific file.\n * Note: This is a placeholder and currently only logs the file name.\n * @param fileName The name of the file to be downloaded.\n */\n handleDownload(fileName: string) {\n console.log(fileName);\n }\n\n /**\n * A ViewChild reference to the native `<input type='file'>` element.\n * Used to programmatically trigger the file selection dialog.\n */\n @ViewChild('inputRef') inputRef!: ElementRef<HTMLInputElement>;\n\n /**\n * Resets the component's state after an unsupported file type error\n * by setting the `unsupported` signal to `false`.\n */\n cancel() {\n this.unsupported.set(false);\n }\n\n /**\n * Programmatically triggers a click on the hidden file input element,\n * which opens the system's file selection dialog.\n */\n handleClickToAdd() {\n this.inputRef.nativeElement.click();\n }\n\n /**\n * Deletes a file from the preview list. It filters the `docs` array to\n * remove the specified file and adjusts the carousel position.\n * @param fileName The name of the file to be deleted.\n */\n handleDelete(fileName: string) {\n this.carouselLeft();\n\n this.docs.set(this.docs().filter((doc) => doc.fileName !== fileName));\n\n if (this.docs().length === 0) {\n this.unsupported.set(false);\n }\n }\n\n // Carousel logic\n\n /**\n * A signal that stores the current index for the file preview carousel.\n * This determines which part of the carousel is visible.\n */\n carouselIndex = signal(0);\n\n /**\n * A computed signal that calculates the CSS `translateX` value for the\n * carousel container. This creates the sliding effect based on the\n * `carouselIndex`.\n */\n carouselTransform = computed(() => {\n const offset = (148 + 6) * this.carouselIndex() * -1; // 148px width + 6px gap\n return `translateX(${offset}px)`;\n });\n\n /**\n * Navigates the carousel one step to the left by decrementing the\n * `carouselIndex`. The index will not go below 0.\n */\n carouselLeft() {\n this.carouselIndex.update((i) => Math.max(0, i - 1));\n }\n\n /**\n * Navigates the carousel one step to the right by incrementing the\n * `carouselIndex`. The index will not exceed the maximum possible value\n * based on the number of documents.\n */\n carouselRight() {\n const maxIndex = Math.max(0, this.docs().length - 2);\n this.carouselIndex.update((i) => Math.min(maxIndex, i + 1));\n }\n}\n","@let docCount = docs().length;\n\n<div class=\"container\">\n <!-- Carousel -->\n @if(docCount > 0) {\n <div class=\"docs\">\n <div class=\"doc-container\" [style.transform]=\"carouselTransform()\">\n @for (doc of docs(); track $index) {\n <app-document-preview\n class=\"doc\"\n [file]=\"doc\"\n (onDelete)=\"handleDelete($event)\"\n (onDownload)=\"handleDownload($event)\"\n ></app-document-preview>\n }\n </div>\n @if(docCount > 2) {\n <button class=\"carousel-button carousel-left\" (click)=\"carouselLeft()\">\n <svg-icon name=\"arrow-left\" class=\"arrow\"></svg-icon>\n </button>\n <button class=\"carousel-button carousel-right\" (click)=\"carouselRight()\">\n <svg-icon name=\"arrow-right\" class=\"arrow\"></svg-icon>\n </button>\n }\n </div>\n }\n\n <!-- Drop Zone -->\n <div\n class=\"drop-zone-container\"\n (drop)=\"onDrop($event)\"\n (dragover)=\"$event.preventDefault()\"\n [class]=\"{\n 'more-docs': docCount >= 2,\n unsupported: unsupported()\n }\"\n >\n <!-- Drop Zone -->\n <div class=\"drop-zone\" (click)=\"handleClickToAdd()\">\n <svg-icon name=\"drop-zone\" class=\"illustration\"></svg-icon>\n <div class=\"drop-zone-text\">\n <p class=\"heading\">\n DRAG FILES @if (docCount < 1) {\n <span>HERE</span>\n }\n </p>\n <p class=\"subtext\">OR CLICK TO ADD</p>\n </div>\n <input\n type=\"file\"\n aria-hidden=\"true\"\n multiple\n class=\"drop-zone-input\"\n #inputRef\n (input)=\"onInput($event)\"\n />\n </div>\n\n <!-- Drop Zone Error -->\n <div class=\"drop-zone-error\">\n <div class=\"drop-zone-text\">\n <p class=\"heading invalid\">INVALID FILE TYPE</p>\n <p class=\"subtext\">SUPPORTED FORMATS</p>\n </div>\n <div class=\"file-types\">\n @for (type of supportedFileTypes(); track $index) {\n <p\n class=\"badge\"\n [class]=\"{\n pdf: type === 'pdf',\n video: ['avi', 'mp4', 'mov'].includes(type),\n image: ['jpg', 'png', 'jpeg', 'gif'].includes(type)\n }\"\n >\n {{ type }}\n </p>\n }\n </div>\n <button class=\"cancel-button\">\n <svg-icon name=\"cancel\" (click)=\"cancel()\"></svg-icon>\n </button>\n </div>\n </div>\n</div>\n","/*\n * Public API Surface of ca-components\n */\n\nexport * from './app/components/input/input.component';\nexport * from './app/components/drop-zone/drop-zone.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M6.51424 10.3099L1.94948 5.94089C1.82174 5.81836 1.75 5.6523 1.75 5.47916C1.75 5.30603 1.82174 5.13996 1.94948 5.01743L2.59559 4.3987C2.72361 4.27681 2.89681 4.20838 3.07734 4.20838C3.25788 4.20838 3.43108 4.27681 3.5591 4.3987L6.99882 7.67024L10.441 4.39097C10.5688 4.2687 10.7421 4.20001 10.9227 4.20001C11.1034 4.20001 11.2767 4.2687 11.4045 4.39097L12.0506 5.0097C12.1783 5.1321 12.25 5.29803 12.25 5.47104C12.25 5.64405 12.1783 5.80998 12.0506 5.93238L7.47533 10.3099C7.34772 10.4316 7.17492 10.5 6.99479 10.5C6.81465 10.5 6.64185 10.4316 6.51424 10.3099Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M5.2716 9.30606L11.513 2.78497C11.6881 2.60249 11.9253 2.5 12.1726 2.5C12.42 2.5 12.6572 2.60249 12.8323 2.78497L13.7162 3.70798C13.8903 3.89087 13.988 4.1383 13.988 4.3962C13.988 4.65411 13.8903 4.90154 13.7162 5.08443L9.04254 9.99832L13.7272 14.9157C13.9019 15.0983 14 15.3458 14 15.6039C14 15.862 13.9019 16.1095 13.7272 16.2921L12.8433 17.2151C12.6685 17.3975 12.4314 17.5 12.1842 17.5C11.9371 17.5 11.7 17.3975 11.5252 17.2151L5.2716 10.679C5.09766 10.4967 5 10.2499 5 9.99255C5 9.73521 5.09766 9.48836 5.2716 9.30606Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M14.7284 10.6939L8.48697 17.215C8.31192 17.3975 8.07469 17.5 7.82736 17.5C7.58002 17.5 7.34279 17.3975 7.16775 17.215L6.28385 16.292C6.10971 16.1091 6.01196 15.8617 6.01196 15.6038C6.01196 15.3459 6.10971 15.0985 6.28385 14.9156L10.9575 10.0017L6.2728 5.08433C6.09812 4.90174 6 4.6542 6 4.3961C6 4.13801 6.09812 3.89047 6.2728 3.70788L7.1567 2.78487C7.33155 2.60246 7.5686 2.5 7.81575 2.5C8.06291 2.5 8.29996 2.60246 8.47481 2.78487L14.7284 9.32096C14.9023 9.50326 15 9.75011 15 10.0075C15 10.2648 14.9023 10.5116 14.7284 10.6939Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M8.85874 7.00156L11.6443 4.21576C11.8085 4.05152 11.9008 3.82877 11.9008 3.59652C11.9008 3.36426 11.8085 3.14152 11.6443 2.97728L11.0251 2.35803C10.8609 2.19381 10.6382 2.10156 10.4059 2.10156C10.1737 2.10156 9.95097 2.19381 9.78674 2.35803L7.00196 5.14384L4.21559 2.35803C4.05136 2.19381 3.82863 2.10156 3.5964 2.10156C3.36416 2.10156 3.14143 2.19381 2.97721 2.35803L2.35801 2.97728C2.19381 3.14152 2.10156 3.36426 2.10156 3.59652C2.10156 3.82877 2.19381 4.05152 2.35801 4.21576L5.14359 7.00156L2.3588 9.78736C2.1946 9.95161 2.10235 10.1743 2.10235 10.4066C2.10235 10.6389 2.1946 10.8616 2.3588 11.0258L2.978 11.6451C3.14223 11.8093 3.36495 11.9016 3.59719 11.9016C3.82943 11.9016 4.05215 11.8093 4.21638 11.6451L7.00196 8.85929L9.78753 11.6451C9.95176 11.8093 10.1745 11.9016 10.4067 11.9016C10.639 11.9016 10.8617 11.8093 11.0259 11.6451L11.6451 11.0258C11.8093 10.8616 11.9016 10.6389 11.9016 10.4066C11.9016 10.1743 11.8093 9.95161 11.6451 9.78736L8.85874 7.00156Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M4.71899 11.7223L0.830106 7.83345C0.765081 7.76845 0.713499 7.69127 0.678306 7.60633C0.643114 7.52139 0.625 7.43034 0.625 7.3384C0.625 7.24645 0.643114 7.15541 0.678306 7.07047C0.713499 6.98552 0.765081 6.90835 0.830106 6.84334L1.82177 5.85479C1.88678 5.78976 1.96395 5.73818 2.0489 5.70299C2.13384 5.66779 2.22488 5.64968 2.31683 5.64968C2.40877 5.64968 2.49982 5.66779 2.58476 5.70299C2.6697 5.73818 2.74688 5.78976 2.81188 5.85479L5.21366 8.25656L11.1831 2.28323C11.2481 2.21821 11.3253 2.16662 11.4102 2.13143C11.4952 2.09624 11.5862 2.07812 11.6782 2.07812C11.7701 2.07812 11.8611 2.09624 11.9461 2.13143C12.031 2.16662 12.1082 2.21821 12.1732 2.28323L13.1633 3.27334C13.2284 3.33835 13.2799 3.41552 13.3151 3.50047C13.3503 3.58541 13.3684 3.67645 13.3684 3.7684C13.3684 3.86034 13.3503 3.95139 13.3151 4.03633C13.2799 4.12127 13.2284 4.19845 13.1633 4.26345L5.70911 11.7192C5.6441 11.7843 5.56692 11.8358 5.48198 11.871C5.39704 11.9062 5.30599 11.9243 5.21405 11.9243C5.12211 11.9243 5.03106 11.9062 4.94612 11.871C4.86118 11.8358 4.784 11.7843 4.71899 11.7192V11.7223Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M1.89063 2.50005V3.50005C1.89062 3.56639 1.90381 3.63207 1.92944 3.69326C1.95506 3.75445 1.99261 3.80992 2.03989 3.85646C2.08717 3.903 2.14324 3.93966 2.20483 3.96431C2.26641 3.98896 2.33229 4.00111 2.39863 4.00005H15.6006C15.667 4.00111 15.7328 3.98896 15.7944 3.96431C15.856 3.93966 15.9121 3.903 15.9594 3.85646C16.0066 3.80992 16.0442 3.75445 16.0698 3.69326C16.0954 3.63207 16.1086 3.56639 16.1086 3.50005V2.50005C16.1086 2.43371 16.0954 2.36803 16.0698 2.30684C16.0442 2.24565 16.0066 2.19017 15.9594 2.14364C15.9121 2.0971 15.856 2.06044 15.7944 2.03579C15.7328 2.01114 15.667 1.99899 15.6006 2.00005H11.7906L11.4976 1.41605C11.4334 1.2903 11.3356 1.18484 11.215 1.1114C11.0944 1.03795 10.9558 0.999406 10.8146 1.00005H7.19063C7.0495 0.99846 6.91076 1.03651 6.79019 1.10988C6.66963 1.18325 6.57207 1.28898 6.50863 1.41505L6.20862 2.00005H2.39863C2.33229 1.99899 2.26641 2.01114 2.20483 2.03579C2.14324 2.06044 2.08717 2.0971 2.03989 2.14364C1.99261 2.19017 1.95506 2.24565 1.92944 2.30684C1.90381 2.36803 1.89062 2.43371 1.89063 2.50005Z" fill="currentColor"/>
|
|
3
|
+
<path d="M2.88906 4.6791L3.56406 15.6671H3.56506C3.60356 16.0408 3.78216 16.386 4.06491 16.6333C4.34766 16.8806 4.71359 17.0117 5.08906 17.0001H12.9111C13.2867 17.0119 13.6529 16.881 13.9358 16.6337C14.2188 16.3863 14.3976 16.041 14.4361 15.6671L15.1111 4.6791H2.88906Z" fill="currentColor"/>
|
|
4
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M7.73245 1.35156H10.2644C10.3642 1.35143 10.4629 1.37097 10.5551 1.40907C10.6472 1.44717 10.7309 1.50307 10.8014 1.57358C10.8719 1.64408 10.9278 1.72781 10.9659 1.81995C11.004 1.9121 11.0236 2.01085 11.0234 2.11056V6.52656H13.7984C13.9234 6.52672 14.0455 6.5639 14.1493 6.63342C14.2531 6.70294 14.334 6.80167 14.3817 6.91714C14.4295 7.03261 14.4419 7.15963 14.4175 7.28217C14.393 7.4047 14.3328 7.51724 14.2444 7.60556L9.43145 12.4216C9.31661 12.5356 9.16131 12.5997 8.99945 12.5997C8.83758 12.5997 8.68229 12.5356 8.56745 12.4216L3.74945 7.60556C3.6609 7.51706 3.60063 7.40424 3.57629 7.28143C3.55195 7.15862 3.56463 7.03134 3.61273 6.91575C3.66083 6.80016 3.74218 6.70146 3.84646 6.63217C3.95074 6.56288 4.07325 6.52612 4.19845 6.52656H6.97345V2.11056C6.97332 2.01085 6.99286 1.9121 7.03096 1.81995C7.06905 1.72781 7.12495 1.64408 7.19546 1.57358C7.26597 1.50307 7.34969 1.44717 7.44184 1.40907C7.53398 1.37097 7.63274 1.35143 7.73245 1.35156ZM17.0984 12.3516V15.8956C17.0986 15.9953 17.079 16.094 17.0409 16.1862C17.0028 16.2783 16.9469 16.362 16.8764 16.4326C16.8059 16.5031 16.7222 16.559 16.6301 16.5971C16.5379 16.6352 16.4392 16.6547 16.3394 16.6546H1.65745C1.55748 16.6547 1.45848 16.6351 1.36614 16.5968C1.2738 16.5585 1.18994 16.5023 1.11939 16.4315C1.04885 16.3607 0.993009 16.2766 0.95509 16.1841C0.91717 16.0916 0.89792 15.9925 0.898448 15.8926V12.3516C0.898316 12.2519 0.917859 12.1531 0.955955 12.061C0.994052 11.9688 1.04995 11.8851 1.12046 11.8146C1.19097 11.7441 1.27469 11.6882 1.36684 11.6501C1.45898 11.612 1.55774 11.5924 1.65745 11.5926H6.29845L7.84845 13.1426C7.99911 13.2942 8.17828 13.4146 8.37565 13.4967C8.57301 13.5789 8.78467 13.6211 8.99845 13.6211C9.21222 13.6211 9.42388 13.5789 9.62125 13.4967C9.81862 13.4146 9.99779 13.2942 10.1484 13.1426L11.6984 11.5926H16.3404C16.4401 11.5926 16.5387 11.6122 16.6308 11.6504C16.7228 11.6885 16.8064 11.7444 16.8768 11.8149C16.9472 11.8854 17.003 11.9691 17.041 12.0612C17.0791 12.1533 17.0986 12.2519 17.0984 12.3516ZM13.1754 15.1356C13.1754 15.0104 13.1383 14.888 13.0688 14.7839C12.9992 14.6798 12.9004 14.5987 12.7847 14.5507C12.669 14.5028 12.5417 14.4903 12.419 14.5147C12.2962 14.5392 12.1834 14.5994 12.0948 14.688C12.0063 14.7765 11.946 14.8893 11.9216 15.0121C11.8972 15.1349 11.9097 15.2621 11.9576 15.3778C12.0055 15.4935 12.0867 15.5923 12.1908 15.6619C12.2949 15.7314 12.4173 15.7686 12.5424 15.7686C12.7107 15.768 12.8718 15.7008 12.9905 15.5815C13.1092 15.4623 13.1757 15.3008 13.1754 15.1326V15.1356ZM15.2004 15.1356C15.2004 15.0104 15.1633 14.888 15.0938 14.7839C15.0242 14.6798 14.9254 14.5987 14.8097 14.5507C14.694 14.5028 14.5667 14.4903 14.444 14.5147C14.3212 14.5392 14.2084 14.5994 14.1198 14.688C14.0313 14.7765 13.971 14.8893 13.9466 15.0121C13.9222 15.1349 13.9347 15.2621 13.9826 15.3778C14.0305 15.4935 14.1117 15.5923 14.2158 15.6619C14.3199 15.7314 14.4423 15.7686 14.5674 15.7686C14.7353 15.7675 14.896 15.7 15.0142 15.5808C15.1325 15.4616 15.1987 15.3005 15.1984 15.1326L15.2004 15.1356Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="18" height="14" viewBox="0 0 18 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M16.1985 0.703125H1.79855C1.55604 0.707072 1.32502 0.80714 1.15626 0.981339C0.987498 1.15554 0.894804 1.38962 0.898547 1.63213V12.3791C0.894804 12.6216 0.987498 12.8557 1.15626 13.0299C1.32502 13.2041 1.55604 13.3042 1.79855 13.3081H16.1985C16.4411 13.3042 16.6721 13.2041 16.8408 13.0299C17.0096 12.8557 17.1023 12.6216 17.0985 12.3791V1.63213C17.1023 1.38962 17.0096 1.15554 16.8408 0.981339C16.6721 0.80714 16.4411 0.707072 16.1985 0.703125ZM3.59855 4.04612C3.67701 3.90181 3.80954 3.79453 3.96703 3.74785C4.12453 3.70116 4.29411 3.71888 4.43855 3.79712L4.45955 3.80912C4.50192 3.83446 4.54119 3.86466 4.57655 3.89912L9.00055 7.29913L13.4235 3.89912C13.5405 3.78521 13.6979 3.7223 13.8611 3.72417C14.0244 3.72605 14.1802 3.79256 14.2945 3.90913L14.3135 3.92912C14.4283 4.05616 14.4895 4.22265 14.4842 4.39375C14.479 4.56486 14.4078 4.72732 14.2855 4.84712C14.2514 4.8813 14.2135 4.91149 14.1725 4.93713L11.4785 7.00713L14.1725 9.07713C14.3177 9.16744 14.4223 9.31042 14.4645 9.47614C14.5066 9.64185 14.483 9.81744 14.3985 9.96613C14.3532 10.0502 14.2889 10.1226 14.2108 10.1776C14.1326 10.2326 14.0427 10.2686 13.9483 10.2829C13.8538 10.2972 13.7573 10.2892 13.6664 10.2598C13.5755 10.2303 13.4927 10.1801 13.4245 10.1131L10.4315 7.81313L9.37555 8.62312C9.26826 8.70592 9.13656 8.75082 9.00105 8.75082C8.86553 8.75082 8.73383 8.70592 8.62655 8.62312L7.57055 7.81313L4.57755 10.1131C4.50773 10.1552 4.43029 10.183 4.34968 10.1951C4.26907 10.2072 4.18687 10.2032 4.1078 10.1834C4.02873 10.1636 3.95435 10.1284 3.88892 10.0798C3.8235 10.0312 3.76832 9.97012 3.72655 9.90012L3.71455 9.88012C3.64289 9.75281 3.61523 9.60542 3.63584 9.46079C3.65645 9.31615 3.72418 9.18236 3.82855 9.08012L6.52255 7.01013L3.82855 4.94012C3.68203 4.85079 3.57607 4.7079 3.53313 4.54175C3.49019 4.3756 3.51366 4.19926 3.59855 4.05013V4.04612Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M0.898438 8.87544V2.41744C0.898438 2.01457 1.05847 1.62821 1.34334 1.34334C1.62821 1.05847 2.01457 0.898438 2.41744 0.898438H8.87544C9.27828 0.898488 9.66461 1.05856 9.94944 1.34344L16.6494 8.04344C16.9342 8.3283 17.0942 8.71462 17.0942 9.11744C17.0942 9.52025 16.9342 9.90658 16.6494 10.1914L10.1984 16.6534C9.91358 16.9382 9.52725 17.0982 9.12444 17.0982C8.72162 17.0982 8.3353 16.9382 8.05044 16.6534L1.35044 9.95344C1.20764 9.81251 1.09417 9.64468 1.01659 9.45966C0.939011 9.27463 0.898853 9.07607 0.898438 8.87544V8.87544ZM4.44244 2.92344C4.14201 2.92344 3.84832 3.01253 3.59853 3.17944C3.34873 3.34635 3.15403 3.58358 3.03906 3.86114C2.92409 4.1387 2.89401 4.44412 2.95262 4.73878C3.01124 5.03344 3.15591 5.3041 3.36834 5.51653C3.58078 5.72897 3.85144 5.87364 4.1461 5.93225C4.44075 5.99086 4.74617 5.96078 5.02373 5.84581C5.30129 5.73084 5.53853 5.53615 5.70544 5.28635C5.87235 5.03655 5.96144 4.74287 5.96144 4.44244C5.96144 4.03957 5.8014 3.65321 5.51653 3.36834C5.23167 3.08347 4.8453 2.92344 4.44244 2.92344Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M12.0001 5.5H2.00022C1.73495 5.5 1.48054 5.60538 1.29296 5.79296C1.10538 5.98054 1 6.23494 1 6.50022V7.50045C1 7.76572 1.10538 8.02013 1.29296 8.20771C1.48054 8.39529 1.73495 8.50067 2.00022 8.50067H12.0001C12.2654 8.50067 12.5198 8.39529 12.7074 8.20771C12.895 8.02013 13.0003 7.76572 13.0003 7.50045V6.50022C13.0003 6.23494 12.895 5.98054 12.7074 5.79296C12.5198 5.60538 12.2654 5.5 12.0001 5.5Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M8.6959 14.3086C8.60398 14.3086 8.51325 14.291 8.42833 14.2558C8.3434 14.2207 8.26676 14.1685 8.20176 14.1035C8.13676 14.0385 8.0846 13.9619 8.04942 13.8769C8.01424 13.792 7.99668 13.6993 7.99668 13.6074V12.3476C7.99668 12.2557 8.01424 12.165 8.04942 12.0801C8.0846 11.9951 8.13676 11.9185 8.20176 11.8535C8.26676 11.7885 8.3434 11.7363 8.42833 11.7012C8.51325 11.666 8.60398 11.6484 8.6959 11.6484H9.29551C9.48116 11.6484 9.66033 11.7222 9.79161 11.8535C9.92288 11.9848 9.99668 12.162 9.99668 12.3476V13.6074C9.99668 13.7931 9.92288 13.9722 9.79161 14.1035C9.66033 14.2348 9.48116 14.3086 9.29551 14.3086H8.6959ZM4.99668 13.6582L4.43809 13.459C4.35141 13.4275 4.27168 13.3787 4.20372 13.3164C4.13575 13.2541 4.08045 13.1793 4.04161 13.0957C4.00277 13.0121 3.98092 12.9202 3.97715 12.8281C3.97338 12.736 3.98824 12.6451 4.02012 12.5586L4.44981 11.373C4.48087 11.286 4.52829 11.2051 4.59043 11.1367C4.65258 11.0683 4.72747 11.0138 4.81114 10.9746C4.89481 10.9354 4.98639 10.9122 5.07872 10.9082C5.17104 10.9042 5.26343 10.9194 5.3502 10.9512L5.91465 11.1582C6.00115 11.1898 6.08128 11.2364 6.14903 11.2988C6.21678 11.3612 6.27249 11.4379 6.31114 11.5215C6.34978 11.6051 6.37 11.6951 6.37364 11.7871C6.37727 11.8791 6.3626 11.9702 6.33067 12.0566L5.90098 13.2441C5.85069 13.3792 5.76147 13.4957 5.64317 13.5781C5.52487 13.6605 5.38303 13.7048 5.23887 13.7051C5.15443 13.7049 5.07163 13.6884 4.99278 13.6582H4.99668ZM12.108 13.2344L11.6783 12.0547C11.6464 11.9683 11.6317 11.8752 11.6354 11.7832C11.639 11.6912 11.6592 11.6012 11.6979 11.5176C11.7365 11.434 11.7922 11.3593 11.86 11.2969C11.9277 11.2345 12.0078 11.1859 12.0943 11.1543L12.6549 10.9551C12.7413 10.9231 12.8324 10.9085 12.9244 10.9121C13.0165 10.9157 13.1064 10.9359 13.19 10.9746C13.2737 11.0132 13.3503 11.069 13.4127 11.1367C13.4751 11.2045 13.5236 11.2846 13.5553 11.3711L13.985 12.5566C14.0168 12.6432 14.0317 12.734 14.0279 12.8262C14.0242 12.9183 14.0004 13.0101 13.9615 13.0937C13.9227 13.1774 13.8693 13.2521 13.8014 13.3144C13.7334 13.3768 13.6537 13.4256 13.567 13.457L13.0025 13.6562C12.916 13.6881 12.8232 13.703 12.7311 13.6992C12.6389 13.6954 12.5491 13.6736 12.4654 13.6348C12.3818 13.5959 12.307 13.5406 12.2447 13.4726C12.1824 13.4047 12.1336 13.3249 12.1022 13.2383L12.108 13.2344ZM1.17833 11.5762L0.723247 11.1894C0.652083 11.1313 0.59239 11.0597 0.549419 10.9785C0.506448 10.8973 0.47931 10.8083 0.471294 10.7168C0.463278 10.6253 0.474344 10.5327 0.502544 10.4453C0.530744 10.3579 0.57733 10.2766 0.637309 10.207L1.43614 9.23631C1.55675 9.09544 1.72795 9.00826 1.9127 8.99217C2.09745 8.97609 2.28128 9.03246 2.42442 9.15038L2.88536 9.5371C3.0263 9.65636 3.11534 9.82583 3.13145 10.0098C3.14756 10.1937 3.08936 10.3776 2.97129 10.5195L2.16075 11.4902C2.04028 11.6313 1.86901 11.7202 1.68418 11.7363C1.49935 11.7524 1.3155 11.6943 1.17247 11.5762H1.17833ZM15.8326 11.4765L15.0221 10.5117C14.904 10.3698 14.8478 10.1859 14.8639 10.0019C14.88 9.81802 14.9671 9.64854 15.108 9.52928L15.5689 9.14256C15.7119 9.02415 15.8958 8.96631 16.0807 8.98241C16.2656 8.9985 16.4369 9.08717 16.5572 9.2285L17.358 10.1933C17.4174 10.2638 17.461 10.3457 17.4889 10.4336C17.5167 10.5214 17.5281 10.6133 17.5201 10.7051C17.5121 10.7969 17.4846 10.887 17.442 10.9687C17.3994 11.0504 17.3427 11.1225 17.2721 11.1816L16.817 11.5625C16.6912 11.6698 16.5311 11.7286 16.3658 11.7285C16.2638 11.7283 16.1633 11.7053 16.0709 11.6621C15.9785 11.6189 15.8962 11.5566 15.8307 11.4785L15.8326 11.4765ZM5.18809 9.57616C3.80981 8.89062 2.6347 7.85636 1.77989 6.57616C1.72433 6.49414 1.68596 6.40219 1.66856 6.30467C1.65116 6.20715 1.65457 6.10592 1.67833 6.00975C1.70208 5.91358 1.74642 5.82428 1.80723 5.74608C1.86805 5.66788 1.94448 5.60333 2.03184 5.55663L3.00059 5.03514C3.14881 4.9514 3.32269 4.92595 3.48887 4.96288C3.65506 4.99981 3.80218 5.09573 3.90098 5.23436C4.46307 6.07247 5.22166 6.76111 6.11192 7.23631C7.00217 7.71152 7.99535 7.96033 9.0045 7.96092C10.0136 7.96152 11.0082 7.71243 11.899 7.23827C12.7898 6.76411 13.5508 6.07963 14.1139 5.24217C14.2093 5.10216 14.3532 5.00157 14.5182 4.96288C14.6831 4.92418 14.8568 4.95021 15.0045 5.03319L15.9791 5.55272C16.0661 5.59984 16.1434 5.6657 16.2037 5.74413C16.264 5.82255 16.3055 5.91163 16.3287 6.0078C16.3519 6.10397 16.3545 6.20543 16.3365 6.30272C16.3186 6.40001 16.2811 6.49261 16.2252 6.5742C15.0657 8.3306 13.3069 9.60402 11.276 10.1562C9.24511 10.7085 7.08126 10.5016 5.192 9.5742L5.18809 9.57616Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M17.0984 6.46607C17.0978 7.28515 16.9167 8.09403 16.5678 8.83512C16.219 9.57621 15.711 10.2313 15.0802 10.7537C14.4493 11.2761 13.711 11.653 12.9179 11.8575C12.1247 12.062 11.2963 12.0892 10.4914 11.9371L9.73144 12.7921C9.66017 12.8723 9.5727 12.9365 9.47479 12.9805C9.37688 13.0244 9.27076 13.0471 9.16344 13.0471H7.98544V14.3131C7.98544 14.5144 7.90547 14.7074 7.76313 14.8498C7.62079 14.9921 7.42774 15.0721 7.22644 15.0721H5.96144V16.3381C5.96144 16.4381 5.94167 16.5371 5.90328 16.6294C5.86489 16.7218 5.80862 16.8056 5.73772 16.8762C5.66682 16.9467 5.58267 17.0025 5.49012 17.0404C5.39757 17.0784 5.29845 17.0976 5.19844 17.0971H1.65744C1.45614 17.0971 1.26308 17.0171 1.12074 16.8748C0.978403 16.7324 0.898438 16.5394 0.898438 16.3381V13.8681C0.898385 13.6667 0.978228 13.4736 1.12044 13.3311L6.24044 8.21107C5.9881 7.44563 5.9049 6.63454 5.9966 5.83381C6.0883 5.03309 6.35271 4.26181 6.77157 3.57323C7.19042 2.88466 7.75375 2.29521 8.42263 1.84559C9.09152 1.39596 9.85003 1.09688 10.6458 0.968992C11.4415 0.841106 12.2556 0.887465 13.0316 1.10487C13.8077 1.32227 14.5274 1.70553 15.1409 2.22819C15.7544 2.75085 16.2472 3.40045 16.5851 4.13212C16.9231 4.86379 17.0982 5.66011 17.0984 6.46607ZM11.5294 4.94707C11.5294 5.2475 11.6185 5.54118 11.7854 5.79098C11.9523 6.04078 12.1896 6.23547 12.4671 6.35044C12.7447 6.46541 13.0501 6.49549 13.3448 6.43688C13.6394 6.37827 13.9101 6.2336 14.1225 6.02116C14.335 5.80872 14.4796 5.53806 14.5382 5.24341C14.5969 4.94875 14.5668 4.64333 14.4518 4.36577C14.3368 4.08821 14.1421 3.85097 13.8923 3.68406C13.6426 3.51715 13.3489 3.42807 13.0484 3.42807C12.6456 3.42807 12.2592 3.5881 11.9743 3.87297C11.6895 4.15784 11.5294 4.5442 11.5294 4.94707Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M0.108748 8.5548C0.924761 6.93311 2.1904 5.56706 3.76201 4.61169C5.33362 3.65633 7.14827 3.1499 9 3.1499C10.8517 3.1499 12.6664 3.65633 14.238 4.61169C15.8096 5.56706 17.0752 6.93311 17.8912 8.5548C17.9627 8.6928 18 8.84528 18 8.99991C18 9.15454 17.9627 9.307 17.8912 9.44501C17.0752 11.0667 15.8096 12.4327 14.238 13.3881C12.6664 14.3435 10.8517 14.8499 9 14.8499C7.14827 14.8499 5.33362 14.3435 3.76201 13.3881C2.1904 12.4327 0.924761 11.0667 0.108748 9.44501C0.0372495 9.307 0 9.15454 0 8.99991C0 8.84528 0.0372495 8.6928 0.108748 8.5548ZM9 13.3919C9.89025 13.3919 10.7605 13.1343 11.5007 12.6518C12.2409 12.1692 12.8179 11.4834 13.1586 10.681C13.4992 9.87855 13.5884 8.99557 13.4147 8.14372C13.241 7.29187 12.8123 6.50941 12.1828 5.89526C11.5533 5.28111 10.7513 4.86287 9.87814 4.69343C9.00499 4.52398 8.09995 4.61095 7.27747 4.94332C6.45498 5.2757 5.75199 5.83856 5.25739 6.56072C4.76279 7.28288 4.4988 8.1319 4.4988 9.00044C4.4988 9.57713 4.61523 10.1482 4.84144 10.681C5.06764 11.2138 5.3992 11.6979 5.81717 12.1056C6.23515 12.5134 6.73136 12.8369 7.27747 13.0576C7.82358 13.2783 8.40889 13.3919 9 13.3919ZM9 6.07284C9.26792 6.07661 9.5341 6.11565 9.79132 6.18887C9.57908 6.46999 9.47717 6.81601 9.50409 7.16417C9.531 7.51232 9.68495 7.83953 9.93801 8.08641C10.1911 8.33329 10.5264 8.48347 10.8833 8.50973C11.2402 8.53599 11.5948 8.43657 11.883 8.22951C12.0469 8.81921 12.0171 9.44422 11.7979 10.0166C11.5786 10.5889 11.1809 11.0797 10.6608 11.42C10.1406 11.7603 9.5242 11.9329 8.89824 11.9136C8.27229 11.8942 7.66831 11.6838 7.17132 11.312C6.67433 10.9402 6.30935 10.4258 6.12773 9.84103C5.94611 9.25629 5.95701 8.63071 6.15889 8.05232C6.36077 7.47394 6.74346 6.97186 7.25312 6.61677C7.76277 6.26168 8.37372 6.07145 9 6.07284Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M12.3328 5.66645H8.33268V1.66635C8.33268 1.43057 8.23902 1.20445 8.0723 1.03773C7.90558 0.871007 7.67946 0.777344 7.44368 0.777344H6.55546C6.31968 0.777344 6.09356 0.871007 5.92684 1.03773C5.76012 1.20445 5.66646 1.43057 5.66646 1.66635V5.66645H1.66634C1.43057 5.66645 1.20445 5.76012 1.03773 5.92684C0.871006 6.09356 0.777344 6.31968 0.777344 6.55546L0.777344 7.44445C0.777344 7.68023 0.871006 7.90635 1.03773 8.07307C1.20445 8.23979 1.43057 8.33346 1.66634 8.33346H5.66646V12.3336C5.66666 12.5692 5.76042 12.7951 5.92711 12.9617C6.09381 13.1282 6.31981 13.2218 6.55546 13.2218H7.44368C7.67946 13.2218 7.90558 13.1281 8.0723 12.9614C8.23902 12.7947 8.33268 12.5686 8.33268 12.3328V8.33268H12.3328C12.5686 8.33268 12.7947 8.23902 12.9614 8.0723C13.1281 7.90558 13.2218 7.67945 13.2218 7.44368V6.55546C13.2218 6.31968 13.1281 6.09356 12.9614 5.92684C12.7947 5.76012 12.5686 5.66645 12.3328 5.66645Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M2.77822 11.676L2.76577 11.6674C2.73725 11.6393 2.7146 11.6059 2.69913 11.5689C2.68367 11.532 2.67571 11.4924 2.67571 11.4524C2.67571 11.4123 2.68367 11.3727 2.69913 11.3358C2.7146 11.2989 2.73725 11.2654 2.76577 11.2373L3.77689 10.2262C3.83132 10.1715 3.90451 10.1395 3.98163 10.1368C4.05875 10.1341 4.13403 10.1607 4.19222 10.2114C4.96708 10.8952 5.96582 11.271 6.99922 11.2676C7.69428 11.2667 8.37859 11.096 8.99263 10.7703C9.60667 10.4446 10.1319 9.97389 10.5225 9.399C10.9132 8.82412 11.1575 8.1625 11.2342 7.47169C11.3109 6.78087 11.2177 6.08178 10.9627 5.43519C10.7077 4.78861 10.2985 4.21411 9.77091 3.76166C9.24327 3.30922 8.61309 2.99252 7.93517 2.83911C7.25725 2.68569 6.55211 2.70022 5.88108 2.88141C5.21006 3.0626 4.59345 3.40497 4.08489 3.87876L2.64366 2.44454C3.53018 1.59737 4.64465 1.02732 5.85041 0.804296C7.05618 0.581277 8.30082 0.714983 9.43171 1.18902C10.5626 1.66305 11.5306 2.45681 12.2169 3.47295C12.9032 4.48909 13.2781 5.68343 13.2956 6.90953C13.3131 8.13562 12.9723 9.34016 12.3152 10.3754C11.658 11.4107 10.7131 12.2317 9.59614 12.7377C8.47922 13.2438 7.23889 13.4129 6.02726 13.2243C4.81563 13.0357 3.68538 12.4976 2.77511 11.676H2.77822ZM1.309 5.98265C1.2291 5.98296 1.14992 5.9675 1.076 5.93716C1.00208 5.90682 0.934878 5.86219 0.878235 5.80584C0.821591 5.74948 0.776622 5.6825 0.745903 5.60874C0.715185 5.53498 0.69932 5.45589 0.699219 5.37598V1.96854C0.69955 1.84793 0.735593 1.73013 0.802801 1.62998C0.87001 1.52984 0.965372 1.45184 1.07686 1.40583C1.18834 1.35982 1.31096 1.34786 1.42923 1.37146C1.54751 1.39506 1.65615 1.45316 1.74144 1.53843L5.14577 4.94276C5.23114 5.02803 5.28926 5.13673 5.31276 5.25508C5.33625 5.37343 5.32406 5.49609 5.27773 5.6075C5.2314 5.7189 5.15302 5.81404 5.05253 5.88083C4.95205 5.94762 4.83399 5.98306 4.71333 5.98265H1.309Z" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M7.00156 0.351562C5.68632 0.351563 4.40061 0.741578 3.30702 1.47229C2.21343 2.203 1.36109 3.24159 0.857765 4.45672C0.354442 5.67185 0.222752 7.00894 0.479344 8.29891C0.735936 9.58889 1.36929 10.7738 2.29931 11.7038C3.22932 12.6338 4.41424 13.2672 5.70421 13.5238C6.99419 13.7804 8.33128 13.6487 9.54641 13.1454C10.7615 12.642 11.8001 11.7897 12.5308 10.6961C13.2615 9.60252 13.6516 8.31681 13.6516 7.00156C13.6514 5.23794 12.9507 3.5466 11.7036 2.29953C10.4565 1.05246 8.76519 0.351769 7.00156 0.351563M7.00156 10.8018C6.81374 10.8018 6.63013 10.7461 6.47396 10.6417C6.31778 10.5374 6.19607 10.3891 6.12419 10.2155C6.05231 10.042 6.0335 9.85106 6.07015 9.66685C6.10679 9.48263 6.19724 9.31342 6.33005 9.1806C6.46286 9.04779 6.63208 8.95734 6.81629 8.9207C7.00051 8.88406 7.19146 8.90286 7.36499 8.97474C7.53852 9.04662 7.68683 9.16834 7.79118 9.32451C7.89553 9.48068 7.95123 9.66429 7.95123 9.85212C7.95123 9.97683 7.92667 10.1003 7.87894 10.2155C7.83122 10.3308 7.76126 10.4354 7.67308 10.5236C7.58489 10.6118 7.48021 10.6818 7.36499 10.7295C7.24977 10.7772 7.12628 10.8018 7.00156 10.8018ZM8.13712 3.72401L7.75679 7.52423C7.74502 7.64147 7.69012 7.75016 7.60274 7.82921C7.51536 7.90825 7.40173 7.95202 7.2839 7.95201H6.71845C6.60076 7.95182 6.48732 7.90797 6.4001 7.82895C6.31288 7.74992 6.25809 7.64134 6.24634 7.52423L5.86601 3.72401C5.85951 3.65802 5.86687 3.59139 5.88761 3.52841C5.90836 3.46543 5.94204 3.40748 5.98648 3.35827C6.03093 3.30906 6.08517 3.26969 6.14573 3.24266C6.20628 3.21564 6.27181 3.20156 6.33812 3.20134H7.66268C7.72899 3.20156 7.79452 3.21564 7.85507 3.24266C7.91563 3.26969 7.96986 3.30906 8.01431 3.35827C8.05876 3.40748 8.09244 3.46543 8.11318 3.52841C8.13393 3.59139 8.14129 3.65802 8.13479 3.72401" fill="currentColor"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<g opacity="0.75">
|
|
3
|
+
<path d="M79.2394 26.2769C79.2394 19.7182 73.1682 14.3984 65.6822 14.3984C58.1962 14.3984 52.125 19.7182 52.125 26.2769C52.125 26.2769 54.3643 29.5724 60.0233 28.7627C65.6822 27.953 72.958 34.4307 72.958 34.4307L79.2394 26.2769Z" fill="#F4BEBE"/>
|
|
4
|
+
<path d="M98.1812 38.8596C98.1827 40.9482 97.739 43.0131 96.8797 44.9162V45.0053C95.7256 47.5101 93.8902 49.6385 91.5838 51.1465C89.2775 52.6545 86.5937 53.4811 83.8399 53.5315H15.6416C11.9967 53.5315 8.50105 52.0813 5.92371 49.4998C3.34637 46.9184 1.89844 43.4172 1.89844 39.7665C1.89844 36.1157 3.34637 32.6145 5.92371 30.0331C8.50105 27.4516 11.9967 26.0014 15.6416 26.0014H16.2156C19.5142 26.1417 22.6522 27.4667 25.0556 29.7342C27.4589 32.0016 28.967 35.0598 29.3039 38.3495L36.9596 23.1836L49.8943 23.386L52.1902 24.7706L57.7441 28.1066L69.3206 35.0782C70.0572 32.7335 71.3291 30.5928 73.0355 28.8261C74.7418 27.0594 76.8357 25.7152 79.151 24.9002C80.5599 24.4226 82.0372 24.1791 83.5246 24.1795C87.3961 24.2299 91.095 25.7927 93.8328 28.5349C96.5707 31.2771 98.131 34.9818 98.1812 38.8596Z" fill="#E66767"/>
|
|
5
|
+
<path d="M60.4327 52.2433C67.7996 52.2433 73.7716 46.9868 73.7716 40.5025C73.7716 34.0183 67.7996 28.7617 60.4327 28.7617C53.0658 28.7617 47.0938 34.0183 47.0938 40.5025C47.0938 46.9868 53.0658 52.2433 60.4327 52.2433Z" fill="#ED9292"/>
|
|
6
|
+
<path d="M37.2671 42.561C49.1033 42.561 58.6984 33.44 58.6984 22.1887C58.6984 10.9374 49.1033 1.81641 37.2671 1.81641C25.431 1.81641 15.8359 10.9374 15.8359 22.1887C15.8359 33.44 25.431 42.561 37.2671 42.561Z" fill="#E66767"/>
|
|
7
|
+
<path d="M15.9677 53.5391C23.781 53.5391 30.115 47.195 30.115 39.3692C30.115 31.5433 23.781 25.1992 15.9677 25.1992C8.1543 25.1992 1.82031 31.5433 1.82031 39.3692C1.82031 47.195 8.1543 53.5391 15.9677 53.5391Z" fill="#DF3C3C"/>
|
|
8
|
+
<path d="M58.5079 22.5859C58.5079 22.5859 58.71 26.7802 57.1094 29.7762C57.1094 29.7762 65.6867 27.9543 70.5372 32.8126C71.4686 30.5846 72.9549 28.633 74.8542 27.1446C74.8542 27.1446 62.8977 30.3754 58.5079 22.5859Z" fill="#C20C0C"/>
|
|
9
|
+
<path d="M83.3878 53.5416C91.5584 53.5416 98.1819 46.9075 98.1819 38.724C98.1819 30.5404 91.5584 23.9062 83.3878 23.9062C75.2173 23.9062 68.5938 30.5404 68.5938 38.724C68.5938 46.9075 75.2173 53.5416 83.3878 53.5416Z" fill="#ED9292"/>
|
|
10
|
+
<path d="M29.3096 43.3369C37.4827 54.3166 46.7472 42.7539 38.7681 39.758C31.2175 36.924 56.5533 41.1588 56.5533 41.1588C56.5533 41.1588 61.5413 48.9401 69.3183 43.1507C69.3183 43.1507 72.7056 50.3409 84.0719 50.3409C90.5393 50.3409 94.4682 48.7215 96.8854 45.0049C95.7313 47.5097 93.8959 49.6381 91.5896 51.1461C89.2833 52.6541 86.5994 53.4807 83.8456 53.5311H15.6473C13.4781 53.5327 11.3393 53.02 9.40595 52.0348C7.47255 51.0497 5.79943 49.6202 4.52344 47.8632C7.4095 49.9279 13.7556 53.8469 21.4275 50.7295C27.6927 48.1952 29.3096 43.3369 29.3096 43.3369Z" fill="#C20C0C"/>
|
|
11
|
+
<path d="M65.3351 39.7098H58.8678C58.4063 39.7098 57.9595 39.8718 57.605 40.1677C57.2505 40.4636 57.0108 40.8746 56.9275 41.3292C56.2404 45.1915 55.5047 61.5153 39.5546 53.5315C42.1173 53.07 44.0333 52.7218 45.1408 48.6166C45.675 46.3831 45.9865 44.1021 46.0705 41.8069C46.0815 41.5746 46.0542 41.3421 45.9896 41.1187C45.8692 40.7096 45.6199 40.3506 45.279 40.0952C44.938 39.8398 44.5237 39.7018 44.0979 39.7017H37.9135C37.5661 39.7032 37.2307 39.5744 36.9733 39.3406C36.716 39.1068 36.5553 38.785 36.523 38.4385C36.5016 38.2338 36.5268 38.0268 36.5969 37.8333C36.6669 37.6397 36.7798 37.4646 36.9272 37.3211L50.6704 23.5561C50.9324 23.295 51.287 23.1484 51.6566 23.1484C52.0263 23.1484 52.3809 23.295 52.6429 23.5561L66.3861 37.3211C66.5849 37.5209 66.719 37.7761 66.7706 38.0533C66.8223 38.3306 66.7891 38.6171 66.6756 38.8752C66.562 39.1333 66.3733 39.3511 66.1341 39.5C65.8949 39.6489 65.6165 39.722 65.3351 39.7098Z" fill="white"/>
|
|
12
|
+
<path d="M65.3352 39.7109H58.8678C58.4064 39.7109 57.9595 39.8729 57.605 40.1688C57.2505 40.4647 57.0108 40.8757 56.9276 41.3303C56.2405 45.1926 55.5048 61.5164 39.5547 53.5326C42.1174 53.0711 44.0333 52.7229 45.1409 48.6177C45.6663 48.8201 54.0335 51.8565 56.1273 41.8809C57.6471 34.5935 68.391 42.8202 63.9366 34.9336L66.3619 37.3627C66.5453 37.5628 66.6667 37.8121 66.7112 38.08C66.7558 38.348 66.7216 38.6232 66.6128 38.872C66.504 39.1209 66.3253 39.3327 66.0984 39.4816C65.8716 39.6305 65.6064 39.7102 65.3352 39.7109Z" fill="#DADADA"/>
|
|
13
|
+
<path d="M45.9981 40.9022C46.0062 40.9776 46.0062 41.0536 45.9981 41.129C45.8777 40.7199 45.6284 40.3609 45.2875 40.1055C44.9465 39.8501 44.5322 39.712 44.1064 39.712H37.9139C37.5665 39.7135 37.2311 39.5847 36.9737 39.3509C36.7164 39.1171 36.5558 38.7953 36.5234 38.4488C37.5862 38.6771 38.681 38.7155 39.7571 38.5622C42.9504 38.3598 45.8607 37.8415 45.9981 40.9022Z" fill="#DADADA"/>
|
|
14
|
+
</g>
|
|
15
|
+
<path d="M69.9341 86.6347C70.07 87.3058 69.9342 88.0035 69.5568 88.5744C69.1793 89.1452 68.591 89.5427 67.9211 89.6793L42.5448 94.8371C42.2135 94.9055 41.8719 94.9076 41.5397 94.8431C41.2076 94.7787 40.8915 94.649 40.6097 94.4615C40.3279 94.2741 40.0859 94.0326 39.8977 93.751C39.7095 93.4695 39.5788 93.1533 39.5132 92.8209L32.2374 57.0236C32.1621 56.6535 32.1605 56.2721 32.2327 55.9014C32.305 55.5306 32.4497 55.1779 32.6586 54.8633C32.8674 54.5488 33.1363 54.2787 33.4497 54.0686C33.7631 53.8585 34.1149 53.7125 34.4848 53.639L59.5459 48.5298C59.8766 48.4612 60.2177 48.4589 60.5493 48.5228C60.881 48.5868 61.1968 48.7158 61.4786 48.9024C61.7603 49.089 62.0024 49.3296 62.191 49.6102C62.3796 49.8909 62.5109 50.2062 62.5774 50.5378L65.8111 66.6835L69.9341 86.6347Z" fill="#F3F3F3"/>
|
|
16
|
+
<path d="M69.9365 86.6307C70.0724 87.3017 69.9367 87.9994 69.5592 88.5703C69.1817 89.1412 68.5934 89.5386 67.9235 89.6752L42.5472 94.833C42.2159 94.9015 41.8743 94.9035 41.5422 94.839C41.21 94.7746 40.8939 94.6449 40.6121 94.4575C40.3303 94.27 40.0883 94.0285 39.9001 93.747C39.7119 93.4654 39.5812 93.1493 39.5156 92.8169C40.0411 93.165 41.1971 93.5618 43.5577 93.2055C47.228 92.6468 68.8613 89.6185 65.8782 66.6875L69.9365 86.6307Z" fill="#EAEAEA"/>
|
|
17
|
+
<path d="M35.9688 62.35C35.9688 62.35 39.2671 61.1274 40.0836 65.1597C40.9001 69.1921 44.9341 68.2771 44.2308 64.9492C43.5275 61.6213 44.0772 59.6942 45.5647 59.3946C47.0522 59.095 47.6989 60.9654 48.3618 64.2043C48.7499 66.1476 49.7119 66.0423 50.4152 65.6455C50.5159 65.5897 50.6284 65.5587 50.7434 65.5548C50.8584 65.551 50.9726 65.5746 51.0768 65.6236C51.1809 65.6726 51.272 65.7456 51.3425 65.8367C51.413 65.9278 51.4609 66.0343 51.4823 66.1476L52.2907 70.1961L37.9736 73.1515L35.9688 62.35Z" fill="#BED0F9"/>
|
|
18
|
+
<path d="M52.3165 70.2352L52.0659 69.0206C52.0094 68.7446 51.882 68.4882 51.6963 68.2766C51.5106 68.065 51.2729 67.9056 51.0069 67.8142C48.5412 66.9316 48.5816 59.3527 47.2477 60.049C45.7603 60.8021 48.614 65.879 46.3585 66.4296C44.103 66.9802 44.0545 63.6199 41.0795 63.3527C40.2414 63.2618 39.3956 63.4284 38.6542 63.8304C37.9793 64.1951 37.4391 64.7672 37.1131 65.4625C36.7871 66.1578 36.6926 66.9396 36.8434 67.6927L37.959 73.1906L52.3165 70.2352Z" fill="#F4BEBE"/>
|
|
19
|
+
<path d="M52.323 70.2377C52.3324 70.284 52.3325 70.3317 52.3233 70.378C52.3142 70.4243 52.2959 70.4684 52.2695 70.5075C52.2432 70.5467 52.2094 70.5803 52.17 70.6062C52.1306 70.6322 52.0864 70.65 52.0401 70.6588L38.0544 73.5089C37.9613 73.5257 37.8654 73.5055 37.7869 73.4526C37.7084 73.3997 37.6536 73.3183 37.634 73.2255L34.7965 59.2176C34.7774 59.1252 34.7955 59.0291 34.8471 58.9501C34.8986 58.8712 34.9792 58.816 35.0714 58.7965C35.1635 58.7773 35.2595 58.7955 35.3383 58.8471C35.4171 58.8988 35.4723 58.9795 35.4917 59.0718L38.1999 72.3834C38.2194 72.4757 38.2745 72.5565 38.3533 72.6081C38.4321 72.6597 38.5281 72.6779 38.6203 72.6587L51.9431 69.9624C52.029 69.9544 52.1149 69.9778 52.1848 70.0285C52.2547 70.0791 52.3038 70.1535 52.323 70.2377Z" fill="#D6D6D6"/>
|
|
20
|
+
<path d="M60.6569 54.3131L51.8234 56.11C51.3902 56.1981 51.1104 56.6212 51.1983 57.0551L51.2 57.063C51.2879 57.4969 51.7104 57.7772 52.1436 57.6891L60.9771 55.8922C61.4103 55.8041 61.6901 55.381 61.6022 54.9471L61.6006 54.9392C61.5126 54.5053 61.0901 54.225 60.6569 54.3131Z" fill="#D6D6D6"/>
|
|
21
|
+
<path d="M61.7585 59.7506L52.9249 61.5475C52.4918 61.6356 52.2119 62.0587 52.2999 62.4926L52.3015 62.5005C52.3895 62.9344 52.812 63.2147 53.2451 63.1266L62.0787 61.3297C62.5119 61.2416 62.7917 60.8185 62.7037 60.3846L62.7021 60.3767C62.6141 59.9428 62.1917 59.6625 61.7585 59.7506Z" fill="#D6D6D6"/>
|
|
22
|
+
<path d="M62.8523 65.1725L54.0187 66.9694C53.5855 67.0575 53.3057 67.4806 53.3937 67.9145L53.3953 67.9224C53.4832 68.3563 53.9057 68.6366 54.3389 68.5485L63.1724 66.7516C63.6056 66.6635 63.8854 66.2403 63.7975 65.8065L63.7959 65.7985C63.7079 65.3647 63.2854 65.0844 62.8523 65.1725Z" fill="#D6D6D6"/>
|
|
23
|
+
<path d="M63.5634 71.594L39.5187 76.485C39.0855 76.5731 38.8057 76.9962 38.8937 77.4301L38.8953 77.438C38.9832 77.8719 39.4057 78.1522 39.8389 78.0641L63.8836 73.1731C64.3167 73.085 64.5966 72.6618 64.5086 72.228L64.507 72.22C64.419 71.7862 63.9966 71.5059 63.5634 71.594Z" fill="#D6D6D6"/>
|
|
24
|
+
<path d="M65.7286 78.2292C65.7575 78.4334 65.7075 78.641 65.5888 78.8095C65.4701 78.978 65.2917 79.0948 65.09 79.1361L64.6696 79.2171L41.0556 84.0187C40.8479 84.0595 40.6324 84.0171 40.4555 83.9005C40.2787 83.7839 40.1545 83.6025 40.1098 83.3952C40.0807 83.1921 40.1295 82.9856 40.2466 82.8173C40.3636 82.6489 40.5401 82.5313 40.7404 82.4883L64.7828 77.63C64.9306 77.5869 65.0877 77.5869 65.2355 77.63C65.3612 77.6805 65.4723 77.7619 65.5584 77.8666C65.6446 77.9713 65.7031 78.096 65.7286 78.2292Z" fill="#D6D6D6"/>
|
|
25
|
+
<path d="M66.9323 84.2207C66.9615 84.4237 66.9126 84.6303 66.7955 84.7986C66.6785 84.9669 66.502 85.0845 66.3017 85.1275L59.511 86.5121L42.2351 90.0749C42.0262 90.1155 41.8097 90.072 41.6326 89.9537C41.4555 89.8355 41.3322 89.6521 41.2892 89.4433C41.2604 89.2391 41.3104 89.0316 41.4291 88.863C41.5477 88.6945 41.7262 88.5777 41.9279 88.5364L61.4997 84.5607L65.9865 83.5972C66.1942 83.5564 66.4097 83.5988 66.5866 83.7154C66.7634 83.832 66.8876 84.0134 66.9323 84.2207Z" fill="#D6D6D6"/>
|
|
26
|
+
<path d="M65.0923 79.1752L64.6719 79.2561C64.8856 78.7263 65.0718 78.1858 65.2297 77.6367C65.3544 77.6865 65.4648 77.7666 65.5509 77.8698C65.637 77.973 65.6961 78.096 65.7228 78.2278C65.7634 78.4371 65.7199 78.6539 65.6019 78.8312C65.4838 79.0086 65.3007 79.1322 65.0923 79.1752Z" fill="#BBBBBB"/>
|
|
27
|
+
<path d="M66.9369 84.2207C66.9661 84.4237 66.9172 84.6303 66.8001 84.7986C66.6831 84.9669 66.5066 85.0845 66.3063 85.1275L59.5156 86.5121C60.2319 85.8781 60.9019 85.1935 61.5205 84.4636L65.9911 83.5972C66.1988 83.5564 66.4143 83.5988 66.5912 83.7154C66.768 83.832 66.8922 84.0134 66.9369 84.2207Z" fill="#BBBBBB"/>
|
|
28
|
+
<path d="M97.8937 63.7343L88.7505 95.7907C88.5096 96.6246 87.95 97.3296 87.1931 97.7526C86.4363 98.1756 85.5434 98.2824 84.7084 98.0498L56.7452 90.0742C55.9129 89.833 55.2096 89.2721 54.7886 88.5137C54.3676 87.7553 54.263 86.8609 54.4977 86.0256L65.9207 45.9692C66.1579 45.133 66.7169 44.4252 67.4748 44.0016C68.2328 43.578 69.1277 43.4732 69.9628 43.7102L89.9389 49.4429C90.3874 49.5727 90.8035 49.7963 91.1596 50.0988C91.4606 50.3532 91.7126 50.6605 91.9033 51.0056L93.5202 53.9125L97.5623 61.1999C97.7485 61.5435 97.8769 61.9156 97.9422 62.3011C98.0287 62.7768 98.0121 63.2656 97.8937 63.7343Z" fill="#EEEEEE"/>
|
|
29
|
+
<path d="M97.8937 63.7369L88.7505 95.7933C88.5096 96.6272 87.95 97.3322 87.1931 97.7552C86.4363 98.1782 85.5434 98.285 84.7084 98.0524L56.7452 90.0768C55.9129 89.8357 55.2096 89.2747 54.7886 88.5163C54.3676 87.7579 54.263 86.8635 54.4977 86.0282C55.0071 86.9675 56.5673 88.7651 61.3127 89.9067C67.966 91.5262 80.7795 95.1699 86.3252 83.34C91.871 71.5101 94.0052 62.4657 89.7772 59.494L93.5444 53.9961L97.5865 61.2835C97.7728 61.6271 97.9012 61.9992 97.9665 62.3847C98.0336 62.8357 98.0089 63.2957 97.8937 63.7369Z" fill="#DADADA"/>
|
|
30
|
+
<path d="M95.3089 57.1048L95.228 57.3963C95.1472 57.6762 94.9589 57.9127 94.7043 58.0539C94.4497 58.195 94.1497 58.2293 93.8699 58.1493L69.9972 51.3153C69.7177 51.2344 69.4816 51.0458 69.3407 50.7908C69.1997 50.5358 69.1655 50.2353 69.2454 49.955L69.3828 49.4692C69.4219 49.33 69.4882 49.1999 69.5778 49.0865C69.6674 48.9731 69.7786 48.8787 69.9049 48.8086C70.0312 48.7386 70.1702 48.6944 70.3137 48.6785C70.4572 48.6626 70.6024 48.6754 70.741 48.7162L94.4196 55.4934L95.3089 57.1048Z" fill="#6C6C6C"/>
|
|
31
|
+
<path d="M93.0652 64.9751C93.0118 65.1602 92.8988 65.3225 92.7439 65.4367C92.5889 65.5509 92.4006 65.6107 92.2083 65.6067C92.1384 65.6139 92.068 65.6139 91.9981 65.6067L67.6889 58.6431C67.4909 58.5807 67.3217 58.4496 67.2114 58.2735C67.1012 58.0973 67.0572 57.8876 67.0874 57.6819C67.1176 57.4763 67.2199 57.2881 67.3761 57.1511C67.5322 57.0142 67.732 56.9374 67.9395 56.9347C68.0145 56.9228 68.0909 56.9228 68.1659 56.9347L91.9738 63.7524L92.475 63.8982C92.5846 63.9298 92.6867 63.9828 92.7757 64.0541C92.8647 64.1254 92.9388 64.2137 92.9936 64.3137C93.0485 64.4138 93.083 64.5238 93.0953 64.6373C93.1076 64.7508 93.0973 64.8656 93.0652 64.9751Z" fill="#919191"/>
|
|
32
|
+
<path d="M91.0702 71.9364C91.0415 72.0544 90.9866 72.1645 90.9096 72.2584C90.8326 72.3523 90.7356 72.4277 90.6256 72.4789C90.4973 72.5423 90.3563 72.5756 90.2133 72.576C90.1407 72.5837 90.0675 72.5837 89.995 72.576L65.6777 65.572C65.4563 65.508 65.2691 65.3588 65.157 65.1571C65.045 64.9553 65.0171 64.7174 65.0795 64.4951C65.1434 64.2733 65.2924 64.0859 65.4938 63.9736C65.6952 63.8614 65.9328 63.8334 66.1547 63.8959L90.4719 70.8595C90.6838 70.9221 90.8634 71.0642 90.9732 71.2562C91.0381 71.3555 91.0805 71.4679 91.0973 71.5855C91.114 71.703 91.1048 71.8228 91.0702 71.9364Z" fill="#919191"/>
|
|
33
|
+
<path d="M89.1266 78.8893C89.0747 79.0759 88.9624 79.24 88.8073 79.3558C88.6522 79.4715 88.4631 79.5325 88.2697 79.5289C88.1972 79.5368 88.124 79.5368 88.0514 79.5289L63.7423 72.5654C63.6255 72.5386 63.5155 72.4879 63.4193 72.4163C63.3232 72.3447 63.2429 72.2539 63.1836 72.1496C63.1243 72.0453 63.0873 71.9298 63.0749 71.8104C63.0626 71.691 63.0751 71.5704 63.1117 71.4561C63.1641 71.271 63.2771 71.109 63.4325 70.9959C63.5879 70.8828 63.7767 70.8254 63.9686 70.8327C64.0409 70.8214 64.1146 70.8214 64.1869 70.8327L88.4961 77.7881L88.682 77.869C88.864 77.9597 89.0083 78.1116 89.0896 78.2982C89.1709 78.4847 89.184 78.694 89.1266 78.8893Z" fill="#919191"/>
|
|
34
|
+
<path d="M87.1202 85.84C87.0668 86.0251 86.9538 86.1874 86.7989 86.3016C86.6439 86.4158 86.4556 86.4755 86.2633 86.4715C86.188 86.4789 86.1122 86.4789 86.0369 86.4715L84.6949 86.091L61.7277 79.4756C61.5285 79.4127 61.3584 79.2803 61.2483 79.1025C61.1382 78.9247 61.0954 78.7132 61.1277 78.5065C61.16 78.2998 61.2652 78.1115 61.4242 77.9758C61.5833 77.8402 61.7856 77.7661 61.9945 77.7672C62.0671 77.7599 62.1402 77.7599 62.2128 77.7672L85.657 84.4878L86.4654 84.7307C86.5837 84.7557 86.6956 84.8052 86.7939 84.8758C86.8921 84.9465 86.9747 85.0369 87.0362 85.1412C87.0978 85.2455 87.1371 85.3614 87.1515 85.4817C87.166 85.602 87.1553 85.724 87.1202 85.84Z" fill="#919191"/>
|
|
35
|
+
<path d="M85.1249 92.786C85.0742 92.9734 84.9622 93.1382 84.8068 93.2542C84.6514 93.3702 84.4617 93.4306 84.2679 93.4257C84.1954 93.4335 84.1222 93.4335 84.0497 93.4257L76.5718 91.2799L59.7405 86.4217C59.5351 86.3644 59.3577 86.2338 59.2418 86.0546C59.1259 85.8754 59.0795 85.6599 59.1113 85.4487C59.1432 85.2376 59.251 85.0454 59.4146 84.9084C59.5781 84.7714 59.7861 84.6991 59.9992 84.7051C60.0717 84.6973 60.1449 84.6973 60.2174 84.7051L79.5387 90.2435L84.5266 91.6686C84.6408 91.7 84.7475 91.7543 84.84 91.8282C84.9326 91.9021 85.0092 91.9942 85.0652 92.0987C85.1211 92.2032 85.1553 92.318 85.1656 92.4362C85.1758 92.5544 85.162 92.6734 85.1249 92.786Z" fill="#919191"/>
|
|
36
|
+
<path d="M85.1234 92.7899C85.0727 92.9773 84.9607 93.1422 84.8054 93.2582C84.65 93.3742 84.4602 93.4345 84.2665 93.4296C84.1939 93.4374 84.1207 93.4374 84.0482 93.4296L76.5703 91.2839C77.5914 91.072 78.5863 90.7489 79.5372 90.3203L84.5252 91.7454C84.7395 91.8096 84.9211 91.9537 85.0324 92.1481C85.1437 92.3425 85.1763 92.5722 85.1234 92.7899Z" fill="#6C6C6C"/>
|
|
37
|
+
<path d="M87.1128 85.8382C87.0594 86.0233 86.9464 86.1856 86.7914 86.2998C86.6365 86.414 86.4482 86.4738 86.2558 86.4698C86.1806 86.4771 86.1047 86.4771 86.0295 86.4698L84.6875 86.0892C85.0486 85.598 85.378 85.0841 85.6738 84.5508L86.4822 84.7937C86.7025 84.8511 86.8917 84.9924 87.0095 85.1875C87.1273 85.3827 87.1644 85.6161 87.1128 85.8382Z" fill="#6C6C6C"/>
|
|
38
|
+
<path d="M89.1299 78.8821C89.078 79.0687 88.9657 79.2328 88.8106 79.3486C88.6555 79.4644 88.4664 79.5253 88.273 79.5218C88.2004 79.5296 88.1272 79.5296 88.0547 79.5218C88.2891 78.9793 88.5074 78.4448 88.7176 77.9023C88.8852 77.9966 89.0168 78.144 89.0914 78.3214C89.1661 78.4988 89.1796 78.6961 89.1299 78.8821Z" fill="#6C6C6C"/>
|
|
39
|
+
<path d="M90.9885 71.2578C91.0489 71.3606 91.0877 71.4747 91.1025 71.5931C91.1172 71.7114 91.1077 71.8316 91.0744 71.9461C91.041 72.0606 90.9847 72.1671 90.9087 72.259C90.8328 72.3509 90.7389 72.4263 90.6328 72.4805C90.746 72.0594 90.8834 71.6546 90.9885 71.2578Z" fill="#6C6C6C"/>
|
|
40
|
+
<path d="M93.0593 64.9754C93.0059 65.1606 92.8929 65.3228 92.738 65.4371C92.583 65.5513 92.3947 65.611 92.2024 65.607C92.1325 65.6142 92.0621 65.6142 91.9922 65.607C92.0374 65.0006 92.0374 64.3916 91.9922 63.7852L92.4934 63.9309C92.7029 63.9999 92.8781 64.1465 92.9833 64.3407C93.0885 64.5348 93.1157 64.7619 93.0593 64.9754Z" fill="#6C6C6C"/>
|
|
41
|
+
<path d="M98.0194 62.3432L89.7007 59.9708C89.3836 59.8803 89.1153 59.6675 88.9546 59.3791C88.794 59.0906 88.7541 58.7502 88.8438 58.4323L91.2044 50.1328C91.5054 50.3872 91.7574 50.6946 91.9482 51.0397L95.1818 56.9182L97.6071 61.2744C97.8013 61.606 97.9406 61.967 98.0194 62.3432Z" fill="#E5E5E5"/>
|
|
42
|
+
<path d="M98.0194 62.343L89.7007 59.9706C89.3836 59.8801 89.1153 59.6673 88.9546 59.3789C88.794 59.0904 88.7541 58.7499 88.8438 58.4321C88.9085 58.7398 89.2238 59.1609 90.2747 59.4524C92.1745 59.9787 97.1059 60.5212 95.2061 56.918L97.6313 61.2742C97.8171 61.6073 97.9482 61.9682 98.0194 62.343Z" fill="#CCCCCC"/>
|
|
43
|
+
</svg>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
{
|
|
2
|
+
"iconImageFiles": [
|
|
3
|
+
{
|
|
4
|
+
"iconName": "cancel",
|
|
5
|
+
"iconPath": "/assets/icons/Cancel.svg"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"iconName": "checkmark",
|
|
9
|
+
"iconPath": "/assets/icons/Checkmark.svg"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"iconName": "warning",
|
|
13
|
+
"iconPath": "/assets/icons/Warning.svg"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"iconName": "email",
|
|
17
|
+
"iconPath": "/assets/icons/Email.svg"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"iconName": "password-key",
|
|
21
|
+
"iconPath": "/assets/icons/PasswordKey.svg"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"iconName": "password-shown",
|
|
25
|
+
"iconPath": "/assets/icons/PasswordShown.svg"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"iconName": "password-hidden",
|
|
29
|
+
"iconPath": "/assets/icons/PasswordHidden.svg"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"iconName": "minus",
|
|
33
|
+
"iconPath": "/assets/icons/Minus.svg"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"iconName": "plus",
|
|
37
|
+
"iconPath": "/assets/icons/Plus.svg"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"iconName": "reset",
|
|
41
|
+
"iconPath": "/assets/icons/Reset.svg"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"iconName": "drop-zone",
|
|
45
|
+
"iconPath": "/assets/icons/drop-zone.svg"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"iconName": "arrow-left",
|
|
49
|
+
"iconPath": "/assets/icons/ArrowLeft.svg"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"iconName": "arrow-right",
|
|
53
|
+
"iconPath": "/assets/icons/ArrowRight.svg"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"iconName": "delete",
|
|
57
|
+
"iconPath": "/assets/icons/Delete.svg"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"iconName": "download",
|
|
61
|
+
"iconPath": "/assets/icons/Download.svg"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"iconName": "label",
|
|
65
|
+
"iconPath": "/assets/icons/Label.svg"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"iconName": "arrow-down",
|
|
69
|
+
"iconPath": "/assets/icons/ArrowDown.svg"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"customIcons": []
|
|
73
|
+
}
|
|
Binary file
|