inugami-ng 0.0.5 → 0.0.7

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.
@@ -0,0 +1,33 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, Component } from '@angular/core';
3
+ import { InuIcon } from 'inugami-icons';
4
+
5
+ class InuButton {
6
+ //==================================================================================================================
7
+ // ATTRIBUTES
8
+ //==================================================================================================================
9
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
10
+ icon = input(null, ...(ngDevMode ? [{ debugName: "icon" }] : []));
11
+ type = input('', ...(ngDevMode ? [{ debugName: "type" }] : []));
12
+ link = input(false, ...(ngDevMode ? [{ debugName: "link" }] : []));
13
+ _styleClass = computed(() => {
14
+ return [
15
+ 'inu-button',
16
+ this.type() ? this.type() : '',
17
+ this.link() ? 'link' : ''
18
+ ].join(' ');
19
+ }, ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
20
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
21
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuButton, isStandalone: true, selector: "inu-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "link", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if(link()){\n <span [class]=\"_styleClass()\">\n\n @if(icon()){\n <span class=\"inu-button-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"1\"></inu-icon>\n </span>\n }\n\n <span class=\"inu-button-label\">\n @if(label()){\n {{label()}}\n }\n </span>\n </span>\n}\n@else{\n <button [class]=\"_styleClass()\">\n\n @if(icon()){\n <span class=\"inu-button-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"1\"></inu-icon>\n </span>\n }\n\n <span class=\"inu-button-label\">\n @if(label()){\n {{label()}}\n }\n </span>\n </button>\n}\n", styles: [".inu-button{display:flex;gap:.5rem;justify-content:space-around;align-items:center;padding:.125rem .25rem;background-color:var(--neutral-light-extra);border:1px solid var(--neutral);-webkit-box-shadow:0px 0px .25rem 0px rgba(0,0,0,0);box-shadow:0 0 .25rem #0000}.inu-button inu-icon{display:flex;align-items:center}.inu-button inu-icon ::ng-deep .inu-icon{display:flex;align-items:center}.inu-button inu-icon ::ng-deep .inu-icon .inu-icon-content{display:flex;align-items:center}.inu-button inu-icon ::ng-deep .inu-icon .inu-icon-content svg{display:flex;align-items:center}.inu-button .inu-button-icon{width:1.25rem}.inu-button .inu-button-label{flex:1}.inu-button:hover{border-color:var(--neutral);-webkit-box-shadow:0px 0px .25rem 0px var(--neutral);box-shadow:0 0 .25rem 0 var(--neutral)}.inu-button.secondary{background-color:var(--secondary-light-extra);border-color:var(--secondary-light);color:var(--text-color)}.inu-button.secondary:hover{border-color:var(--secondary);-webkit-box-shadow:0px 0px .25rem 0px var(--secondary);box-shadow:0 0 .25rem 0 var(--secondary)}.inu-button.primary,.inu-button.success{background-color:var(--success-light-extra);border-color:var(--success-light);color:var(--text-color)}.inu-button.primary:hover,.inu-button.success:hover{border-color:var(--success);-webkit-box-shadow:0px 0px .25rem 0px var(--success);box-shadow:0 0 .25rem 0 var(--success)}.inu-button.warn{background-color:var(--warning-light-extra);border-color:var(--warning-light);color:var(--text-color)}.inu-button.warn:hover{border-color:var(--warning);-webkit-box-shadow:0px 0px .25rem 0px var(--warning);box-shadow:0 0 .25rem 0 var(--warning)}.inu-button.danger,.inu-button.error{background-color:var(--danger-light-extra);border-color:var(--danger-light);color:var(--text-color)}.inu-button.danger:hover,.inu-button.error:hover{border-color:var(--danger);-webkit-box-shadow:0px 0px .25rem 0px var(--danger);box-shadow:0 0 .25rem 0 var(--danger)}.inu-button.link{border-top:none;border-left:none;border-right:none;background-color:transparent;box-shadow:0 0 .25rem 0 transparent!important}.inu-button.link:hover{background:linear-gradient(to bottom,transparent 95%,var(--neutral) 100%)}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
22
+ }
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuButton, decorators: [{
24
+ type: Component,
25
+ args: [{ selector: 'inu-button', standalone: true, imports: [InuIcon], template: "@if(link()){\n <span [class]=\"_styleClass()\">\n\n @if(icon()){\n <span class=\"inu-button-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"1\"></inu-icon>\n </span>\n }\n\n <span class=\"inu-button-label\">\n @if(label()){\n {{label()}}\n }\n </span>\n </span>\n}\n@else{\n <button [class]=\"_styleClass()\">\n\n @if(icon()){\n <span class=\"inu-button-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"1\"></inu-icon>\n </span>\n }\n\n <span class=\"inu-button-label\">\n @if(label()){\n {{label()}}\n }\n </span>\n </button>\n}\n", styles: [".inu-button{display:flex;gap:.5rem;justify-content:space-around;align-items:center;padding:.125rem .25rem;background-color:var(--neutral-light-extra);border:1px solid var(--neutral);-webkit-box-shadow:0px 0px .25rem 0px rgba(0,0,0,0);box-shadow:0 0 .25rem #0000}.inu-button inu-icon{display:flex;align-items:center}.inu-button inu-icon ::ng-deep .inu-icon{display:flex;align-items:center}.inu-button inu-icon ::ng-deep .inu-icon .inu-icon-content{display:flex;align-items:center}.inu-button inu-icon ::ng-deep .inu-icon .inu-icon-content svg{display:flex;align-items:center}.inu-button .inu-button-icon{width:1.25rem}.inu-button .inu-button-label{flex:1}.inu-button:hover{border-color:var(--neutral);-webkit-box-shadow:0px 0px .25rem 0px var(--neutral);box-shadow:0 0 .25rem 0 var(--neutral)}.inu-button.secondary{background-color:var(--secondary-light-extra);border-color:var(--secondary-light);color:var(--text-color)}.inu-button.secondary:hover{border-color:var(--secondary);-webkit-box-shadow:0px 0px .25rem 0px var(--secondary);box-shadow:0 0 .25rem 0 var(--secondary)}.inu-button.primary,.inu-button.success{background-color:var(--success-light-extra);border-color:var(--success-light);color:var(--text-color)}.inu-button.primary:hover,.inu-button.success:hover{border-color:var(--success);-webkit-box-shadow:0px 0px .25rem 0px var(--success);box-shadow:0 0 .25rem 0 var(--success)}.inu-button.warn{background-color:var(--warning-light-extra);border-color:var(--warning-light);color:var(--text-color)}.inu-button.warn:hover{border-color:var(--warning);-webkit-box-shadow:0px 0px .25rem 0px var(--warning);box-shadow:0 0 .25rem 0 var(--warning)}.inu-button.danger,.inu-button.error{background-color:var(--danger-light-extra);border-color:var(--danger-light);color:var(--text-color)}.inu-button.danger:hover,.inu-button.error:hover{border-color:var(--danger);-webkit-box-shadow:0px 0px .25rem 0px var(--danger);box-shadow:0 0 .25rem 0 var(--danger)}.inu-button.link{border-top:none;border-left:none;border-right:none;background-color:transparent;box-shadow:0 0 .25rem 0 transparent!important}.inu-button.link:hover{background:linear-gradient(to bottom,transparent 95%,var(--neutral) 100%)}\n"] }]
26
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], link: [{ type: i0.Input, args: [{ isSignal: true, alias: "link", required: false }] }] } });
27
+
28
+ /**
29
+ * Generated bundle index. Do not edit.
30
+ */
31
+
32
+ export { InuButton };
33
+ //# sourceMappingURL=inugami-ng-components-inu-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-button.mjs","sources":["../../../projects/inugami-ng/components/inu-button/inu-button.component.ts","../../../projects/inugami-ng/components/inu-button/inu-button.component.html","../../../projects/inugami-ng/components/inu-button/inugami-ng-components-inu-button.ts"],"sourcesContent":["import {Component, computed, input} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n selector: 'inu-button',\n standalone: true,\n imports: [InuIcon],\n templateUrl: './inu-button.component.html',\n styleUrl: './inu-button.component.scss',\n})\nexport class InuButton {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n label = input<string | undefined | null>('');\n icon = input<string | null>(null);\n type = input<string>('');\n link = input<boolean>(false);\n\n _styleClass = computed<string>(() => {\n return [\n 'inu-button',\n this.type() ? this.type() : '',\n this.link()?'link':''\n ].join(' ');\n })\n\n}\n","@if(link()){\n <span [class]=\"_styleClass()\">\n\n @if(icon()){\n <span class=\"inu-button-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"1\"></inu-icon>\n </span>\n }\n\n <span class=\"inu-button-label\">\n @if(label()){\n {{label()}}\n }\n </span>\n </span>\n}\n@else{\n <button [class]=\"_styleClass()\">\n\n @if(icon()){\n <span class=\"inu-button-icon\">\n <inu-icon [icon]=\"icon()\" [size]=\"1\"></inu-icon>\n </span>\n }\n\n <span class=\"inu-button-label\">\n @if(label()){\n {{label()}}\n }\n </span>\n </button>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAUa,SAAS,CAAA;;;;AAKpB,IAAA,KAAK,GAAG,KAAK,CAA4B,EAAE,iDAAC;AAC5C,IAAA,IAAI,GAAG,KAAK,CAAgB,IAAI,gDAAC;AACjC,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;AACxB,IAAA,IAAI,GAAG,KAAK,CAAU,KAAK,gDAAC;AAE5B,IAAA,WAAW,GAAG,QAAQ,CAAS,MAAK;QAClC,OAAO;YACL,YAAY;AACZ,YAAA,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAC9B,IAAI,CAAC,IAAI,EAAE,GAAC,MAAM,GAAC;AACpB,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;AACb,IAAA,CAAC,uDAAC;uGAhBS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVtB,soBAgCA,EAAA,MAAA,EAAA,CAAA,qpEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1BY,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIN,SAAS,EAAA,UAAA,EAAA,CAAA;kBAPrB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,OAAA,EACP,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,soBAAA,EAAA,MAAA,EAAA,CAAA,qpEAAA,CAAA,EAAA;;;AENpB;;AAEG;;;;"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, model, signal, effect, Component } from '@angular/core';
2
+ import { input, output, model, signal, effect, Component } from '@angular/core';
3
3
  import { InuIcon } from 'inugami-icons';
