@m1z23r/ngx-ui 1.1.31 → 1.1.33
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.
|
@@ -1793,6 +1793,7 @@ class SelectComponent {
|
|
|
1793
1793
|
dropdown.style.left = '';
|
|
1794
1794
|
dropdown.style.bottom = '';
|
|
1795
1795
|
dropdown.style.width = '';
|
|
1796
|
+
dropdown.style.minWidth = '';
|
|
1796
1797
|
dropdown.style.zIndex = '';
|
|
1797
1798
|
dropdown.style.margin = '';
|
|
1798
1799
|
this.removePositionListeners();
|
|
@@ -1809,7 +1810,7 @@ class SelectComponent {
|
|
|
1809
1810
|
const spaceAbove = triggerRect.top;
|
|
1810
1811
|
const openAbove = spaceBelow < dropdownHeight + gap && spaceAbove > spaceBelow;
|
|
1811
1812
|
dropdown.style.position = 'fixed';
|
|
1812
|
-
dropdown.style.
|
|
1813
|
+
dropdown.style.minWidth = `${triggerRect.width}px`;
|
|
1813
1814
|
dropdown.style.left = `${triggerRect.left}px`;
|
|
1814
1815
|
dropdown.style.zIndex = '99999';
|
|
1815
1816
|
dropdown.style.margin = '0';
|
|
@@ -6030,10 +6031,14 @@ class TemplateInputComponent {
|
|
|
6030
6031
|
inputId = computed(() => this.id() || this.generatedId, ...(ngDevMode ? [{ debugName: "inputId" }] : []));
|
|
6031
6032
|
mirrorRef = viewChild('mirror', ...(ngDevMode ? [{ debugName: "mirrorRef" }] : []));
|
|
6032
6033
|
inputRef = viewChild('inputEl', ...(ngDevMode ? [{ debugName: "inputRef" }] : []));
|
|
6034
|
+
popoverRef;
|
|
6035
|
+
hostRef = inject(ElementRef);
|
|
6036
|
+
positionCleanup = null;
|
|
6037
|
+
currentSpanRect = null;
|
|
6038
|
+
isPortaled = false;
|
|
6033
6039
|
// Popover state
|
|
6034
6040
|
popoverVisible = signal(false, ...(ngDevMode ? [{ debugName: "popoverVisible" }] : []));
|
|
6035
|
-
|
|
6036
|
-
popoverLeft = signal(0, ...(ngDevMode ? [{ debugName: "popoverLeft" }] : []));
|
|
6041
|
+
openAbove = signal(true, ...(ngDevMode ? [{ debugName: "openAbove" }] : []));
|
|
6037
6042
|
popoverText = signal('', ...(ngDevMode ? [{ debugName: "popoverText" }] : []));
|
|
6038
6043
|
popoverVarKey = signal('', ...(ngDevMode ? [{ debugName: "popoverVarKey" }] : []));
|
|
6039
6044
|
popoverContext = computed(() => {
|
|
@@ -6127,13 +6132,19 @@ class TemplateInputComponent {
|
|
|
6127
6132
|
const entry = vars.find(v => v.key === varKey);
|
|
6128
6133
|
this.popoverVarKey.set(varKey);
|
|
6129
6134
|
this.popoverText.set(entry ? (entry.value || varKey) : varKey);
|
|
6130
|
-
this.
|
|
6131
|
-
this.popoverLeft.set(spanRect.left + spanRect.width / 2);
|
|
6135
|
+
this.currentSpanRect = spanRect;
|
|
6132
6136
|
this.popoverVisible.set(true);
|
|
6137
|
+
if (!this.isPortaled) {
|
|
6138
|
+
this.portalPopover();
|
|
6139
|
+
}
|
|
6140
|
+
else {
|
|
6141
|
+
this.updatePopoverPosition();
|
|
6142
|
+
}
|
|
6133
6143
|
}
|
|
6134
6144
|
closePopover() {
|
|
6135
6145
|
this.cancelHide();
|
|
6136
6146
|
this.popoverVisible.set(false);
|
|
6147
|
+
this.unportalPopover();
|
|
6137
6148
|
if (this.hoveredVar !== null) {
|
|
6138
6149
|
this.hoveredVar = null;
|
|
6139
6150
|
this.variableHover.emit(null);
|
|
@@ -6190,17 +6201,114 @@ class TemplateInputComponent {
|
|
|
6190
6201
|
this.renderer.setProperty(style, 'textContent', TemplateInputComponent.STYLE_CONTENT);
|
|
6191
6202
|
this.renderer.appendChild(document.head, style);
|
|
6192
6203
|
}
|
|
6204
|
+
portalPopover() {
|
|
6205
|
+
const el = this.popoverRef.nativeElement;
|
|
6206
|
+
document.body.appendChild(el);
|
|
6207
|
+
el.style.display = 'block';
|
|
6208
|
+
this.isPortaled = true;
|
|
6209
|
+
requestAnimationFrame(() => this.updatePopoverPosition());
|
|
6210
|
+
this.addPositionListeners();
|
|
6211
|
+
}
|
|
6212
|
+
unportalPopover() {
|
|
6213
|
+
if (!this.isPortaled)
|
|
6214
|
+
return;
|
|
6215
|
+
const el = this.popoverRef.nativeElement;
|
|
6216
|
+
el.style.display = '';
|
|
6217
|
+
el.style.position = '';
|
|
6218
|
+
el.style.top = '';
|
|
6219
|
+
el.style.bottom = '';
|
|
6220
|
+
el.style.left = '';
|
|
6221
|
+
el.style.zIndex = '';
|
|
6222
|
+
this.hostRef.nativeElement.appendChild(el);
|
|
6223
|
+
this.isPortaled = false;
|
|
6224
|
+
this.currentSpanRect = null;
|
|
6225
|
+
this.removePositionListeners();
|
|
6226
|
+
}
|
|
6227
|
+
updatePopoverPosition() {
|
|
6228
|
+
const el = this.popoverRef.nativeElement;
|
|
6229
|
+
const spanRect = this.getCurrentSpanRect() ?? this.currentSpanRect;
|
|
6230
|
+
if (!spanRect)
|
|
6231
|
+
return;
|
|
6232
|
+
this.currentSpanRect = spanRect;
|
|
6233
|
+
const gap = 6;
|
|
6234
|
+
const edgePadding = 8;
|
|
6235
|
+
const spaceAbove = spanRect.top;
|
|
6236
|
+
const spaceBelow = window.innerHeight - spanRect.bottom;
|
|
6237
|
+
const popoverHeight = el.offsetHeight;
|
|
6238
|
+
const above = spaceAbove >= popoverHeight + gap || spaceAbove >= spaceBelow;
|
|
6239
|
+
this.openAbove.set(above);
|
|
6240
|
+
el.style.position = 'fixed';
|
|
6241
|
+
el.style.zIndex = '10000';
|
|
6242
|
+
if (above) {
|
|
6243
|
+
el.style.top = '';
|
|
6244
|
+
el.style.bottom = `${window.innerHeight - spanRect.top + gap}px`;
|
|
6245
|
+
}
|
|
6246
|
+
else {
|
|
6247
|
+
el.style.top = `${spanRect.bottom + gap}px`;
|
|
6248
|
+
el.style.bottom = '';
|
|
6249
|
+
}
|
|
6250
|
+
// Horizontal: center on span, clamp to viewport
|
|
6251
|
+
const centerX = spanRect.left + spanRect.width / 2;
|
|
6252
|
+
const popoverWidth = el.offsetWidth;
|
|
6253
|
+
let left = centerX - popoverWidth / 2;
|
|
6254
|
+
left = Math.max(edgePadding, Math.min(left, window.innerWidth - popoverWidth - edgePadding));
|
|
6255
|
+
el.style.left = `${left}px`;
|
|
6256
|
+
}
|
|
6257
|
+
getCurrentSpanRect() {
|
|
6258
|
+
const mirrorEl = this.mirrorRef()?.nativeElement;
|
|
6259
|
+
if (!mirrorEl)
|
|
6260
|
+
return null;
|
|
6261
|
+
const varKey = this.popoverVarKey();
|
|
6262
|
+
if (!varKey)
|
|
6263
|
+
return null;
|
|
6264
|
+
const spans = mirrorEl.querySelectorAll('.ui-tmpl__var');
|
|
6265
|
+
for (const span of spans) {
|
|
6266
|
+
const text = (span.textContent || '').replace(/^\{\{|\}\}$/g, '');
|
|
6267
|
+
if (text === varKey) {
|
|
6268
|
+
return span.getBoundingClientRect();
|
|
6269
|
+
}
|
|
6270
|
+
}
|
|
6271
|
+
return null;
|
|
6272
|
+
}
|
|
6273
|
+
onPositionUpdate = () => {
|
|
6274
|
+
if (this.isPortaled && this.popoverVisible()) {
|
|
6275
|
+
this.updatePopoverPosition();
|
|
6276
|
+
}
|
|
6277
|
+
};
|
|
6278
|
+
addPositionListeners() {
|
|
6279
|
+
window.addEventListener('scroll', this.onPositionUpdate, true);
|
|
6280
|
+
window.addEventListener('resize', this.onPositionUpdate);
|
|
6281
|
+
this.positionCleanup = () => {
|
|
6282
|
+
window.removeEventListener('scroll', this.onPositionUpdate, true);
|
|
6283
|
+
window.removeEventListener('resize', this.onPositionUpdate);
|
|
6284
|
+
};
|
|
6285
|
+
}
|
|
6286
|
+
removePositionListeners() {
|
|
6287
|
+
if (this.positionCleanup) {
|
|
6288
|
+
this.positionCleanup();
|
|
6289
|
+
this.positionCleanup = null;
|
|
6290
|
+
}
|
|
6291
|
+
}
|
|
6193
6292
|
ngOnDestroy() {
|
|
6194
6293
|
this.cancelHide();
|
|
6195
|
-
|
|
6294
|
+
// Remove from body if still portaled
|
|
6295
|
+
if (this.isPortaled) {
|
|
6296
|
+
const el = this.popoverRef.nativeElement;
|
|
6297
|
+
el.remove();
|
|
6298
|
+
this.removePositionListeners();
|
|
6299
|
+
this.isPortaled = false;
|
|
6300
|
+
}
|
|
6196
6301
|
}
|
|
6197
6302
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TemplateInputComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
6198
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TemplateInputComponent, isStandalone: true, selector: "ui-template-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", 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 }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, variables: { classPropertyName: "variables", publicName: "variables", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange", variables: "variablesChange", variableHover: "variableHover" }, queries: [{ propertyName: "popoverTemplate", first: true, predicate: VariablePopoverDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "mirrorRef", first: true, predicate: ["mirror"], descendants: true, isSignal: true }, { propertyName: "inputRef", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"ui-template-input-wrapper\"\n [class.ui-template-input-wrapper--error]=\"error()\"\n [class.ui-template-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-template-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-template-input__required\">*</span>\n }\n </label>\n }\n <div\n class=\"ui-template-input__container\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseleave)=\"onContainerMouseLeave()\"\n >\n <div\n class=\"ui-template-input__mirror\"\n #mirror\n [innerHTML]=\"highlightedHtml()\"\n ></div>\n <input\n class=\"ui-template-input__input\"\n #inputEl\n [id]=\"inputId()\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (input)=\"onInput()\"\n (scroll)=\"syncScroll()\"\n (click)=\"syncScroll()\"\n (keydown)=\"onKeyDown()\"\n />\n </div>\n @if (error()) {\n <span class=\"ui-template-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-template-input__hint\">{{ hint() }}</span>\n }\n</div>\n\n
|
|
6303
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TemplateInputComponent, isStandalone: true, selector: "ui-template-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", 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 }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, variables: { classPropertyName: "variables", publicName: "variables", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { value: "valueChange", variables: "variablesChange", variableHover: "variableHover" }, queries: [{ propertyName: "popoverTemplate", first: true, predicate: VariablePopoverDirective, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "mirrorRef", first: true, predicate: ["mirror"], descendants: true, isSignal: true }, { propertyName: "inputRef", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }, { propertyName: "popoverRef", first: true, predicate: ["popoverRef"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"ui-template-input-wrapper\"\n [class.ui-template-input-wrapper--error]=\"error()\"\n [class.ui-template-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-template-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-template-input__required\">*</span>\n }\n </label>\n }\n <div\n class=\"ui-template-input__container\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseleave)=\"onContainerMouseLeave()\"\n >\n <div\n class=\"ui-template-input__mirror\"\n #mirror\n [innerHTML]=\"highlightedHtml()\"\n ></div>\n <input\n class=\"ui-template-input__input\"\n #inputEl\n [id]=\"inputId()\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (input)=\"onInput()\"\n (scroll)=\"syncScroll()\"\n (click)=\"syncScroll()\"\n (keydown)=\"onKeyDown()\"\n />\n </div>\n @if (error()) {\n <span class=\"ui-template-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-template-input__hint\">{{ hint() }}</span>\n }\n</div>\n\n<div\n #popoverRef\n class=\"ui-tmpl-popover\"\n [class.ui-tmpl-popover--open]=\"popoverVisible()\"\n [class.ui-tmpl-popover--above]=\"openAbove()\"\n [class.ui-tmpl-popover--below]=\"!openAbove()\"\n (mouseenter)=\"onPopoverMouseEnter()\"\n (mouseleave)=\"onPopoverMouseLeave()\"\n>\n @if (popoverVisible()) {\n @if (popoverTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"popoverTemplate()!\"\n [ngTemplateOutletContext]=\"popoverContext()\"\n />\n } @else {\n <span class=\"ui-tmpl-popover__text\">{{ popoverText() }}</span>\n }\n }\n</div>\n", styles: [":host{display:block}.ui-template-input-wrapper{display:flex;flex-direction:column;gap:var(--ui-spacing-xs)}.ui-template-input__label{font-size:var(--ui-font-sm);font-weight:500;color:var(--ui-text)}.ui-template-input__required{color:var(--ui-danger);margin-left:2px}.ui-template-input__container{position:relative;border:1px solid var(--ui-border);border-radius:var(--ui-radius-md);background-color:var(--ui-bg);transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);overflow:hidden}.ui-template-input__container:hover{border-color:var(--ui-border-hover)}.ui-template-input__container:focus-within{border-color:var(--ui-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--ui-primary) 20%,transparent)}.ui-template-input__mirror{padding:var(--ui-spacing-sm) var(--ui-spacing-md);font-family:inherit;font-size:var(--ui-font-md);color:var(--ui-text);white-space:pre;overflow:hidden;pointer-events:none}.ui-template-input__input{position:absolute;top:0;left:0;width:100%;height:100%;padding:var(--ui-spacing-sm) var(--ui-spacing-md);font-family:inherit;font-size:var(--ui-font-md);color:transparent;caret-color:var(--ui-text);background:transparent;border:none;outline:none}.ui-template-input__input::placeholder{color:var(--ui-text-muted)}.ui-template-input__input:disabled{cursor:not-allowed}.ui-template-input-wrapper--disabled .ui-template-input__container{background-color:var(--ui-bg-secondary)}.ui-template-input-wrapper--disabled .ui-template-input__container:hover{border-color:var(--ui-border)}.ui-template-input-wrapper--disabled .ui-template-input__mirror{color:var(--ui-text-disabled)}.ui-template-input-wrapper--error .ui-template-input__container{border-color:var(--ui-danger)}.ui-template-input-wrapper--error .ui-template-input__container:focus-within{box-shadow:0 0 0 3px color-mix(in srgb,var(--ui-danger) 20%,transparent)}.ui-template-input__error{font-size:var(--ui-font-sm);color:var(--ui-danger)}.ui-template-input__hint{font-size:var(--ui-font-sm);color:var(--ui-text-muted)}.ui-tmpl-popover{display:none;line-height:1.5;background:var(--ui-bg);border:1px solid var(--ui-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-lg);opacity:0;transition:opacity var(--ui-transition-fast),transform var(--ui-transition-fast)}.ui-tmpl-popover--open{opacity:1}.ui-tmpl-popover--above{transform:translateY(4px)}.ui-tmpl-popover--above.ui-tmpl-popover--open{transform:translateY(0)}.ui-tmpl-popover--below{transform:translateY(-4px)}.ui-tmpl-popover--below.ui-tmpl-popover--open{transform:translateY(0)}.ui-tmpl-popover__text{display:block;padding:.375rem .625rem;font-size:var(--ui-font-sm);color:var(--ui-text);white-space:nowrap}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6199
6304
|
}
|
|
6200
6305
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TemplateInputComponent, decorators: [{
|
|
6201
6306
|
type: Component,
|
|
6202
|
-
args: [{ selector: 'ui-template-input', standalone: true, imports: [FormsModule, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ui-template-input-wrapper\"\n [class.ui-template-input-wrapper--error]=\"error()\"\n [class.ui-template-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-template-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-template-input__required\">*</span>\n }\n </label>\n }\n <div\n class=\"ui-template-input__container\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseleave)=\"onContainerMouseLeave()\"\n >\n <div\n class=\"ui-template-input__mirror\"\n #mirror\n [innerHTML]=\"highlightedHtml()\"\n ></div>\n <input\n class=\"ui-template-input__input\"\n #inputEl\n [id]=\"inputId()\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (input)=\"onInput()\"\n (scroll)=\"syncScroll()\"\n (click)=\"syncScroll()\"\n (keydown)=\"onKeyDown()\"\n />\n </div>\n @if (error()) {\n <span class=\"ui-template-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-template-input__hint\">{{ hint() }}</span>\n }\n</div>\n\n
|
|
6203
|
-
}], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", 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 }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }, { type: i0.Output, args: ["valueChange"] }], variables: [{ type: i0.Input, args: [{ isSignal: true, alias: "variables", required: true }] }, { type: i0.Output, args: ["variablesChange"] }], variableHover: [{ type: i0.Output, args: ["variableHover"] }], popoverTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => VariablePopoverDirective), { ...{ read: TemplateRef }, isSignal: true }] }], mirrorRef: [{ type: i0.ViewChild, args: ['mirror', { isSignal: true }] }], inputRef: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }]
|
|
6307
|
+
args: [{ selector: 'ui-template-input', standalone: true, imports: [FormsModule, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"ui-template-input-wrapper\"\n [class.ui-template-input-wrapper--error]=\"error()\"\n [class.ui-template-input-wrapper--disabled]=\"disabled()\"\n>\n @if (label()) {\n <label class=\"ui-template-input__label\" [attr.for]=\"inputId()\">\n {{ label() }}\n @if (required()) {\n <span class=\"ui-template-input__required\">*</span>\n }\n </label>\n }\n <div\n class=\"ui-template-input__container\"\n (mousemove)=\"onMouseMove($event)\"\n (mouseleave)=\"onContainerMouseLeave()\"\n >\n <div\n class=\"ui-template-input__mirror\"\n #mirror\n [innerHTML]=\"highlightedHtml()\"\n ></div>\n <input\n class=\"ui-template-input__input\"\n #inputEl\n [id]=\"inputId()\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [(ngModel)]=\"value\"\n (input)=\"onInput()\"\n (scroll)=\"syncScroll()\"\n (click)=\"syncScroll()\"\n (keydown)=\"onKeyDown()\"\n />\n </div>\n @if (error()) {\n <span class=\"ui-template-input__error\">{{ error() }}</span>\n }\n @if (hint() && !error()) {\n <span class=\"ui-template-input__hint\">{{ hint() }}</span>\n }\n</div>\n\n<div\n #popoverRef\n class=\"ui-tmpl-popover\"\n [class.ui-tmpl-popover--open]=\"popoverVisible()\"\n [class.ui-tmpl-popover--above]=\"openAbove()\"\n [class.ui-tmpl-popover--below]=\"!openAbove()\"\n (mouseenter)=\"onPopoverMouseEnter()\"\n (mouseleave)=\"onPopoverMouseLeave()\"\n>\n @if (popoverVisible()) {\n @if (popoverTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"popoverTemplate()!\"\n [ngTemplateOutletContext]=\"popoverContext()\"\n />\n } @else {\n <span class=\"ui-tmpl-popover__text\">{{ popoverText() }}</span>\n }\n }\n</div>\n", styles: [":host{display:block}.ui-template-input-wrapper{display:flex;flex-direction:column;gap:var(--ui-spacing-xs)}.ui-template-input__label{font-size:var(--ui-font-sm);font-weight:500;color:var(--ui-text)}.ui-template-input__required{color:var(--ui-danger);margin-left:2px}.ui-template-input__container{position:relative;border:1px solid var(--ui-border);border-radius:var(--ui-radius-md);background-color:var(--ui-bg);transition:border-color var(--ui-transition-fast),box-shadow var(--ui-transition-fast);overflow:hidden}.ui-template-input__container:hover{border-color:var(--ui-border-hover)}.ui-template-input__container:focus-within{border-color:var(--ui-border-focus);box-shadow:0 0 0 3px color-mix(in srgb,var(--ui-primary) 20%,transparent)}.ui-template-input__mirror{padding:var(--ui-spacing-sm) var(--ui-spacing-md);font-family:inherit;font-size:var(--ui-font-md);color:var(--ui-text);white-space:pre;overflow:hidden;pointer-events:none}.ui-template-input__input{position:absolute;top:0;left:0;width:100%;height:100%;padding:var(--ui-spacing-sm) var(--ui-spacing-md);font-family:inherit;font-size:var(--ui-font-md);color:transparent;caret-color:var(--ui-text);background:transparent;border:none;outline:none}.ui-template-input__input::placeholder{color:var(--ui-text-muted)}.ui-template-input__input:disabled{cursor:not-allowed}.ui-template-input-wrapper--disabled .ui-template-input__container{background-color:var(--ui-bg-secondary)}.ui-template-input-wrapper--disabled .ui-template-input__container:hover{border-color:var(--ui-border)}.ui-template-input-wrapper--disabled .ui-template-input__mirror{color:var(--ui-text-disabled)}.ui-template-input-wrapper--error .ui-template-input__container{border-color:var(--ui-danger)}.ui-template-input-wrapper--error .ui-template-input__container:focus-within{box-shadow:0 0 0 3px color-mix(in srgb,var(--ui-danger) 20%,transparent)}.ui-template-input__error{font-size:var(--ui-font-sm);color:var(--ui-danger)}.ui-template-input__hint{font-size:var(--ui-font-sm);color:var(--ui-text-muted)}.ui-tmpl-popover{display:none;line-height:1.5;background:var(--ui-bg);border:1px solid var(--ui-border);border-radius:var(--ui-radius-md);box-shadow:var(--ui-shadow-lg);opacity:0;transition:opacity var(--ui-transition-fast),transform var(--ui-transition-fast)}.ui-tmpl-popover--open{opacity:1}.ui-tmpl-popover--above{transform:translateY(4px)}.ui-tmpl-popover--above.ui-tmpl-popover--open{transform:translateY(0)}.ui-tmpl-popover--below{transform:translateY(-4px)}.ui-tmpl-popover--below.ui-tmpl-popover--open{transform:translateY(0)}.ui-tmpl-popover__text{display:block;padding:.375rem .625rem;font-size:var(--ui-font-sm);color:var(--ui-text);white-space:nowrap}\n"] }]
|
|
6308
|
+
}], ctorParameters: () => [{ type: i0.Renderer2 }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", 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 }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }, { type: i0.Output, args: ["valueChange"] }], variables: [{ type: i0.Input, args: [{ isSignal: true, alias: "variables", required: true }] }, { type: i0.Output, args: ["variablesChange"] }], variableHover: [{ type: i0.Output, args: ["variableHover"] }], popoverTemplate: [{ type: i0.ContentChild, args: [i0.forwardRef(() => VariablePopoverDirective), { ...{ read: TemplateRef }, isSignal: true }] }], mirrorRef: [{ type: i0.ViewChild, args: ['mirror', { isSignal: true }] }], inputRef: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }], popoverRef: [{
|
|
6309
|
+
type: ViewChild,
|
|
6310
|
+
args: ['popoverRef', { static: true }]
|
|
6311
|
+
}] } });
|
|
6204
6312
|
|
|
6205
6313
|
/*
|
|
6206
6314
|
* Public API Surface of @m1z23r/ngx-ui
|