inugami-ng 0.0.6 → 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;;;;"}
@@ -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":";;;;;;AAKA,MAAM,WAAW,GAAG,IAAI;MAGX,gBAAgB,CAAA;;;;AAInB,IAAA,SAAS,GAAG,MAAM,CAA6B,EAAE,qDAAC;AAClD,IAAA,UAAU;IACX,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;;;AAKtD,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC;IAChE;IAEA,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;IAChC;IAEQ,YAAY,GAAA;QAClB,MAAM,WAAW,GAA+B,EAAE;QAClD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAEhC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,YAAA,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE;AACrB,gBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;YAC3B;QACF;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IAEjC;;;;AAKA,IAAA,UAAU,CAAC,OAAqB,EAAA;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,WAAW;AACjF,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;AACtC,gBAAA,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE;gBACxB,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK;AACjC,gBAAA,KAAK,EAAE;AACR,aAAA,CAAC,CAAC;IACL;IAGQ,cAAc,GAAA;QACpB,MAAM,MAAM,GAA+B,EAAE;AAC7C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE;AACxC,QAAA,KAAK,IAAI,OAAO,IAAI,eAAe,EAAE;AACnC,YAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YACtB;QACF;AACA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,aAAa,CAAC,OAAiC,EAAA;QAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAG,CAAC,CAAC,EAAE,IAAE,OAAO,CAAC,EAAE,CAAC;AACjE,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IACjC;uGA7DW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADJ,MAAM,EAAA,CAAA;;2FAClB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAC,UAAU,EAAE,MAAM,EAAC;;;MCQnB,QAAQ,CAAA;;;;AAKnB,IAAA,KAAK,GAAG,KAAK,CAAS,IAAI,iDAAC;AAC3B,IAAA,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAElC,IAAA,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;AAGrB,IAAA,wBAAwB,CAAC,OAAsB,EAAA;AACvD,QAAA,MAAM,MAAM,GAAa,CAAC,mBAAmB,CAAC;AAC9C,QAAA,IAAI,OAAO,EAAE,KAAK,EAAE;AAClB,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B;AACA,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACzB;AAGU,IAAA,YAAY,CAAC,OAAiC,EAAA;AACtD,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC;IACrC;uGAtBW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,4LALR,CAAC,0BAA0B,CAAC,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVzC,8iCAqCA,inED1BY,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIN,QAAQ,EAAA,UAAA,EAAA,CAAA;kBARpB,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,SAAA,EACL,CAAC,0BAA0B,CAAC,EAAA,OAAA,EAC9B,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,8iCAAA,EAAA,MAAA,EAAA,CAAA,yjEAAA,CAAA,EAAA;;;AEXpB;;AAEG;;;;"}
@@ -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.6",
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 };
@@ -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 };