4
4
 
5
5
  class InuCheckboxGroup {
@@ -12,6 +12,7 @@ class InuCheckboxGroup {
12
12
  _required = input(false, { ...(ngDevMode ? { debugName: "_required" } : {}), alias: 'required' });
13
13
  values = input([], ...(ngDevMode ? [{ debugName: "values" }] : []));
14
14
  vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
15
+ changed = output();
15
16
  // FormValueControl
16
17
  value = model([], ...(ngDevMode ? [{ debugName: "value" }] : []));
17
18
  _values = signal([], ...(ngDevMode ? [{ debugName: "_values" }] : []));
@@ -92,9 +93,9 @@ class InuCheckboxGroup {
92
93
  else {
93
94
  value.selected = !value.selected;
94
95
  }
96
+ const newSelectedValues = [];
95
97
  const currentValues = this._values();
96
98
  if (currentValues) {
97
- const newSelectedValues = [];
98
99
  for (let selectItem of currentValues) {
99
100
  if (selectItem.selected) {
100
101
  newSelectedValues.push(selectItem.value);
@@ -103,6 +104,7 @@ class InuCheckboxGroup {
103
104
  this.value.set(newSelectedValues);
104
105
  }
105
106
  this.initStyleClass();
107
+ this.changed.emit(newSelectedValues);
106
108
  }
107
109
  getItemClass(selectItem) {
108
110
  return selectItem.styleClass;
@@ -111,12 +113,12 @@ class InuCheckboxGroup {
111
113
  return valueItem === resultItem.value;
112
114
  }
113
115
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCheckboxGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
114
- 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: { 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"] }] });
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"] }] });
115
117
  }
116
118
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuCheckboxGroup, decorators: [{
117
119
  type: Component,
118
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"] }]
119
- }], 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 }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }] } });
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"] }] } });
120
122
 
