@cocoar/ui-components 0.1.0-beta.80 → 0.1.0-beta.82
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.
|
@@ -8,7 +8,7 @@ import { HttpClient } from '@angular/common/http';
|
|
|
8
8
|
import { Maskito } from '@maskito/core';
|
|
9
9
|
import { maskitoNumberOptionsGenerator, maskitoDateOptionsGenerator } from '@maskito/kit';
|
|
10
10
|
import { OverlayScrollbars, ClickScrollPlugin } from 'overlayscrollbars';
|
|
11
|
-
import {
|
|
11
|
+
import { createOverlayBuilder } from '@cocoar/ui-overlay';
|
|
12
12
|
import * as i1 from '@angular/common';
|
|
13
13
|
import { CommonModule, NgComponentOutlet } from '@angular/common';
|
|
14
14
|
import Prism from 'prismjs';
|
|
@@ -566,7 +566,8 @@ class CoarTextInputComponent extends CoarControlValueAccessor {
|
|
|
566
566
|
}, ...(ngDevMode ? [{ debugName: "showClearButton" }] : []));
|
|
567
567
|
hasError = computed(() => this.error().length > 0, ...(ngDevMode ? [{ debugName: "hasError" }] : []));
|
|
568
568
|
displayMessage = computed(() => this.error() || this.hint(), ...(ngDevMode ? [{ debugName: "displayMessage" }] : []));
|
|
569
|
-
|
|
569
|
+
autoId = `coar-text-input-${cryptoRandomId$3()}`;
|
|
570
|
+
inputId = computed(() => this.id() || this.autoId, ...(ngDevMode ? [{ debugName: "inputId" }] : []));
|
|
570
571
|
messageId = computed(() => `${this.inputId()}-message`, ...(ngDevMode ? [{ debugName: "messageId" }] : []));
|
|
571
572
|
writeValue(value) {
|
|
572
573
|
this.value.set(value ?? '');
|
|
@@ -598,7 +599,7 @@ class CoarTextInputComponent extends CoarControlValueAccessor {
|
|
|
598
599
|
this.inputRef()?.nativeElement.focus();
|
|
599
600
|
}
|
|
600
601
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoarTextInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
601
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CoarTextInputComponent, isStandalone: true, selector: "coar-text-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", blurred: "blurred", focused: "focused", clear: "clear" }, host: { properties: { "class.coar-text-input--xs": "size() === \"xs\"", "class.coar-text-input--sm": "size() === \"sm\"", "class.coar-text-input--md": "size() === \"md\"", "class.coar-text-input--lg": "size() === \"lg\"", "class.coar-text-input--multiline": "isMultiline()" } }, providers: [coarProvideValueAccessor(() => CoarTextInputComponent)], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-text-input-clear\"\n [class.coar-text-input-clear--multiline]=\"isMultiline()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-text-input-message\" [class.coar-text-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-text-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-text-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-text-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-text-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-text-input--multiline) .coar-text-input-container{height:auto;min-height:var(--coar-component-md-height);align-items:flex-start}:host(.coar-text-input--xs) .coar-text-input-container{height:var(--coar-component-xs-height)}:host(.coar-text-input--sm) .coar-text-input-container{height:var(--coar-component-sm-height)}:host(.coar-text-input--md) .coar-text-input-container{height:var(--coar-component-md-height)}:host(.coar-text-input--lg) .coar-text-input-container{height:var(--coar-component-lg-height)}:host(.coar-text-input--multiline.coar-text-input--xs) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--sm) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--md) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--lg) .coar-text-input-container{height:auto}:host(.coar-text-input--xs) .coar-text-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-text-input--xs) .coar-text-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-text-input--sm) .coar-text-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-text-input--sm) .coar-text-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-text-input--lg) .coar-text-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-text-input--lg) .coar-text-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-text-input-container:hover:not(.coar-text-input-disabled):not(.coar-text-input-readonly):not(.coar-text-input-error):not(.coar-text-input-focused){border-color:var(--coar-border-input-hover)}.coar-text-input-container.coar-text-input-focused:not(.coar-text-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-text-input-container.coar-text-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-text-input-container.coar-text-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-text-input-container.coar-text-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-container.coar-text-input-error.coar-text-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-text-input-container.coar-text-input-error:hover:not(.coar-text-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-field{flex:1;min-width:0;height:100%;padding:0 4px;border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-text-input-textarea{padding:var(--coar-spacing-s);resize:vertical;min-height:60px}.coar-text-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-text-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-text-input-field:read-only{cursor:default}.coar-text-input-prefix{display:flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-suffix{display:flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-suffix:empty{display:none;padding-right:0}.coar-text-input-suffix-actions{display:flex;align-items:center;gap:var(--coar-spacing-xs);padding-right:var(--coar-spacing-s);flex-shrink:0}.coar-text-input-suffix-actions:empty{display:none}.coar-text-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:14px;cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-text-input-focused .coar-text-input-clear,.coar-text-input-container:hover .coar-text-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-text-input--xs) .coar-text-input-clear{font-size:11px}:host(.coar-text-input--sm) .coar-text-input-clear{font-size:12px}:host(.coar-text-input--lg) .coar-text-input-clear{font-size:16px}.coar-text-input-clear--multiline{position:absolute;top:var(--coar-spacing-s);right:var(--coar-spacing-s);margin-right:0}.coar-text-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-text-input-clear:focus{outline:none}.coar-text-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-text-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-text-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: CoarIconComponent, selector: "coar-icon", inputs: ["name", "source", "size", "rotate", "rotateTransition", "spin", "color", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
602
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CoarTextInputComponent, isStandalone: true, selector: "coar-text-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", blurred: "blurred", focused: "focused", clear: "clear" }, host: { properties: { "class.coar-text-input--xs": "size() === \"xs\"", "class.coar-text-input--sm": "size() === \"sm\"", "class.coar-text-input--md": "size() === \"md\"", "class.coar-text-input--lg": "size() === \"lg\"", "class.coar-text-input--multiline": "isMultiline()" } }, providers: [coarProvideValueAccessor(() => CoarTextInputComponent)], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-text-input-clear\"\n [class.coar-text-input-clear--multiline]=\"isMultiline()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-text-input-message\" [class.coar-text-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-text-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-text-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-text-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-text-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-text-input--multiline) .coar-text-input-container{height:auto;min-height:var(--coar-component-md-height);align-items:flex-start}:host(.coar-text-input--xs) .coar-text-input-container{height:var(--coar-component-xs-height)}:host(.coar-text-input--sm) .coar-text-input-container{height:var(--coar-component-sm-height)}:host(.coar-text-input--md) .coar-text-input-container{height:var(--coar-component-md-height)}:host(.coar-text-input--lg) .coar-text-input-container{height:var(--coar-component-lg-height)}:host(.coar-text-input--multiline.coar-text-input--xs) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--sm) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--md) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--lg) .coar-text-input-container{height:auto}:host(.coar-text-input--xs) .coar-text-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-text-input--xs) .coar-text-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-text-input--sm) .coar-text-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-text-input--sm) .coar-text-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-text-input--lg) .coar-text-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-text-input--lg) .coar-text-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-text-input-container:hover:not(.coar-text-input-disabled):not(.coar-text-input-readonly):not(.coar-text-input-error):not(.coar-text-input-focused){border-color:var(--coar-border-input-hover)}.coar-text-input-container.coar-text-input-focused:not(.coar-text-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-text-input-container.coar-text-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-text-input-container.coar-text-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-text-input-container.coar-text-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-container.coar-text-input-error.coar-text-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-text-input-container.coar-text-input-error:hover:not(.coar-text-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-field{flex:1;min-width:0;height:100%;padding:0 calc(var(--coar-spacing-s) + var(--coar-spacing-xs));border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-text-input-textarea{padding:var(--coar-spacing-s);resize:vertical;min-height:calc(var(--coar-component-md-height) + var(--coar-component-md-height))}:host(.coar-text-input--xs) .coar-text-input-textarea{min-height:calc(var(--coar-component-xs-height) + var(--coar-component-xs-height))}:host(.coar-text-input--sm) .coar-text-input-textarea{min-height:calc(var(--coar-component-sm-height) + var(--coar-component-sm-height))}:host(.coar-text-input--lg) .coar-text-input-textarea{min-height:calc(var(--coar-component-lg-height) + var(--coar-component-lg-height))}.coar-text-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-text-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-text-input-field:read-only{cursor:default}.coar-text-input-prefix{display:inline-flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-prefix:empty{padding-left:0;flex-basis:0}.coar-text-input-suffix{display:inline-flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-suffix:empty{padding-right:0;flex-basis:0}.coar-text-input-suffix-actions{display:flex;align-items:center;gap:var(--coar-spacing-xs);padding-right:var(--coar-spacing-s);flex-shrink:0}.coar-text-input-suffix-actions:empty{display:none}.coar-text-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-text-input-focused .coar-text-input-clear,.coar-text-input-container:hover .coar-text-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-text-input--xs) .coar-text-input-clear{font-size:var(--coar-component-xs-font-size)}:host(.coar-text-input--sm) .coar-text-input-clear{font-size:var(--coar-component-sm-font-size)}:host(.coar-text-input--lg) .coar-text-input-clear{font-size:var(--coar-component-lg-font-size)}.coar-text-input-clear--multiline{position:absolute;top:var(--coar-spacing-s);right:var(--coar-spacing-s);margin-right:0}.coar-text-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-text-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-text-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-text-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: CoarIconComponent, selector: "coar-icon", inputs: ["name", "source", "size", "rotate", "rotateTransition", "spin", "color", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
602
603
|
}
|
|
603
604
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoarTextInputComponent, decorators: [{
|
|
604
605
|
type: Component,
|
|
@@ -608,8 +609,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
608
609
|
'[class.coar-text-input--md]': 'size() === "md"',
|
|
609
610
|
'[class.coar-text-input--lg]': 'size() === "lg"',
|
|
610
611
|
'[class.coar-text-input--multiline]': 'isMultiline()',
|
|
611
|
-
}, template: "<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-text-input-clear\"\n [class.coar-text-input-clear--multiline]=\"isMultiline()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-text-input-message\" [class.coar-text-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-text-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-text-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-text-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-text-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-text-input--multiline) .coar-text-input-container{height:auto;min-height:var(--coar-component-md-height);align-items:flex-start}:host(.coar-text-input--xs) .coar-text-input-container{height:var(--coar-component-xs-height)}:host(.coar-text-input--sm) .coar-text-input-container{height:var(--coar-component-sm-height)}:host(.coar-text-input--md) .coar-text-input-container{height:var(--coar-component-md-height)}:host(.coar-text-input--lg) .coar-text-input-container{height:var(--coar-component-lg-height)}:host(.coar-text-input--multiline.coar-text-input--xs) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--sm) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--md) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--lg) .coar-text-input-container{height:auto}:host(.coar-text-input--xs) .coar-text-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-text-input--xs) .coar-text-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-text-input--sm) .coar-text-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-text-input--sm) .coar-text-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-text-input--lg) .coar-text-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-text-input--lg) .coar-text-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-text-input-container:hover:not(.coar-text-input-disabled):not(.coar-text-input-readonly):not(.coar-text-input-error):not(.coar-text-input-focused){border-color:var(--coar-border-input-hover)}.coar-text-input-container.coar-text-input-focused:not(.coar-text-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-text-input-container.coar-text-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-text-input-container.coar-text-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-text-input-container.coar-text-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-container.coar-text-input-error.coar-text-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-text-input-container.coar-text-input-error:hover:not(.coar-text-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-field{flex:1;min-width:0;height:100%;padding:0 4px;border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-text-input-textarea{padding:var(--coar-spacing-s);resize:vertical;min-height:60px}.coar-text-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-text-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-text-input-field:read-only{cursor:default}.coar-text-input-prefix{display:flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-suffix{display:flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-suffix:empty{display:none;padding-right:0}.coar-text-input-suffix-actions{display:flex;align-items:center;gap:var(--coar-spacing-xs);padding-right:var(--coar-spacing-s);flex-shrink:0}.coar-text-input-suffix-actions:empty{display:none}.coar-text-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:14px;cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-text-input-focused .coar-text-input-clear,.coar-text-input-container:hover .coar-text-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-text-input--xs) .coar-text-input-clear{font-size:11px}:host(.coar-text-input--sm) .coar-text-input-clear{font-size:12px}:host(.coar-text-input--lg) .coar-text-input-clear{font-size:16px}.coar-text-input-clear--multiline{position:absolute;top:var(--coar-spacing-s);right:var(--coar-spacing-s);margin-right:0}.coar-text-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-text-input-clear:focus{outline:none}.coar-text-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-text-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-text-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"] }]
|
|
612
|
+
}, template: "<div class=\"coar-text-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-text-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-text-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-text-input-container\"\n [class.coar-text-input-focused]=\"isFocused()\"\n [class.coar-text-input-disabled]=\"isDisabled()\"\n [class.coar-text-input-readonly]=\"readonly()\"\n [class.coar-text-input-error]=\"hasError()\"\n >\n <!-- Prefix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n }\n\n <!-- Input Element (single-line) -->\n @if (!isMultiline()) {\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-text-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n }\n\n <!-- Textarea (multiline) -->\n @if (isMultiline()) {\n <textarea\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [rows]=\"rows()\"\n class=\"coar-text-input-field coar-text-input-textarea\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n }\n\n <!-- Suffix (only for single-line) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n }\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-text-input-clear\"\n [class.coar-text-input-clear--multiline]=\"isMultiline()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n }\n\n <!-- Suffix Actions (always visible, e.g., action buttons) -->\n @if (!isMultiline()) {\n <span class=\"coar-text-input-suffix-actions\">\n <ng-content select=\"[suffixAction]\"></ng-content>\n </span>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-text-input-message\" [class.coar-text-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-text-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-text-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-text-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-text-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-text-input--multiline) .coar-text-input-container{height:auto;min-height:var(--coar-component-md-height);align-items:flex-start}:host(.coar-text-input--xs) .coar-text-input-container{height:var(--coar-component-xs-height)}:host(.coar-text-input--sm) .coar-text-input-container{height:var(--coar-component-sm-height)}:host(.coar-text-input--md) .coar-text-input-container{height:var(--coar-component-md-height)}:host(.coar-text-input--lg) .coar-text-input-container{height:var(--coar-component-lg-height)}:host(.coar-text-input--multiline.coar-text-input--xs) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--sm) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--md) .coar-text-input-container,:host(.coar-text-input--multiline.coar-text-input--lg) .coar-text-input-container{height:auto}:host(.coar-text-input--xs) .coar-text-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-text-input--xs) .coar-text-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-text-input--sm) .coar-text-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-text-input--sm) .coar-text-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-text-input--lg) .coar-text-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-text-input--lg) .coar-text-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-text-input-container:hover:not(.coar-text-input-disabled):not(.coar-text-input-readonly):not(.coar-text-input-error):not(.coar-text-input-focused){border-color:var(--coar-border-input-hover)}.coar-text-input-container.coar-text-input-focused:not(.coar-text-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-text-input-container.coar-text-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-text-input-container.coar-text-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-text-input-container.coar-text-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-container.coar-text-input-error.coar-text-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-text-input-container.coar-text-input-error:hover:not(.coar-text-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-text-input-field{flex:1;min-width:0;height:100%;padding:0 calc(var(--coar-spacing-s) + var(--coar-spacing-xs));border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-text-input-textarea{padding:var(--coar-spacing-s);resize:vertical;min-height:calc(var(--coar-component-md-height) + var(--coar-component-md-height))}:host(.coar-text-input--xs) .coar-text-input-textarea{min-height:calc(var(--coar-component-xs-height) + var(--coar-component-xs-height))}:host(.coar-text-input--sm) .coar-text-input-textarea{min-height:calc(var(--coar-component-sm-height) + var(--coar-component-sm-height))}:host(.coar-text-input--lg) .coar-text-input-textarea{min-height:calc(var(--coar-component-lg-height) + var(--coar-component-lg-height))}.coar-text-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-text-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-text-input-field:read-only{cursor:default}.coar-text-input-prefix{display:inline-flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-prefix:empty{padding-left:0;flex-basis:0}.coar-text-input-suffix{display:inline-flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-text-input-suffix:empty{padding-right:0;flex-basis:0}.coar-text-input-suffix-actions{display:flex;align-items:center;gap:var(--coar-spacing-xs);padding-right:var(--coar-spacing-s);flex-shrink:0}.coar-text-input-suffix-actions:empty{display:none}.coar-text-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-text-input-focused .coar-text-input-clear,.coar-text-input-container:hover .coar-text-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-text-input--xs) .coar-text-input-clear{font-size:var(--coar-component-xs-font-size)}:host(.coar-text-input--sm) .coar-text-input-clear{font-size:var(--coar-component-sm-font-size)}:host(.coar-text-input--lg) .coar-text-input-clear{font-size:var(--coar-component-lg-font-size)}.coar-text-input-clear--multiline{position:absolute;top:var(--coar-spacing-s);right:var(--coar-spacing-s);margin-right:0}.coar-text-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-text-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-text-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-text-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"] }]
|
|
612
613
|
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], maxlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxlength", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], blurred: [{ type: i0.Output, args: ["blurred"] }], focused: [{ type: i0.Output, args: ["focused"] }], clear: [{ type: i0.Output, args: ["clear"] }], inputRef: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }] } });
|
|
614
|
+
function cryptoRandomId$3() {
|
|
615
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
616
|
+
return crypto.randomUUID();
|
|
617
|
+
}
|
|
618
|
+
return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;
|
|
619
|
+
}
|
|
613
620
|
|
|
614
621
|
/**
|
|
615
622
|
* Injection token for the locale service.
|
|
@@ -865,7 +872,8 @@ class CoarNumberInputComponent extends CoarControlValueAccessor {
|
|
|
865
872
|
}, ...(ngDevMode ? [{ debugName: "showClearButton" }] : []));
|
|
866
873
|
hasError = computed(() => this.error().length > 0, ...(ngDevMode ? [{ debugName: "hasError" }] : []));
|
|
867
874
|
displayMessage = computed(() => this.error() || this.hint(), ...(ngDevMode ? [{ debugName: "displayMessage" }] : []));
|
|
868
|
-
|
|
875
|
+
autoId = `coar-number-input-${cryptoRandomId$2()}`;
|
|
876
|
+
inputId = computed(() => this.id() || this.autoId, ...(ngDevMode ? [{ debugName: "inputId" }] : []));
|
|
869
877
|
messageId = computed(() => `${this.inputId()}-message`, ...(ngDevMode ? [{ debugName: "messageId" }] : []));
|
|
870
878
|
iconSize = computed(() => {
|
|
871
879
|
const sizeMap = {
|
|
@@ -1098,7 +1106,7 @@ class CoarNumberInputComponent extends CoarControlValueAccessor {
|
|
|
1098
1106
|
}
|
|
1099
1107
|
}
|
|
1100
1108
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoarNumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1101
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CoarNumberInputComponent, isStandalone: true, selector: "coar-number-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, stepperButtons: { classPropertyName: "stepperButtons", publicName: "stepperButtons", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, numberFormat: { classPropertyName: "numberFormat", publicName: "numberFormat", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", blurred: "blurred", focused: "focused", clear: "clear" }, host: { listeners: { "document:mousemove": "onDragMove($event)", "document:mouseup": "onDragEnd()" }, properties: { "class.coar-number-input--xs": "size() === \"xs\"", "class.coar-number-input--sm": "size() === \"sm\"", "class.coar-number-input--md": "size() === \"md\"", "class.coar-number-input--lg": "size() === \"lg\"" } }, providers: [coarProvideValueAccessor(() => CoarNumberInputComponent)], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-number-input-clear\"\n [class.coar-number-input-clear--hidden]=\"!showClearButton()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-number-input-message\" [class.coar-number-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-number-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-number-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-number-input-label--draggable{cursor:ew-resize}.coar-number-input-label--draggable:hover{color:var(--coar-text-accent-primary)}.coar-number-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-number-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-number-input--xs) .coar-number-input-container{height:var(--coar-component-xs-height)}:host(.coar-number-input--sm) .coar-number-input-container{height:var(--coar-component-sm-height)}:host(.coar-number-input--md) .coar-number-input-container{height:var(--coar-component-md-height)}:host(.coar-number-input--lg) .coar-number-input-container{height:var(--coar-component-lg-height)}:host(.coar-number-input--xs) .coar-number-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-number-input--xs) .coar-number-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-number-input--sm) .coar-number-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-number-input--sm) .coar-number-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-number-input--lg) .coar-number-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-number-input--lg) .coar-number-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-number-input-container:hover:not(.coar-number-input-disabled):not(.coar-number-input-readonly):not(.coar-number-input-error):not(.coar-number-input-focused){border-color:var(--coar-border-input-hover)}.coar-number-input-container.coar-number-input-focused:not(.coar-number-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-number-input-container.coar-number-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-number-input-container.coar-number-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-number-input-container.coar-number-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-error.coar-number-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-number-input-container.coar-number-input-error:hover:not(.coar-number-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-dragging{border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary)}.coar-number-input-field{flex:1;min-width:0;height:100%;padding:0 var(--coar-spacing-s);border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary);text-align:right;font-variant-numeric:tabular-nums}.coar-number-input-field::placeholder{color:var(--coar-text-neutral-tertiary);text-align:right}.coar-number-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-number-input-field:read-only{cursor:default}.coar-number-input-field::-webkit-inner-spin-button,.coar-number-input-field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.coar-number-input-field{-moz-appearance:textfield}.coar-number-input-prefix{display:inline-flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-prefix:empty{padding-left:0;flex-basis:0}.coar-number-input-suffix{display:inline-flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-suffix:empty{padding-right:0;flex-basis:0}.coar-number-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-left:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:14px;cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-number-input-focused .coar-number-input-clear,.coar-number-input-container:hover .coar-number-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-number-input--xs) .coar-number-input-clear{font-size:11px}:host(.coar-number-input--sm) .coar-number-input-clear{font-size:12px}:host(.coar-number-input--lg) .coar-number-input-clear{font-size:16px}.coar-number-input-clear--hidden{opacity:0;pointer-events:none}.coar-number-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-number-input-clear:focus{outline:none}.coar-number-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-number-input-buttons{display:flex;flex-direction:row;height:100%;border-left:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-button{display:flex;align-items:center;justify-content:center;width:28px;height:100%;padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-secondary);cursor:pointer;transition:background-color .15s ease,color .15s ease}:host(.coar-number-input--xs) .coar-number-input-button{width:20px}:host(.coar-number-input--sm) .coar-number-input-button{width:24px}:host(.coar-number-input--lg) .coar-number-input-button{width:32px}.coar-number-input-button:hover:not(:disabled){background:var(--coar-background-neutral-secondary);color:var(--coar-icon-neutral-primary)}.coar-number-input-button:active:not(:disabled){background:var(--coar-background-neutral-tertiary)}.coar-number-input-button:disabled{color:var(--coar-icon-neutral-disabled);cursor:not-allowed}.coar-number-input-button--decrement{border-right:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-number-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: CoarIconComponent, selector: "coar-icon", inputs: ["name", "source", "size", "rotate", "rotateTransition", "spin", "color", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1109
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CoarNumberInputComponent, isStandalone: true, selector: "coar-number-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, decimals: { classPropertyName: "decimals", publicName: "decimals", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, stepperButtons: { classPropertyName: "stepperButtons", publicName: "stepperButtons", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, numberFormat: { classPropertyName: "numberFormat", publicName: "numberFormat", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", blurred: "blurred", focused: "focused", clear: "clear" }, host: { listeners: { "document:mousemove": "onDragMove($event)", "document:mouseup": "onDragEnd()" }, properties: { "class.coar-number-input--xs": "size() === \"xs\"", "class.coar-number-input--sm": "size() === \"sm\"", "class.coar-number-input--md": "size() === \"md\"", "class.coar-number-input--lg": "size() === \"lg\"" } }, providers: [coarProvideValueAccessor(() => CoarNumberInputComponent)], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-number-input-clear\"\n [class.coar-number-input-clear--hidden]=\"!showClearButton()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-number-input-message\" [class.coar-number-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-number-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-number-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-number-input-label--draggable{cursor:ew-resize}.coar-number-input-label--draggable:hover{color:var(--coar-text-accent-primary)}.coar-number-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-number-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-number-input--xs) .coar-number-input-container{height:var(--coar-component-xs-height)}:host(.coar-number-input--sm) .coar-number-input-container{height:var(--coar-component-sm-height)}:host(.coar-number-input--md) .coar-number-input-container{height:var(--coar-component-md-height)}:host(.coar-number-input--lg) .coar-number-input-container{height:var(--coar-component-lg-height)}:host(.coar-number-input--xs) .coar-number-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-number-input--xs) .coar-number-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-number-input--sm) .coar-number-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-number-input--sm) .coar-number-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-number-input--lg) .coar-number-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-number-input--lg) .coar-number-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-number-input-container:hover:not(.coar-number-input-disabled):not(.coar-number-input-readonly):not(.coar-number-input-error):not(.coar-number-input-focused){border-color:var(--coar-border-input-hover)}.coar-number-input-container.coar-number-input-focused:not(.coar-number-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-number-input-container.coar-number-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-number-input-container.coar-number-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-number-input-container.coar-number-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-error.coar-number-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-number-input-container.coar-number-input-error:hover:not(.coar-number-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-dragging{border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary)}.coar-number-input-field{flex:1;min-width:0;height:100%;padding:0 var(--coar-spacing-s);border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary);text-align:right;font-variant-numeric:tabular-nums}.coar-number-input-field::placeholder{color:var(--coar-text-neutral-tertiary);text-align:right}.coar-number-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-number-input-field:read-only{cursor:default}.coar-number-input-field::-webkit-inner-spin-button,.coar-number-input-field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.coar-number-input-field{-moz-appearance:textfield}.coar-number-input-prefix{display:inline-flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-prefix:empty{padding-left:0;flex-basis:0}.coar-number-input-suffix{display:inline-flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-suffix:empty{padding-right:0;flex-basis:0}.coar-number-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-left:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-number-input-focused .coar-number-input-clear,.coar-number-input-container:hover .coar-number-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-number-input--xs) .coar-number-input-clear{font-size:var(--coar-component-xs-font-size)}:host(.coar-number-input--sm) .coar-number-input-clear{font-size:var(--coar-component-sm-font-size)}:host(.coar-number-input--lg) .coar-number-input-clear{font-size:var(--coar-component-lg-font-size)}.coar-number-input-clear--hidden{opacity:0;pointer-events:none}.coar-number-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-number-input-clear:focus{outline:none}.coar-number-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-number-input-buttons{display:flex;flex-direction:row;height:100%;border-left:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-button{display:flex;align-items:center;justify-content:center;width:28px;height:100%;padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-secondary);cursor:pointer;transition:background-color .15s ease,color .15s ease}:host(.coar-number-input--xs) .coar-number-input-button{width:20px}:host(.coar-number-input--sm) .coar-number-input-button{width:24px}:host(.coar-number-input--lg) .coar-number-input-button{width:32px}.coar-number-input-button:hover:not(:disabled){background:var(--coar-background-neutral-secondary);color:var(--coar-icon-neutral-primary)}.coar-number-input-button:active:not(:disabled){background:var(--coar-background-neutral-tertiary)}.coar-number-input-button:disabled{color:var(--coar-icon-neutral-disabled);cursor:not-allowed}.coar-number-input-button--decrement{border-right:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-number-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: CoarIconComponent, selector: "coar-icon", inputs: ["name", "source", "size", "rotate", "rotateTransition", "spin", "color", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1102
1110
|
}
|
|
1103
1111
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoarNumberInputComponent, decorators: [{
|
|
1104
1112
|
type: Component,
|
|
@@ -1107,7 +1115,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1107
1115
|
'[class.coar-number-input--sm]': 'size() === "sm"',
|
|
1108
1116
|
'[class.coar-number-input--md]': 'size() === "md"',
|
|
1109
1117
|
'[class.coar-number-input--lg]': 'size() === "lg"',
|
|
1110
|
-
}, template: "<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-number-input-clear\"\n [class.coar-number-input-clear--hidden]=\"!showClearButton()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-number-input-message\" [class.coar-number-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-number-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-number-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-number-input-label--draggable{cursor:ew-resize}.coar-number-input-label--draggable:hover{color:var(--coar-text-accent-primary)}.coar-number-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-number-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-number-input--xs) .coar-number-input-container{height:var(--coar-component-xs-height)}:host(.coar-number-input--sm) .coar-number-input-container{height:var(--coar-component-sm-height)}:host(.coar-number-input--md) .coar-number-input-container{height:var(--coar-component-md-height)}:host(.coar-number-input--lg) .coar-number-input-container{height:var(--coar-component-lg-height)}:host(.coar-number-input--xs) .coar-number-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-number-input--xs) .coar-number-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-number-input--sm) .coar-number-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-number-input--sm) .coar-number-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-number-input--lg) .coar-number-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-number-input--lg) .coar-number-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-number-input-container:hover:not(.coar-number-input-disabled):not(.coar-number-input-readonly):not(.coar-number-input-error):not(.coar-number-input-focused){border-color:var(--coar-border-input-hover)}.coar-number-input-container.coar-number-input-focused:not(.coar-number-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-number-input-container.coar-number-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-number-input-container.coar-number-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-number-input-container.coar-number-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-error.coar-number-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-number-input-container.coar-number-input-error:hover:not(.coar-number-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-dragging{border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary)}.coar-number-input-field{flex:1;min-width:0;height:100%;padding:0 var(--coar-spacing-s);border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary);text-align:right;font-variant-numeric:tabular-nums}.coar-number-input-field::placeholder{color:var(--coar-text-neutral-tertiary);text-align:right}.coar-number-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-number-input-field:read-only{cursor:default}.coar-number-input-field::-webkit-inner-spin-button,.coar-number-input-field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.coar-number-input-field{-moz-appearance:textfield}.coar-number-input-prefix{display:inline-flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-prefix:empty{padding-left:0;flex-basis:0}.coar-number-input-suffix{display:inline-flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-suffix:empty{padding-right:0;flex-basis:0}.coar-number-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-left:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:14px;cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-number-input-focused .coar-number-input-clear,.coar-number-input-container:hover .coar-number-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-number-input--xs) .coar-number-input-clear{font-size:11px}:host(.coar-number-input--sm) .coar-number-input-clear{font-size:12px}:host(.coar-number-input--lg) .coar-number-input-clear{font-size:16px}.coar-number-input-clear--hidden{opacity:0;pointer-events:none}.coar-number-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-number-input-clear:focus{outline:none}.coar-number-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-number-input-buttons{display:flex;flex-direction:row;height:100%;border-left:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-button{display:flex;align-items:center;justify-content:center;width:28px;height:100%;padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-secondary);cursor:pointer;transition:background-color .15s ease,color .15s ease}:host(.coar-number-input--xs) .coar-number-input-button{width:20px}:host(.coar-number-input--sm) .coar-number-input-button{width:24px}:host(.coar-number-input--lg) .coar-number-input-button{width:32px}.coar-number-input-button:hover:not(:disabled){background:var(--coar-background-neutral-secondary);color:var(--coar-icon-neutral-primary)}.coar-number-input-button:active:not(:disabled){background:var(--coar-background-neutral-tertiary)}.coar-number-input-button:disabled{color:var(--coar-icon-neutral-disabled);cursor:not-allowed}.coar-number-input-button--decrement{border-right:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-number-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"] }]
|
|
1118
|
+
}, template: "<div class=\"coar-number-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label\n [for]=\"inputId()\"\n class=\"coar-number-input-label\"\n [class.coar-number-input-label--draggable]=\"!isDisabled() && !readonly()\"\n (mousedown)=\"onDragStart($event)\"\n >\n {{ label() }}\n @if (required()) {\n <span class=\"coar-number-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-number-input-container\"\n [class.coar-number-input-focused]=\"isFocused()\"\n [class.coar-number-input-disabled]=\"isDisabled()\"\n [class.coar-number-input-readonly]=\"readonly()\"\n [class.coar-number-input-error]=\"hasError()\"\n [class.coar-number-input-dragging]=\"isDragging()\"\n >\n <!-- Clear indicator (left side for number input) - always present to prevent CLS -->\n <coar-icon\n name=\"x\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-number-input-clear\"\n [class.coar-number-input-clear--hidden]=\"!showClearButton()\"\n aria-hidden=\"true\"\n (click)=\"onClear()\"\n />\n\n <!-- Prefix -->\n <span class=\"coar-number-input-prefix\">\n @if (prefix()) {\n {{ prefix() }}\n }\n <ng-content select=\"[prefix]\"></ng-content>\n </span>\n\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n type=\"text\"\n inputmode=\"decimal\"\n [value]=\"displayValue()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value()\"\n class=\"coar-number-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Suffix -->\n <span class=\"coar-number-input-suffix\">\n @if (suffix()) {\n {{ suffix() }}\n }\n <ng-content select=\"[suffix]\"></ng-content>\n </span>\n\n <!-- Increment/Decrement Buttons -->\n @if ((showIncrementButton() || showDecrementButton()) && !isDisabled() && !readonly()) {\n <div class=\"coar-number-input-buttons\">\n @if (showDecrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--decrement\"\n [disabled]=\"!canDecrement()\"\n aria-label=\"Decrease value\"\n (click)=\"decrement()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"minus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n @if (showIncrementButton()) {\n <button\n type=\"button\"\n class=\"coar-number-input-button coar-number-input-button--increment\"\n [disabled]=\"!canIncrement()\"\n aria-label=\"Increase value\"\n (click)=\"increment()\"\n tabindex=\"-1\"\n >\n <coar-icon name=\"plus\" source=\"coar-builtin\" [size]=\"iconSize()\"></coar-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-number-input-message\" [class.coar-number-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-number-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-number-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-number-input-label--draggable{cursor:ew-resize}.coar-number-input-label--draggable:hover{color:var(--coar-text-accent-primary)}.coar-number-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-number-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-number-input--xs) .coar-number-input-container{height:var(--coar-component-xs-height)}:host(.coar-number-input--sm) .coar-number-input-container{height:var(--coar-component-sm-height)}:host(.coar-number-input--md) .coar-number-input-container{height:var(--coar-component-md-height)}:host(.coar-number-input--lg) .coar-number-input-container{height:var(--coar-component-lg-height)}:host(.coar-number-input--xs) .coar-number-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-number-input--xs) .coar-number-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-number-input--sm) .coar-number-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-number-input--sm) .coar-number-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-number-input--lg) .coar-number-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-number-input--lg) .coar-number-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-number-input-container:hover:not(.coar-number-input-disabled):not(.coar-number-input-readonly):not(.coar-number-input-error):not(.coar-number-input-focused){border-color:var(--coar-border-input-hover)}.coar-number-input-container.coar-number-input-focused:not(.coar-number-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-number-input-container.coar-number-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-number-input-container.coar-number-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-number-input-container.coar-number-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-error.coar-number-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-number-input-container.coar-number-input-error:hover:not(.coar-number-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-number-input-container.coar-number-input-dragging{border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary)}.coar-number-input-field{flex:1;min-width:0;height:100%;padding:0 var(--coar-spacing-s);border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary);text-align:right;font-variant-numeric:tabular-nums}.coar-number-input-field::placeholder{color:var(--coar-text-neutral-tertiary);text-align:right}.coar-number-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-number-input-field:read-only{cursor:default}.coar-number-input-field::-webkit-inner-spin-button,.coar-number-input-field::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.coar-number-input-field{-moz-appearance:textfield}.coar-number-input-prefix{display:inline-flex;align-items:center;padding-left:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-prefix:empty{padding-left:0;flex-basis:0}.coar-number-input-suffix{display:inline-flex;align-items:center;padding-right:var(--coar-spacing-s);color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);white-space:nowrap;flex-shrink:0}.coar-number-input-suffix:empty{padding-right:0;flex-basis:0}.coar-number-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-left:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-number-input-focused .coar-number-input-clear,.coar-number-input-container:hover .coar-number-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-number-input--xs) .coar-number-input-clear{font-size:var(--coar-component-xs-font-size)}:host(.coar-number-input--sm) .coar-number-input-clear{font-size:var(--coar-component-sm-font-size)}:host(.coar-number-input--lg) .coar-number-input-clear{font-size:var(--coar-component-lg-font-size)}.coar-number-input-clear--hidden{opacity:0;pointer-events:none}.coar-number-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-number-input-clear:focus{outline:none}.coar-number-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-number-input-buttons{display:flex;flex-direction:row;height:100%;border-left:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-button{display:flex;align-items:center;justify-content:center;width:28px;height:100%;padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-secondary);cursor:pointer;transition:background-color .15s ease,color .15s ease}:host(.coar-number-input--xs) .coar-number-input-button{width:20px}:host(.coar-number-input--sm) .coar-number-input-button{width:24px}:host(.coar-number-input--lg) .coar-number-input-button{width:32px}.coar-number-input-button:hover:not(:disabled){background:var(--coar-background-neutral-secondary);color:var(--coar-icon-neutral-primary)}.coar-number-input-button:active:not(:disabled){background:var(--coar-background-neutral-tertiary)}.coar-number-input-button:disabled{color:var(--coar-icon-neutral-disabled);cursor:not-allowed}.coar-number-input-button--decrement{border-right:1px solid var(--coar-background-neutral-tertiary)}.coar-number-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-number-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"] }]
|
|
1111
1119
|
}], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], decimals: [{ type: i0.Input, args: [{ isSignal: true, alias: "decimals", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], stepperButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepperButtons", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], numberFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberFormat", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], blurred: [{ type: i0.Output, args: ["blurred"] }], focused: [{ type: i0.Output, args: ["focused"] }], clear: [{ type: i0.Output, args: ["clear"] }], inputRef: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }], onDragMove: [{
|
|
1112
1120
|
type: HostListener,
|
|
1113
1121
|
args: ['document:mousemove', ['$event']]
|
|
@@ -1115,6 +1123,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1115
1123
|
type: HostListener,
|
|
1116
1124
|
args: ['document:mouseup']
|
|
1117
1125
|
}] } });
|
|
1126
|
+
function cryptoRandomId$2() {
|
|
1127
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
1128
|
+
return crypto.randomUUID();
|
|
1129
|
+
}
|
|
1130
|
+
return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;
|
|
1131
|
+
}
|
|
1118
1132
|
|
|
1119
1133
|
class CoarPasswordInputComponent extends CoarControlValueAccessor {
|
|
1120
1134
|
/** Label text displayed above the input */
|
|
@@ -1169,7 +1183,8 @@ class CoarPasswordInputComponent extends CoarControlValueAccessor {
|
|
|
1169
1183
|
}, ...(ngDevMode ? [{ debugName: "showClearButton" }] : []));
|
|
1170
1184
|
hasError = computed(() => this.error().length > 0, ...(ngDevMode ? [{ debugName: "hasError" }] : []));
|
|
1171
1185
|
displayMessage = computed(() => this.error() || this.hint(), ...(ngDevMode ? [{ debugName: "displayMessage" }] : []));
|
|
1172
|
-
|
|
1186
|
+
autoId = `coar-password-input-${cryptoRandomId$1()}`;
|
|
1187
|
+
inputId = computed(() => this.id() || this.autoId, ...(ngDevMode ? [{ debugName: "inputId" }] : []));
|
|
1173
1188
|
messageId = computed(() => `${this.inputId()}-message`, ...(ngDevMode ? [{ debugName: "messageId" }] : []));
|
|
1174
1189
|
writeValue(value) {
|
|
1175
1190
|
this.value.set(value ?? '');
|
|
@@ -1205,7 +1220,7 @@ class CoarPasswordInputComponent extends CoarControlValueAccessor {
|
|
|
1205
1220
|
}
|
|
1206
1221
|
}
|
|
1207
1222
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoarPasswordInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
1208
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CoarPasswordInputComponent, isStandalone: true, selector: "coar-password-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", blurred: "blurred", focused: "focused", clear: "clear" }, host: { properties: { "class.coar-password-input--xs": "size() === \"xs\"", "class.coar-password-input--sm": "size() === \"sm\"", "class.coar-password-input--md": "size() === \"md\"", "class.coar-password-input--lg": "size() === \"lg\"" } }, providers: [coarProvideValueAccessor(() => CoarPasswordInputComponent)], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" class=\"coar-password-input-clear\" aria-hidden=\"true\" (click)=\"onClear()\" />\n }\n\n <!-- Toggle Visibility -->\n <coar-icon\n [name]=\"toggleIcon()\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-password-input-toggle\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n aria-hidden=\"true\"\n (click)=\"togglePasswordVisibility()\"\n />\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-password-input-message\" [class.coar-password-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-password-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-password-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-password-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-password-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-password-input--xs) .coar-password-input-container{height:var(--coar-component-xs-height)}:host(.coar-password-input--sm) .coar-password-input-container{height:var(--coar-component-sm-height)}:host(.coar-password-input--md) .coar-password-input-container{height:var(--coar-component-md-height)}:host(.coar-password-input--lg) .coar-password-input-container{height:var(--coar-component-lg-height)}:host(.coar-password-input--xs) .coar-password-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-password-input--xs) .coar-password-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-password-input--sm) .coar-password-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-password-input--sm) .coar-password-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-password-input--lg) .coar-password-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-password-input--lg) .coar-password-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-password-input-container:hover:not(.coar-password-input-disabled):not(.coar-password-input-readonly):not(.coar-password-input-error):not(.coar-password-input-focused){border-color:var(--coar-border-input-hover)}.coar-password-input-container.coar-password-input-focused:not(.coar-password-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-password-input-container.coar-password-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-password-input-container.coar-password-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-password-input-container.coar-password-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-container.coar-password-input-error.coar-password-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-password-input-container.coar-password-input-error:hover:not(.coar-password-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-field{flex:1;min-width:0;height:100%;padding:0 8px;border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-password-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-password-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-password-input-field:read-only{cursor:default}.coar-password-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:14px;cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-password-input-focused .coar-password-input-clear,.coar-password-input-container:hover .coar-password-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-password-input--xs) .coar-password-input-clear{font-size:11px}:host(.coar-password-input--sm) .coar-password-input-clear{font-size:12px}:host(.coar-password-input--lg) .coar-password-input-clear{font-size:16px}.coar-password-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-password-input-clear:focus{outline:none}.coar-password-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-password-input-toggle{display:flex;align-items:center;justify-content:center;padding:4px 8px;border:none;background:transparent;color:var(--coar-icon-neutral-secondary);font-size:14px;cursor:pointer;transition:color .15s ease;flex-shrink:0}:host(.coar-password-input--xs) .coar-password-input-toggle{font-size:11px;padding:2px 6px}:host(.coar-password-input--sm) .coar-password-input-toggle{font-size:12px;padding:3px 7px}:host(.coar-password-input--lg) .coar-password-input-toggle{font-size:16px;padding:5px 9px}.coar-password-input-toggle:hover{color:var(--coar-icon-neutral-primary)}.coar-password-input-toggle:focus{outline:none}.coar-password-input-toggle:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-password-input-disabled .coar-password-input-toggle,.coar-password-input-readonly .coar-password-input-toggle{cursor:not-allowed;opacity:.5;pointer-events:none}.coar-password-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-password-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: CoarIconComponent, selector: "coar-icon", inputs: ["name", "source", "size", "rotate", "rotateTransition", "spin", "color", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1223
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: CoarPasswordInputComponent, isStandalone: true, selector: "coar-password-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, autocomplete: { classPropertyName: "autocomplete", publicName: "autocomplete", isSignal: true, isRequired: false, transformFunction: null }, maxlength: { classPropertyName: "maxlength", publicName: "maxlength", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", valueChange: "valueChange", blurred: "blurred", focused: "focused", clear: "clear" }, host: { properties: { "class.coar-password-input--xs": "size() === \"xs\"", "class.coar-password-input--sm": "size() === \"sm\"", "class.coar-password-input--md": "size() === \"md\"", "class.coar-password-input--lg": "size() === \"lg\"" } }, providers: [coarProvideValueAccessor(() => CoarPasswordInputComponent)], viewQueries: [{ propertyName: "inputRef", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" class=\"coar-password-input-clear\" aria-hidden=\"true\" (click)=\"onClear()\" />\n }\n\n <!-- Toggle Visibility -->\n <coar-icon\n [name]=\"toggleIcon()\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-password-input-toggle\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n aria-hidden=\"true\"\n (click)=\"togglePasswordVisibility()\"\n />\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-password-input-message\" [class.coar-password-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-password-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-password-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-password-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-password-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-password-input--xs) .coar-password-input-container{height:var(--coar-component-xs-height)}:host(.coar-password-input--sm) .coar-password-input-container{height:var(--coar-component-sm-height)}:host(.coar-password-input--md) .coar-password-input-container{height:var(--coar-component-md-height)}:host(.coar-password-input--lg) .coar-password-input-container{height:var(--coar-component-lg-height)}:host(.coar-password-input--xs) .coar-password-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-password-input--xs) .coar-password-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-password-input--sm) .coar-password-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-password-input--sm) .coar-password-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-password-input--lg) .coar-password-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-password-input--lg) .coar-password-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-password-input-container:hover:not(.coar-password-input-disabled):not(.coar-password-input-readonly):not(.coar-password-input-error):not(.coar-password-input-focused){border-color:var(--coar-border-input-hover)}.coar-password-input-container.coar-password-input-focused:not(.coar-password-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-password-input-container.coar-password-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-password-input-container.coar-password-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-password-input-container.coar-password-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-container.coar-password-input-error.coar-password-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-password-input-container.coar-password-input-error:hover:not(.coar-password-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-field{flex:1;min-width:0;height:100%;padding:0 calc(var(--coar-spacing-s) + var(--coar-spacing-xs));border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-password-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-password-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-password-input-field:read-only{cursor:default}.coar-password-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-password-input-focused .coar-password-input-clear,.coar-password-input-container:hover .coar-password-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-password-input--xs) .coar-password-input-clear{font-size:var(--coar-component-xs-font-size)}:host(.coar-password-input--sm) .coar-password-input-clear{font-size:var(--coar-component-sm-font-size)}:host(.coar-password-input--lg) .coar-password-input-clear{font-size:var(--coar-component-lg-font-size)}.coar-password-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-password-input-clear:focus{outline:none}.coar-password-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-password-input-toggle{display:flex;align-items:center;justify-content:center;padding:var(--coar-spacing-xs) var(--coar-spacing-s);border:none;background:transparent;color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease;flex-shrink:0}:host(.coar-password-input--xs) .coar-password-input-toggle{font-size:var(--coar-component-xs-font-size);padding:var(--coar-spacing-xxs) calc(var(--coar-spacing-xs) + var(--coar-spacing-xxs))}:host(.coar-password-input--sm) .coar-password-input-toggle{font-size:var(--coar-component-sm-font-size);padding:var(--coar-spacing-xxs) calc(var(--coar-spacing-s) - var(--coar-spacing-xxs))}:host(.coar-password-input--lg) .coar-password-input-toggle{font-size:var(--coar-component-lg-font-size);padding:var(--coar-spacing-xs) calc(var(--coar-spacing-s) + var(--coar-spacing-xs))}.coar-password-input-toggle:hover{color:var(--coar-icon-neutral-primary)}.coar-password-input-toggle:focus{outline:none}.coar-password-input-toggle:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-password-input-disabled .coar-password-input-toggle,.coar-password-input-readonly .coar-password-input-toggle{cursor:not-allowed;opacity:.5;pointer-events:none}.coar-password-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-password-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: CoarIconComponent, selector: "coar-icon", inputs: ["name", "source", "size", "rotate", "rotateTransition", "spin", "color", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1209
1224
|
}
|
|
1210
1225
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CoarPasswordInputComponent, decorators: [{
|
|
1211
1226
|
type: Component,
|
|
@@ -1214,8 +1229,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1214
1229
|
'[class.coar-password-input--sm]': 'size() === "sm"',
|
|
1215
1230
|
'[class.coar-password-input--md]': 'size() === "md"',
|
|
1216
1231
|
'[class.coar-password-input--lg]': 'size() === "lg"',
|
|
1217
|
-
}, template: "<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" class=\"coar-password-input-clear\" aria-hidden=\"true\" (click)=\"onClear()\" />\n }\n\n <!-- Toggle Visibility -->\n <coar-icon\n [name]=\"toggleIcon()\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-password-input-toggle\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n aria-hidden=\"true\"\n (click)=\"togglePasswordVisibility()\"\n />\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-password-input-message\" [class.coar-password-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-password-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-password-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-password-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-password-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-password-input--xs) .coar-password-input-container{height:var(--coar-component-xs-height)}:host(.coar-password-input--sm) .coar-password-input-container{height:var(--coar-component-sm-height)}:host(.coar-password-input--md) .coar-password-input-container{height:var(--coar-component-md-height)}:host(.coar-password-input--lg) .coar-password-input-container{height:var(--coar-component-lg-height)}:host(.coar-password-input--xs) .coar-password-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-password-input--xs) .coar-password-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-password-input--sm) .coar-password-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-password-input--sm) .coar-password-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-password-input--lg) .coar-password-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-password-input--lg) .coar-password-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-password-input-container:hover:not(.coar-password-input-disabled):not(.coar-password-input-readonly):not(.coar-password-input-error):not(.coar-password-input-focused){border-color:var(--coar-border-input-hover)}.coar-password-input-container.coar-password-input-focused:not(.coar-password-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-password-input-container.coar-password-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-password-input-container.coar-password-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-password-input-container.coar-password-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-container.coar-password-input-error.coar-password-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-password-input-container.coar-password-input-error:hover:not(.coar-password-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-field{flex:1;min-width:0;height:100%;padding:0
|
|
1232
|
+
}, template: "<div class=\"coar-password-input-wrapper\">\n <!-- Label -->\n @if (label()) {\n <label [for]=\"inputId()\" class=\"coar-password-input-label\">\n {{ label() }}\n @if (required()) {\n <span class=\"coar-password-input-required\">*</span>\n }\n </label>\n }\n\n <!-- Input Container -->\n <div\n class=\"coar-password-input-container\"\n [class.coar-password-input-focused]=\"isFocused()\"\n [class.coar-password-input-disabled]=\"isDisabled()\"\n [class.coar-password-input-readonly]=\"readonly()\"\n [class.coar-password-input-error]=\"hasError()\"\n >\n <!-- Input Element -->\n <input\n #inputElement\n [id]=\"inputId()\"\n [name]=\"name()\"\n [type]=\"inputType()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [autocomplete]=\"autocomplete()\"\n [attr.maxlength]=\"maxlength()\"\n [attr.aria-describedby]=\"displayMessage() ? messageId() : null\"\n [attr.aria-invalid]=\"hasError() ? 'true' : null\"\n class=\"coar-password-input-field\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- Clear indicator -->\n @if (showClearButton()) {\n <coar-icon name=\"x\" source=\"coar-builtin\" size=\"auto\" class=\"coar-password-input-clear\" aria-hidden=\"true\" (click)=\"onClear()\" />\n }\n\n <!-- Toggle Visibility -->\n <coar-icon\n [name]=\"toggleIcon()\"\n source=\"coar-builtin\"\n size=\"auto\"\n class=\"coar-password-input-toggle\"\n [attr.aria-label]=\"toggleAriaLabel()\"\n aria-hidden=\"true\"\n (click)=\"togglePasswordVisibility()\"\n />\n </div>\n\n <!-- Hint/Error Message -->\n @if (displayMessage()) {\n <div [id]=\"messageId()\" class=\"coar-password-input-message\" [class.coar-password-input-message-error]=\"hasError()\">\n {{ displayMessage() }}\n </div>\n }\n</div>\n", styles: [":host{display:block}.coar-password-input-wrapper{display:flex;flex-direction:column;width:100%}.coar-password-input-label{display:block;margin-bottom:var(--coar-component-md-label-margin);font-family:var(--coar-body-small-bold-family);font-size:var(--coar-component-md-label-font-size);font-weight:var(--coar-body-small-bold-weight);color:var(--coar-text-neutral-primary);cursor:pointer;-webkit-user-select:none;user-select:none}.coar-password-input-required{color:var(--coar-text-semantic-error-bold);margin-left:var(--coar-spacing-xs)}.coar-password-input-container{position:relative;display:flex;align-items:center;height:var(--coar-component-md-height);border:1px solid var(--coar-border-input);border-radius:var(--coar-radius-xs);background:var(--coar-surface-input);transition:border-color .15s ease,box-shadow .15s ease;overflow:hidden}:host(.coar-password-input--xs) .coar-password-input-container{height:var(--coar-component-xs-height)}:host(.coar-password-input--sm) .coar-password-input-container{height:var(--coar-component-sm-height)}:host(.coar-password-input--md) .coar-password-input-container{height:var(--coar-component-md-height)}:host(.coar-password-input--lg) .coar-password-input-container{height:var(--coar-component-lg-height)}:host(.coar-password-input--xs) .coar-password-input-field{font-size:var(--coar-component-xs-font-size)}:host(.coar-password-input--xs) .coar-password-input-label{font-size:var(--coar-component-xs-label-font-size);margin-bottom:var(--coar-component-xs-label-margin)}:host(.coar-password-input--sm) .coar-password-input-field{font-size:var(--coar-component-sm-font-size)}:host(.coar-password-input--sm) .coar-password-input-label{font-size:var(--coar-component-sm-label-font-size);margin-bottom:var(--coar-component-sm-label-margin)}:host(.coar-password-input--lg) .coar-password-input-field{font-size:var(--coar-component-lg-font-size)}:host(.coar-password-input--lg) .coar-password-input-label{font-size:var(--coar-component-lg-label-font-size);margin-bottom:var(--coar-component-lg-label-margin)}.coar-password-input-container:hover:not(.coar-password-input-disabled):not(.coar-password-input-readonly):not(.coar-password-input-error):not(.coar-password-input-focused){border-color:var(--coar-border-input-hover)}.coar-password-input-container.coar-password-input-focused:not(.coar-password-input-error){border-color:var(--coar-border-accent-primary);box-shadow:inset 0 0 0 1px var(--coar-border-accent-primary);outline:none}.coar-password-input-container.coar-password-input-disabled{background:var(--coar-surface-input-disabled);border-color:var(--coar-border-input);cursor:not-allowed;opacity:.6}.coar-password-input-container.coar-password-input-readonly{background:var(--coar-surface-input);border-color:var(--coar-border-input);cursor:default}.coar-password-input-container.coar-password-input-error{border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-container.coar-password-input-error.coar-password-input-focused{border-color:var(--coar-border-semantic-error-bold);box-shadow:inset 0 0 0 1px var(--coar-border-semantic-error-bold);outline:none}.coar-password-input-container.coar-password-input-error:hover:not(.coar-password-input-disabled){border-color:var(--coar-border-semantic-error-bold)}.coar-password-input-field{flex:1;min-width:0;height:100%;padding:0 calc(var(--coar-spacing-s) + var(--coar-spacing-xs));border:none;outline:none;background:transparent;font-family:var(--coar-body-small-base-family);font-size:var(--coar-body-small-base-size);font-weight:var(--coar-body-small-base-weight);color:var(--coar-text-neutral-primary)}.coar-password-input-field::placeholder{color:var(--coar-text-neutral-tertiary)}.coar-password-input-field:disabled{color:var(--coar-text-neutral-disabled);cursor:not-allowed}.coar-password-input-field:read-only{cursor:default}.coar-password-input-clear{display:flex;align-items:center;justify-content:center;width:auto;height:auto;margin-right:var(--coar-spacing-s);padding:0;border:none;background:transparent;color:var(--coar-icon-neutral-disabled);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease,opacity .15s ease;flex-shrink:0;opacity:.4}.coar-password-input-focused .coar-password-input-clear,.coar-password-input-container:hover .coar-password-input-clear{opacity:1;color:var(--coar-icon-neutral-tertiary)}:host(.coar-password-input--xs) .coar-password-input-clear{font-size:var(--coar-component-xs-font-size)}:host(.coar-password-input--sm) .coar-password-input-clear{font-size:var(--coar-component-sm-font-size)}:host(.coar-password-input--lg) .coar-password-input-clear{font-size:var(--coar-component-lg-font-size)}.coar-password-input-clear:hover{color:var(--coar-icon-neutral-primary)}.coar-password-input-clear:focus{outline:none}.coar-password-input-clear:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-password-input-toggle{display:flex;align-items:center;justify-content:center;padding:var(--coar-spacing-xs) var(--coar-spacing-s);border:none;background:transparent;color:var(--coar-icon-neutral-secondary);font-size:var(--coar-body-small-base-size);cursor:pointer;transition:color .15s ease;flex-shrink:0}:host(.coar-password-input--xs) .coar-password-input-toggle{font-size:var(--coar-component-xs-font-size);padding:var(--coar-spacing-xxs) calc(var(--coar-spacing-xs) + var(--coar-spacing-xxs))}:host(.coar-password-input--sm) .coar-password-input-toggle{font-size:var(--coar-component-sm-font-size);padding:var(--coar-spacing-xxs) calc(var(--coar-spacing-s) - var(--coar-spacing-xxs))}:host(.coar-password-input--lg) .coar-password-input-toggle{font-size:var(--coar-component-lg-font-size);padding:var(--coar-spacing-xs) calc(var(--coar-spacing-s) + var(--coar-spacing-xs))}.coar-password-input-toggle:hover{color:var(--coar-icon-neutral-primary)}.coar-password-input-toggle:focus{outline:none}.coar-password-input-toggle:focus-visible{color:var(--coar-icon-neutral-primary)}.coar-password-input-disabled .coar-password-input-toggle,.coar-password-input-readonly .coar-password-input-toggle{cursor:not-allowed;opacity:.5;pointer-events:none}.coar-password-input-message{margin-top:var(--coar-spacing-xs);font-family:var(--coar-body-caption-family);font-size:var(--coar-body-caption-size);font-weight:var(--coar-body-caption-weight);color:var(--coar-text-neutral-secondary);line-height:1.4}.coar-password-input-message-error{color:var(--coar-text-semantic-error-bold)}\n"] }]
|
|
1218
1233
|
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], maxlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxlength", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], blurred: [{ type: i0.Output, args: ["blurred"] }], focused: [{ type: i0.Output, args: ["focused"] }], clear: [{ type: i0.Output, args: ["clear"] }], inputRef: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }] } });
|
|
1234
|
+
function cryptoRandomId$1() {
|
|
1235
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
1236
|
+
return crypto.randomUUID();
|
|
1237
|
+
}
|
|
1238
|
+
return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`;
|
|
1239
|
+
}
|
|
1219
1240
|
|
|
1220
1241
|
class CoarCheckboxComponent extends CoarControlValueAccessor {
|
|
1221
1242
|
/** Label text displayed next to the checkbox */
|
|
@@ -1886,7 +1907,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
1886
1907
|
* ```
|
|
1887
1908
|
*/
|
|
1888
1909
|
class CoarSingleSelectComponent extends CoarSelectBase {
|
|
1889
|
-
|
|
1910
|
+
overlayBuilder = createOverlayBuilder();
|
|
1890
1911
|
destroyRefLocal = inject(DestroyRef);
|
|
1891
1912
|
triggerRef = viewChild('trigger', ...(ngDevMode ? [{ debugName: "triggerRef" }] : []));
|
|
1892
1913
|
dropdownTemplateRef = viewChild('dropdownTemplate', ...(ngDevMode ? [{ debugName: "dropdownTemplateRef" }] : []));
|
|
@@ -1971,18 +1992,17 @@ class CoarSingleSelectComponent extends CoarSelectBase {
|
|
|
1971
1992
|
return;
|
|
1972
1993
|
const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());
|
|
1973
1994
|
this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');
|
|
1974
|
-
const spec = Overlay.define((b) => {
|
|
1975
|
-
b.content((c) => c.fromTemplate(template));
|
|
1976
|
-
b.anchor({ kind: 'element', element: trigger });
|
|
1977
|
-
b.position({ placement, offset: 4, flip: false, shift: false });
|
|
1978
|
-
b.scroll({ strategy: 'reposition' });
|
|
1979
|
-
b.dismiss({ outsideClick: true, escapeKey: true });
|
|
1980
|
-
b.size({ mode: 'content', minWidth: 'anchor' });
|
|
1981
|
-
});
|
|
1982
1995
|
this.isOpen.set(true);
|
|
1983
1996
|
this.searchQuery.set('');
|
|
1984
1997
|
this.highlightedIndex.set(-1);
|
|
1985
|
-
const ref = this.
|
|
1998
|
+
const ref = this.overlayBuilder
|
|
1999
|
+
.anchor({ kind: 'element', element: trigger })
|
|
2000
|
+
.position({ placement, offset: 4, flip: false, shift: false })
|
|
2001
|
+
.scroll({ strategy: 'reposition' })
|
|
2002
|
+
.dismiss({ outsideClick: true, escapeKey: true })
|
|
2003
|
+
.size({ mode: 'content', minWidth: 'anchor' })
|
|
2004
|
+
.fromTemplate(template)
|
|
2005
|
+
.open({});
|
|
1986
2006
|
this.overlayRef = ref;
|
|
1987
2007
|
ref.afterClosed$.subscribe(() => {
|
|
1988
2008
|
if (this.overlayRef !== ref)
|
|
@@ -2072,7 +2092,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
2072
2092
|
* ```
|
|
2073
2093
|
*/
|
|
2074
2094
|
class CoarMultiSelectComponent extends CoarSelectBase {
|
|
2075
|
-
|
|
2095
|
+
overlayBuilder = createOverlayBuilder();
|
|
2076
2096
|
triggerRef = viewChild('trigger', ...(ngDevMode ? [{ debugName: "triggerRef" }] : []));
|
|
2077
2097
|
dropdownTemplateRef = viewChild('dropdownTemplate', ...(ngDevMode ? [{ debugName: "dropdownTemplateRef" }] : []));
|
|
2078
2098
|
overlayRef = null;
|
|
@@ -2231,18 +2251,17 @@ class CoarMultiSelectComponent extends CoarSelectBase {
|
|
|
2231
2251
|
return;
|
|
2232
2252
|
const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());
|
|
2233
2253
|
this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');
|
|
2234
|
-
const spec = Overlay.define((b) => {
|
|
2235
|
-
b.content((c) => c.fromTemplate(template));
|
|
2236
|
-
b.anchor({ kind: 'element', element: trigger });
|
|
2237
|
-
b.position({ placement, offset: 4, flip: false, shift: false });
|
|
2238
|
-
b.scroll({ strategy: 'reposition' });
|
|
2239
|
-
b.dismiss({ outsideClick: true, escapeKey: true });
|
|
2240
|
-
b.size({ mode: 'content', minWidth: 'anchor' });
|
|
2241
|
-
});
|
|
2242
2254
|
this.isOpen.set(true);
|
|
2243
2255
|
this.searchQuery.set('');
|
|
2244
2256
|
this.highlightedIndex.set(-1);
|
|
2245
|
-
const ref = this.
|
|
2257
|
+
const ref = this.overlayBuilder
|
|
2258
|
+
.anchor({ kind: 'element', element: trigger })
|
|
2259
|
+
.position({ placement, offset: 4, flip: false, shift: false })
|
|
2260
|
+
.scroll({ strategy: 'reposition' })
|
|
2261
|
+
.dismiss({ outsideClick: true, escapeKey: true })
|
|
2262
|
+
.size({ mode: 'content', minWidth: 'anchor' })
|
|
2263
|
+
.fromTemplate(template)
|
|
2264
|
+
.open({});
|
|
2246
2265
|
this.overlayRef = ref;
|
|
2247
2266
|
ref.afterClosed$.subscribe(() => {
|
|
2248
2267
|
if (this.overlayRef !== ref)
|
|
@@ -2293,9 +2312,7 @@ class CoarMultiSelectComponent extends CoarSelectBase {
|
|
|
2293
2312
|
const optionCount = this.displayOptions().length;
|
|
2294
2313
|
const listHeight = Math.min(maxListHeight, optionCount * optionRowHeight + listPadding);
|
|
2295
2314
|
const searchHeight = this.searchable() ? 56 : 0;
|
|
2296
|
-
const selectAllHeight = this.showSelectAll() && !this.searchQuery()
|
|
2297
|
-
? 37
|
|
2298
|
-
: 0;
|
|
2315
|
+
const selectAllHeight = this.showSelectAll() && !this.searchQuery() ? 37 : 0;
|
|
2299
2316
|
const chromeHeight = 2;
|
|
2300
2317
|
return chromeHeight + searchHeight + selectAllHeight + listHeight;
|
|
2301
2318
|
}
|
|
@@ -2335,7 +2352,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
2335
2352
|
* ```
|
|
2336
2353
|
*/
|
|
2337
2354
|
class CoarTagSelectComponent extends CoarSelectBase {
|
|
2338
|
-
|
|
2355
|
+
overlayBuilder = createOverlayBuilder();
|
|
2339
2356
|
triggerRef = viewChild('trigger', ...(ngDevMode ? [{ debugName: "triggerRef" }] : []));
|
|
2340
2357
|
dropdownTemplateRef = viewChild('dropdownTemplate', ...(ngDevMode ? [{ debugName: "dropdownTemplateRef" }] : []));
|
|
2341
2358
|
overlayRef = null;
|
|
@@ -2612,17 +2629,16 @@ class CoarTagSelectComponent extends CoarSelectBase {
|
|
|
2612
2629
|
return;
|
|
2613
2630
|
const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());
|
|
2614
2631
|
this.dropdownPosition.set(placement === 'top' ? 'top' : 'bottom');
|
|
2615
|
-
const spec = Overlay.define((b) => {
|
|
2616
|
-
b.content((c) => c.fromTemplate(template));
|
|
2617
|
-
b.anchor({ kind: 'element', element: trigger });
|
|
2618
|
-
b.position({ placement, offset: 4, flip: false, shift: false });
|
|
2619
|
-
b.scroll({ strategy: 'reposition' });
|
|
2620
|
-
b.dismiss({ outsideClick: true, escapeKey: true });
|
|
2621
|
-
b.size({ mode: 'content', minWidth: 'anchor' });
|
|
2622
|
-
});
|
|
2623
2632
|
this.isOpen.set(true);
|
|
2624
2633
|
this.highlightedIndex.set(-1);
|
|
2625
|
-
const ref = this.
|
|
2634
|
+
const ref = this.overlayBuilder
|
|
2635
|
+
.anchor({ kind: 'element', element: trigger })
|
|
2636
|
+
.position({ placement, offset: 4, flip: false, shift: false })
|
|
2637
|
+
.scroll({ strategy: 'reposition' })
|
|
2638
|
+
.dismiss({ outsideClick: true, escapeKey: true })
|
|
2639
|
+
.size({ mode: 'content', minWidth: 'anchor' })
|
|
2640
|
+
.fromTemplate(template)
|
|
2641
|
+
.open({});
|
|
2626
2642
|
this.overlayRef = ref;
|
|
2627
2643
|
ref.afterClosed$.subscribe(() => {
|
|
2628
2644
|
if (this.overlayRef !== ref)
|
|
@@ -3287,7 +3303,7 @@ class CoarPopoverComponent {
|
|
|
3287
3303
|
elementRef = inject(ElementRef);
|
|
3288
3304
|
destroyRef = inject(DestroyRef);
|
|
3289
3305
|
popoverGroup = inject(CoarPopoverGroupService, { optional: true });
|
|
3290
|
-
|
|
3306
|
+
overlayBuilder = createOverlayBuilder();
|
|
3291
3307
|
static nextId = 0;
|
|
3292
3308
|
popoverId = `coar-popover-${CoarPopoverComponent.nextId++}`;
|
|
3293
3309
|
panelId = `${this.popoverId}-panel`;
|
|
@@ -3376,21 +3392,20 @@ class CoarPopoverComponent {
|
|
|
3376
3392
|
else {
|
|
3377
3393
|
this.pinnedByClick.set(false);
|
|
3378
3394
|
}
|
|
3379
|
-
const
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
})
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
const ref = this.overlayService.open(spec, {});
|
|
3395
|
+
const ref = this.overlayBuilder
|
|
3396
|
+
.anchor({ kind: 'element', element: trigger })
|
|
3397
|
+
.position({
|
|
3398
|
+
placement: ['bottom', 'top', 'right', 'left'],
|
|
3399
|
+
offset: 6,
|
|
3400
|
+
flip: false,
|
|
3401
|
+
shift: this.clampToViewport(),
|
|
3402
|
+
})
|
|
3403
|
+
.scroll({ strategy: 'reposition' })
|
|
3404
|
+
.dismiss({ outsideClick: false, escapeKey: true })
|
|
3405
|
+
.size({ mode: 'content' })
|
|
3406
|
+
.a11y({ role: 'tooltip' })
|
|
3407
|
+
.fromTemplate(template)
|
|
3408
|
+
.open({});
|
|
3394
3409
|
this.overlayRef = ref;
|
|
3395
3410
|
this.isOpen.set(true);
|
|
3396
3411
|
ref.afterClosed$.subscribe(() => {
|
|
@@ -3667,7 +3682,6 @@ class CoarTooltipDirective {
|
|
|
3667
3682
|
elementRef = inject((ElementRef));
|
|
3668
3683
|
destroyRef = inject(DestroyRef);
|
|
3669
3684
|
injector = inject(Injector);
|
|
3670
|
-
overlayService = inject(CoarOverlayService);
|
|
3671
3685
|
tooltipService = inject(CoarTooltipService);
|
|
3672
3686
|
/** Tooltip content (string, TemplateRef, or Component type). */
|
|
3673
3687
|
coarTooltip = input(null, ...(ngDevMode ? [{ debugName: "coarTooltip" }] : []));
|
|
@@ -3687,6 +3701,7 @@ class CoarTooltipDirective {
|
|
|
3687
3701
|
coarTooltipFallbackToBestFit = input(false, { ...(ngDevMode ? { debugName: "coarTooltipFallbackToBestFit" } : {}), transform: booleanAttribute });
|
|
3688
3702
|
tooltipId = `coar-tooltip-${cryptoRandomId()}`;
|
|
3689
3703
|
overlayRef = null;
|
|
3704
|
+
overlayBuilder = createOverlayBuilder();
|
|
3690
3705
|
openTimerId = null;
|
|
3691
3706
|
closeTimerId = null;
|
|
3692
3707
|
openReason = null;
|
|
@@ -3709,7 +3724,7 @@ class CoarTooltipDirective {
|
|
|
3709
3724
|
const currentOpenReason = this.openReason;
|
|
3710
3725
|
const hasOpenOverlay = this.overlayRef != null;
|
|
3711
3726
|
// When the tooltip is open and config changes, re-open to apply changes.
|
|
3712
|
-
//
|
|
3727
|
+
// Overlays do not support updating spec/content in-place.
|
|
3713
3728
|
if (!this.coarTooltipDisabled() && hasOpenOverlay && currentOpenReason && this.hasContent()) {
|
|
3714
3729
|
this.close(true);
|
|
3715
3730
|
Promise.resolve().then(() => this.openInternal(currentOpenReason));
|
|
@@ -3748,16 +3763,15 @@ class CoarTooltipDirective {
|
|
|
3748
3763
|
if (!content)
|
|
3749
3764
|
return;
|
|
3750
3765
|
const position = this.resolveOverlayPosition();
|
|
3751
|
-
const
|
|
3752
|
-
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
const ref = this.overlayService.open(spec, {
|
|
3766
|
+
const ref = this.overlayBuilder
|
|
3767
|
+
.anchor({ kind: 'element', element: trigger })
|
|
3768
|
+
.position(position)
|
|
3769
|
+
.scroll({ strategy: 'reposition' })
|
|
3770
|
+
.dismiss({ outsideClick: false, escapeKey: true })
|
|
3771
|
+
.size({ mode: 'content' })
|
|
3772
|
+
.a11y({ role: 'tooltip' })
|
|
3773
|
+
.fromComponent(CoarTooltipOverlayComponent)
|
|
3774
|
+
.open({
|
|
3761
3775
|
tooltipId: this.tooltipId,
|
|
3762
3776
|
content,
|
|
3763
3777
|
context: this.coarTooltipContext(),
|
|
@@ -4099,7 +4113,7 @@ class CoarDatePickerComponent extends CoarControlValueAccessor {
|
|
|
4099
4113
|
elementRef = inject(ElementRef);
|
|
4100
4114
|
destroyRef = inject(DestroyRef);
|
|
4101
4115
|
localeService = inject(COAR_LOCALE_SERVICE, { optional: true });
|
|
4102
|
-
|
|
4116
|
+
overlayBuilder = createOverlayBuilder();
|
|
4103
4117
|
overlayRef = null;
|
|
4104
4118
|
// ============================================================
|
|
4105
4119
|
// Inputs
|
|
@@ -4381,15 +4395,14 @@ class CoarDatePickerComponent extends CoarControlValueAccessor {
|
|
|
4381
4395
|
return;
|
|
4382
4396
|
const placement = this.resolvePlacement(trigger, this.estimatePanelHeight());
|
|
4383
4397
|
this.calendarPosition.set(placement === 'top' ? 'top' : 'bottom');
|
|
4384
|
-
const
|
|
4385
|
-
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
const ref = this.overlayService.open(spec, {});
|
|
4398
|
+
const ref = this.overlayBuilder
|
|
4399
|
+
.anchor({ kind: 'element', element: trigger })
|
|
4400
|
+
.position({ placement, offset: 4, flip: false, shift: false })
|
|
4401
|
+
.scroll({ strategy: 'reposition' })
|
|
4402
|
+
.dismiss({ outsideClick: true, escapeKey: true })
|
|
4403
|
+
.size({ mode: 'content' })
|
|
4404
|
+
.fromTemplate(template)
|
|
4405
|
+
.open({});
|
|
4393
4406
|
this.overlayRef = ref;
|
|
4394
4407
|
this.isOpen.set(true);
|
|
4395
4408
|
// Set initial focus date
|
|
@@ -4697,7 +4710,7 @@ class CoarDatePickerComponent extends CoarControlValueAccessor {
|
|
|
4697
4710
|
if (parts.length !== 3)
|
|
4698
4711
|
return null;
|
|
4699
4712
|
// Check all parts are complete numbers
|
|
4700
|
-
if (parts.some(p => p.length === 0 || !/^\d+$/.test(p)))
|
|
4713
|
+
if (parts.some((p) => p.length === 0 || !/^\d+$/.test(p)))
|
|
4701
4714
|
return null;
|
|
4702
4715
|
const format = this.dateFormat();
|
|
4703
4716
|
let year, month, day;
|