inugami-ng 0.0.29 → 0.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/inugami-ng-components-inu-checkbox-group.mjs +10 -4
- package/fesm2022/inugami-ng-components-inu-checkbox-group.mjs.map +1 -1
- package/fesm2022/inugami-ng-components-inu-code.mjs +1 -0
- package/fesm2022/inugami-ng-components-inu-code.mjs.map +1 -1
- package/fesm2022/inugami-ng-components-inu-input-password.mjs +90 -0
- package/fesm2022/inugami-ng-components-inu-input-password.mjs.map +1 -0
- package/fesm2022/inugami-ng-components-inu-input-text.mjs +7 -4
- package/fesm2022/inugami-ng-components-inu-input-text.mjs.map +1 -1
- package/fesm2022/inugami-ng-components-inu-label.mjs +37 -0
- package/fesm2022/inugami-ng-components-inu-label.mjs.map +1 -0
- package/fesm2022/inugami-ng-components-inu-open-api.mjs +156 -84
- package/fesm2022/inugami-ng-components-inu-open-api.mjs.map +1 -1
- package/fesm2022/inugami-ng-models.mjs +5 -1
- package/fesm2022/inugami-ng-models.mjs.map +1 -1
- package/fesm2022/inugami-ng-services.mjs +80 -8
- package/fesm2022/inugami-ng-services.mjs.map +1 -1
- package/fesm2022/inugami-ng-utils.mjs +29 -4
- package/fesm2022/inugami-ng-utils.mjs.map +1 -1
- package/package.json +17 -1
- package/styles/inu-default-style.css +1 -1
- package/types/inugami-ng-components-inu-checkbox-group.d.ts +6 -4
- package/types/inugami-ng-components-inu-input-password.d.ts +32 -0
- package/types/inugami-ng-components-inu-input-text.d.ts +3 -2
- package/types/inugami-ng-components-inu-label.d.ts +14 -0
- package/types/inugami-ng-components-inu-open-api.d.ts +12 -1
- package/types/inugami-ng-models.d.ts +32 -2
- package/types/inugami-ng-services.d.ts +18 -5
- package/types/inugami-ng-utils.d.ts +8 -3
- package/fesm2022/inugami-ng-components-inu-panel-tabs.mjs +0 -181
- package/fesm2022/inugami-ng-components-inu-panel-tabs.mjs.map +0 -1
- package/fesm2022/inugami-ng-components-inu-svg-asset.mjs +0 -163
- package/fesm2022/inugami-ng-components-inu-svg-asset.mjs.map +0 -1
- package/fesm2022/inugami-ng-components-inu-svg-isometric.mjs +0 -789
- package/fesm2022/inugami-ng-components-inu-svg-isometric.mjs.map +0 -1
- package/fesm2022/inugami-ng-components-inu-svg-switzerland.mjs +0 -530
- package/fesm2022/inugami-ng-components-inu-svg-switzerland.mjs.map +0 -1
- package/fesm2022/inugami-ng-components-inu-table-flex.mjs +0 -139
- package/fesm2022/inugami-ng-components-inu-table-flex.mjs.map +0 -1
- package/fesm2022/inugami-ng-components-inu-tool-tips.mjs +0 -136
- package/fesm2022/inugami-ng-components-inu-tool-tips.mjs.map +0 -1
- package/fesm2022/inugami-ng-pipes.mjs +0 -38
- package/fesm2022/inugami-ng-pipes.mjs.map +0 -1
- package/types/inugami-ng-components-inu-panel-tabs.d.ts +0 -38
- package/types/inugami-ng-components-inu-svg-asset.d.ts +0 -33
- package/types/inugami-ng-components-inu-svg-isometric.d.ts +0 -105
- package/types/inugami-ng-components-inu-svg-switzerland.d.ts +0 -109
- package/types/inugami-ng-components-inu-table-flex.d.ts +0 -41
- package/types/inugami-ng-components-inu-tool-tips.d.ts +0 -37
- package/types/inugami-ng-pipes.d.ts +0 -12
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, output, model, signal, effect, Component } from '@angular/core';
|
|
3
3
|
import { InuIcon } from 'inugami-icons';
|
|
4
|
+
import { InuLabel } from 'inugami-ng/components/inu-label';
|
|
4
5
|
|
|
5
6
|
class InuCheckboxGroup {
|
|
6
7
|
//==================================================================================================================
|
|
@@ -9,6 +10,7 @@ class InuCheckboxGroup {
|
|
|
9
10
|
// input
|
|
10
11
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
11
12
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
13
|
+
labelKey = input('', ...(ngDevMode ? [{ debugName: "labelKey" }] : []));
|
|
12
14
|
_required = input(false, { ...(ngDevMode ? { debugName: "_required" } : {}), alias: 'required' });
|
|
13
15
|
values = input([], ...(ngDevMode ? [{ debugName: "values" }] : []));
|
|
14
16
|
vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
|
|
@@ -26,7 +28,7 @@ class InuCheckboxGroup {
|
|
|
26
28
|
this.initStyleClass();
|
|
27
29
|
});
|
|
28
30
|
}
|
|
29
|
-
|
|
31
|
+
ngAfterViewInit() {
|
|
30
32
|
this.initSelectItems();
|
|
31
33
|
}
|
|
32
34
|
initSelectItems() {
|
|
@@ -51,6 +53,7 @@ class InuCheckboxGroup {
|
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
this._values.set(result);
|
|
56
|
+
this.sendChanged();
|
|
54
57
|
}
|
|
55
58
|
initStyleClass() {
|
|
56
59
|
const result = ['inu-checkbox-group'];
|
|
@@ -93,6 +96,9 @@ class InuCheckboxGroup {
|
|
|
93
96
|
else {
|
|
94
97
|
value.selected = !value.selected;
|
|
95
98
|
}
|
|
99
|
+
this.sendChanged();
|
|
100
|
+
}
|
|
101
|
+
sendChanged() {
|
|
96
102
|
const newSelectedValues = [];
|
|
97
103
|
const currentValues = this._values();
|
|
98
104
|
if (currentValues) {
|
|
@@ -113,12 +119,12 @@ class InuCheckboxGroup {
|
|
|
113
119
|
return valueItem === resultItem.value;
|
|
114
120
|
}
|
|
115
121
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCheckboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuCheckboxGroup, isStandalone: true, selector: "inu-checkbox-group", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", value: "valueChange" }, providers: [], ngImport: i0, template: "<div [class]=\"styleClass()\">\n\n <div class=\"inu-checkbox-group-label-grp\">\n <div class=\"inu-checkbox-group-label\">\n @if (label()) {\n {{ label() }}\n }\n </div>\n @if (_required()) {\n <div class=\"inu-checkbox-group-required\">\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n </div>\n }\n </div>\n <ul>\n @if (_values()) {\n @for (selectItem of _values(); track selectItem.value; ) {\n <li (click)=\"toggle(selectItem)\" [class]=\"getItemClass(selectItem)\">\n <div class=\"inu-checkbox-group-icon\">\n @if (selectItem.selected) {\n <inu-icon icon=\"check\" [size]=\"0.9\" tabindex=\"0\"></inu-icon>\n }\n </div>\n <div class=\"inu-checkbox-group-label\">\n <span>{{ selectItem.title! }}</span>\n </div>\n\n </li>\n }\n }\n </ul>\n</div>\n", styles: [".inu-checkbox-group{display:flex;flex-direction:column;gap:1rem}.inu-checkbox-group .inu-checkbox-group-label-grp{display:flex}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-label{font-weight:700}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required{display:flex;fill:var(--danger)}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required ::ng-deep span{height:1rem;display:flex;align-items:baseline}.inu-checkbox-group ul{display:flex;margin:0;padding:0;gap:1rem}.inu-checkbox-group ul li{display:flex;gap:.25rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon{-webkit-user-select:none;user-select:none;cursor:pointer;border:.125px solid var(--text-color);display:flex;height:1rem;width:1rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon ::ng-deep span{display:flex;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-label{cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;user-select:none}.inu-checkbox-group.vertical ul{flex-direction:column}.inu-checkbox-group.disabled .inu-checkbox-group-icon{border:.125px solid var(--neutral);fill:var(--neutral)}.inu-checkbox-group.disabled .inu-checkbox-group-label{color:var(--neutral)}.inu-checkbox-group.notValid .inu-checkbox-group-label-grp{color:var(--danger)}.inu-checkbox-group.notValid li .inu-checkbox-group-icon{border:.125px solid var(--danger)!important}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
|
|
122
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuCheckboxGroup, isStandalone: true, selector: "inu-checkbox-group", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", value: "valueChange" }, providers: [], ngImport: i0, template: "<div [class]=\"styleClass()\">\n\n <div class=\"inu-checkbox-group-label-grp\">\n <div class=\"inu-checkbox-group-label\">\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label ><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label >{{ label()! }}</label>\n }\n }\n </div>\n @if (_required()) {\n <div class=\"inu-checkbox-group-required\">\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n </div>\n }\n </div>\n <ul>\n @if (_values()) {\n @for (selectItem of _values(); track selectItem.value; ) {\n <li (click)=\"toggle(selectItem)\" [class]=\"getItemClass(selectItem)\">\n <div class=\"inu-checkbox-group-icon\">\n @if (selectItem.selected) {\n <inu-icon icon=\"check\" [size]=\"0.9\" tabindex=\"0\"></inu-icon>\n }\n </div>\n <div class=\"inu-checkbox-group-label\">\n <span>{{ selectItem.title! }}</span>\n </div>\n\n </li>\n }\n }\n </ul>\n</div>\n", styles: [".inu-checkbox-group{display:flex;flex-direction:column;gap:1rem}.inu-checkbox-group .inu-checkbox-group-label-grp{display:flex}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-label{font-weight:700}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required{display:flex;fill:var(--danger)}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required ::ng-deep span{height:1rem;display:flex;align-items:baseline}.inu-checkbox-group ul{display:flex;margin:0;padding:0;gap:1rem}.inu-checkbox-group ul li{display:flex;gap:.25rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon{-webkit-user-select:none;user-select:none;cursor:pointer;border:.125px solid var(--text-color);display:flex;height:1rem;width:1rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon ::ng-deep span{display:flex;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-label{cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;user-select:none}.inu-checkbox-group.vertical ul{flex-direction:column}.inu-checkbox-group.disabled .inu-checkbox-group-icon{border:.125px solid var(--neutral);fill:var(--neutral)}.inu-checkbox-group.disabled .inu-checkbox-group-label{color:var(--neutral)}.inu-checkbox-group.notValid .inu-checkbox-group-label-grp{color:var(--danger)}.inu-checkbox-group.notValid li .inu-checkbox-group-icon{border:.125px solid var(--danger)!important}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "component", type: InuLabel, selector: "inu-label", inputs: ["key", "defaultValue"] }] });
|
|
117
123
|
}
|
|
118
124
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCheckboxGroup, decorators: [{
|
|
119
125
|
type: Component,
|
|
120
|
-
args: [{ selector: 'inu-checkbox-group', standalone: true, providers: [], imports: [InuIcon], template: "<div [class]=\"styleClass()\">\n\n <div class=\"inu-checkbox-group-label-grp\">\n <div class=\"inu-checkbox-group-label\">\n @if (label()) {\n {{ label() }}\n }\n </div>\n @if (_required()) {\n <div class=\"inu-checkbox-group-required\">\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n </div>\n }\n </div>\n <ul>\n @if (_values()) {\n @for (selectItem of _values(); track selectItem.value; ) {\n <li (click)=\"toggle(selectItem)\" [class]=\"getItemClass(selectItem)\">\n <div class=\"inu-checkbox-group-icon\">\n @if (selectItem.selected) {\n <inu-icon icon=\"check\" [size]=\"0.9\" tabindex=\"0\"></inu-icon>\n }\n </div>\n <div class=\"inu-checkbox-group-label\">\n <span>{{ selectItem.title! }}</span>\n </div>\n\n </li>\n }\n }\n </ul>\n</div>\n", styles: [".inu-checkbox-group{display:flex;flex-direction:column;gap:1rem}.inu-checkbox-group .inu-checkbox-group-label-grp{display:flex}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-label{font-weight:700}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required{display:flex;fill:var(--danger)}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required ::ng-deep span{height:1rem;display:flex;align-items:baseline}.inu-checkbox-group ul{display:flex;margin:0;padding:0;gap:1rem}.inu-checkbox-group ul li{display:flex;gap:.25rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon{-webkit-user-select:none;user-select:none;cursor:pointer;border:.125px solid var(--text-color);display:flex;height:1rem;width:1rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon ::ng-deep span{display:flex;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-label{cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;user-select:none}.inu-checkbox-group.vertical ul{flex-direction:column}.inu-checkbox-group.disabled .inu-checkbox-group-icon{border:.125px solid var(--neutral);fill:var(--neutral)}.inu-checkbox-group.disabled .inu-checkbox-group-label{color:var(--neutral)}.inu-checkbox-group.notValid .inu-checkbox-group-label-grp{color:var(--danger)}.inu-checkbox-group.notValid li .inu-checkbox-group-icon{border:.125px solid var(--danger)!important}\n"] }]
|
|
121
|
-
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], _required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
|
|
126
|
+
args: [{ selector: 'inu-checkbox-group', standalone: true, providers: [], imports: [InuIcon, InuLabel], template: "<div [class]=\"styleClass()\">\n\n <div class=\"inu-checkbox-group-label-grp\">\n <div class=\"inu-checkbox-group-label\">\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label ><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label >{{ label()! }}</label>\n }\n }\n </div>\n @if (_required()) {\n <div class=\"inu-checkbox-group-required\">\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n </div>\n }\n </div>\n <ul>\n @if (_values()) {\n @for (selectItem of _values(); track selectItem.value; ) {\n <li (click)=\"toggle(selectItem)\" [class]=\"getItemClass(selectItem)\">\n <div class=\"inu-checkbox-group-icon\">\n @if (selectItem.selected) {\n <inu-icon icon=\"check\" [size]=\"0.9\" tabindex=\"0\"></inu-icon>\n }\n </div>\n <div class=\"inu-checkbox-group-label\">\n <span>{{ selectItem.title! }}</span>\n </div>\n\n </li>\n }\n }\n </ul>\n</div>\n", styles: [".inu-checkbox-group{display:flex;flex-direction:column;gap:1rem}.inu-checkbox-group .inu-checkbox-group-label-grp{display:flex}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-label{font-weight:700}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required{display:flex;fill:var(--danger)}.inu-checkbox-group .inu-checkbox-group-label-grp .inu-checkbox-group-required ::ng-deep span{height:1rem;display:flex;align-items:baseline}.inu-checkbox-group ul{display:flex;margin:0;padding:0;gap:1rem}.inu-checkbox-group ul li{display:flex;gap:.25rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon{-webkit-user-select:none;user-select:none;cursor:pointer;border:.125px solid var(--text-color);display:flex;height:1rem;width:1rem;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-icon ::ng-deep span{display:flex;align-items:center}.inu-checkbox-group ul li .inu-checkbox-group-label{cursor:pointer;display:flex;align-items:center;-webkit-user-select:none;user-select:none}.inu-checkbox-group.vertical ul{flex-direction:column}.inu-checkbox-group.disabled .inu-checkbox-group-icon{border:.125px solid var(--neutral);fill:var(--neutral)}.inu-checkbox-group.disabled .inu-checkbox-group-label{color:var(--neutral)}.inu-checkbox-group.notValid .inu-checkbox-group-label-grp{color:var(--danger)}.inu-checkbox-group.notValid li .inu-checkbox-group-icon{border:.125px solid var(--danger)!important}\n"] }]
|
|
127
|
+
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], labelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelKey", required: false }] }], _required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], changed: [{ type: i0.Output, args: ["changed"] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
|
|
122
128
|
|
|
123
129
|
/**
|
|
124
130
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-checkbox-group.mjs","sources":["../../../projects/inugami-ng/components/inu-checkbox-group/inu-checkbox-group.component.ts","../../../projects/inugami-ng/components/inu-checkbox-group/inu-checkbox-group.component.html","../../../projects/inugami-ng/components/inu-checkbox-group/inugami-ng-components-inu-checkbox-group.ts"],"sourcesContent":["import {Component, effect, input, model, ModelSignal, OnInit, output, signal} from '@angular/core';\nimport {InuSelectItem} from 'inugami-ng/models';\nimport {FormValueControl} from '@angular/forms/signals';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-checkbox-group.mjs","sources":["../../../projects/inugami-ng/components/inu-checkbox-group/inu-checkbox-group.component.ts","../../../projects/inugami-ng/components/inu-checkbox-group/inu-checkbox-group.component.html","../../../projects/inugami-ng/components/inu-checkbox-group/inugami-ng-components-inu-checkbox-group.ts"],"sourcesContent":["import {AfterViewInit, Component, effect, input, model, ModelSignal, OnInit, output, signal} from '@angular/core';\nimport {InuSelectItem} from 'inugami-ng/models';\nimport {FormValueControl} from '@angular/forms/signals';\nimport {InuIcon} from 'inugami-icons';\nimport {InuLabel} from 'inugami-ng/components/inu-label';\n\n@Component({\n selector : 'inu-checkbox-group',\n standalone : true,\n providers : [],\n imports: [InuIcon, InuLabel],\n templateUrl: './inu-checkbox-group.component.html',\n styleUrl : './inu-checkbox-group.component.scss',\n })\nexport class InuCheckboxGroup<T> implements FormValueControl<T[]>, AfterViewInit {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n // input\n readonly disabled = input(false);\n readonly label = input('');\n readonly labelKey = input('');\n readonly _required = input(false, {alias: 'required'});\n readonly values = input<InuSelectItem<T>[]>([]);\n readonly vertical = input(false);\n changed = output<T[]>();\n\n // FormValueControl\n value: ModelSignal<T[]> = model(<T[]>[]);\n _values = signal<InuSelectItem<T>[]>([]);\n // internal\n\n styleClass = signal<string>('');\n\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n\n constructor() {\n effect(() => {\n this.initStyleClass();\n });\n }\n\n ngAfterViewInit(): void {\n this.initSelectItems();\n }\n\n private initSelectItems() {\n\n const values = this.values();\n if (!values) {\n return;\n }\n\n const result: InuSelectItem<T>[] = [];\n for (let item of values) {\n result.push(Object.assign({}, item));\n }\n const currentValue = this.value();\n if (!currentValue) {\n return;\n }\n\n for (let valueItem of currentValue) {\n for (let resultItem of result) {\n if (this.match(valueItem, resultItem)) {\n resultItem.selected = true;\n break;\n }\n }\n }\n this._values.set(result);\n this.sendChanged();\n }\n\n private initStyleClass() {\n const result: string[] = ['inu-checkbox-group'];\n if (this.vertical()) {\n result.push('vertical');\n }\n if (this._required()) {\n result.push('required');\n }\n if (this.disabled()) {\n result.push('disabled');\n }\n\n if (this._required()) {\n const values = this._values();\n let found = false;\n\n if (values) {\n for (let value of values) {\n found = value.selected != undefined && value.selected;\n if (found) {\n break;\n }\n }\n }\n if (!found) {\n result.push('notValid');\n }\n }\n\n this.styleClass.set(result.join(' '));\n }\n\n\n //==================================================================================================================\n // ACTIONS\n //==================================================================================================================\n protected toggle(value: InuSelectItem<T>) {\n if (this.disabled()) {\n return;\n }\n if (value.selected == undefined) {\n value.selected = true\n } else {\n value.selected = !value.selected;\n }\n\n this.sendChanged();\n }\n\n\n private sendChanged() {\n const newSelectedValues: T[] = [];\n const currentValues = this._values();\n if (currentValues) {\n for (let selectItem of currentValues) {\n if (selectItem.selected) {\n newSelectedValues.push(selectItem.value);\n }\n }\n this.value.set(newSelectedValues);\n }\n\n this.initStyleClass();\n\n this.changed.emit(newSelectedValues);\n }\n\n protected getItemClass(selectItem: InuSelectItem<T>): string {\n return selectItem.styleClass!;\n }\n\n\n private match(valueItem: T, resultItem: InuSelectItem<T>) {\n return valueItem === resultItem.value;\n }\n\n\n}\n","<div [class]=\"styleClass()\">\n\n <div class=\"inu-checkbox-group-label-grp\">\n <div class=\"inu-checkbox-group-label\">\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label ><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label >{{ label()! }}</label>\n }\n }\n </div>\n @if (_required()) {\n <div class=\"inu-checkbox-group-required\">\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n </div>\n }\n </div>\n <ul>\n @if (_values()) {\n @for (selectItem of _values(); track selectItem.value; ) {\n <li (click)=\"toggle(selectItem)\" [class]=\"getItemClass(selectItem)\">\n <div class=\"inu-checkbox-group-icon\">\n @if (selectItem.selected) {\n <inu-icon icon=\"check\" [size]=\"0.9\" tabindex=\"0\"></inu-icon>\n }\n </div>\n <div class=\"inu-checkbox-group-label\">\n <span>{{ selectItem.title! }}</span>\n </div>\n\n </li>\n }\n }\n </ul>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-code.mjs","sources":["../../../projects/inugami-ng/components/inu-code/inu-code.directive.ts","../../../projects/inugami-ng/components/inu-code/inu-code.ts","../../../projects/inugami-ng/components/inu-code/inu-code.html","../../../projects/inugami-ng/components/inu-code/inugami-ng-components-inu-code.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, effect } from '@angular/core';\nimport hljs from 'highlight.js';\n\n@Directive({\n selector: 'code[inuHighlight], pre[inuHighlight]',\n standalone: true\n})\nexport class InuHighlightDirective {\n private el = inject(ElementRef);\n\n // On utilise des signaux pour la réactivité\n code = input<string>('', { alias: 'inuHighlight' });\n lang = input<string | undefined | null>(undefined);\n\n constructor() {\n effect(() => {\n const codeValue = this.code() || '';\n const language = this.lang() || '';\n const nativeElement = this.el.nativeElement;\n\n // Reset du contenu et application de la coloration\n nativeElement.textContent = codeValue;\n if (language) {\n nativeElement.className = `language-${language}`;\n }\n\n hljs.highlightElement(nativeElement);\n });\n }\n}\n","import {\n Component,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport {InuCacheServices} from \"inugami-ng/services\";\nimport {map, shareReplay, tap} from \"rxjs\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {SourceCode} from './code.model';\nimport {InuHighlightDirective} from './inu-code.directive';\nimport {InuButton} from 'inugami-ng/components/inu-button';\nimport {InuCopyServices} from 'inugami-ng/components/inu-copy';\nimport {InuToastServices} from 'inugami-ng/components/inu-toast';\n\n\n@Component({\n selector : 'inu-code',\n standalone : true,\n imports : [InuHighlightDirective, InuButton],\n templateUrl: './inu-code.html',\n styleUrl : './inu-code.scss',\n })\nexport class InuCode {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n source = input<string | undefined | null>(undefined);\n url = input<string | undefined | null>(undefined);\n tag = input<string | undefined | null>(undefined);\n type = input<string | undefined | null>(undefined);\n title = input<string | undefined | null>(undefined);\n notificationLabel = input<string>('Value copied to clipboard');\n notificationMessage = input<string>('');\n iconNotification = input<string>('approval');\n\n private readonly http = inject(HttpClient);\n private readonly cache = inject(InuCacheServices);\n\n sourceCode = signal<string>('');\n _title = signal<string>('');\n _type = signal<string>('');\n\n copyService = inject(InuCopyServices);\n toastServices = inject(InuToastServices);\n\n //==================================================================================================================\n // INITIALIZE\n //==================================================================================================================\n constructor() {\n effect(() => this.init());\n }\n\n init(): void {\n const url = this.url();\n if (this.title()) {\n this._title.set(this.title()!);\n }\n\n if (url) {\n this.loadFormUrl(url);\n } else {\n const source = this.source();\n if (source) {\n this.sourceCode.set(source);\n }\n }\n }\n\n loadFormUrl(url: string) {\n\n const data = this.loadFormCache(url);\n if (data) {\n this.initSourceCode(data);\n return;\n }\n\n const cacheKey = `inu-code_${url}`;\n const pending = this.cache.getPending(cacheKey);\n\n if (pending) {\n pending.subscribe(res => this.initSourceCode(res));\n return;\n }\n\n const request = this.http.get(url, {responseType: 'text'})\n .pipe(map(res => this.parseData(res, url)),\n tap(data => this.cache.set(cacheKey, data)),\n shareReplay(1)\n );\n this.cache.setPending(cacheKey, request);\n request.subscribe();\n\n }\n\n\n initSourceCode(data: SourceCode[]) {\n\n const values = data.filter(i => this.tag() === i.name);\n if (values.length > 0) {\n const sourceCodeValue = values[0];\n this.sourceCode.set(sourceCodeValue.content!);\n\n const currentTitle = this.title();\n\n if (this.title()) {\n this._title.set(this.title()!);\n } else if (sourceCodeValue.title) {\n this._title.set(sourceCodeValue.title);\n }\n\n if (this.type()) {\n this._type.set(this.type()!);\n } else if (sourceCodeValue.type) {\n this._type.set(sourceCodeValue.type);\n }\n }\n }\n\n\n //==================================================================================================================\n // PARSE\n //==================================================================================================================\n parseData(response: string, url: string): SourceCode[] {\n const parser = new DOMParser();\n const node = parser.parseFromString(response, \"text/xml\");\n const sources = node.getElementsByTagName(\"src\");\n\n const result: SourceCode[] = [];\n for (let i = 0; i < sources.length; i++) {\n let sourceNode = sources[i];\n let sourceName: string = sourceNode.getAttribute('name') ?? '';\n let sourceContent: string = this.cleanContent(sourceNode.textContent ?? '');\n let type: string | undefined = sourceNode.getAttribute('type') ?? undefined;\n let title: string | undefined = sourceNode.getAttribute('title') ?? undefined;\n\n result.push({\n name : sourceName,\n content: sourceContent,\n type : type,\n title : title\n })\n }\n\n this.initSourceCode(result);\n return result;\n }\n\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n protected copyContent() {\n const content = this.sourceCode();\n if (!content) {\n return;\n }\n this.copyService.copy(content)\n .subscribe({\n next: () => this.toastServices.addMessage({\n title : this.notificationLabel(),\n message: this.notificationMessage(),\n icon : this.iconNotification(),\n level : \"success\"\n })\n });\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n loadFormCache(url: string): SourceCode[] | undefined {\n const cacheKey = `inu-code_${url}`;\n const result: SourceCode[] | undefined = this.cache.get(cacheKey);\n return result;\n }\n\n setToCache(url: string, value: any): void {\n const cacheKey = `inu-code_${url}`;\n if (value) {\n this.cache.set(cacheKey, value);\n }\n }\n\n\n private cleanContent(value: string): string {\n let result: string[] = [];\n let buffer: string[] = [];\n\n let line = value.split(\"\\n\");\n\n let enableClean = false;\n for (let i = 0; i < line.length; i++) {\n if (enableClean || line[i].trim() != '') {\n buffer.push(line[i]);\n enableClean = true;\n }\n }\n enableClean = false;\n for (let i = buffer.length - 1; i >= 0; i--) {\n if (enableClean || buffer[i].trim() != '') {\n result.push(buffer[i]);\n enableClean = true;\n }\n }\n\n result.reverse();\n\n return result.join('\\n');\n }\n\n\n}\n","<div class=\"inu-code\">\n <fieldset>\n <legend>\n <div class=\"inu-code-title\">\n {{_title()!}}\n </div>\n <div class=\"inu-code-copy\">\n <inu-button icon=\"copy\" (click)=\"copyContent()\"></inu-button>\n </div>\n </legend>\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-code.mjs","sources":["../../../projects/inugami-ng/components/inu-code/inu-code.directive.ts","../../../projects/inugami-ng/components/inu-code/inu-code.ts","../../../projects/inugami-ng/components/inu-code/inu-code.html","../../../projects/inugami-ng/components/inu-code/inugami-ng-components-inu-code.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, effect } from '@angular/core';\nimport hljs from 'highlight.js';\n\n@Directive({\n selector: 'code[inuHighlight], pre[inuHighlight]',\n standalone: true\n})\nexport class InuHighlightDirective {\n private el = inject(ElementRef);\n\n // On utilise des signaux pour la réactivité\n code = input<string>('', { alias: 'inuHighlight' });\n lang = input<string | undefined | null>(undefined);\n\n constructor() {\n effect(() => {\n const codeValue = this.code() || '';\n const language = this.lang() || '';\n const nativeElement = this.el.nativeElement;\n\n // Reset du contenu et application de la coloration\n nativeElement.textContent = codeValue;\n if (language) {\n nativeElement.className = `language-${language}`;\n }\n\n delete nativeElement.dataset.highlighted;\n hljs.highlightElement(nativeElement);\n });\n }\n}\n","import {\n Component,\n effect,\n inject,\n input,\n signal\n} from '@angular/core';\nimport {InuCacheServices} from \"inugami-ng/services\";\nimport {map, shareReplay, tap} from \"rxjs\";\nimport {HttpClient} from \"@angular/common/http\";\nimport {SourceCode} from './code.model';\nimport {InuHighlightDirective} from './inu-code.directive';\nimport {InuButton} from 'inugami-ng/components/inu-button';\nimport {InuCopyServices} from 'inugami-ng/components/inu-copy';\nimport {InuToastServices} from 'inugami-ng/components/inu-toast';\n\n\n@Component({\n selector : 'inu-code',\n standalone : true,\n imports : [InuHighlightDirective, InuButton],\n templateUrl: './inu-code.html',\n styleUrl : './inu-code.scss',\n })\nexport class InuCode {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n source = input<string | undefined | null>(undefined);\n url = input<string | undefined | null>(undefined);\n tag = input<string | undefined | null>(undefined);\n type = input<string | undefined | null>(undefined);\n title = input<string | undefined | null>(undefined);\n notificationLabel = input<string>('Value copied to clipboard');\n notificationMessage = input<string>('');\n iconNotification = input<string>('approval');\n\n private readonly http = inject(HttpClient);\n private readonly cache = inject(InuCacheServices);\n\n sourceCode = signal<string>('');\n _title = signal<string>('');\n _type = signal<string>('');\n\n copyService = inject(InuCopyServices);\n toastServices = inject(InuToastServices);\n\n //==================================================================================================================\n // INITIALIZE\n //==================================================================================================================\n constructor() {\n effect(() => this.init());\n }\n\n init(): void {\n const url = this.url();\n if (this.title()) {\n this._title.set(this.title()!);\n }\n\n if (url) {\n this.loadFormUrl(url);\n } else {\n const source = this.source();\n if (source) {\n this.sourceCode.set(source);\n }\n }\n }\n\n loadFormUrl(url: string) {\n\n const data = this.loadFormCache(url);\n if (data) {\n this.initSourceCode(data);\n return;\n }\n\n const cacheKey = `inu-code_${url}`;\n const pending = this.cache.getPending(cacheKey);\n\n if (pending) {\n pending.subscribe(res => this.initSourceCode(res));\n return;\n }\n\n const request = this.http.get(url, {responseType: 'text'})\n .pipe(map(res => this.parseData(res, url)),\n tap(data => this.cache.set(cacheKey, data)),\n shareReplay(1)\n );\n this.cache.setPending(cacheKey, request);\n request.subscribe();\n\n }\n\n\n initSourceCode(data: SourceCode[]) {\n\n const values = data.filter(i => this.tag() === i.name);\n if (values.length > 0) {\n const sourceCodeValue = values[0];\n this.sourceCode.set(sourceCodeValue.content!);\n\n const currentTitle = this.title();\n\n if (this.title()) {\n this._title.set(this.title()!);\n } else if (sourceCodeValue.title) {\n this._title.set(sourceCodeValue.title);\n }\n\n if (this.type()) {\n this._type.set(this.type()!);\n } else if (sourceCodeValue.type) {\n this._type.set(sourceCodeValue.type);\n }\n }\n }\n\n\n //==================================================================================================================\n // PARSE\n //==================================================================================================================\n parseData(response: string, url: string): SourceCode[] {\n const parser = new DOMParser();\n const node = parser.parseFromString(response, \"text/xml\");\n const sources = node.getElementsByTagName(\"src\");\n\n const result: SourceCode[] = [];\n for (let i = 0; i < sources.length; i++) {\n let sourceNode = sources[i];\n let sourceName: string = sourceNode.getAttribute('name') ?? '';\n let sourceContent: string = this.cleanContent(sourceNode.textContent ?? '');\n let type: string | undefined = sourceNode.getAttribute('type') ?? undefined;\n let title: string | undefined = sourceNode.getAttribute('title') ?? undefined;\n\n result.push({\n name : sourceName,\n content: sourceContent,\n type : type,\n title : title\n })\n }\n\n this.initSourceCode(result);\n return result;\n }\n\n //==================================================================================================================\n // ACTION\n //==================================================================================================================\n protected copyContent() {\n const content = this.sourceCode();\n if (!content) {\n return;\n }\n this.copyService.copy(content)\n .subscribe({\n next: () => this.toastServices.addMessage({\n title : this.notificationLabel(),\n message: this.notificationMessage(),\n icon : this.iconNotification(),\n level : \"success\"\n })\n });\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n loadFormCache(url: string): SourceCode[] | undefined {\n const cacheKey = `inu-code_${url}`;\n const result: SourceCode[] | undefined = this.cache.get(cacheKey);\n return result;\n }\n\n setToCache(url: string, value: any): void {\n const cacheKey = `inu-code_${url}`;\n if (value) {\n this.cache.set(cacheKey, value);\n }\n }\n\n\n private cleanContent(value: string): string {\n let result: string[] = [];\n let buffer: string[] = [];\n\n let line = value.split(\"\\n\");\n\n let enableClean = false;\n for (let i = 0; i < line.length; i++) {\n if (enableClean || line[i].trim() != '') {\n buffer.push(line[i]);\n enableClean = true;\n }\n }\n enableClean = false;\n for (let i = buffer.length - 1; i >= 0; i--) {\n if (enableClean || buffer[i].trim() != '') {\n result.push(buffer[i]);\n enableClean = true;\n }\n }\n\n result.reverse();\n\n return result.join('\\n');\n }\n\n\n}\n","<div class=\"inu-code\">\n <fieldset>\n <legend>\n <div class=\"inu-code-title\">\n {{_title()!}}\n </div>\n <div class=\"inu-code-copy\">\n <inu-button icon=\"copy\" (click)=\"copyContent()\"></inu-button>\n </div>\n </legend>\n\n @if(sourceCode()){\n <div class=\"source-code\">\n<pre [inuHighlight]=\"sourceCode()\" lang=\"java\" >\n</pre>\n </div>\n }\n\n </fieldset>\n\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, inject, model, computed, output, viewChild, signal, Component } from '@angular/core';
|
|
3
|
+
import { FormField } from '@angular/forms/signals';
|
|
4
|
+
import { UuidUtils } from 'inugami-ng/utils';
|
|
5
|
+
import { Subject, debounceTime } from 'rxjs';
|
|
6
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
|
+
import { InuIcon } from 'inugami-icons';
|
|
8
|
+
import { InuLabel } from 'inugami-ng/components/inu-label';
|
|
9
|
+
|
|
10
|
+
class InuInputPassword {
|
|
11
|
+
//==================================================================================================================
|
|
12
|
+
// ATTRIBUTES
|
|
13
|
+
//==================================================================================================================
|
|
14
|
+
// input
|
|
15
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
16
|
+
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
17
|
+
labelKey = input('', ...(ngDevMode ? [{ debugName: "labelKey" }] : []));
|
|
18
|
+
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
|
|
19
|
+
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
20
|
+
debounce = input(0, ...(ngDevMode ? [{ debugName: "debounce" }] : []));
|
|
21
|
+
_required = input(false, { ...(ngDevMode ? { debugName: "_required" } : {}), alias: 'required' });
|
|
22
|
+
// FormValueControl
|
|
23
|
+
_formField = inject(FormField, { optional: true });
|
|
24
|
+
value = model('', ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
25
|
+
valid = computed(() => {
|
|
26
|
+
const state = this._formField?.state();
|
|
27
|
+
if (!state)
|
|
28
|
+
return true;
|
|
29
|
+
const isInvalid = state.invalid();
|
|
30
|
+
const hasBeenTouched = state.touched();
|
|
31
|
+
return !(isInvalid && hasBeenTouched);
|
|
32
|
+
}, ...(ngDevMode ? [{ debugName: "valid" }] : []));
|
|
33
|
+
// internal
|
|
34
|
+
changed = output();
|
|
35
|
+
debouncer = new Subject();
|
|
36
|
+
id = computed(() => UuidUtils.buildUid(), ...(ngDevMode ? [{ debugName: "id" }] : []));
|
|
37
|
+
input = viewChild('input', ...(ngDevMode ? [{ debugName: "input" }] : []));
|
|
38
|
+
focus = signal(false, ...(ngDevMode ? [{ debugName: "focus" }] : []));
|
|
39
|
+
styleClass = input('', ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
|
|
40
|
+
_styleClass = computed(() => {
|
|
41
|
+
return [
|
|
42
|
+
'inu-input',
|
|
43
|
+
'inu-input-password',
|
|
44
|
+
this.disabled() ? 'disabled' : '',
|
|
45
|
+
!this.valid() ? 'invalid' : '',
|
|
46
|
+
this.focus() ? 'focus' : '',
|
|
47
|
+
this.styleClass()
|
|
48
|
+
].join(' ');
|
|
49
|
+
}, ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
|
|
50
|
+
//==================================================================================================================
|
|
51
|
+
// INIT
|
|
52
|
+
//==================================================================================================================
|
|
53
|
+
constructor() {
|
|
54
|
+
this.debouncer.pipe(debounceTime(this.debounce()), takeUntilDestroyed()).subscribe(val => {
|
|
55
|
+
this.value.set(val);
|
|
56
|
+
this.changed.emit(val);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
onChanged(event) {
|
|
60
|
+
const input = this.input()?.nativeElement;
|
|
61
|
+
if (!input) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
let value = input.value;
|
|
65
|
+
this.debouncer.next(value);
|
|
66
|
+
}
|
|
67
|
+
onFocus() {
|
|
68
|
+
this.focus.set(true);
|
|
69
|
+
}
|
|
70
|
+
onFocusOut() {
|
|
71
|
+
this.focus.set(false);
|
|
72
|
+
this._formField?.state()?.markAsTouched();
|
|
73
|
+
}
|
|
74
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuInputPassword, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuInputPassword, isStandalone: true, selector: "inu-input-password", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null }, _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", changed: "changed" }, providers: [], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label [for]=\"id()\"><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n type=\"password\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input\n [attr.aria-invalid]=\"!valid()\">\n</div>\n", styles: [".inu-input-password{display:flex;flex-direction:column;width:100%}.inu-input-password label{font-weight:700;font-size:90%;width:auto;transition:color .25s}.inu-input-password inu-icon{width:1rem}.inu-input-password input{border:none;border-bottom:2px solid var(--neutral);transition:border-bottom .25s;outline:none}.inu-input-password input:focus{border-bottom:2px solid var(--secondary-light)}.inu-input-password input.disabled{border-bottom:2px solid var(--neutral-light)}.inu-input-password .inu-input-text-label{display:flex;flex-direction:row;gap:.5rem}.inu-input-password.focus .inu-input-text-label{color:var(--secondary-light);fill:var(--secondary-light)}.inu-input-password.invalid input{border-bottom:1px solid var(--danger)}.inu-input-password.invalid .inu-input-text-label{color:var(--danger);fill:var(--danger)}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "component", type: InuLabel, selector: "inu-label", inputs: ["key", "defaultValue"] }] });
|
|
76
|
+
}
|
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuInputPassword, decorators: [{
|
|
78
|
+
type: Component,
|
|
79
|
+
args: [{ selector: 'inu-input-password', standalone: true, providers: [], imports: [
|
|
80
|
+
InuIcon,
|
|
81
|
+
InuLabel
|
|
82
|
+
], template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label [for]=\"id()\"><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n type=\"password\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input\n [attr.aria-invalid]=\"!valid()\">\n</div>\n", styles: [".inu-input-password{display:flex;flex-direction:column;width:100%}.inu-input-password label{font-weight:700;font-size:90%;width:auto;transition:color .25s}.inu-input-password inu-icon{width:1rem}.inu-input-password input{border:none;border-bottom:2px solid var(--neutral);transition:border-bottom .25s;outline:none}.inu-input-password input:focus{border-bottom:2px solid var(--secondary-light)}.inu-input-password input.disabled{border-bottom:2px solid var(--neutral-light)}.inu-input-password .inu-input-text-label{display:flex;flex-direction:row;gap:.5rem}.inu-input-password.focus .inu-input-text-label{color:var(--secondary-light);fill:var(--secondary-light)}.inu-input-password.invalid input{border-bottom:1px solid var(--danger)}.inu-input-password.invalid .inu-input-text-label{color:var(--danger);fill:var(--danger)}\n"] }]
|
|
83
|
+
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], labelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelKey", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], _required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], changed: [{ type: i0.Output, args: ["changed"] }], input: [{ type: i0.ViewChild, args: ['input', { isSignal: true }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }] } });
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Generated bundle index. Do not edit.
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
export { InuInputPassword };
|
|
90
|
+
//# sourceMappingURL=inugami-ng-components-inu-input-password.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-input-password.mjs","sources":["../../../projects/inugami-ng/components/inu-input-password/inu-input-password.component.ts","../../../projects/inugami-ng/components/inu-input-password/inu-input-password.component.html","../../../projects/inugami-ng/components/inu-input-password/inugami-ng-components-inu-input-password.ts"],"sourcesContent":["import {\n Component,\n computed,\n ElementRef,\n inject,\n input,\n model,\n ModelSignal,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {FormField, FormValueControl} from '@angular/forms/signals';\nimport {UuidUtils} from 'inugami-ng/utils';\nimport {debounceTime, Subject} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {InuIcon} from 'inugami-icons';\nimport {InuLabel} from 'inugami-ng/components/inu-label';\n\n@Component({\n selector : 'inu-input-password',\n standalone : true,\n providers : [],\n imports: [\n InuIcon,\n InuLabel\n ],\n templateUrl: './inu-input-password.component.html',\n styleUrl : './inu-input-password.component.scss',\n })\nexport class InuInputPassword implements FormValueControl<string> {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n // input\n readonly disabled = input(false);\n readonly label = input('');\n readonly labelKey = input('');\n readonly icon = input('');\n readonly name = input('');\n readonly debounce = input<number>(0);\n readonly _required = input(false, {alias: 'required'});\n\n\n // FormValueControl\n _formField = inject(FormField, {optional: true});\n value: ModelSignal<string> = model<string>('');\n valid = computed(() => {\n const state = this._formField?.state()\n if (!state) return true;\n const isInvalid = state.invalid();\n const hasBeenTouched = state.touched();\n return !(isInvalid && hasBeenTouched);\n });\n // internal\n changed = output<string | number>();\n debouncer = new Subject<string | number>();\n\n id = computed<string>(() => UuidUtils.buildUid());\n input = viewChild<ElementRef<HTMLInputElement>>('input');\n focus = signal<boolean>(false);\n styleClass = input<string>('');\n _styleClass = computed<string>(() => {\n return [\n 'inu-input',\n 'inu-input-password',\n this.disabled() ? 'disabled' : '',\n !this.valid() ? 'invalid' : '',\n this.focus() ? 'focus' : '',\n this.styleClass()!\n ].join(' ');\n })\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n this.debouncer.pipe(\n debounceTime(this.debounce()),\n takeUntilDestroyed()\n ).subscribe(val => {\n this.value.set(val as string);\n this.changed.emit(val);\n });\n }\n\n protected onChanged(event: KeyboardEvent) {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n let value: string = input.value;\n this.debouncer.next(value)\n }\n\n protected onFocus() {\n this.focus.set(true);\n }\n\n protected onFocusOut() {\n this.focus.set(false);\n this._formField?.state()?.markAsTouched();\n }\n}\n","<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label [for]=\"id()\"><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n type=\"password\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input\n [attr.aria-invalid]=\"!valid()\">\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MA8Ba,gBAAgB,CAAA;;;;;AAOlB,IAAA,QAAQ,GAAI,KAAK,CAAC,KAAK,oDAAC;AACxB,IAAA,KAAK,GAAO,KAAK,CAAC,EAAE,iDAAC;AACrB,IAAA,QAAQ,GAAI,KAAK,CAAC,EAAE,oDAAC;AACrB,IAAA,IAAI,GAAQ,KAAK,CAAC,EAAE,gDAAC;AACrB,IAAA,IAAI,GAAQ,KAAK,CAAC,EAAE,gDAAC;AACrB,IAAA,QAAQ,GAAI,KAAK,CAAS,CAAC,oDAAC;IAC5B,SAAS,GAAG,KAAK,CAAC,KAAK,sDAAG,KAAK,EAAE,UAAU,EAAA,CAAE;;IAItD,UAAU,GAAmB,MAAM,CAAC,SAAS,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;AAChE,IAAA,KAAK,GAAwB,KAAK,CAAS,EAAE,iDAAC;AAC9C,IAAA,KAAK,GAAwB,QAAQ,CAAC,MAAK;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AACtC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;AACvB,QAAA,MAAM,SAAS,GAAQ,KAAK,CAAC,OAAO,EAAE;AACtC,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,EAAE;AACtC,QAAA,OAAO,EAAE,SAAS,IAAI,cAAc,CAAC;AACvC,IAAA,CAAC,iDAAC;;IAEF,OAAO,GAAsB,MAAM,EAAmB;AACtD,IAAA,SAAS,GAAoB,IAAI,OAAO,EAAmB;IAE3D,EAAE,GAAY,QAAQ,CAAS,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,IAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAC1D,IAAA,KAAK,GAAS,SAAS,CAA+B,OAAO,iDAAC;AAC9D,IAAA,KAAK,GAAS,MAAM,CAAU,KAAK,iDAAC;AACpC,IAAA,UAAU,GAAI,KAAK,CAAS,EAAE,sDAAC;AAC/B,IAAA,WAAW,GAAG,QAAQ,CAAS,MAAK;QAClC,OAAO;YACL,WAAW;YACX,oBAAoB;YACpB,IAAI,CAAC,QAAQ,EAAE,GAAG,UAAU,GAAG,EAAE;YACjC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,GAAG,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,GAAG,EAAE;YAC3B,IAAI,CAAC,UAAU;AAChB,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,IAAA,CAAC,uDAAC;;;;AAKF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC7B,kBAAkB,EAAE,CACrB,CAAC,SAAS,CAAC,GAAG,IAAG;AAChB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAa,CAAC;AAC7B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACxB,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,aAAa;QACzC,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AACA,QAAA,IAAI,KAAK,GAAW,KAAK,CAAC,KAAK;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;IAC5B;IAEU,OAAO,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtB;IAEU,UAAU,GAAA;AAClB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE;IAC3C;uGA1EW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,2uCARH,EAAE,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5B,24BA6BA,EAAA,MAAA,EAAA,CAAA,4zBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLe,OAAO,4GACP,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKV,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAX5B,SAAS;AACgB,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,UAAA,EACpB,IAAI,EAAA,SAAA,EACJ,EAAE,EAAA,OAAA,EACN;wBACP,OAAO;wBACP;AACD,qBAAA,EAAA,QAAA,EAAA,24BAAA,EAAA,MAAA,EAAA,CAAA,4zBAAA,CAAA,EAAA;i6BAmC0C,OAAO,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AE7D/D;;AAEG;;;;"}
|
|
@@ -5,6 +5,7 @@ import { UuidUtils } from 'inugami-ng/utils';
|
|
|
5
5
|
import { Subject, debounceTime } from 'rxjs';
|
|
6
6
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
7
7
|
import { InuIcon } from 'inugami-icons';
|
|
8
|
+
import { InuLabel } from 'inugami-ng/components/inu-label';
|
|
8
9
|
|
|
9
10
|
class InuInputText {
|
|
10
11
|
//==================================================================================================================
|
|
@@ -13,6 +14,7 @@ class InuInputText {
|
|
|
13
14
|
// input
|
|
14
15
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
|
|
15
16
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
|
|
17
|
+
labelKey = input('', ...(ngDevMode ? [{ debugName: "labelKey" }] : []));
|
|
16
18
|
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
|
|
17
19
|
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : []));
|
|
18
20
|
debounce = input(0, ...(ngDevMode ? [{ debugName: "debounce" }] : []));
|
|
@@ -78,14 +80,15 @@ class InuInputText {
|
|
|
78
80
|
this._formField?.state()?.markAsTouched();
|
|
79
81
|
}
|
|
80
82
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuInputText, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
81
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuInputText, isStandalone: true, selector: "inu-input-text", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", changed: "changed" }, providers: [], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label()) {\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n [type]=\"type()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input>\n</div>\n", styles: [".inu-input-text{display:flex;flex-direction:column;width:100%}.inu-input-text label{font-weight:700;font-size:90%;width:auto;transition:color .25s}.inu-input-text inu-icon{width:1rem}.inu-input-text input{border:none;border-bottom:2px solid var(--neutral);transition:border-bottom .25s;outline:none}.inu-input-text input:focus{border-bottom:2px solid var(--secondary-light)}.inu-input-text input.disabled{border-bottom:2px solid var(--neutral-light)}.inu-input-text .inu-input-text-label{display:flex;flex-direction:row;gap:.5rem}.inu-input-text.focus .inu-input-text-label{color:var(--secondary-light);fill:var(--secondary-light)}.inu-input-text.invalid input{border-bottom:1px solid var(--danger)}.inu-input-text.invalid .inu-input-text-label{color:var(--danger);fill:var(--danger)}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
|
|
83
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuInputText, isStandalone: true, selector: "inu-input-text", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, debounce: { classPropertyName: "debounce", publicName: "debounce", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, _required: { classPropertyName: "_required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", changed: "changed" }, providers: [], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label [for]=\"id()\"><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n [type]=\"type()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input\n [attr.aria-invalid]=\"!valid()\">\n</div>\n", styles: [".inu-input-text{display:flex;flex-direction:column;width:100%}.inu-input-text label{font-weight:700;font-size:90%;width:auto;transition:color .25s}.inu-input-text inu-icon{width:1rem}.inu-input-text input{border:none;border-bottom:2px solid var(--neutral);transition:border-bottom .25s;outline:none}.inu-input-text input:focus{border-bottom:2px solid var(--secondary-light)}.inu-input-text input.disabled{border-bottom:2px solid var(--neutral-light)}.inu-input-text .inu-input-text-label{display:flex;flex-direction:row;gap:.5rem}.inu-input-text.focus .inu-input-text-label{color:var(--secondary-light);fill:var(--secondary-light)}.inu-input-text.invalid input{border-bottom:1px solid var(--danger)}.inu-input-text.invalid .inu-input-text-label{color:var(--danger);fill:var(--danger)}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "component", type: InuLabel, selector: "inu-label", inputs: ["key", "defaultValue"] }] });
|
|
82
84
|
}
|
|
83
85
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuInputText, decorators: [{
|
|
84
86
|
type: Component,
|
|
85
87
|
args: [{ selector: 'inu-input-text', standalone: true, providers: [], imports: [
|
|
86
|
-
InuIcon
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
InuIcon,
|
|
89
|
+
InuLabel
|
|
90
|
+
], template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label [for]=\"id()\"><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n [type]=\"type()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input\n [attr.aria-invalid]=\"!valid()\">\n</div>\n", styles: [".inu-input-text{display:flex;flex-direction:column;width:100%}.inu-input-text label{font-weight:700;font-size:90%;width:auto;transition:color .25s}.inu-input-text inu-icon{width:1rem}.inu-input-text input{border:none;border-bottom:2px solid var(--neutral);transition:border-bottom .25s;outline:none}.inu-input-text input:focus{border-bottom:2px solid var(--secondary-light)}.inu-input-text input.disabled{border-bottom:2px solid var(--neutral-light)}.inu-input-text .inu-input-text-label{display:flex;flex-direction:row;gap:.5rem}.inu-input-text.focus .inu-input-text-label{color:var(--secondary-light);fill:var(--secondary-light)}.inu-input-text.invalid input{border-bottom:1px solid var(--danger)}.inu-input-text.invalid .inu-input-text-label{color:var(--danger);fill:var(--danger)}\n"] }]
|
|
91
|
+
}], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], labelKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelKey", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], debounce: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounce", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], _required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], changed: [{ type: i0.Output, args: ["changed"] }], input: [{ type: i0.ViewChild, args: ['input', { isSignal: true }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }] } });
|
|
89
92
|
|
|
90
93
|
/**
|
|
91
94
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inugami-ng-components-inu-input-text.mjs","sources":["../../../projects/inugami-ng/components/inu-input-text/inu-input-text.component.ts","../../../projects/inugami-ng/components/inu-input-text/inu-input-text.component.html","../../../projects/inugami-ng/components/inu-input-text/inugami-ng-components-inu-input-text.ts"],"sourcesContent":["import {\n Component,\n computed,\n ElementRef, inject,\n input,\n InputSignal,\n model,\n ModelSignal,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {FormField, FormValueControl} from '@angular/forms/signals';\nimport {UuidUtils} from 'inugami-ng/utils';\nimport {debounceTime, Subject} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n selector: 'inu-input-text',\n standalone: true,\n providers: [],\n
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-input-text.mjs","sources":["../../../projects/inugami-ng/components/inu-input-text/inu-input-text.component.ts","../../../projects/inugami-ng/components/inu-input-text/inu-input-text.component.html","../../../projects/inugami-ng/components/inu-input-text/inugami-ng-components-inu-input-text.ts"],"sourcesContent":["import {\n Component,\n computed,\n ElementRef, inject,\n input,\n InputSignal,\n model,\n ModelSignal,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport {FormField, FormValueControl} from '@angular/forms/signals';\nimport {UuidUtils} from 'inugami-ng/utils';\nimport {debounceTime, Subject} from 'rxjs';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {InuIcon} from 'inugami-icons';\nimport {InuLabel} from 'inugami-ng/components/inu-label';\n\n@Component({\n selector: 'inu-input-text',\n standalone: true,\n providers: [],\n imports: [\n InuIcon,\n InuLabel\n\n ],\n templateUrl: './inu-input-text.component.html',\n styleUrl: './inu-input-text.component.scss',\n})\nexport class InuInputText implements FormValueControl<string | number>{\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n // input\n readonly disabled = input(false);\n readonly label = input('');\n readonly labelKey = input('');\n readonly icon = input('');\n readonly name = input('');\n readonly debounce = input<number>(0);\n readonly type: InputSignal<string | 'text' | 'number' | 'email' | 'password'> = input('text');\n readonly _required = input(false, {alias: 'required'});\n\n\n // FormValueControl\n _formField = inject(FormField, { optional: true });\n value: ModelSignal<string | number> = model<string | number>('');\n valid = computed(() => {\n const state = this._formField?.state()\n if (!state) return true;\n const isInvalid = state.invalid();\n const hasBeenTouched = state.touched();\n return !(isInvalid && hasBeenTouched);\n });\n // internal\n changed = output<string | number>();\n debouncer = new Subject<string | number>();\n\n id = computed<string>(() => UuidUtils.buildUid());\n input = viewChild<ElementRef<HTMLInputElement>>('input');\n focus=signal<boolean>(false);\n styleClass = input<string>('');\n _styleClass = computed<string>(() => {\n return [\n 'inu-input',\n 'inu-input-text',\n this.disabled() ? 'disabled' : '',\n !this.valid() ? 'invalid' : '',\n this.focus() ? 'focus' : '',\n this.styleClass()!\n ].join(' ');\n })\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n this.debouncer.pipe(\n debounceTime(this.debounce()),\n takeUntilDestroyed()\n ).subscribe(val => {\n this.value.set(val);\n this.changed.emit(val);\n });\n }\n\n protected onChanged(event: KeyboardEvent) {\n const input = this.input()?.nativeElement;\n if (!input) {\n return;\n }\n let value: number | string = input.value;\n if ('number' === this.type()) {\n try {\n value = Number(value);\n } catch (e) {\n }\n }\n\n this.debouncer.next(value)\n }\n\n protected onFocus() {\n this.focus.set(true);\n }\n\n protected onFocusOut() {\n this.focus.set(false);\n this._formField?.state()?.markAsTouched();\n }\n}\n","<div [class]=\"_styleClass()\">\n <div class=\"inu-input-text-label\">\n @if(icon()){\n <inu-icon [icon]=\"icon()!\" [size]=\"1\"></inu-icon>\n }\n @if (label() || labelKey()) {\n @if(labelKey()){\n <label [for]=\"id()\"><inu-label [key]=\"labelKey()\" [defaultValue]=\"label()!\"></inu-label></label>\n }\n @else{\n <label [for]=\"id()\">{{ label()! }}</label>\n }\n }\n @if (_required()) {\n <inu-icon icon=\"required\" [size]=\"0.5\"></inu-icon>\n }\n </div>\n\n <input [id]=\"id()\"\n [name]=\"name()!\"\n [type]=\"type()\"\n [value]=\"value()\"\n [disabled]=\"disabled()\"\n (focusin)=\"onFocus()\"\n (focusout)=\"onFocusOut()\"\n (blur)=\"_formField?.state()?.markAsTouched()\"\n (keyup)=\"onChanged($event)\" #input\n [attr.aria-invalid]=\"!valid()\">\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, inject, computed, Component } from '@angular/core';
|
|
3
|
+
import { INU_LABEL_SERVICE } from 'inugami-ng/models';
|
|
4
|
+
|
|
5
|
+
class InuLabel {
|
|
6
|
+
//====================================================================================================================
|
|
7
|
+
// ATTRIBUTES
|
|
8
|
+
//====================================================================================================================
|
|
9
|
+
key = input('', ...(ngDevMode ? [{ debugName: "key" }] : []));
|
|
10
|
+
defaultValue = input('', ...(ngDevMode ? [{ debugName: "defaultValue" }] : []));
|
|
11
|
+
//
|
|
12
|
+
labelService = inject(INU_LABEL_SERVICE);
|
|
13
|
+
//
|
|
14
|
+
_message = computed(() => {
|
|
15
|
+
const label = this.labelService.getMessage(this.key() ?? undefined, this.defaultValue() ?? undefined);
|
|
16
|
+
return label ?? undefined;
|
|
17
|
+
}, ...(ngDevMode ? [{ debugName: "_message" }] : []));
|
|
18
|
+
_styleClass = computed(() => {
|
|
19
|
+
return [
|
|
20
|
+
'inu-label',
|
|
21
|
+
this.labelService.findLabel(this.key() ?? undefined) ? '' : 'label-not-defined'
|
|
22
|
+
].join(' ');
|
|
23
|
+
}, ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
|
|
24
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuLabel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuLabel, isStandalone: true, selector: "inu-label", inputs: { key: { classPropertyName: "key", publicName: "key", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<span [class]=\"_styleClass()\" [attr.aria-key]=\"key()\">\n @if(_message()){\n {{ _message() }}\n }\n</span>\n" });
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuLabel, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{ selector: 'inu-label', standalone: true, imports: [], template: "<span [class]=\"_styleClass()\" [attr.aria-key]=\"key()\">\n @if(_message()){\n {{ _message() }}\n }\n</span>\n" }]
|
|
30
|
+
}], propDecorators: { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "key", required: false }] }], defaultValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultValue", required: false }] }] } });
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generated bundle index. Do not edit.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
export { InuLabel };
|
|
37
|
+
//# sourceMappingURL=inugami-ng-components-inu-label.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inugami-ng-components-inu-label.mjs","sources":["../../../projects/inugami-ng/components/inu-label/inu-label.ts","../../../projects/inugami-ng/components/inu-label/inu-label.html","../../../projects/inugami-ng/components/inu-label/inugami-ng-components-inu-label.ts"],"sourcesContent":["import {Component, computed, inject, input, signal} from '@angular/core';\nimport {INU_LABEL_SERVICE} from 'inugami-ng/models'\n\n@Component({\n selector : 'inu-label',\n standalone : true,\n imports : [],\n templateUrl: './inu-label.html'\n })\nexport class InuLabel {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n key = input<string | undefined | null>('');\n defaultValue = input<string | undefined | null>('');\n //\n labelService = inject(INU_LABEL_SERVICE);\n //\n _message = computed<string | undefined>(() => {\n const label = this.labelService.getMessage(this.key() ?? undefined, this.defaultValue() ?? undefined);\n return label ?? undefined;\n });\n _styleClass = computed<string>(() => {\n return [\n 'inu-label',\n this.labelService.findLabel(this.key() ?? undefined) ? '' : 'label-not-defined'\n ].join(' ');\n\n });\n\n}\n","<span [class]=\"_styleClass()\" [attr.aria-key]=\"key()\">\n @if(_message()){\n {{ _message() }}\n }\n</span>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MASa,QAAQ,CAAA;;;;AAKnB,IAAA,GAAG,GAAY,KAAK,CAA4B,EAAE,+CAAC;AACnD,IAAA,YAAY,GAAG,KAAK,CAA4B,EAAE,wDAAC;;AAEnD,IAAA,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAExC,IAAA,QAAQ,GAAM,QAAQ,CAAqB,MAAK;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,SAAS,CAAC;QACrG,OAAO,KAAK,IAAI,SAAS;AAC3B,IAAA,CAAC,oDAAC;AACF,IAAA,WAAW,GAAG,QAAQ,CAAS,MAAK;QAClC,OAAO;YACL,WAAW;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG;AAC7D,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AAEb,IAAA,CAAC,uDAAC;uGApBS,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,gVCTrB,sHAKA,EAAA,CAAA;;2FDIa,QAAQ,EAAA,UAAA,EAAA,CAAA;kBANpB,SAAS;+BACgB,WAAW,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACJ,EAAE,EAAA,QAAA,EAAA,sHAAA,EAAA;;;AEN5B;;AAEG;;;;"}
|