121
123
  /**
122
124
  * 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, input, model, ModelSignal, OnInit, 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 selector: 'inu-checkbox-group',\n standalone: true,\n providers: [],\n imports: [InuIcon],\n templateUrl: './inu-checkbox-group.component.html',\n styleUrl: './inu-checkbox-group.component.scss',\n})\nexport class InuCheckboxGroup<T> implements FormValueControl<T[]>, OnInit {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n // input\n readonly disabled = input(false);\n readonly label = input('');\n readonly _required = input(false, {alias: 'required'});\n readonly values = input<InuSelectItem<T>[]>([]);\n readonly vertical = input(false);\n\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 ngOnInit(): 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 }\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 const currentValues = this._values();\n if (currentValues) {\n const newSelectedValues: T[] = [];\n\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\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","<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","/**\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-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 selector: 'inu-checkbox-group',\n standalone: true,\n providers: [],\n imports: [InuIcon],\n templateUrl: './inu-checkbox-group.component.html',\n styleUrl: './inu-checkbox-group.component.scss',\n})\nexport class InuCheckboxGroup<T> implements FormValueControl<T[]>, OnInit {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n // input\n readonly disabled = input(false);\n readonly label = 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 ngOnInit(): 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 }\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 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\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","<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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { input, viewChild, signal, effect, Component, contentChildren } from '@angular/core';
2
+ import { input, viewChild, signal, effect, Component, contentChildren, output } from '@angular/core';
3
3
  import { NgTemplateOutlet } from '@angular/common';
4
4
  import { InuIcon } from 'inugami-icons';
5
5
 
@@ -65,6 +65,7 @@ class InuPanelTabs {
65
65
  styleClass = input('', ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
66
66
  vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
67
67
  childrenTabs = contentChildren(InuPanelTab, ...(ngDevMode ? [{ debugName: "childrenTabs" }] : []));
68
+ changed = output();
68
69
  //
69
70
  _styleClass = signal('', ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
70
71
  valid = signal(true, ...(ngDevMode ? [{ debugName: "valid" }] : []));
@@ -103,6 +104,7 @@ class InuPanelTabs {
103
104
  for (let child of children) {
104
105
  if (activeTab == child.name()) {
105
106
  child.display.set(true);
107
+ this.changed.emit(child.name());
106
108
  this.valid.set(child.valid());
107
109
  found = true;
108
110
  }
@@ -113,6 +115,7 @@ class InuPanelTabs {
113
115
  for (let child of children) {
114
116
  if (first) {
115
117
  child.display.set(true);
118
+ this.changed.emit(child.name());
116
119
  this.valid.set(child.valid());
117
120
  first = false;
118
121
  }
@@ -136,6 +139,7 @@ class InuPanelTabs {
136
139
  if (child.name() === panel.name()) {
137
140
  child.display.set(true);
138
141
  this.valid.set(child.valid());
142
+ this.changed.emit(child.name());
139
143
  }
140
144
  else {
141
145
  child.display.set(false);
@@ -159,7 +163,7 @@ class InuPanelTabs {
159
163
  }
160
164
  }
161
165
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanelTabs, deps: [], target: i0.ɵɵFactoryTarget.Component });
162
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuPanelTabs, isStandalone: true, selector: "inu-panel-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], queries: [{ propertyName: "childrenTabs", predicate: InuPanelTab, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n", styles: [".inu-panel-tabs{display:flex;flex-direction:column}.inu-panel-tabs .inu-panel-tabs-headers{display:flex}.inu-panel-tabs .inu-panel-tabs-headers ul{list-style:none;padding:0;margin:0;display:flex;gap:.25rem;width:100%;border-bottom:1px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul.noValid{border-bottom:1px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li{cursor:pointer;display:flex;border:1px solid var(--neutral-light);transition:background-color .25s}.inu-panel-tabs .inu-panel-tabs-headers ul li .inu-panel-tabs-headers-child-tab{display:flex;gap:1rem;align-items:baseline}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid{border:1px solid var(--danger-light-extra-extra);background-color:var(--danger-light-extra-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.display{background-color:var(--secondary-light-extra);border:1px solid var(--secondary-light-extra);border-bottom:2px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid.display{background-color:var(--danger-light);border:1px solid var(--danger-light);border-bottom:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li:hover{background-color:var(--secondary-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid:hover{background-color:var(--danger-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noAccess{cursor:not-allowed;color:var(--neutral);background-color:var(--neutral-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li{padding:.25rem 1rem}.inu-panel-tabs.vertical{gap:1rem}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul{flex-direction:column;border-right:2px solid var(--secondary);border-bottom:none}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul.noValid{border-right:2px solid var(--danger)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.display{border-bottom:none;border-right:2px solid var(--secondary)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.noValid.display{border-bottom:none;border-right:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-content{flex:1}.inu-panel-tabs.vertical{flex-direction:row}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuPanelTabs, isStandalone: true, selector: "inu-panel-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed" }, providers: [], queries: [{ propertyName: "childrenTabs", predicate: InuPanelTab, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n", styles: [".inu-panel-tabs{display:flex;flex-direction:column}.inu-panel-tabs .inu-panel-tabs-headers{display:flex}.inu-panel-tabs .inu-panel-tabs-headers ul{list-style:none;padding:0;margin:0;display:flex;gap:.25rem;width:100%;border-bottom:1px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul.noValid{border-bottom:1px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li{cursor:pointer;display:flex;border:1px solid var(--neutral-light);transition:background-color .25s}.inu-panel-tabs .inu-panel-tabs-headers ul li .inu-panel-tabs-headers-child-tab{display:flex;gap:1rem;align-items:baseline}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid{border:1px solid var(--danger-light-extra-extra);background-color:var(--danger-light-extra-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.display{background-color:var(--secondary-light-extra);border:1px solid var(--secondary-light-extra);border-bottom:2px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid.display{background-color:var(--danger-light);border:1px solid var(--danger-light);border-bottom:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li:hover{background-color:var(--secondary-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid:hover{background-color:var(--danger-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noAccess{cursor:not-allowed;color:var(--neutral);background-color:var(--neutral-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li{padding:.25rem 1rem}.inu-panel-tabs.vertical{gap:1rem}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul{flex-direction:column;border-right:2px solid var(--secondary);border-bottom:none}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul.noValid{border-right:2px solid var(--danger)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.display{border-bottom:none;border-right:2px solid var(--secondary)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.noValid.display{border-bottom:none;border-right:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-content{flex:1}.inu-panel-tabs.vertical{flex-direction:row}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
163
167
  }
164
168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanelTabs, decorators: [{
165
169
  type: Component,
@@ -167,7 +171,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
167
171
  NgTemplateOutlet,
168
172
  InuIcon
169
173
  ], template: "<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n", styles: [".inu-panel-tabs{display:flex;flex-direction:column}.inu-panel-tabs .inu-panel-tabs-headers{display:flex}.inu-panel-tabs .inu-panel-tabs-headers ul{list-style:none;padding:0;margin:0;display:flex;gap:.25rem;width:100%;border-bottom:1px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul.noValid{border-bottom:1px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li{cursor:pointer;display:flex;border:1px solid var(--neutral-light);transition:background-color .25s}.inu-panel-tabs .inu-panel-tabs-headers ul li .inu-panel-tabs-headers-child-tab{display:flex;gap:1rem;align-items:baseline}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid{border:1px solid var(--danger-light-extra-extra);background-color:var(--danger-light-extra-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.display{background-color:var(--secondary-light-extra);border:1px solid var(--secondary-light-extra);border-bottom:2px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid.display{background-color:var(--danger-light);border:1px solid var(--danger-light);border-bottom:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li:hover{background-color:var(--secondary-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid:hover{background-color:var(--danger-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noAccess{cursor:not-allowed;color:var(--neutral);background-color:var(--neutral-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li{padding:.25rem 1rem}.inu-panel-tabs.vertical{gap:1rem}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul{flex-direction:column;border-right:2px solid var(--secondary);border-bottom:none}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul.noValid{border-right:2px solid var(--danger)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.display{border-bottom:none;border-right:2px solid var(--secondary)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.noValid.display{border-bottom:none;border-right:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-content{flex:1}.inu-panel-tabs.vertical{flex-direction:row}\n"] }]
170
- }], ctorParameters: () => [], propDecorators: { activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], childrenTabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => InuPanelTab), { isSignal: true }] }] } });
174
+ }], ctorParameters: () => [], propDecorators: { activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], childrenTabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => InuPanelTab), { isSignal: true }] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
171
175
 
172
176
  /**
173
177
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"inugami-ng-components-inu-panel-tabs.mjs","sources":["../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tab/inu-panel-tab.component.ts","../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tabs.ts","../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tabs.html","../../../projects/inugami-ng/components/inu-panel-tabs/inugami-ng-components-inu-panel-tabs.ts"],"sourcesContent":["import {Component, effect, input, signal, TemplateRef, viewChild} from '@angular/core';\n\n@Component({\n selector: 'inu-panel-tab',\n standalone: true,\n providers: [],\n imports: [],\n template: `\n <ng-template #content>\n <div [class]=\"_styleClass()\">\n <ng-content/>\n </div>\n </ng-template>\n `\n})\nexport class InuPanelTab {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n icon = input<string>('');\n hasAccess = input<boolean>(true);\n label = input<string>('');\n name = input.required<string>();\n styleClass = input<string | undefined | null>('');\n valid = input<boolean>(true);\n //\n readonly templateRef = viewChild.required<TemplateRef<any>>('content');\n //\n display = signal<boolean>(false);\n _styleClass = signal<string>('');\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n const styles: string[] = ['inu-panel-tab'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n this._styleClass.set(styles.join(\" \"));\n });\n }\n}\n","import {AfterViewInit, Component, contentChildren, effect, input, signal} from '@angular/core';\nimport {InuPanelTab} from './inu-panel-tab/inu-panel-tab.component';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n selector: 'inu-panel-tabs',\n standalone: true,\n providers: [],\n imports: [\n NgTemplateOutlet,\n InuIcon\n ],\n templateUrl: './inu-panel-tabs.html',\n styleUrl: './inu-panel-tabs.scss',\n})\nexport class InuPanelTabs implements AfterViewInit {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n readonly activeTab = input<string|undefined>(undefined);\n styleClass = input<string | undefined | null>('');\n readonly vertical = input(false);\n readonly childrenTabs = contentChildren(InuPanelTab);\n\n\n //\n _styleClass = signal<string>('');\n valid = signal<boolean>(true);\n tabs = signal<InuPanelTab[]>([]);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.initStyleClass();\n });\n }\n\n private initStyleClass() {\n const styles: string[] = ['inu-panel-tabs'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n if (this.vertical()) {\n styles.push('vertical');\n }\n this._styleClass.set(styles.join(\" \"));\n }\n\n\n ngAfterViewInit(): void {\n this.initTabs();\n }\n\n private initTabs() {\n const result: InuPanelTab[] = [];\n const children = this.childrenTabs();\n\n\n\n for (let child of children) {\n result.push(child);\n }\n\n let found = false;\n const activeTab = this.activeTab();\n if(activeTab){\n for (let child of children) {\n if (activeTab == child.name()) {\n child.display.set(true);\n this.valid.set(child.valid());\n found = true;\n }\n }\n }\n\n if(!found){\n let first = true;\n for (let child of children) {\n if (first) {\n child.display.set(true);\n this.valid.set(child.valid());\n first = false;\n }\n }\n }\n\n this.tabs.set(result);\n }\n\n //==================================================================================================================\n // ACTIONS\n //==================================================================================================================\n openTab(panel: InuPanelTab) {\n if (!panel.hasAccess()) {\n return;\n }\n this.valid.set(true);\n const children = this.childrenTabs();\n if (!children) {\n return;\n }\n for (let child of children) {\n if (child.name() === panel.name()) {\n child.display.set(true);\n this.valid.set(child.valid());\n } else {\n child.display.set(false);\n }\n }\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n private checkValidity() {\n const children = this.childrenTabs();\n if (!children) {\n return;\n }\n this.valid.set(true);\n for (let child of children) {\n if(!child.valid()){\n this.valid.set(false);\n break;\n }\n }\n }\n}\n","<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\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-panel-tabs.mjs","sources":["../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tab/inu-panel-tab.component.ts","../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tabs.ts","../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tabs.html","../../../projects/inugami-ng/components/inu-panel-tabs/inugami-ng-components-inu-panel-tabs.ts"],"sourcesContent":["import {Component, effect, input, signal, TemplateRef, viewChild} from '@angular/core';\n\n@Component({\n selector: 'inu-panel-tab',\n standalone: true,\n providers: [],\n imports: [],\n template: `\n <ng-template #content>\n <div [class]=\"_styleClass()\">\n <ng-content/>\n </div>\n </ng-template>\n `\n})\nexport class InuPanelTab {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n icon = input<string>('');\n hasAccess = input<boolean>(true);\n label = input<string>('');\n name = input.required<string>();\n styleClass = input<string | undefined | null>('');\n valid = input<boolean>(true);\n //\n readonly templateRef = viewChild.required<TemplateRef<any>>('content');\n //\n display = signal<boolean>(false);\n _styleClass = signal<string>('');\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n const styles: string[] = ['inu-panel-tab'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n this._styleClass.set(styles.join(\" \"));\n });\n }\n}\n","import {AfterViewInit, Component, contentChildren, effect, input, output, signal} from '@angular/core';\nimport {InuPanelTab} from './inu-panel-tab/inu-panel-tab.component';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n selector: 'inu-panel-tabs',\n standalone: true,\n providers: [],\n imports: [\n NgTemplateOutlet,\n InuIcon\n ],\n templateUrl: './inu-panel-tabs.html',\n styleUrl: './inu-panel-tabs.scss',\n})\nexport class InuPanelTabs implements AfterViewInit {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n readonly activeTab = input<string|undefined>(undefined);\n styleClass = input<string | undefined | null>('');\n readonly vertical = input(false);\n readonly childrenTabs = contentChildren(InuPanelTab);\n changed = output<string>();\n\n //\n _styleClass = signal<string>('');\n valid = signal<boolean>(true);\n tabs = signal<InuPanelTab[]>([]);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.initStyleClass();\n });\n }\n\n private initStyleClass() {\n const styles: string[] = ['inu-panel-tabs'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n if (this.vertical()) {\n styles.push('vertical');\n }\n this._styleClass.set(styles.join(\" \"));\n }\n\n\n ngAfterViewInit(): void {\n this.initTabs();\n }\n\n private initTabs() {\n const result: InuPanelTab[] = [];\n const children = this.childrenTabs();\n\n\n\n for (let child of children) {\n result.push(child);\n }\n\n let found = false;\n const activeTab = this.activeTab();\n if(activeTab){\n for (let child of children) {\n if (activeTab == child.name()) {\n child.display.set(true);\n this.changed.emit(child.name());\n this.valid.set(child.valid());\n found = true;\n }\n }\n }\n\n if(!found){\n let first = true;\n for (let child of children) {\n if (first) {\n child.display.set(true);\n this.changed.emit(child.name());\n this.valid.set(child.valid());\n first = false;\n }\n }\n }\n\n this.tabs.set(result);\n }\n\n //==================================================================================================================\n // ACTIONS\n //==================================================================================================================\n openTab(panel: InuPanelTab) {\n if (!panel.hasAccess()) {\n return;\n }\n this.valid.set(true);\n const children = this.childrenTabs();\n if (!children) {\n return;\n }\n for (let child of children) {\n if (child.name() === panel.name()) {\n child.display.set(true);\n this.valid.set(child.valid());\n this.changed.emit(child.name());\n } else {\n child.display.set(false);\n }\n }\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n private checkValidity() {\n const children = this.childrenTabs();\n if (!children) {\n return;\n }\n this.valid.set(true);\n for (let child of children) {\n if(!child.valid()){\n this.valid.set(false);\n break;\n }\n }\n }\n}\n","<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAea,WAAW,CAAA;;;;AAKtB,IAAA,IAAI,GAAG,KAAK,CAAS,EAAE,gDAAC;AACxB,IAAA,SAAS,GAAG,KAAK,CAAU,IAAI,qDAAC;AAChC,IAAA,KAAK,GAAG,KAAK,CAAS,EAAE,iDAAC;AACzB,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,+CAAU;AAC/B,IAAA,UAAU,GAAG,KAAK,CAA4B,EAAE,sDAAC;AACjD,IAAA,KAAK,GAAG,KAAK,CAAU,IAAI,iDAAC;;AAEnB,IAAA,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAmB,SAAS,CAAC;;AAEtE,IAAA,OAAO,GAAG,MAAM,CAAU,KAAK,mDAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,uDAAC;;;;AAKhC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAa,CAAC,eAAe,CAAC;AAC1C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;YAC/B,IAAI,KAAK,EAAE;AACT,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACpB;AACA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,QAAA,CAAC,CAAC;IACJ;uGA7BW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAVX,EAAE,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAEH;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAEU,WAAW,EAAA,UAAA,EAAA,CAAA;kBAbvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA;AACF,iBAAA;4oBAa6D,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MCX1D,YAAY,CAAA;;;;AAMd,IAAA,SAAS,GAAG,KAAK,CAAmB,SAAS,qDAAC;AACvD,IAAA,UAAU,GAAG,KAAK,CAA4B,EAAE,sDAAC;AACxC,IAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,oDAAC;AACvB,IAAA,YAAY,GAAG,eAAe,CAAC,WAAW,wDAAC;IACpD,OAAO,GAAG,MAAM,EAAU;;AAG1B,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,uDAAC;AAChC,IAAA,KAAK,GAAG,MAAM,CAAU,IAAI,iDAAC;AAC7B,IAAA,IAAI,GAAG,MAAM,CAAgB,EAAE,gDAAC;;;;AAKhC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,cAAc,EAAE;AACvB,QAAA,CAAC,CAAC;IACJ;IAEQ,cAAc,GAAA;AACpB,QAAA,MAAM,MAAM,GAAa,CAAC,gBAAgB,CAAC;AAC3C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,IAAI,KAAK,EAAE;AACT,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB;AACA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACzB;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC;IAGA,eAAe,GAAA;QACb,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEQ,QAAQ,GAAA;QACd,MAAM,MAAM,GAAkB,EAAE;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AAIpC,QAAA,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE;AAC1B,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACpB;QAEA,IAAI,KAAK,GAAG,KAAK;AACjB,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE;QAClC,IAAG,SAAS,EAAC;AACX,YAAA,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE;AAC1B,gBAAA,IAAI,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAC7B,oBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC7B,KAAK,GAAG,IAAI;gBACd;YACF;QACF;QAEA,IAAG,CAAC,KAAK,EAAC;YACR,IAAI,KAAK,GAAG,IAAI;AAChB,YAAA,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE;gBAC1B,IAAI,KAAK,EAAE;AACT,oBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC7B,KAAK,GAAG,KAAK;gBACf;YACF;QACF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;IACvB;;;;AAKA,IAAA,OAAO,CAAC,KAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;YACtB;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;QACpC,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AACA,QAAA,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE;YAC1B,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC,IAAI,EAAE,EAAE;AACjC,gBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjC;iBAAO;AACL,gBAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC1B;QACF;IACF;;;;IAKQ,aAAa,GAAA;AACnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;QACpC,IAAI,CAAC,QAAQ,EAAE;YACb;QACF;AACA,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE;AAC1B,YAAA,IAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC;AAChB,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;gBACrB;YACF;QACF;IACF;uGAvHW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EARZ,EAAE,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAiB2B,WAAW,6CCzBrD,+rCAuCA,EAAA,MAAA,EAAA,CAAA,8lEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED7BI,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,YAAY,EAAA,UAAA,EAAA,CAAA;kBAXxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,SAAA,EACL,EAAE,EAAA,OAAA,EACJ;wBACP,gBAAgB;wBAChB;AACD,qBAAA,EAAA,QAAA,EAAA,+rCAAA,EAAA,MAAA,EAAA,CAAA,8lEAAA,CAAA,EAAA;oaAauC,WAAW,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzBrD;;AAEG;;;;"}
@@ -0,0 +1,99 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, Injectable, input, inject, Component } from '@angular/core';
3
+ import { InuIcon } from 'inugami-icons';
4
+ import { InuTemplateRegistryService } from 'inugami-ng/directives';
5
+ import { UuidUtils } from 'inugami-ng/services';
6
+
7
+ const DEFAULT_TTL = 5000;
8
+ class InuToastServices {
9
+ //====================================================================================================================
10
+ // ATTRIBUTES
11
+ //====================================================================================================================
12
+ _messages = signal([], ...(ngDevMode ? [{ debugName: "_messages" }] : []));
13
+ intervalId;
14
+ message = computed(() => this.extractMessage(), ...(ngDevMode ? [{ debugName: "message" }] : []));
15
+ //====================================================================================================================
16
+ // INIT
17
+ //====================================================================================================================
18
+ constructor() {
19
+ this.intervalId = setInterval(() => this.clearMessage(), 1000);
20
+ }
21
+ ngOnDestroy() {
22
+ clearInterval(this.intervalId);
23
+ }
24
+ clearMessage() {
25
+ const keepMessage = [];
26
+ const now = new Date().getTime();
27
+ const currentMessage = this._messages();
28
+ for (let i = 0; i < currentMessage.length; i++) {
29
+ const message = currentMessage[i];
30
+ if (message.ttl > now) {
31
+ keepMessage.push(message);
32
+ }
33
+ }
34
+ this._messages.set(keepMessage);
35
+ }
36
+ //====================================================================================================================
37
+ // API
38
+ //====================================================================================================================
39
+ addMessage(message) {
40
+ const delay = message.delay && message.delay > 1000 ? message.delay : DEFAULT_TTL;
41
+ this._messages.update(prev => [...prev, {
42
+ id: UuidUtils.buildUid(),
43
+ ttl: new Date().getTime() + delay,
44
+ value: message
45
+ }]);
46
+ }
47
+ extractMessage() {
48
+ const result = [];
49
+ const currentMessages = this._messages();
50
+ for (let message of currentMessages) {
51
+ if (message.value) {
52
+ result.push(message);
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+ removeMessage(message) {
58
+ const allMessages = this._messages().filter(m => m.id != message.id);
59
+ this._messages.set(allMessages);
60
+ }
61
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToastServices, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
62
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToastServices, providedIn: 'root' });
63
+ }
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToastServices, decorators: [{
65
+ type: Injectable,
66
+ args: [{ providedIn: 'root' }]
67
+ }], ctorParameters: () => [] });
68
+
69
+ class InuToast {
70
+ //====================================================================================================================
71
+ // ATTRIBUTES
72
+ //====================================================================================================================
73
+ delay = input(5000, ...(ngDevMode ? [{ debugName: "delay" }] : []));
74
+ service = inject(InuToastServices);
75
+ messages = this.service.message;
76
+ resolveMessageStyleclass(message) {
77
+ const result = ['inu-toast-message'];
78
+ if (message?.level) {
79
+ result.push(message.level);
80
+ }
81
+ return result.join(' ');
82
+ }
83
+ closeMessage(message) {
84
+ this.service.removeMessage(message);
85
+ }
86
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToast, deps: [], target: i0.ɵɵFactoryTarget.Component });
87
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuToast, isStandalone: true, selector: "inu-toast", inputs: { delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null } }, providers: [InuTemplateRegistryService], ngImport: i0, template: "<div class=\"inu-toast\">\n\n @if (messages()) {\n <ul>\n @for (message of messages(); track message; ) {\n <li [class]=\"resolveMessageStyleclass(message.value)\">\n <article>\n\n <header>\n <span class=\"inu-toast-header-icon\">\n @if (message.value?.icon) {\n <inu-icon [icon]=\"message.value?.icon!\" [size]=\"1\"></inu-icon>\n }\n </span>\n <h3>\n @if (message.value?.title) {\n {{ message.value?.title }}\n }\n </h3>\n\n <span class=\"inu-toast-header-close\" (click)=\"closeMessage(message)\">\n <inu-icon icon=\"close\" [size]=\"0.7\"></inu-icon>\n </span>\n </header>\n\n <div class=\"inu-toast-content\">\n @if (message.value?.message) {\n {{ message.value?.message }}\n }\n </div>\n </article>\n </li>\n }\n </ul>\n\n }\n</div>\n", styles: [".inu-toast{color:var(--text-color);position:absolute;bottom:2rem;right:1rem}.inu-toast ul{padding:0;margin:0;list-style:none;display:flex;flex-direction:column;align-items:end;gap:1rem}.inu-toast ul li{display:flex}.inu-toast ul li article{display:flex;flex-direction:column;border:1px solid var(--neutral);min-width:15rem;padding:.5rem;background-color:var(--background-color);border-radius:.5rem;-webkit-box-shadow:0px 0px 1rem 0px var(--shadow-color);box-shadow:0 0 1rem 0 var(--shadow-color);transition:border-color .25s}.inu-toast ul li article:hover{border-color:var(--text-color)}.inu-toast ul li article header{display:flex;flex-direction:row;gap:1rem}.inu-toast ul li article header h3{flex:1;margin:0;padding:0}.inu-toast ul li article header .inu-toast-header-icon{width:1rem}.inu-toast ul li article header .inu-toast-header-close{width:1.5rem;height:1.5rem;border:.125rem solid var(--neutral);display:flex;border-radius:1rem;justify-content:center;align-items:normal;fill:var(--neutral);transition:fill .25s,border-color .25s}.inu-toast ul li article header .inu-toast-header-close:hover{fill:var(--text-color);border-color:var(--text-color)}.inu-toast ul li article header .inu-toast-header-close inu-icon{display:flex;align-items:center}.inu-toast ul li article header .inu-toast-header-close ::ng-deep .inu-icon{display:flex;justify-content:center;align-items:normal}.inu-toast ul li article header .inu-toast-header-close ::ng-deep .inu-icon .inu-icon-content{display:flex;justify-content:center;align-items:normal}.inu-toast ul li article .inu-toast-content{display:flex}.inu-toast ul li.success article{border:1px solid var(--success)}.inu-toast ul li.success article header h3{color:var(--success-dark)}.inu-toast ul li.info article{border:1px solid var(--info)}.inu-toast ul li.info article header h3{color:var(--info)}.inu-toast ul li.warn article{border:1px solid var(--warning-dark)}.inu-toast ul li.warn article header h3{color:var(--warning-dark)}.inu-toast ul li.error article{border:1px solid var(--danger)}.inu-toast ul li.error article header h3{color:var(--danger-dark)}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuToast, decorators: [{
90
+ type: Component,
91
+ args: [{ selector: 'inu-toast', standalone: true, providers: [InuTemplateRegistryService], imports: [InuIcon], template: "<div class=\"inu-toast\">\n\n @if (messages()) {\n <ul>\n @for (message of messages(); track message; ) {\n <li [class]=\"resolveMessageStyleclass(message.value)\">\n <article>\n\n <header>\n <span class=\"inu-toast-header-icon\">\n @if (message.value?.icon) {\n <inu-icon [icon]=\"message.value?.icon!\" [size]=\"1\"></inu-icon>\n }\n </span>\n <h3>\n @if (message.value?.title) {\n {{ message.value?.title }}\n }\n </h3>\n\n <span class=\"inu-toast-header-close\" (click)=\"closeMessage(message)\">\n <inu-icon icon=\"close\" [size]=\"0.7\"></inu-icon>\n </span>\n </header>\n\n <div class=\"inu-toast-content\">\n @if (message.value?.message) {\n {{ message.value?.message }}\n }\n </div>\n </article>\n </li>\n }\n </ul>\n\n }\n</div>\n", styles: [".inu-toast{color:var(--text-color);position:absolute;bottom:2rem;right:1rem}.inu-toast ul{padding:0;margin:0;list-style:none;display:flex;flex-direction:column;align-items:end;gap:1rem}.inu-toast ul li{display:flex}.inu-toast ul li article{display:flex;flex-direction:column;border:1px solid var(--neutral);min-width:15rem;padding:.5rem;background-color:var(--background-color);border-radius:.5rem;-webkit-box-shadow:0px 0px 1rem 0px var(--shadow-color);box-shadow:0 0 1rem 0 var(--shadow-color);transition:border-color .25s}.inu-toast ul li article:hover{border-color:var(--text-color)}.inu-toast ul li article header{display:flex;flex-direction:row;gap:1rem}.inu-toast ul li article header h3{flex:1;margin:0;padding:0}.inu-toast ul li article header .inu-toast-header-icon{width:1rem}.inu-toast ul li article header .inu-toast-header-close{width:1.5rem;height:1.5rem;border:.125rem solid var(--neutral);display:flex;border-radius:1rem;justify-content:center;align-items:normal;fill:var(--neutral);transition:fill .25s,border-color .25s}.inu-toast ul li article header .inu-toast-header-close:hover{fill:var(--text-color);border-color:var(--text-color)}.inu-toast ul li article header .inu-toast-header-close inu-icon{display:flex;align-items:center}.inu-toast ul li article header .inu-toast-header-close ::ng-deep .inu-icon{display:flex;justify-content:center;align-items:normal}.inu-toast ul li article header .inu-toast-header-close ::ng-deep .inu-icon .inu-icon-content{display:flex;justify-content:center;align-items:normal}.inu-toast ul li article .inu-toast-content{display:flex}.inu-toast ul li.success article{border:1px solid var(--success)}.inu-toast ul li.success article header h3{color:var(--success-dark)}.inu-toast ul li.info article{border:1px solid var(--info)}.inu-toast ul li.info article header h3{color:var(--info)}.inu-toast ul li.warn article{border:1px solid var(--warning-dark)}.inu-toast ul li.warn article header h3{color:var(--warning-dark)}.inu-toast ul li.error article{border:1px solid var(--danger)}.inu-toast ul li.error article header h3{color:var(--danger-dark)}\n"] }]
92
+ }], propDecorators: { delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }] } });
93
+
94
+ /**
95
+ * Generated bundle index. Do not edit.
96
+ */
97
+
98
+ export { InuToast, InuToastServices };
99
+ //# sourceMappingURL=inugami-ng-components-inu-toast.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-toast.mjs","sources":["../../../projects/inugami-ng/components/inu-toast/inu-toast.service.ts","../../../projects/inugami-ng/components/inu-toast/inu-toast.component.ts","../../../projects/inugami-ng/components/inu-toast/inu-toast.component.html","../../../projects/inugami-ng/components/inu-toast/inugami-ng-components-inu-toast.ts"],"sourcesContent":["import {computed, Injectable, OnDestroy, signal} from '@angular/core';\nimport {ToastMessage} from './inu-toast.model';\nimport {TTLWrapper} from 'inugami-ng/models';\nimport {UuidUtils} from 'inugami-ng/services';\n\nconst DEFAULT_TTL = 5000;\n\n@Injectable({providedIn: 'root'})\nexport class InuToastServices implements OnDestroy {\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n private _messages = signal<TTLWrapper<ToastMessage>[]>([]);\n private intervalId: number;\n public message = computed(() => this.extractMessage());\n\n //====================================================================================================================\n // INIT\n //====================================================================================================================\n constructor() {\n this.intervalId = setInterval(() => this.clearMessage(), 1000);\n }\n\n ngOnDestroy(): void {\n clearInterval(this.intervalId);\n }\n\n private clearMessage() {\n const keepMessage: TTLWrapper<ToastMessage>[] = [];\n const now = new Date().getTime();\n\n const currentMessage = this._messages();\n for (let i = 0; i < currentMessage.length; i++) {\n const message = currentMessage[i];\n if (message.ttl > now) {\n keepMessage.push(message);\n }\n }\n this._messages.set(keepMessage);\n\n }\n\n //====================================================================================================================\n // API\n //====================================================================================================================\n addMessage(message: ToastMessage) {\n const delay = message.delay && message.delay > 1000 ? message.delay : DEFAULT_TTL;\n this._messages.update(prev => [...prev, {\n id: UuidUtils.buildUid(),\n ttl: new Date().getTime() + delay,\n value: message\n }]);\n }\n\n\n private extractMessage(): TTLWrapper<ToastMessage>[] {\n const result: TTLWrapper<ToastMessage>[] = [];\n const currentMessages = this._messages();\n for (let message of currentMessages) {\n if (message.value) {\n result.push(message)\n }\n }\n return result;\n }\n\n removeMessage(message: TTLWrapper<ToastMessage>) {\n const allMessages = this._messages().filter(m=> m.id!=message.id);\n this._messages.set(allMessages);\n }\n}\n","import {Component, inject, input} from '@angular/core';\nimport {InuIcon} from 'inugami-icons';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {InuToastServices} from './inu-toast.service';\nimport {ToastMessage} from './inu-toast.model';\nimport {TTLWrapper} from 'inugami-ng/models';\n\n@Component({\n selector: 'inu-toast',\n standalone: true,\n providers: [InuTemplateRegistryService],\n imports: [InuIcon],\n templateUrl: './inu-toast.component.html',\n styleUrl: './inu-toast.component.scss',\n})\nexport class InuToast {\n\n //====================================================================================================================\n // ATTRIBUTES\n //====================================================================================================================\n delay = input<number>(5000);\n service = inject(InuToastServices);\n\n messages = this.service.message;\n\n\n protected resolveMessageStyleclass(message?: ToastMessage): string {\n const result: string[] = ['inu-toast-message'];\n if (message?.level) {\n result.push(message.level);\n }\n return result.join(' ');\n }\n\n\n protected closeMessage(message: TTLWrapper<ToastMessage>) {\n this.service.removeMessage(message);\n }\n}\n","<div class=\"inu-toast\">\n\n @if (messages()) {\n <ul>\n @for (message of messages(); track message; ) {\n <li [class]=\"resolveMessageStyleclass(message.value)\">\n <article>\n\n <header>\n <span class=\"inu-toast-header-icon\">\n @if (message.value?.icon) {\n <inu-icon [icon]=\"message.value?.icon!\" [size]=\"1\"></inu-icon>\n }\n </span>\n <h3>\n @if (message.value?.title) {\n {{ message.value?.title }}\n }\n </h3>\n\n <span class=\"inu-toast-header-close\" (click)=\"closeMessage(message)\">\n <inu-icon icon=\"close\" [size]=\"0.7\"></inu-icon>\n </span>\n </header>\n\n <div class=\"inu-toast-content\">\n @if (message.value?.message) {\n {{ message.value?.message }}\n }\n </div>\n </article>\n </li>\n }\n </ul>\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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"}
@@ -28,9 +28,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
28
28
  args: [{ providedIn: 'root' }]
29
29
  }] });
30
30
 
31
+ class UuidUtils {
32
+ static _S4() {
33
+ return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
34
+ }
35
+ ;
36
+ static buildUid() {
37
+ return (this._S4() + this._S4() + "-" +
38
+ this._S4() + "-4" +
39
+ this._S4().substring(0, 3) + "-" +
40
+ this._S4() + "-" +
41
+ this._S4() + this._S4() + this._S4()).toLowerCase();
42
+ }
43
+ }
44
+
31
45
  /**
32
46
  * Generated bundle index. Do not edit.
33
47
  */
34
48
 
35
- export { CacheServices };
49
+ export { CacheServices, UuidUtils };
36
50
  //# sourceMappingURL=inugami-ng-services.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"inugami-ng-services.mjs","sources":["../../../projects/inugami-ng/services/cache.service.ts","../../../projects/inugami-ng/services/inugami-ng-services.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nconst CACHE :any = {};\nconst PENDING_REQUESTS: Map<string, Observable<any>> = new Map();\n\n@Injectable({ providedIn: 'root' })\nexport class CacheServices {\n\n //==================================================================================================================\n // API\n //==================================================================================================================\n public get<T>(key: string): T | undefined {\n return CACHE[key];\n }\n\n public set(key: string, object: any): void {\n CACHE[key] = object;\n PENDING_REQUESTS.delete(key);\n }\n\n\n public getPending(key: string): Observable<any> | undefined {\n return PENDING_REQUESTS.get(key);\n }\n\n public setPending(key: string, obs: Observable<any>): void {\n PENDING_REQUESTS.set(key, obs);\n }\n\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAEA,MAAM,KAAK,GAAQ,EAAE;AACrB,MAAM,gBAAgB,GAAiC,IAAI,GAAG,EAAE;MAGnD,aAAa,CAAA;;;;AAKjB,IAAA,GAAG,CAAI,GAAW,EAAA;AACvB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB;IAEO,GAAG,CAAC,GAAW,EAAE,MAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;AACnB,QAAA,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;IAC9B;AAGO,IAAA,UAAU,CAAC,GAAW,EAAA;AAC3B,QAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC;IAEO,UAAU,CAAC,GAAW,EAAE,GAAoB,EAAA;AACjD,QAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAChC;uGArBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACLlC;;AAEG;;;;"}
1
+ {"version":3,"file":"inugami-ng-services.mjs","sources":["../../../projects/inugami-ng/services/cache.service.ts","../../../projects/inugami-ng/services/uuid.utils.ts","../../../projects/inugami-ng/services/inugami-ng-services.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\nconst CACHE :any = {};\nconst PENDING_REQUESTS: Map<string, Observable<any>> = new Map();\n\n@Injectable({ providedIn: 'root' })\nexport class CacheServices {\n\n //==================================================================================================================\n // API\n //==================================================================================================================\n public get<T>(key: string): T | undefined {\n return CACHE[key];\n }\n\n public set(key: string, object: any): void {\n CACHE[key] = object;\n PENDING_REQUESTS.delete(key);\n }\n\n\n public getPending(key: string): Observable<any> | undefined {\n return PENDING_REQUESTS.get(key);\n }\n\n public setPending(key: string, obs: Observable<any>): void {\n PENDING_REQUESTS.set(key, obs);\n }\n\n\n}\n","export class UuidUtils {\n\n private static _S4():string {\n return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);\n };\n\n public static buildUid(): string {\n return (\n this._S4() + this._S4() + \"-\" +\n this._S4() + \"-4\" +\n this._S4().substring(0, 3) + \"-\" +\n this._S4() + \"-\" +\n this._S4() + this._S4() + this._S4()\n ).toLowerCase();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAEA,MAAM,KAAK,GAAQ,EAAE;AACrB,MAAM,gBAAgB,GAAiC,IAAI,GAAG,EAAE;MAGnD,aAAa,CAAA;;;;AAKjB,IAAA,GAAG,CAAI,GAAW,EAAA;AACvB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB;IAEO,GAAG,CAAC,GAAW,EAAE,MAAW,EAAA;AACjC,QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM;AACnB,QAAA,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC;IAC9B;AAGO,IAAA,UAAU,CAAC,GAAW,EAAA;AAC3B,QAAA,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;IAClC;IAEO,UAAU,CAAC,GAAW,EAAE,GAAoB,EAAA;AACjD,QAAA,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAChC;uGArBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAb,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,SAAS,CAAA;AAEZ,IAAA,OAAO,GAAG,GAAA;QAChB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,OAAO,IAAI,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACxE;;AAEO,IAAA,OAAO,QAAQ,GAAA;QACpB,OAAO,CACL,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;AAC7B,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI;YACjB,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;AAChC,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;AAChB,YAAA,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EACpC,WAAW,EAAE;IACjB;AACD;;ACfD;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "inugami-ng",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "license": "GPL-3.0-only",
5
5
  "description": "Inugami project angular library",
6
6
  "keywords": [
@@ -36,6 +36,10 @@
36
36
  "types": "./types/inugami-ng.d.ts",
37
37
  "default": "./fesm2022/inugami-ng.mjs"
38
38
  },
39
+ "./components/inu-button": {
40
+ "types": "./types/inugami-ng-components-inu-button.d.ts",
41
+ "default": "./fesm2022/inugami-ng-components-inu-button.mjs"
42
+ },
39
43
  "./components/inu-checkbox-group": {
40
44
  "types": "./types/inugami-ng-components-inu-checkbox-group.d.ts",
41
45
  "default": "./fesm2022/inugami-ng-components-inu-checkbox-group.mjs"
@@ -60,6 +64,10 @@
60
64
  "types": "./types/inugami-ng-components-inu-table-flex.d.ts",
61
65
  "default": "./fesm2022/inugami-ng-components-inu-table-flex.mjs"
62
66
  },
67
+ "./components/inu-toast": {
68
+ "types": "./types/inugami-ng-components-inu-toast.d.ts",
69
+ "default": "./fesm2022/inugami-ng-components-inu-toast.mjs"
70
+ },
63
71
  "./directives": {
64
72
  "types": "./types/inugami-ng-directives.d.ts",
65
73
  "default": "./fesm2022/inugami-ng-directives.mjs"
@@ -0,0 +1,13 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare class InuButton {
4
+ label: _angular_core.InputSignal<string | null | undefined>;
5
+ icon: _angular_core.InputSignal<string | null>;
6
+ type: _angular_core.InputSignal<string>;
7
+ link: _angular_core.InputSignal<boolean>;
8
+ _styleClass: _angular_core.Signal<string>;
9
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuButton, never>;
10
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuButton, "inu-button", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "link": { "alias": "link"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11
+ }
12
+
13
+ export { InuButton };
@@ -9,6 +9,7 @@ declare class InuCheckboxGroup<T> implements FormValueControl<T[]>, OnInit {
9
9
  readonly _required: _angular_core.InputSignal<boolean>;
10
10
  readonly values: _angular_core.InputSignal<InuSelectItem<T>[]>;
11
11
  readonly vertical: _angular_core.InputSignal<boolean>;
12
+ changed: _angular_core.OutputEmitterRef<T[]>;
12
13
  value: ModelSignal<T[]>;
13
14
  _values: _angular_core.WritableSignal<InuSelectItem<T>[]>;
14
15
  styleClass: _angular_core.WritableSignal<string>;
@@ -20,7 +21,7 @@ declare class InuCheckboxGroup<T> implements FormValueControl<T[]>, OnInit {
20
21
  protected getItemClass(selectItem: InuSelectItem<T>): string;
21
22
  private match;
22
23
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuCheckboxGroup<any>, never>;
23
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuCheckboxGroup<any>, "inu-checkbox-group", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
24
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuCheckboxGroup<any>, "inu-checkbox-group", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "_required": { "alias": "required"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "changed": "changed"; "value": "valueChange"; }, never, never, true, never>;
24
25
  }
25
26
 
26
27
  export { InuCheckboxGroup };
@@ -21,6 +21,7 @@ declare class InuPanelTabs implements AfterViewInit {
21
21
  styleClass: _angular_core.InputSignal<string | null | undefined>;
22
22
  readonly vertical: _angular_core.InputSignal<boolean>;
23
23
  readonly childrenTabs: _angular_core.Signal<readonly InuPanelTab[]>;
24
+ changed: _angular_core.OutputEmitterRef<string>;
24
25
  _styleClass: _angular_core.WritableSignal<string>;
25
26
  valid: _angular_core.WritableSignal<boolean>;
26
27
  tabs: _angular_core.WritableSignal<InuPanelTab[]>;
@@ -31,7 +32,7 @@ declare class InuPanelTabs implements AfterViewInit {
31
32
  openTab(panel: InuPanelTab): void;
32
33
  private checkValidity;
33
34
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InuPanelTabs, never>;
34
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuPanelTabs, "inu-panel-tabs", never, { "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; "styleClass": { "alias": "styleClass"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; }, {}, ["childrenTabs"], never, true, never>;
35
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InuPanelTabs, "inu-panel-tabs", never, { "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; "styleClass": { "alias": "styleClass"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; }, { "changed": "changed"; }, ["childrenTabs"], never, true, never>;
35
36
  }
36
37
 
37
38
  export { InuPanelTab, InuPanelTabs };
@@ -0,0 +1,38 @@
1
+ import * as i0 from '@angular/core';
2
+ import { OnDestroy } from '@angular/core';
3
+ import { TTLWrapper } from 'inugami-ng/models';
4
+
5
+ interface ToastMessage {
6
+ title?: string;
7
+ message?: string;
8
+ level?: 'debug' | 'success' | 'info' | 'warn' | 'error';
9
+ icon?: string;
10
+ delay?: number;
11
+ }
12
+
13
+ declare class InuToastServices implements OnDestroy {
14
+ private _messages;
15
+ private intervalId;
16
+ message: i0.Signal<TTLWrapper<ToastMessage>[]>;
17
+ constructor();
18
+ ngOnDestroy(): void;
19
+ private clearMessage;
20
+ addMessage(message: ToastMessage): void;
21
+ private extractMessage;
22
+ removeMessage(message: TTLWrapper<ToastMessage>): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<InuToastServices, never>;
24
+ static ɵprov: i0.ɵɵInjectableDeclaration<InuToastServices>;
25
+ }
26
+
27
+ declare class InuToast {
28
+ delay: i0.InputSignal<number>;
29
+ service: InuToastServices;
30
+ messages: i0.Signal<TTLWrapper<ToastMessage>[]>;
31
+ protected resolveMessageStyleclass(message?: ToastMessage): string;
32
+ protected closeMessage(message: TTLWrapper<ToastMessage>): void;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<InuToast, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<InuToast, "inu-toast", never, { "delay": { "alias": "delay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
35
+ }
36
+
37
+ export { InuToast, InuToastServices };
38
+ export type { ToastMessage };
@@ -91,5 +91,11 @@ interface InuSiteLinkChildren {
91
91
  title?: string;
92
92
  }
93
93
 
94
+ interface TTLWrapper<T> {
95
+ id: string;
96
+ ttl: number;
97
+ value?: T;
98
+ }
99
+
94
100
  export { TARGET_BLANK, TARGET_PARENT, TARGET_SELF };
95
- export type { AuditDTO, Auditable, InuSelectItem, InuSiteLink, InuSiteLinkChildren, ProblemDTO, ProblemErrorDTO, ProblemParameterDTO, ProblemParameterFieldsDTO, SearchRequest, SearchResponse };
101
+ export type { AuditDTO, Auditable, InuSelectItem, InuSiteLink, InuSiteLinkChildren, ProblemDTO, ProblemErrorDTO, ProblemParameterDTO, ProblemParameterFieldsDTO, SearchRequest, SearchResponse, TTLWrapper };
@@ -10,4 +10,9 @@ declare class CacheServices {
10
10
  static ɵprov: i0.ɵɵInjectableDeclaration<CacheServices>;
11
11
  }
12
12
 
13
- export { CacheServices };
13
+ declare class UuidUtils {
14
+ private static _S4;
15
+ static buildUid(): string;
16
+ }
17
+
18
+ export { CacheServices, UuidUtils };