my-km-components 0.0.6 → 0.0.8

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.
@@ -1,74 +1,46 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, output, computed, ChangeDetectionStrategy, Component, model, signal, Injectable, inject, ElementRef, Renderer2, effect, Directive, InjectionToken, makeEnvironmentProviders, provideEnvironmentInitializer, ApplicationRef, createComponent } from '@angular/core';
1
3
  import * as i3 from '@angular/common';
2
4
  import { CommonModule, NgComponentOutlet } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { model, input, computed, ChangeDetectionStrategy, Component, output, signal, Injectable, inject, ElementRef, Renderer2, effect, Directive, InjectionToken, makeEnvironmentProviders, provideEnvironmentInitializer, ApplicationRef, createComponent } from '@angular/core';
5
+ import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
5
6
  import * as i1 from '@angular/forms';
6
7
  import { FormsModule } from '@angular/forms';
7
8
  import * as i2 from '@ng-select/ng-select';
8
9
  import { NgSelectModule } from '@ng-select/ng-select';
9
- import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
10
-
11
- class KmSelectComponent {
12
- value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
13
- invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
14
- touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
15
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
16
- readOnly = input(false, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), alias: 'readonly' });
17
- errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
18
- items = input.required(...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
19
- multiple = input(true, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
20
- bindLabel = input('label', ...(ngDevMode ? [{ debugName: "bindLabel" }] : /* istanbul ignore next */ []));
21
- bindValue = input('value', ...(ngDevMode ? [{ debugName: "bindValue" }] : /* istanbul ignore next */ []));
22
- placeholder = input('Select...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
23
- class = input('custom', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
24
- limit = input(3, ...(ngDevMode ? [{ debugName: "limit" }] : /* istanbul ignore next */ []));
25
- label = input('Label', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
26
- searchable = input(true, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
27
- clearable = input(true, ...(ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []));
28
- displayArray = computed(() => {
29
- const val = this.value();
30
- if (!val)
31
- return [];
32
- return Array.isArray(val) ? val : [val];
33
- }, ...(ngDevMode ? [{ debugName: "displayArray" }] : /* istanbul ignore next */ []));
34
- change = (event) => {
35
- this.touched.set(true);
36
- this.value.set(event[this.bindValue()]);
37
- };
38
- clear = () => {
39
- this.value.set(null);
40
- };
41
- remainingCount = computed(() => Math.max(0, this.displayArray().length - this.limit()), ...(ngDevMode ? [{ debugName: "remainingCount" }] : /* istanbul ignore next */ []));
42
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
43
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmSelectComponent, isStandalone: true, selector: "km-select", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: false, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, ngImport: i0, template: "<label class=\"form-label fw-700\">{{ label() }}</label>\r\n<ng-select\r\n [ngModel]=\"value()\"\r\n [class]=\"class()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n [items]=\"items()\"\r\n [multiple]=\"multiple()\"\r\n [bindLabel]=\"bindLabel()\"\r\n appendTo=\"body\"\r\n [bindValue]=\"bindValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [searchable]=\"searchable()\"\r\n [clearable]=\"clearable()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"change($event)\"\r\n (clear)=\"value.set(null)\"\r\n [readonly]=\"readOnly()\"\r\n [closeOnSelect]=\"!multiple()\"\r\n>\r\n @if (multiple()) {\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n @for (item of items | slice: 0 : 2; track item) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ $any(item)[bindLabel()].value }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </div>\r\n }\r\n @if (items.length > 2) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ items.length - 2 }} more...</span>\r\n </div>\r\n }\r\n </ng-template>\r\n }\r\n</ng-select>\r\n@if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "clearKeepsDisabledOptions", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "popover", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }, { kind: "directive", type: i2.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
44
- }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmSelectComponent, decorators: [{
46
- type: Component,
47
- args: [{ selector: 'km-select', imports: [FormsModule, NgSelectModule, CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<label class=\"form-label fw-700\">{{ label() }}</label>\r\n<ng-select\r\n [ngModel]=\"value()\"\r\n [class]=\"class()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n [items]=\"items()\"\r\n [multiple]=\"multiple()\"\r\n [bindLabel]=\"bindLabel()\"\r\n appendTo=\"body\"\r\n [bindValue]=\"bindValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [searchable]=\"searchable()\"\r\n [clearable]=\"clearable()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"change($event)\"\r\n (clear)=\"value.set(null)\"\r\n [readonly]=\"readOnly()\"\r\n [closeOnSelect]=\"!multiple()\"\r\n>\r\n @if (multiple()) {\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n @for (item of items | slice: 0 : 2; track item) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ $any(item)[bindLabel()].value }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </div>\r\n }\r\n @if (items.length > 2) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ items.length - 2 }} more...</span>\r\n </div>\r\n }\r\n </ng-template>\r\n }\r\n</ng-select>\r\n@if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n}\r\n" }]
48
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], limit: [{ type: i0.Input, args: [{ isSignal: true, alias: "limit", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }] } });
49
10
 
50
- class KmInputComponent {
51
- value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
52
- invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
53
- touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
11
+ class KmButtonComponent {
12
+ variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
13
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
14
+ type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
15
+ outline = input(false, ...(ngDevMode ? [{ debugName: "outline" }] : /* istanbul ignore next */ []));
16
+ block = input(false, ...(ngDevMode ? [{ debugName: "block" }] : /* istanbul ignore next */ []));
17
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
54
18
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
55
- required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
56
- errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
57
- inputType = input('text', ...(ngDevMode ? [{ debugName: "inputType" }] : /* istanbul ignore next */ []));
58
- placeholder = input('Εισάγετε μια τιμή', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
59
- label = input('Label', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
60
- showLabel = input(true, ...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
61
- formControlSize = input('sm', ...(ngDevMode ? [{ debugName: "formControlSize" }] : /* istanbul ignore next */ []));
62
- change(event) {
63
- this.value.set(event.target.value);
19
+ ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
20
+ loadingLabel = input('Παρακαλώ περιμένετε...', ...(ngDevMode ? [{ debugName: "loadingLabel" }] : /* istanbul ignore next */ []));
21
+ clicked = output();
22
+ btnClass = computed(() => {
23
+ const variantClass = this.outline() ? `btn-outline-${this.variant()}` : `btn-${this.variant()}`;
24
+ const sizeClass = this.size() !== 'md' ? `btn-${this.size()}` : '';
25
+ const blockClass = this.block() ? 'w-100' : '';
26
+ return ['btn', variantClass, sizeClass, blockClass].filter(Boolean).join(' ');
27
+ }, ...(ngDevMode ? [{ debugName: "btnClass" }] : /* istanbul ignore next */ []));
28
+ isDisabled = computed(() => this.disabled() || this.loading(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
29
+ handleClick(event) {
30
+ if (!this.isDisabled()) {
31
+ this.clicked.emit(event);
32
+ }
64
33
  }
65
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmInputComponent, isStandalone: true, selector: "km-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, inputType: { classPropertyName: "inputType", publicName: "inputType", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, formControlSize: { classPropertyName: "formControlSize", publicName: "formControlSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, ngImport: i0, template: "<div class=\"mb-2\">\r\n @if (showLabel()) {\r\n <label class=\"form-label fw-700\"\r\n >{{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\" ngbTooltip=\"\u0395\u03AF\u03BD\u03B1\u03B9 \u03C5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03CC\" triggers=\"hover\">*</span>\r\n }\r\n </label>\r\n }\r\n <div class=\"input-wrapper\">\r\n <input\r\n class=\"form-control form-control-{{ formControlSize() }}\"\r\n [type]=\"inputType()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <span class=\"corner top-left\"></span>\r\n <span class=\"corner top-right\"></span>\r\n <span class=\"corner bottom-left\"></span>\r\n <span class=\"corner bottom-right\"></span>\r\n </div>\r\n @if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n }\r\n</div>\r\n", styles: [".input-wrapper{position:relative}.input-wrapper .corner{position:absolute;width:10px;height:10px;opacity:0;transition:opacity .2s ease;pointer-events:none;z-index:1}.input-wrapper .corner.top-left{top:0;left:0;border-top:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.top-right{top:0;right:0;border-top:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-left{bottom:0;left:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-right{bottom:0;right:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper input:focus~.corner,.input-wrapper textarea:focus~.corner{opacity:1}\n"], dependencies: [{ kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
34
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmButtonComponent, isStandalone: true, selector: "km-button", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, outline: { classPropertyName: "outline", publicName: "outline", isSignal: true, isRequired: false, transformFunction: null }, block: { classPropertyName: "block", publicName: "block", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, loadingLabel: { classPropertyName: "loadingLabel", publicName: "loadingLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clicked: "clicked" }, host: { properties: { "class.d-block": "block()", "class.w-100": "block()" } }, ngImport: i0, template: "<button\r\n [class]=\"btnClass()\"\r\n [type]=\"type()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n @if (loading()) {\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n <span class=\"visually-hidden\">{{ loadingLabel() }}</span>\r\n }\r\n <ng-content />\r\n</button>\r\n", styles: [":host{display:inline-block}:host.d-block{display:block}button{position:relative;transition:opacity .2s ease,transform .1s ease}button:active:not(:disabled){transform:scale(.97)}button:disabled{cursor:not-allowed;pointer-events:auto}button .spinner-border-sm{vertical-align:-.125em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
67
36
  }
68
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputComponent, decorators: [{
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmButtonComponent, decorators: [{
69
38
  type: Component,
70
- args: [{ selector: 'km-input', imports: [NgbTooltip], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-2\">\r\n @if (showLabel()) {\r\n <label class=\"form-label fw-700\"\r\n >{{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\" ngbTooltip=\"\u0395\u03AF\u03BD\u03B1\u03B9 \u03C5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03CC\" triggers=\"hover\">*</span>\r\n }\r\n </label>\r\n }\r\n <div class=\"input-wrapper\">\r\n <input\r\n class=\"form-control form-control-{{ formControlSize() }}\"\r\n [type]=\"inputType()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <span class=\"corner top-left\"></span>\r\n <span class=\"corner top-right\"></span>\r\n <span class=\"corner bottom-left\"></span>\r\n <span class=\"corner bottom-right\"></span>\r\n </div>\r\n @if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n }\r\n</div>\r\n", styles: [".input-wrapper{position:relative}.input-wrapper .corner{position:absolute;width:10px;height:10px;opacity:0;transition:opacity .2s ease;pointer-events:none;z-index:1}.input-wrapper .corner.top-left{top:0;left:0;border-top:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.top-right{top:0;right:0;border-top:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-left{bottom:0;left:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-right{bottom:0;right:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper input:focus~.corner,.input-wrapper textarea:focus~.corner{opacity:1}\n"] }]
71
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], inputType: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputType", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], formControlSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControlSize", required: false }] }] } });
39
+ args: [{ selector: 'km-button', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, host: {
40
+ '[class.d-block]': 'block()',
41
+ '[class.w-100]': 'block()',
42
+ }, template: "<button\r\n [class]=\"btnClass()\"\r\n [type]=\"type()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n @if (loading()) {\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n <span class=\"visually-hidden\">{{ loadingLabel() }}</span>\r\n }\r\n <ng-content />\r\n</button>\r\n", styles: [":host{display:inline-block}:host.d-block{display:block}button{position:relative;transition:opacity .2s ease,transform .1s ease}button:active:not(:disabled){transform:scale(.97)}button:disabled{cursor:not-allowed;pointer-events:auto}button .spinner-border-sm{vertical-align:-.125em}\n"] }]
43
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], outline: [{ type: i0.Input, args: [{ isSignal: true, alias: "outline", required: false }] }], block: [{ type: i0.Input, args: [{ isSignal: true, alias: "block", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], loadingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingLabel", required: false }] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
72
44
 
73
45
  class KmColorComboComponent {
74
46
  value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
@@ -111,74 +83,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
111
83
  args: [{ selector: 'km-color-combo', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-2\">\n @if (showLabel()) {\n <label class=\"form-label fw-700\"\n >{{ label() }}\n @if (required()) {\n <span class=\"text-danger\" ngbTooltip=\"\u0395\u03AF\u03BD\u03B1\u03B9 \u03C5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03CC\" triggers=\"hover\">*</span>\n }\n </label>\n }\n\n <div class=\"input-group input-group-sm\">\n <input\n type=\"color\"\n class=\"form-control form-control-color\"\n (input)=\"change($event)\"\n [value]=\"value()\"\n title=\"\u0395\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03C7\u03C1\u03CE\u03BC\u03B1\"\n (blur)=\"touched.set(true)\"\n />\n <span\n class=\"input-group-text font-monospace\"\n [style.backgroundColor]=\"value()\"\n [style.color]=\"getTextColor(value() ?? '')\"\n >\n {{ value() }}\n </span>\n </div>\n</div>\n" }]
112
84
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
113
85
 
114
- class KmInputGroupComponent {
115
- value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
116
- invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
117
- required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
118
- touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
119
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
120
- errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
121
- readOnly = input(false, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), alias: 'readonly' });
122
- actionClicked = output();
123
- placeholder = input('Εισάγετε τιμή', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
124
- label = input('Label', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
125
- addonText = input('', ...(ngDevMode ? [{ debugName: "addonText" }] : /* istanbul ignore next */ []));
126
- type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
127
- icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
128
- buttonClass = input('', ...(ngDevMode ? [{ debugName: "buttonClass" }] : /* istanbul ignore next */ []));
129
- onActionClicked() {
130
- this.actionClicked.emit();
131
- }
132
- change(event) {
133
- if (this.disabled())
134
- return;
135
- if (this.readOnly())
136
- return;
137
- this.touched.set(true);
138
- this.value.set(event.target.value);
139
- }
140
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
141
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmInputGroupComponent, isStandalone: true, selector: "km-input-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, addonText: { classPropertyName: "addonText", publicName: "addonText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, buttonClass: { classPropertyName: "buttonClass", publicName: "buttonClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", actionClicked: "actionClicked" }, ngImport: i0, template: "<div class=\"mb-2\">\r\n <label class=\"form-label fw-700\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <div class=\"input-group\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n (change)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n [disabled]=\"disabled()\"\r\n class=\"form-control form-control-sm\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n <button type=\"button\" [class]=\"buttonClass()\" (click)=\"onActionClicked()\">\r\n <i [class]=\"icon()\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
142
- }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputGroupComponent, decorators: [{
144
- type: Component,
145
- args: [{ selector: 'km-input-group', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-2\">\r\n <label class=\"form-label fw-700\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <div class=\"input-group\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n (change)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n [disabled]=\"disabled()\"\r\n class=\"form-control form-control-sm\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n <button type=\"button\" [class]=\"buttonClass()\" (click)=\"onActionClicked()\">\r\n <i [class]=\"icon()\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n" }]
146
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], actionClicked: [{ type: i0.Output, args: ["actionClicked"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], addonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "addonText", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], buttonClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonClass", required: false }] }] } });
147
-
148
- class KmModal {
149
- title = input('Τίτλος παραθύρου', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
150
- saveLabel = input('Αποθήκευση', ...(ngDevMode ? [{ debugName: "saveLabel" }] : /* istanbul ignore next */ []));
151
- cancelLabel = input('Ακύρωση', ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
152
- closeLabel = input('Κλείσιμο', ...(ngDevMode ? [{ debugName: "closeLabel" }] : /* istanbul ignore next */ []));
153
- resetLabel = input('Επαναφορά', ...(ngDevMode ? [{ debugName: "resetLabel" }] : /* istanbul ignore next */ []));
154
- showSave = input(true, ...(ngDevMode ? [{ debugName: "showSave" }] : /* istanbul ignore next */ []));
155
- showReset = input(false, ...(ngDevMode ? [{ debugName: "showReset" }] : /* istanbul ignore next */ []));
156
- showClose = input('Κλείσιμο', ...(ngDevMode ? [{ debugName: "showClose" }] : /* istanbul ignore next */ []));
157
- saveDisabled = input(false, ...(ngDevMode ? [{ debugName: "saveDisabled" }] : /* istanbul ignore next */ []));
158
- save = output();
159
- cancel = output();
160
- closeClicked = output();
161
- reset = output();
162
- saveClicked() {
163
- this.save.emit();
164
- }
165
- cancelClicked() {
166
- this.cancel.emit();
167
- }
168
- resetClicked() {
169
- this.reset.emit();
170
- }
171
- close() {
172
- this.closeClicked.emit();
173
- }
174
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
175
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmModal, isStandalone: true, selector: "km-modal", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, saveLabel: { classPropertyName: "saveLabel", publicName: "saveLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, resetLabel: { classPropertyName: "resetLabel", publicName: "resetLabel", isSignal: true, isRequired: false, transformFunction: null }, showSave: { classPropertyName: "showSave", publicName: "showSave", isSignal: true, isRequired: false, transformFunction: null }, showReset: { classPropertyName: "showReset", publicName: "showReset", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, saveDisabled: { classPropertyName: "saveDisabled", publicName: "saveDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", cancel: "cancel", closeClicked: "closeClicked", reset: "reset" }, ngImport: i0, template: "<div class=\"compact-modal\">\r\n <div class=\"modal-header d-flex align-items-center bg-light border-bottom-1\">\r\n <h6 class=\"modal-title text-truncate me-3\">{{ title() }}</h6>\r\n\r\n <div class=\"ms-auto d-flex gap-1\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n\r\n <button type=\"button\" class=\"btn-close ms-2\" (click)=\"cancelClicked()\" aria-label=\"Close\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"modal-footer border-top-0\">\r\n @if(showReset()){\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-link text-muted me-auto px-0\" (click)=\"reset.emit()\">\r\n {{ resetLabel() }}\r\n </button>\r\n }\r\n\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-secondary px-3\" (click)=\"cancelClicked()\">\r\n {{ cancelLabel() }}\r\n </button>\r\n\r\n @if(showSave()){\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm-custom btn-primary px-4\"\r\n [disabled]=\"saveDisabled()\"\r\n (click)=\"save.emit()\"\r\n >\r\n {{ saveLabel() }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".compact-modal .modal-header{padding:.3rem 1rem;min-height:32px}.compact-modal .modal-body{padding:.75rem 1rem}.compact-modal .modal-footer{padding:.4rem 1rem;background-color:#f8f9fa}.compact-modal .modal-title{font-size:1rem;font-weight:600}.compact-modal .btn-sm-custom{padding:.2rem .5rem;font-size:.85rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
176
- }
177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmModal, decorators: [{
178
- type: Component,
179
- args: [{ selector: 'km-modal', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"compact-modal\">\r\n <div class=\"modal-header d-flex align-items-center bg-light border-bottom-1\">\r\n <h6 class=\"modal-title text-truncate me-3\">{{ title() }}</h6>\r\n\r\n <div class=\"ms-auto d-flex gap-1\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n\r\n <button type=\"button\" class=\"btn-close ms-2\" (click)=\"cancelClicked()\" aria-label=\"Close\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"modal-footer border-top-0\">\r\n @if(showReset()){\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-link text-muted me-auto px-0\" (click)=\"reset.emit()\">\r\n {{ resetLabel() }}\r\n </button>\r\n }\r\n\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-secondary px-3\" (click)=\"cancelClicked()\">\r\n {{ cancelLabel() }}\r\n </button>\r\n\r\n @if(showSave()){\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm-custom btn-primary px-4\"\r\n [disabled]=\"saveDisabled()\"\r\n (click)=\"save.emit()\"\r\n >\r\n {{ saveLabel() }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".compact-modal .modal-header{padding:.3rem 1rem;min-height:32px}.compact-modal .modal-body{padding:.75rem 1rem}.compact-modal .modal-footer{padding:.4rem 1rem;background-color:#f8f9fa}.compact-modal .modal-title{font-size:1rem;font-weight:600}.compact-modal .btn-sm-custom{padding:.2rem .5rem;font-size:.85rem}\n"] }]
180
- }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], saveLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveLabel", required: false }] }], cancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelLabel", required: false }] }], closeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeLabel", required: false }] }], resetLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetLabel", required: false }] }], showSave: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSave", required: false }] }], showReset: [{ type: i0.Input, args: [{ isSignal: true, alias: "showReset", required: false }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], saveDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveDisabled", required: false }] }], save: [{ type: i0.Output, args: ["save"] }], cancel: [{ type: i0.Output, args: ["cancel"] }], closeClicked: [{ type: i0.Output, args: ["closeClicked"] }], reset: [{ type: i0.Output, args: ["reset"] }] } });
181
-
182
86
  class KmService {
183
87
  loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
184
88
  getLoading() {
@@ -264,6 +168,136 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
264
168
  args: [{ selector: 'km-generic-card', imports: [CommonModule, KmBlockDirective, NgbTooltip], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"panel\" [KmBlockUI]=\"service.getLoading()\">\r\n <div class=\"panel-hdr\">\r\n <h2>\r\n {{ panelTitle() }}\r\n <span class=\"fw-300\"\r\n ><i>{{ subtitle() }}</i></span\r\n >\r\n </h2>\r\n <div class=\"panel-toolbar\">\r\n @for (button of buttons()?.buttons; track $index) {\r\n <button\r\n (click)=\"button.clicked()\"\r\n [disabled]=\"button.disabled\"\r\n [ngbTooltip]=\"button.tooltip\"\r\n triggers=\"hover\"\r\n class=\"btn {{\r\n button.color\r\n }} btn-sm btn-icon rounded-circle waves-effect waves-themed gap-5\"\r\n >\r\n <i [class]=\"button.icon\"></i>\r\n </button>\r\n }\r\n @if (showBackButton()) {\r\n <button\r\n (click)=\"backClicked.emit()\"\r\n ngbTooltip=\"\u0395\u03C0\u03B9\u03C3\u03C4\u03C1\u03BF\u03C6\u03AE\"\r\n triggers=\"hover\"\r\n class=\"btn btn-dark btn-sm btn-icon rounded-circle waves-effect waves-themed\"\r\n >\r\n <i class=\"fa-light fa-arrow-left\"></i>\r\n </button>\r\n }\r\n\r\n <button\r\n (click)=\"toggleCollapse()\"\r\n ngbTooltip=\"{{ isCollapsed() ? '\u0391\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1' : '\u039A\u03BB\u03B5\u03B9\u03C3\u03B9\u03BC\u03BF' }}\"\r\n class=\"btn btn-outline-dark btn-sm btn-icon rounded-circle waves-effect waves-themed\"\r\n >\r\n <i [class]=\"isCollapsed() ? 'fa-light fa-plus' : 'fa-light fa-minus'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-container\" [class.show]=\"!isCollapsed()\" [hidden]=\"isCollapsed()\">\r\n <div class=\"panel-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [":host .panel-toolbar{display:flex;flex-direction:row;gap:8px;padding:0;align-items:center;justify-content:start;margin-right:15px}:host .panel-content{overflow-x:scroll;max-height:calc(100vh - 200px)}\n"] }]
265
169
  }], propDecorators: { panelTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelTitle", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], showBackButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackButton", required: false }] }], buttons: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttons", required: false }] }], formValid: [{ type: i0.Input, args: [{ isSignal: true, alias: "formValid", required: false }] }], backClicked: [{ type: i0.Output, args: ["backClicked"] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
266
170
 
171
+ class KmInputComponent {
172
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
173
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
174
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
175
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
176
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
177
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
178
+ inputType = input('text', ...(ngDevMode ? [{ debugName: "inputType" }] : /* istanbul ignore next */ []));
179
+ placeholder = input('Εισάγετε μια τιμή', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
180
+ label = input('Label', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
181
+ showLabel = input(true, ...(ngDevMode ? [{ debugName: "showLabel" }] : /* istanbul ignore next */ []));
182
+ formControlSize = input('sm', ...(ngDevMode ? [{ debugName: "formControlSize" }] : /* istanbul ignore next */ []));
183
+ change(event) {
184
+ this.value.set(event.target.value);
185
+ }
186
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
187
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmInputComponent, isStandalone: true, selector: "km-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, inputType: { classPropertyName: "inputType", publicName: "inputType", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, showLabel: { classPropertyName: "showLabel", publicName: "showLabel", isSignal: true, isRequired: false, transformFunction: null }, formControlSize: { classPropertyName: "formControlSize", publicName: "formControlSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, ngImport: i0, template: "<div class=\"mb-2\">\r\n @if (showLabel()) {\r\n <label class=\"form-label fw-700\"\r\n >{{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\" ngbTooltip=\"\u0395\u03AF\u03BD\u03B1\u03B9 \u03C5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03CC\" triggers=\"hover\">*</span>\r\n }\r\n </label>\r\n }\r\n <div class=\"input-wrapper\">\r\n <input\r\n class=\"form-control form-control-{{ formControlSize() }}\"\r\n [type]=\"inputType()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <span class=\"corner top-left\"></span>\r\n <span class=\"corner top-right\"></span>\r\n <span class=\"corner bottom-left\"></span>\r\n <span class=\"corner bottom-right\"></span>\r\n </div>\r\n @if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n }\r\n</div>\r\n", styles: [".input-wrapper{position:relative}.input-wrapper .corner{position:absolute;width:10px;height:10px;opacity:0;transition:opacity .2s ease;pointer-events:none;z-index:1}.input-wrapper .corner.top-left{top:0;left:0;border-top:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.top-right{top:0;right:0;border-top:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-left{bottom:0;left:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-right{bottom:0;right:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper input:focus~.corner,.input-wrapper textarea:focus~.corner{opacity:1}\n"], dependencies: [{ kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
188
+ }
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputComponent, decorators: [{
190
+ type: Component,
191
+ args: [{ selector: 'km-input', imports: [NgbTooltip], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-2\">\r\n @if (showLabel()) {\r\n <label class=\"form-label fw-700\"\r\n >{{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\" ngbTooltip=\"\u0395\u03AF\u03BD\u03B1\u03B9 \u03C5\u03C0\u03BF\u03C7\u03C1\u03B5\u03C9\u03C4\u03B9\u03BA\u03CC\" triggers=\"hover\">*</span>\r\n }\r\n </label>\r\n }\r\n <div class=\"input-wrapper\">\r\n <input\r\n class=\"form-control form-control-{{ formControlSize() }}\"\r\n [type]=\"inputType()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <span class=\"corner top-left\"></span>\r\n <span class=\"corner top-right\"></span>\r\n <span class=\"corner bottom-left\"></span>\r\n <span class=\"corner bottom-right\"></span>\r\n </div>\r\n @if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n }\r\n</div>\r\n", styles: [".input-wrapper{position:relative}.input-wrapper .corner{position:absolute;width:10px;height:10px;opacity:0;transition:opacity .2s ease;pointer-events:none;z-index:1}.input-wrapper .corner.top-left{top:0;left:0;border-top:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.top-right{top:0;right:0;border-top:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-left{bottom:0;left:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-left:2px solid var(--bs-primary, #0d6efd)}.input-wrapper .corner.bottom-right{bottom:0;right:0;border-bottom:2px solid var(--bs-primary, #0d6efd);border-right:2px solid var(--bs-primary, #0d6efd)}.input-wrapper input:focus~.corner,.input-wrapper textarea:focus~.corner{opacity:1}\n"] }]
192
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], inputType: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputType", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], showLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLabel", required: false }] }], formControlSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "formControlSize", required: false }] }] } });
193
+
194
+ class KmInputGroupComponent {
195
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
196
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
197
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
198
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
199
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
200
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
201
+ readOnly = input(false, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), alias: 'readonly' });
202
+ actionClicked = output();
203
+ placeholder = input('Εισάγετε τιμή', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
204
+ label = input('Label', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
205
+ addonText = input('', ...(ngDevMode ? [{ debugName: "addonText" }] : /* istanbul ignore next */ []));
206
+ type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
207
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
208
+ buttonClass = input('', ...(ngDevMode ? [{ debugName: "buttonClass" }] : /* istanbul ignore next */ []));
209
+ onActionClicked() {
210
+ this.actionClicked.emit();
211
+ }
212
+ change(event) {
213
+ if (this.disabled())
214
+ return;
215
+ if (this.readOnly())
216
+ return;
217
+ this.touched.set(true);
218
+ this.value.set(event.target.value);
219
+ }
220
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
221
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmInputGroupComponent, isStandalone: true, selector: "km-input-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, addonText: { classPropertyName: "addonText", publicName: "addonText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, buttonClass: { classPropertyName: "buttonClass", publicName: "buttonClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange", actionClicked: "actionClicked" }, ngImport: i0, template: "<div class=\"mb-2\">\r\n <label class=\"form-label fw-700\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <div class=\"input-group\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n (change)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n [disabled]=\"disabled()\"\r\n class=\"form-control form-control-sm\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n <button type=\"button\" [class]=\"buttonClass()\" (click)=\"onActionClicked()\">\r\n <i [class]=\"icon()\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
222
+ }
223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmInputGroupComponent, decorators: [{
224
+ type: Component,
225
+ args: [{ selector: 'km-input-group', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-2\">\r\n <label class=\"form-label fw-700\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <div class=\"input-group\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n (change)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n [disabled]=\"disabled()\"\r\n class=\"form-control form-control-sm\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n <button type=\"button\" [class]=\"buttonClass()\" (click)=\"onActionClicked()\">\r\n <i [class]=\"icon()\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n" }]
226
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], actionClicked: [{ type: i0.Output, args: ["actionClicked"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], addonText: [{ type: i0.Input, args: [{ isSignal: true, alias: "addonText", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], buttonClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonClass", required: false }] }] } });
227
+
228
+ class KmModal {
229
+ title = input('Τίτλος παραθύρου', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
230
+ saveLabel = input('Αποθήκευση', ...(ngDevMode ? [{ debugName: "saveLabel" }] : /* istanbul ignore next */ []));
231
+ cancelLabel = input('Ακύρωση', ...(ngDevMode ? [{ debugName: "cancelLabel" }] : /* istanbul ignore next */ []));
232
+ closeLabel = input('Κλείσιμο', ...(ngDevMode ? [{ debugName: "closeLabel" }] : /* istanbul ignore next */ []));
233
+ resetLabel = input('Επαναφορά', ...(ngDevMode ? [{ debugName: "resetLabel" }] : /* istanbul ignore next */ []));
234
+ showSave = input(true, ...(ngDevMode ? [{ debugName: "showSave" }] : /* istanbul ignore next */ []));
235
+ showReset = input(false, ...(ngDevMode ? [{ debugName: "showReset" }] : /* istanbul ignore next */ []));
236
+ showClose = input('Κλείσιμο', ...(ngDevMode ? [{ debugName: "showClose" }] : /* istanbul ignore next */ []));
237
+ saveDisabled = input(false, ...(ngDevMode ? [{ debugName: "saveDisabled" }] : /* istanbul ignore next */ []));
238
+ save = output();
239
+ cancel = output();
240
+ closeClicked = output();
241
+ reset = output();
242
+ saveClicked() {
243
+ this.save.emit();
244
+ }
245
+ cancelClicked() {
246
+ this.cancel.emit();
247
+ }
248
+ resetClicked() {
249
+ this.reset.emit();
250
+ }
251
+ close() {
252
+ this.closeClicked.emit();
253
+ }
254
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmModal, deps: [], target: i0.ɵɵFactoryTarget.Component });
255
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmModal, isStandalone: true, selector: "km-modal", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, saveLabel: { classPropertyName: "saveLabel", publicName: "saveLabel", isSignal: true, isRequired: false, transformFunction: null }, cancelLabel: { classPropertyName: "cancelLabel", publicName: "cancelLabel", isSignal: true, isRequired: false, transformFunction: null }, closeLabel: { classPropertyName: "closeLabel", publicName: "closeLabel", isSignal: true, isRequired: false, transformFunction: null }, resetLabel: { classPropertyName: "resetLabel", publicName: "resetLabel", isSignal: true, isRequired: false, transformFunction: null }, showSave: { classPropertyName: "showSave", publicName: "showSave", isSignal: true, isRequired: false, transformFunction: null }, showReset: { classPropertyName: "showReset", publicName: "showReset", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, saveDisabled: { classPropertyName: "saveDisabled", publicName: "saveDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { save: "save", cancel: "cancel", closeClicked: "closeClicked", reset: "reset" }, ngImport: i0, template: "<div class=\"compact-modal\">\r\n <div class=\"modal-header d-flex align-items-center bg-light border-bottom-1\">\r\n <h6 class=\"modal-title text-truncate me-3\">{{ title() }}</h6>\r\n\r\n <div class=\"ms-auto d-flex gap-1\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n\r\n <button type=\"button\" class=\"btn-close ms-2\" (click)=\"cancelClicked()\" aria-label=\"Close\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"modal-footer border-top-0\">\r\n @if(showReset()){\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-link text-muted me-auto px-0\" (click)=\"reset.emit()\">\r\n {{ resetLabel() }}\r\n </button>\r\n }\r\n\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-secondary px-3\" (click)=\"cancelClicked()\">\r\n {{ cancelLabel() }}\r\n </button>\r\n\r\n @if(showSave()){\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm-custom btn-primary px-4\"\r\n [disabled]=\"saveDisabled()\"\r\n (click)=\"save.emit()\"\r\n >\r\n {{ saveLabel() }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".compact-modal .modal-header{padding:.3rem 1rem;min-height:32px}.compact-modal .modal-body{padding:.75rem 1rem}.compact-modal .modal-footer{padding:.4rem 1rem;background-color:#f8f9fa}.compact-modal .modal-title{font-size:1rem;font-weight:600}.compact-modal .btn-sm-custom{padding:.2rem .5rem;font-size:.85rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
256
+ }
257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmModal, decorators: [{
258
+ type: Component,
259
+ args: [{ selector: 'km-modal', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"compact-modal\">\r\n <div class=\"modal-header d-flex align-items-center bg-light border-bottom-1\">\r\n <h6 class=\"modal-title text-truncate me-3\">{{ title() }}</h6>\r\n\r\n <div class=\"ms-auto d-flex gap-1\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n\r\n <button type=\"button\" class=\"btn-close ms-2\" (click)=\"cancelClicked()\" aria-label=\"Close\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"modal-footer border-top-0\">\r\n @if(showReset()){\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-link text-muted me-auto px-0\" (click)=\"reset.emit()\">\r\n {{ resetLabel() }}\r\n </button>\r\n }\r\n\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-secondary px-3\" (click)=\"cancelClicked()\">\r\n {{ cancelLabel() }}\r\n </button>\r\n\r\n @if(showSave()){\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm-custom btn-primary px-4\"\r\n [disabled]=\"saveDisabled()\"\r\n (click)=\"save.emit()\"\r\n >\r\n {{ saveLabel() }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [".compact-modal .modal-header{padding:.3rem 1rem;min-height:32px}.compact-modal .modal-body{padding:.75rem 1rem}.compact-modal .modal-footer{padding:.4rem 1rem;background-color:#f8f9fa}.compact-modal .modal-title{font-size:1rem;font-weight:600}.compact-modal .btn-sm-custom{padding:.2rem .5rem;font-size:.85rem}\n"] }]
260
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], saveLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveLabel", required: false }] }], cancelLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "cancelLabel", required: false }] }], closeLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeLabel", required: false }] }], resetLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetLabel", required: false }] }], showSave: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSave", required: false }] }], showReset: [{ type: i0.Input, args: [{ isSignal: true, alias: "showReset", required: false }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], saveDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveDisabled", required: false }] }], save: [{ type: i0.Output, args: ["save"] }], cancel: [{ type: i0.Output, args: ["cancel"] }], closeClicked: [{ type: i0.Output, args: ["closeClicked"] }], reset: [{ type: i0.Output, args: ["reset"] }] } });
261
+
262
+ class KmSelectComponent {
263
+ value = model(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
264
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : /* istanbul ignore next */ []));
265
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : /* istanbul ignore next */ []));
266
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
267
+ readOnly = input(false, { ...(ngDevMode ? { debugName: "readOnly" } : /* istanbul ignore next */ {}), alias: 'readonly' });
268
+ errors = input([], ...(ngDevMode ? [{ debugName: "errors" }] : /* istanbul ignore next */ []));
269
+ items = input.required(...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
270
+ multiple = input(true, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
271
+ bindLabel = input('label', ...(ngDevMode ? [{ debugName: "bindLabel" }] : /* istanbul ignore next */ []));
272
+ bindValue = input('value', ...(ngDevMode ? [{ debugName: "bindValue" }] : /* istanbul ignore next */ []));
273
+ placeholder = input('Select...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
274
+ class = input('custom', ...(ngDevMode ? [{ debugName: "class" }] : /* istanbul ignore next */ []));
275
+ limit = input(3, ...(ngDevMode ? [{ debugName: "limit" }] : /* istanbul ignore next */ []));
276
+ label = input('Label', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
277
+ searchable = input(true, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
278
+ clearable = input(true, ...(ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []));
279
+ displayArray = computed(() => {
280
+ const val = this.value();
281
+ if (!val)
282
+ return [];
283
+ return Array.isArray(val) ? val : [val];
284
+ }, ...(ngDevMode ? [{ debugName: "displayArray" }] : /* istanbul ignore next */ []));
285
+ change = (event) => {
286
+ this.touched.set(true);
287
+ this.value.set(event[this.bindValue()]);
288
+ };
289
+ clear = () => {
290
+ this.value.set(null);
291
+ };
292
+ remainingCount = computed(() => Math.max(0, this.displayArray().length - this.limit()), ...(ngDevMode ? [{ debugName: "remainingCount" }] : /* istanbul ignore next */ []));
293
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
294
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: KmSelectComponent, isStandalone: true, selector: "km-select", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, bindLabel: { classPropertyName: "bindLabel", publicName: "bindLabel", isSignal: true, isRequired: false, transformFunction: null }, bindValue: { classPropertyName: "bindValue", publicName: "bindValue", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, limit: { classPropertyName: "limit", publicName: "limit", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, clearable: { classPropertyName: "clearable", publicName: "clearable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", touched: "touchedChange" }, ngImport: i0, template: "<label class=\"form-label fw-700\">{{ label() }}</label>\r\n<ng-select\r\n [ngModel]=\"value()\"\r\n [class]=\"class()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n [items]=\"items()\"\r\n [multiple]=\"multiple()\"\r\n [bindLabel]=\"bindLabel()\"\r\n appendTo=\"body\"\r\n [bindValue]=\"bindValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [searchable]=\"searchable()\"\r\n [clearable]=\"clearable()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"change($event)\"\r\n (clear)=\"value.set(null)\"\r\n [readonly]=\"readOnly()\"\r\n [closeOnSelect]=\"!multiple()\"\r\n>\r\n @if (multiple()) {\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n @for (item of items | slice: 0 : 2; track item) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ $any(item)[bindLabel()].value }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </div>\r\n }\r\n @if (items.length > 2) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ items.length - 2 }} more...</span>\r\n </div>\r\n }\r\n </ng-template>\r\n }\r\n</ng-select>\r\n@if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n}\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i2.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "dropdownPosition", "appendTo", "outsideClickEvent", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "tabFocusOnClearButton", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "clearKeepsDisabledOptions", "deselectOnClick", "clearSearchOnAdd", "compareWith", "keyDownFn", "popover", "bindLabel", "bindValue", "appearance", "isOpen", "items"], outputs: ["bindLabelChange", "bindValueChange", "appearanceChange", "isOpenChange", "itemsChange", "blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"], exportAs: ["ngSelect"] }, { kind: "directive", type: i2.NgMultiLabelTemplateDirective, selector: "[ng-multi-label-tmp]" }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
295
+ }
296
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: KmSelectComponent, decorators: [{
297
+ type: Component,
298
+ args: [{ selector: 'km-select', imports: [FormsModule, NgSelectModule, CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<label class=\"form-label fw-700\">{{ label() }}</label>\r\n<ng-select\r\n [ngModel]=\"value()\"\r\n [class]=\"class()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n [items]=\"items()\"\r\n [multiple]=\"multiple()\"\r\n [bindLabel]=\"bindLabel()\"\r\n appendTo=\"body\"\r\n [bindValue]=\"bindValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [searchable]=\"searchable()\"\r\n [clearable]=\"clearable()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"change($event)\"\r\n (clear)=\"value.set(null)\"\r\n [readonly]=\"readOnly()\"\r\n [closeOnSelect]=\"!multiple()\"\r\n>\r\n @if (multiple()) {\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n @for (item of items | slice: 0 : 2; track item) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ $any(item)[bindLabel()].value }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">\u00D7</span>\r\n </div>\r\n }\r\n @if (items.length > 2) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ items.length - 2 }} more...</span>\r\n </div>\r\n }\r\n </ng-template>\r\n }\r\n</ng-select>\r\n@if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n}\r\n" }]
299
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], errors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], bindLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindLabel", required: false }] }], bindValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bindValue", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], limit: [{ type: i0.Input, args: [{ isSignal: true, alias: "limit", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }] } });
300
+
267
301
  class KmToastrService {
268
302
  nextId = 0;
269
303
  timeouts = new Map();
@@ -534,5 +568,5 @@ function provideKmToastr(options = {}) {
534
568
  * Generated bundle index. Do not edit.
535
569
  */
536
570
 
537
- export { KM_TOASTR_ITEM_COMPONENT, KmBlockDirective, KmColorComboComponent, KmGenericCard, KmInputComponent, KmInputGroupComponent, KmModal, KmSelectComponent, KmService, KmToastrService, provideKmToastr };
571
+ export { KM_TOASTR_ITEM_COMPONENT, KmBlockDirective, KmButtonComponent, KmColorComboComponent, KmGenericCard, KmInputComponent, KmInputGroupComponent, KmModal, KmSelectComponent, KmService, KmToastrService, provideKmToastr };
538
572
  //# sourceMappingURL=my-km-components.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"my-km-components.mjs","sources":["../../../projects/my-km-components/src/lib/km-select/km-select.component.ts","../../../projects/my-km-components/src/lib/km-select/km-select.component.html","../../../projects/my-km-components/src/lib/km-input/km-input.component.ts","../../../projects/my-km-components/src/lib/km-input/km-input.component.html","../../../projects/my-km-components/src/lib/km-color-combo/km-color-combo.component.ts","../../../projects/my-km-components/src/lib/km-color-combo/km-color-combo.component.html","../../../projects/my-km-components/src/lib/km-input-group/km-input-group.component.ts","../../../projects/my-km-components/src/lib/km-input-group/km-input-group.component.html","../../../projects/my-km-components/src/lib/km-modal/km-modal.ts","../../../projects/my-km-components/src/lib/km-modal/km-modal.html","../../../projects/my-km-components/src/services/km.service.ts","../../../projects/my-km-components/src/directives/km-block.directive.ts","../../../projects/my-km-components/src/lib/km-generic-card/km-generic-card.ts","../../../projects/my-km-components/src/lib/km-generic-card/km-generic-card.html","../../../projects/my-km-components/src/lib/km-toastr/toastr.service.ts","../../../projects/my-km-components/src/lib/km-toastr/toast-item.component.ts","../../../projects/my-km-components/src/lib/km-toastr/toastr.tokens.ts","../../../projects/my-km-components/src/lib/km-toastr/toastr.component.ts","../../../projects/my-km-components/src/lib/km-toastr/toastr.provider.ts","../../../projects/my-km-components/src/public-api.ts","../../../projects/my-km-components/src/my-km-components.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\n\r\n@Component({\r\n selector: 'km-select',\r\n imports: [FormsModule, NgSelectModule, CommonModule],\r\n templateUrl: './km-select.component.html',\r\n styleUrl: './km-select.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmSelectComponent implements FormValueControl<string | number | null> {\r\n value = model<string | number | null>(null);\r\n readonly invalid = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly readOnly = input<boolean>(false, { alias: 'readonly' });\r\n readonly errors = input<readonly ValidationError[]>([]);\r\n\r\n items = input.required<any[]>();\r\n multiple = input<boolean>(true);\r\n bindLabel = input<string>('label');\r\n bindValue = input<string>('value');\r\n placeholder = input<string>('Select...');\r\n class = input<string>('custom');\r\n limit = input<number>(3);\r\n label = input<string>('Label');\r\n\r\n searchable = input<boolean>(true);\r\n clearable = input<boolean>(true);\r\n\r\n displayArray = computed(() => {\r\n const val = this.value();\r\n if (!val) return [];\r\n return Array.isArray(val) ? val : [val];\r\n });\r\n\r\n change = (event: any) => {\r\n this.touched.set(true);\r\n this.value.set(event[this.bindValue()]);\r\n };\r\n\r\n clear = () => {\r\n this.value.set(null);\r\n };\r\n\r\n remainingCount = computed(() => Math.max(0, this.displayArray().length - this.limit()));\r\n}\r\n","<label class=\"form-label fw-700\">{{ label() }}</label>\r\n<ng-select\r\n [ngModel]=\"value()\"\r\n [class]=\"class()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n [items]=\"items()\"\r\n [multiple]=\"multiple()\"\r\n [bindLabel]=\"bindLabel()\"\r\n appendTo=\"body\"\r\n [bindValue]=\"bindValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [searchable]=\"searchable()\"\r\n [clearable]=\"clearable()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"change($event)\"\r\n (clear)=\"value.set(null)\"\r\n [readonly]=\"readOnly()\"\r\n [closeOnSelect]=\"!multiple()\"\r\n>\r\n @if (multiple()) {\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n @for (item of items | slice: 0 : 2; track item) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ $any(item)[bindLabel()].value }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">×</span>\r\n </div>\r\n }\r\n @if (items.length > 2) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ items.length - 2 }} more...</span>\r\n </div>\r\n }\r\n </ng-template>\r\n }\r\n</ng-select>\r\n@if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\r\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\r\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\n\r\n@Component({\r\n selector: 'km-input',\r\n imports: [NgbTooltip],\r\n templateUrl: './km-input.component.html',\r\n styleUrl: './km-input.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmInputComponent implements FormValueControl<string | null> {\r\n readonly value = model<string | null>(null);\r\n\r\n readonly invalid = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly required = input<boolean>(false);\r\n readonly errors = input<readonly ValidationError[]>([]);\r\n\r\n inputType = input<string>('text');\r\n placeholder = input<string>('Εισάγετε μια τιμή');\r\n label = input<string>('Label');\r\n showLabel = input<boolean>(true);\r\n\r\n formControlSize = input<string>('sm');\r\n\r\n change(event: any) {\r\n this.value.set(event.target.value);\r\n }\r\n}\r\n","<div class=\"mb-2\">\r\n @if (showLabel()) {\r\n <label class=\"form-label fw-700\"\r\n >{{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\" ngbTooltip=\"Είναι υποχρεωτικό\" triggers=\"hover\">*</span>\r\n }\r\n </label>\r\n }\r\n <div class=\"input-wrapper\">\r\n <input\r\n class=\"form-control form-control-{{ formControlSize() }}\"\r\n [type]=\"inputType()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <span class=\"corner top-left\"></span>\r\n <span class=\"corner top-right\"></span>\r\n <span class=\"corner bottom-left\"></span>\r\n <span class=\"corner bottom-right\"></span>\r\n </div>\r\n @if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\n\n@Component({\n selector: 'km-color-combo',\n imports: [],\n templateUrl: './km-color-combo.component.html',\n styleUrl: './km-color-combo.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KmColorComboComponent implements FormValueControl<string | null> {\n readonly value = model<string | null>(null);\n\n readonly invalid = input<boolean>(false);\n readonly touched = model<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly errors = input<readonly ValidationError[]>([]);\n\n showLabel = input<boolean>(true);\n label = input<string>('Label');\n\n getTextColor(hexColor: string): string {\n if (!hexColor) return '#000000'; // Default to black if no color\n\n // Remove the '#' if it exists\n const hex = hexColor.replace('#', '');\n\n // Convert 3-char hex to 6-char if needed (e.g., #abc to #aabbcc)\n const fullHex =\n hex.length === 3\n ? hex\n .split('')\n .map((c) => c + c)\n .join('')\n : hex;\n\n // Parse the RGB values\n const r = parseInt(fullHex.substring(0, 2), 16);\n const g = parseInt(fullHex.substring(2, 4), 16);\n const b = parseInt(fullHex.substring(4, 6), 16);\n\n // Calculate YIQ contrast (Standard formula for human eye brightness perception)\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n // If the background is light (yiq >= 128), return black text. Otherwise, white text.\n return yiq >= 128 ? '#000000' : '#ffffff';\n }\n\n change(event: any) {\n this.value.set(event.target.value);\n }\n}\n","<div class=\"mb-2\">\n @if (showLabel()) {\n <label class=\"form-label fw-700\"\n >{{ label() }}\n @if (required()) {\n <span class=\"text-danger\" ngbTooltip=\"Είναι υποχρεωτικό\" triggers=\"hover\">*</span>\n }\n </label>\n }\n\n <div class=\"input-group input-group-sm\">\n <input\n type=\"color\"\n class=\"form-control form-control-color\"\n (input)=\"change($event)\"\n [value]=\"value()\"\n title=\"Επιλέξτε χρώμα\"\n (blur)=\"touched.set(true)\"\n />\n <span\n class=\"input-group-text font-monospace\"\n [style.backgroundColor]=\"value()\"\n [style.color]=\"getTextColor(value() ?? '')\"\n >\n {{ value() }}\n </span>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';\r\nimport { FormValueControl } from '@angular/forms/signals';\r\nimport { KmInputComponent } from '../km-input/km-input.component';\r\n\r\n@Component({\r\n selector: 'km-input-group',\r\n imports: [],\r\n templateUrl: './km-input-group.component.html',\r\n styleUrl: './km-input-group.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmInputGroupComponent implements FormValueControl<number | null> {\r\n readonly value = model<number | null>(null);\r\n\r\n readonly invalid = input<boolean>(false);\r\n readonly required = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly errors = input<readonly any[]>([]);\r\n readonly readOnly = input<boolean>(false, { alias: 'readonly' });\r\n actionClicked = output<void>();\r\n\r\n placeholder = input<string>('Εισάγετε τιμή');\r\n label = input<string>('Label');\r\n addonText = input<string>('');\r\n type = input<string>('text');\r\n icon = input<string>('');\r\n buttonClass = input<string>('');\r\n\r\n onActionClicked() {\r\n this.actionClicked.emit();\r\n }\r\n\r\n change(event: any) {\r\n if (this.disabled()) return;\r\n if (this.readOnly()) return;\r\n this.touched.set(true);\r\n this.value.set(event.target.value);\r\n }\r\n}\r\n","<div class=\"mb-2\">\r\n <label class=\"form-label fw-700\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <div class=\"input-group\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n (change)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n [disabled]=\"disabled()\"\r\n class=\"form-control form-control-sm\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n <button type=\"button\" [class]=\"buttonClass()\" (click)=\"onActionClicked()\">\r\n <i [class]=\"icon()\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'km-modal',\r\n imports: [],\r\n templateUrl: './km-modal.html',\r\n styleUrl: './km-modal.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmModal {\r\n title = input('Τίτλος παραθύρου');\r\n saveLabel = input('Αποθήκευση');\r\n cancelLabel = input('Ακύρωση');\r\n closeLabel = input('Κλείσιμο');\r\n resetLabel = input('Επαναφορά');\r\n showSave = input<boolean>(true);\r\n showReset = input<boolean>(false);\r\n showClose = input('Κλείσιμο');\r\n saveDisabled = input<boolean>(false);\r\n\r\n save = output();\r\n cancel = output();\r\n closeClicked = output();\r\n reset = output();\r\n\r\n saveClicked() {\r\n this.save.emit();\r\n }\r\n\r\n cancelClicked() {\r\n this.cancel.emit();\r\n }\r\n\r\n resetClicked() {\r\n this.reset.emit();\r\n }\r\n\r\n close() {\r\n this.closeClicked.emit();\r\n }\r\n}\r\n","<div class=\"compact-modal\">\r\n <div class=\"modal-header d-flex align-items-center bg-light border-bottom-1\">\r\n <h6 class=\"modal-title text-truncate me-3\">{{ title() }}</h6>\r\n\r\n <div class=\"ms-auto d-flex gap-1\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n\r\n <button type=\"button\" class=\"btn-close ms-2\" (click)=\"cancelClicked()\" aria-label=\"Close\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"modal-footer border-top-0\">\r\n @if(showReset()){\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-link text-muted me-auto px-0\" (click)=\"reset.emit()\">\r\n {{ resetLabel() }}\r\n </button>\r\n }\r\n\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-secondary px-3\" (click)=\"cancelClicked()\">\r\n {{ cancelLabel() }}\r\n </button>\r\n\r\n @if(showSave()){\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm-custom btn-primary px-4\"\r\n [disabled]=\"saveDisabled()\"\r\n (click)=\"save.emit()\"\r\n >\r\n {{ saveLabel() }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KmService {\r\n private loading = signal<boolean>(false);\r\n\r\n getLoading(): boolean {\r\n return this.loading();\r\n }\r\n\r\n setLoading(value: boolean): void {\r\n this.loading.set(value);\r\n }\r\n}\r\n","import { Directive, ElementRef, effect, inject, input, Renderer2 } from '@angular/core'\r\n\r\n@Directive({\r\n selector: '[KmBlockUI]',\r\n})\r\nexport class KmBlockDirective {\r\n KmBlockUI = input<boolean>(false)\r\n private el = inject(ElementRef)\r\n private renderer = inject(Renderer2)\r\n\r\n constructor() {\r\n this.renderer.setStyle(this.el.nativeElement, 'position', 'relative')\r\n effect(() => {\r\n this.KmBlockUI() ? this.block() : this.unblock()\r\n })\r\n }\r\n\r\n private block() {\r\n this.renderer.addClass(this.el.nativeElement, 'block-loading')\r\n\r\n // Create the overlay div\r\n const overlay = this.renderer.createElement('div')\r\n this.renderer.addClass(overlay, 'block-overlay')\r\n this.renderer.setAttribute(overlay, 'id', 'block-overlay-node')\r\n\r\n // Optional: Add a spinner icon or text\r\n overlay.innerHTML = '<div class=\"spinner\"></div>'\r\n\r\n this.renderer.appendChild(this.el.nativeElement, overlay)\r\n }\r\n\r\n private unblock() {\r\n this.renderer.removeClass(this.el.nativeElement, 'block-loading')\r\n const overlay = this.el.nativeElement.querySelector('#block-overlay-node')\r\n if (overlay) {\r\n this.renderer.removeChild(this.el.nativeElement, overlay)\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, input, output, signal } from '@angular/core';\r\nimport { KmGenericCardButtonInterface, KmGenericCardInterface } from './km-generic-card.interface';\r\nimport { CommonModule } from '@angular/common';\r\nimport { KmService } from '../../services/km.service';\r\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { KmBlockDirective } from '../../directives/km-block.directive';\r\n\r\n@Component({\r\n selector: 'km-generic-card',\r\n imports: [CommonModule, KmBlockDirective, NgbTooltip],\r\n templateUrl: './km-generic-card.html',\r\n styleUrl: './km-generic-card.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmGenericCard {\r\n panelTitle = input<string>('');\r\n subtitle = input<string>('');\r\n visible = input<boolean>(true);\r\n isCollapsed = signal<boolean>(false);\r\n isVisible = signal<boolean>(this.visible());\r\n showBackButton = input<boolean>(false);\r\n buttons = input<KmGenericCardInterface>();\r\n formValid = input<boolean | undefined>(undefined);\r\n backClicked = output<void>();\r\n service = inject(KmService);\r\n\r\n clicked = output<void>();\r\n\r\n toggleCollapse() {\r\n this.isCollapsed.set(!this.isCollapsed());\r\n }\r\n closePanel() {\r\n this.isVisible.set(false);\r\n }\r\n\r\n onButtonClicked() {\r\n this.clicked.emit();\r\n }\r\n\r\n onBackClicked() {\r\n this.backClicked.emit();\r\n }\r\n}\r\n","<div class=\"panel\" [KmBlockUI]=\"service.getLoading()\">\r\n <div class=\"panel-hdr\">\r\n <h2>\r\n {{ panelTitle() }}\r\n <span class=\"fw-300\"\r\n ><i>{{ subtitle() }}</i></span\r\n >\r\n </h2>\r\n <div class=\"panel-toolbar\">\r\n @for (button of buttons()?.buttons; track $index) {\r\n <button\r\n (click)=\"button.clicked()\"\r\n [disabled]=\"button.disabled\"\r\n [ngbTooltip]=\"button.tooltip\"\r\n triggers=\"hover\"\r\n class=\"btn {{\r\n button.color\r\n }} btn-sm btn-icon rounded-circle waves-effect waves-themed gap-5\"\r\n >\r\n <i [class]=\"button.icon\"></i>\r\n </button>\r\n }\r\n @if (showBackButton()) {\r\n <button\r\n (click)=\"backClicked.emit()\"\r\n ngbTooltip=\"Επιστροφή\"\r\n triggers=\"hover\"\r\n class=\"btn btn-dark btn-sm btn-icon rounded-circle waves-effect waves-themed\"\r\n >\r\n <i class=\"fa-light fa-arrow-left\"></i>\r\n </button>\r\n }\r\n\r\n <button\r\n (click)=\"toggleCollapse()\"\r\n ngbTooltip=\"{{ isCollapsed() ? 'Ανοιγμα' : 'Κλεισιμο' }}\"\r\n class=\"btn btn-outline-dark btn-sm btn-icon rounded-circle waves-effect waves-themed\"\r\n >\r\n <i [class]=\"isCollapsed() ? 'fa-light fa-plus' : 'fa-light fa-minus'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-container\" [class.show]=\"!isCollapsed()\" [hidden]=\"isCollapsed()\">\r\n <div class=\"panel-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { KmToastrMessage, KmToastrOptions, KmToastrPosition, KmToastrType } from './toastr.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KmToastrService {\r\n private nextId = 0;\r\n private timeouts = new Map<number, ReturnType<typeof setTimeout>>();\r\n\r\n /** Default position used when no position is specified in ToastrOptions */\r\n defaultPosition: KmToastrPosition = 'top-right';\r\n\r\n readonly toasts = signal<KmToastrMessage[]>([]);\r\n\r\n private show(type: KmToastrType, message: string, options: KmToastrOptions = {}): void {\r\n const toast: KmToastrMessage = {\r\n id: ++this.nextId,\r\n type,\r\n message,\r\n title: options.title,\r\n duration: options.duration ?? 4000,\r\n position: options.position ?? this.defaultPosition,\r\n };\r\n this.toasts.update((list) => [...list, toast]);\r\n\r\n if (toast.duration > 0) {\r\n const timeout = setTimeout(() => this.dismiss(toast.id), toast.duration);\r\n this.timeouts.set(toast.id, timeout);\r\n }\r\n }\r\n\r\n success(message: string, options?: KmToastrOptions): void {\r\n this.show('success', message, options);\r\n }\r\n\r\n error(message: string, options?: KmToastrOptions): void {\r\n this.show('error', message, options);\r\n }\r\n\r\n warning(message: string, options?: KmToastrOptions): void {\r\n this.show('warning', message, options);\r\n }\r\n\r\n info(message: string, options?: KmToastrOptions): void {\r\n this.show('info', message, options);\r\n }\r\n\r\n dismiss(id: number): void {\r\n this.toasts.update((list) => list.filter((t) => t.id !== id));\r\n const timeout = this.timeouts.get(id);\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n this.timeouts.delete(id);\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.toasts.set([]);\r\n for (const timeout of this.timeouts.values()) {\r\n clearTimeout(timeout);\r\n }\r\n this.timeouts.clear();\r\n }\r\n}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n input,\r\n output,\r\n signal,\r\n OnInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { KmToastrMessage } from './toastr.model';\r\n\r\n@Component({\r\n selector: 'km-toast-item',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'alert',\r\n 'aria-live': 'assertive',\r\n 'aria-atomic': 'true',\r\n '[class]': 'hostClass()',\r\n '[class.toast-leaving]': 'leaving()',\r\n },\r\n template: `\r\n <div class=\"toast-icon\" [attr.aria-hidden]=\"true\">\r\n @switch (toast().type) {\r\n @case ('success') {\r\n <span>✓</span>\r\n }\r\n @case ('error') {\r\n <span>✕</span>\r\n }\r\n @case ('warning') {\r\n <span>⚠</span>\r\n }\r\n @case ('info') {\r\n <span>ℹ</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"toast-body\">\r\n @if (toast().title) {\r\n <div class=\"toast-title\">{{ toast().title }}</div>\r\n }\r\n <div class=\"toast-message\">{{ toast().message }}</div>\r\n </div>\r\n <button class=\"toast-close\" type=\"button\" aria-label=\"Close notification\" (click)=\"close()\">\r\n ×\r\n </button>\r\n @if (toast().duration > 0) {\r\n <div\r\n class=\"toast-progress\"\r\n [style.animation-duration.ms]=\"toast().duration\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n }\r\n `,\r\n styles: [\r\n `\r\n @keyframes toast-enter {\r\n from {\r\n opacity: 0;\r\n transform: translateX(var(--toast-slide-x, 40px)) scale(0.92);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateX(0) scale(1);\r\n }\r\n }\r\n\r\n :host {\r\n position: relative;\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 12px;\r\n padding: 14px 16px;\r\n border-radius: 8px;\r\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.18);\r\n min-width: 280px;\r\n max-width: 400px;\r\n backdrop-filter: blur(6px);\r\n overflow: hidden;\r\n animation: toast-enter 0.5s cubic-bezier(0.34, 1.28, 0.64, 1) both;\r\n transition:\r\n opacity 0.3s ease,\r\n transform 0.3s ease;\r\n opacity: 1;\r\n transform: translateX(0);\r\n color: #fff;\r\n }\r\n\r\n :host.toast-leaving {\r\n opacity: 0;\r\n transform: translateX(var(--toast-slide-x, 40px));\r\n pointer-events: none;\r\n }\r\n\r\n :host.toast-success {\r\n background: linear-gradient(135deg, #1a7f4b, #22a563);\r\n }\r\n :host.toast-error {\r\n background: linear-gradient(135deg, #9b1d1d, #c0392b);\r\n }\r\n :host.toast-warning {\r\n background: linear-gradient(135deg, #8a5a00, #d4871a);\r\n }\r\n :host.toast-info {\r\n background: linear-gradient(135deg, #145a8a, #1b78c4);\r\n }\r\n\r\n .toast-icon {\r\n font-size: 1.2rem;\r\n font-weight: bold;\r\n flex-shrink: 0;\r\n width: 24px;\r\n height: 24px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.2);\r\n border-radius: 50%;\r\n }\r\n\r\n .toast-body {\r\n flex: 1;\r\n min-width: 0;\r\n }\r\n\r\n .toast-title {\r\n font-weight: 600;\r\n font-size: 0.9rem;\r\n margin-bottom: 2px;\r\n }\r\n\r\n .toast-message {\r\n font-size: 0.85rem;\r\n opacity: 0.92;\r\n word-break: break-word;\r\n }\r\n\r\n .toast-close {\r\n background: none;\r\n border: none;\r\n color: rgba(255, 255, 255, 0.8);\r\n font-size: 1.4rem;\r\n line-height: 1;\r\n cursor: pointer;\r\n padding: 0;\r\n flex-shrink: 0;\r\n transition: color 0.2s;\r\n\r\n &:hover {\r\n color: #fff;\r\n }\r\n &:focus-visible {\r\n outline: 2px solid #fff;\r\n border-radius: 2px;\r\n }\r\n }\r\n\r\n @keyframes toast-progress {\r\n from {\r\n transform: scaleX(1);\r\n }\r\n to {\r\n transform: scaleX(0);\r\n }\r\n }\r\n\r\n .toast-progress {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 3px;\r\n background: rgba(255, 255, 255, 0.45);\r\n transform-origin: left center;\r\n animation: toast-progress linear forwards;\r\n border-radius: 0 0 8px 8px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class KmToastItemComponent implements OnInit, OnDestroy {\r\n readonly toast = input.required<KmToastrMessage>();\r\n readonly dismissed = output<void>();\r\n\r\n protected readonly leaving = signal(false);\r\n private leaveTimeout?: ReturnType<typeof setTimeout>;\r\n private dismissTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n protected hostClass(): string {\r\n return `toast-item toast-${this.toast().type}`;\r\n }\r\n\r\n ngOnInit(): void {\r\n // Pre-animate out before the service removes it\r\n if (this.toast().duration > 0) {\r\n const leaveTime = Math.max(0, this.toast().duration - 300);\r\n this.leaveTimeout = setTimeout(() => this.leaving.set(true), leaveTime);\r\n }\r\n }\r\n\r\n protected close(): void {\r\n this.leaving.set(true);\r\n if (this.leaveTimeout) clearTimeout(this.leaveTimeout);\r\n this.dismissTimeout = setTimeout(() => this.dismissed.emit(), 300);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.leaveTimeout) clearTimeout(this.leaveTimeout);\r\n if (this.dismissTimeout) clearTimeout(this.dismissTimeout);\r\n }\r\n}\r\n","import { InjectionToken, Type } from '@angular/core';\r\n\r\nexport const KM_TOASTR_ITEM_COMPONENT = new InjectionToken<Type<unknown>>(\r\n 'KM_TOASTR_ITEM_COMPONENT',\r\n);\r\n","import { Component, ChangeDetectionStrategy, inject, computed } from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { KmToastItemComponent } from './toast-item.component';\r\nimport { KmToastrPosition } from './toastr.model';\r\nimport { KmToastrService } from './toastr.service';\r\nimport { KM_TOASTR_ITEM_COMPONENT } from './toastr.tokens';\r\n\r\nconst ALL_POSITIONS: KmToastrPosition[] = [\r\n 'top-left',\r\n 'top-center',\r\n 'top-right',\r\n 'bottom-left',\r\n 'bottom-center',\r\n 'bottom-right',\r\n];\r\n\r\n@Component({\r\n selector: 'km-toastr',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KmToastItemComponent, NgComponentOutlet],\r\n host: { 'aria-label': 'Notifications' },\r\n template: `\r\n @for (pos of positions; track pos) {\r\n @let group = toastsByPosition()[pos];\r\n @if (group.length > 0) {\r\n <div\r\n class=\"toast-group\"\r\n [class]=\"'toast-group toast-group--' + pos\"\r\n role=\"region\"\r\n [attr.aria-label]=\"'Notifications ' + pos\"\r\n >\r\n @for (toast of group; track toast.id) {\r\n @if (customItemComponent) {\r\n <ng-container\r\n [ngComponentOutlet]=\"customItemComponent\"\r\n [ngComponentOutletInputs]=\"{ toast: toast }\"\r\n />\r\n } @else {\r\n <km-toast-item [toast]=\"toast\" (dismissed)=\"toastr.dismiss(toast.id)\" />\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n position: fixed;\r\n inset: 0;\r\n pointer-events: none;\r\n z-index: 9999;\r\n }\r\n\r\n .toast-group {\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 10px;\r\n pointer-events: none;\r\n }\r\n\r\n /* Top positions stack downward */\r\n .toast-group--top-left,\r\n .toast-group--top-center,\r\n .toast-group--top-right {\r\n top: 24px;\r\n flex-direction: column;\r\n }\r\n\r\n /* Bottom positions stack upward */\r\n .toast-group--bottom-left,\r\n .toast-group--bottom-center,\r\n .toast-group--bottom-right {\r\n bottom: 24px;\r\n flex-direction: column-reverse;\r\n }\r\n\r\n .toast-group--top-left,\r\n .toast-group--bottom-left {\r\n left: 24px;\r\n --toast-slide-x: -40px;\r\n }\r\n\r\n .toast-group--top-center,\r\n .toast-group--bottom-center {\r\n left: 50%;\r\n transform: translateX(-50%);\r\n --toast-slide-x: 0px;\r\n }\r\n\r\n .toast-group--top-right,\r\n .toast-group--bottom-right {\r\n right: 24px;\r\n --toast-slide-x: 40px;\r\n }\r\n\r\n .toast-group > * {\r\n pointer-events: auto;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class KmToastrComponent {\r\n protected readonly toastr = inject(KmToastrService);\r\n protected readonly positions = ALL_POSITIONS;\r\n protected readonly customItemComponent = inject(KM_TOASTR_ITEM_COMPONENT, { optional: true });\r\n\r\n protected readonly toastsByPosition = computed(() => {\r\n const map: Record<KmToastrPosition, ReturnType<typeof this.toastr.toasts>> = {\r\n 'top-left': [],\r\n 'top-center': [],\r\n 'top-right': [],\r\n 'bottom-left': [],\r\n 'bottom-center': [],\r\n 'bottom-right': [],\r\n };\r\n for (const toast of this.toastr.toasts()) {\r\n map[toast.position].push(toast);\r\n }\r\n return map;\r\n });\r\n}\r\n","import {\r\n ApplicationRef,\r\n createComponent,\r\n EnvironmentProviders,\r\n inject,\r\n makeEnvironmentProviders,\r\n provideEnvironmentInitializer,\r\n Type,\r\n} from '@angular/core';\r\nimport { KmToastrComponent } from './toastr.component';\r\nimport { KM_TOASTR_ITEM_COMPONENT } from './toastr.tokens';\r\n\r\nexport interface KmToastrProviderOptions {\r\n /** Provide a custom component to render each toast item. */\r\n itemComponent?: Type<unknown>;\r\n}\r\n\r\nexport function provideKmToastr(options: KmToastrProviderOptions = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n ...(options.itemComponent\r\n ? [{ provide: KM_TOASTR_ITEM_COMPONENT, useValue: options.itemComponent }]\r\n : []),\r\n provideEnvironmentInitializer(() => {\r\n const appRef = inject(ApplicationRef);\r\n const componentRef = createComponent(KmToastrComponent, {\r\n environmentInjector: appRef.injector,\r\n });\r\n appRef.attachView(componentRef.hostView);\r\n document.body.appendChild(componentRef.location.nativeElement);\r\n }),\r\n ]);\r\n}\r\n","/*\r\n * Public API Surface of my-km-components\r\n */\r\n\r\nexport * from './lib/km-select/km-select.component';\r\nexport * from './lib/km-input/km-input.component';\r\nexport * from './lib/km-color-combo/km-color-combo.component';\r\nexport * from './lib/km-input-group/km-input-group.component';\r\nexport * from './lib/km-modal/km-modal';\r\nexport * from './lib/km-generic-card/km-generic-card';\r\nexport * from './directives/km-block.directive';\r\nexport * from './services/km.service';\r\nexport * from './lib/km-toastr/index';\r\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":"my-km-components.mjs","sources":["../../../projects/my-km-components/src/lib/km-button/km-button.component.ts","../../../projects/my-km-components/src/lib/km-button/km-button.component.html","../../../projects/my-km-components/src/lib/km-color-combo/km-color-combo.component.ts","../../../projects/my-km-components/src/lib/km-color-combo/km-color-combo.component.html","../../../projects/my-km-components/src/services/km.service.ts","../../../projects/my-km-components/src/directives/km-block.directive.ts","../../../projects/my-km-components/src/lib/km-generic-card/km-generic-card.ts","../../../projects/my-km-components/src/lib/km-generic-card/km-generic-card.html","../../../projects/my-km-components/src/lib/km-input/km-input.component.ts","../../../projects/my-km-components/src/lib/km-input/km-input.component.html","../../../projects/my-km-components/src/lib/km-input-group/km-input-group.component.ts","../../../projects/my-km-components/src/lib/km-input-group/km-input-group.component.html","../../../projects/my-km-components/src/lib/km-modal/km-modal.ts","../../../projects/my-km-components/src/lib/km-modal/km-modal.html","../../../projects/my-km-components/src/lib/km-select/km-select.component.ts","../../../projects/my-km-components/src/lib/km-select/km-select.component.html","../../../projects/my-km-components/src/lib/km-toastr/toastr.service.ts","../../../projects/my-km-components/src/lib/km-toastr/toast-item.component.ts","../../../projects/my-km-components/src/lib/km-toastr/toastr.tokens.ts","../../../projects/my-km-components/src/lib/km-toastr/toastr.component.ts","../../../projects/my-km-components/src/lib/km-toastr/toastr.provider.ts","../../../projects/my-km-components/src/public-api.ts","../../../projects/my-km-components/src/my-km-components.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\n\r\nexport type ButtonVariant =\r\n | 'primary'\r\n | 'secondary'\r\n | 'success'\r\n | 'danger'\r\n | 'warning'\r\n | 'info'\r\n | 'light'\r\n | 'dark'\r\n | 'link';\r\n\r\nexport type ButtonSize = 'sm' | 'md' | 'lg';\r\nexport type ButtonType = 'button' | 'submit' | 'reset';\r\n\r\n@Component({\r\n selector: 'km-button',\r\n imports: [],\r\n templateUrl: './km-button.component.html',\r\n styleUrl: './km-button.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.d-block]': 'block()',\r\n '[class.w-100]': 'block()',\r\n },\r\n})\r\nexport class KmButtonComponent {\r\n readonly variant = input<ButtonVariant>('primary');\r\n readonly size = input<ButtonSize>('md');\r\n readonly type = input<ButtonType>('button');\r\n readonly outline = input<boolean>(false);\r\n readonly block = input<boolean>(false);\r\n readonly loading = input<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly ariaLabel = input<string>('');\r\n readonly loadingLabel = input<string>('Παρακαλώ περιμένετε...');\r\n\r\n readonly clicked = output<MouseEvent>();\r\n\r\n readonly btnClass = computed(() => {\r\n const variantClass = this.outline() ? `btn-outline-${this.variant()}` : `btn-${this.variant()}`;\r\n\r\n const sizeClass = this.size() !== 'md' ? `btn-${this.size()}` : '';\r\n const blockClass = this.block() ? 'w-100' : '';\r\n\r\n return ['btn', variantClass, sizeClass, blockClass].filter(Boolean).join(' ');\r\n });\r\n\r\n readonly isDisabled = computed(() => this.disabled() || this.loading());\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.isDisabled()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n}\r\n","<button\r\n [class]=\"btnClass()\"\r\n [type]=\"type()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-busy]=\"loading() ? 'true' : null\"\r\n [attr.aria-disabled]=\"isDisabled() ? 'true' : null\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n @if (loading()) {\r\n <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\r\n <span class=\"visually-hidden\">{{ loadingLabel() }}</span>\r\n }\r\n <ng-content />\r\n</button>\r\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\n\n@Component({\n selector: 'km-color-combo',\n imports: [],\n templateUrl: './km-color-combo.component.html',\n styleUrl: './km-color-combo.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class KmColorComboComponent implements FormValueControl<string | null> {\n readonly value = model<string | null>(null);\n\n readonly invalid = input<boolean>(false);\n readonly touched = model<boolean>(false);\n readonly disabled = input<boolean>(false);\n readonly required = input<boolean>(false);\n readonly errors = input<readonly ValidationError[]>([]);\n\n showLabel = input<boolean>(true);\n label = input<string>('Label');\n\n getTextColor(hexColor: string): string {\n if (!hexColor) return '#000000'; // Default to black if no color\n\n // Remove the '#' if it exists\n const hex = hexColor.replace('#', '');\n\n // Convert 3-char hex to 6-char if needed (e.g., #abc to #aabbcc)\n const fullHex =\n hex.length === 3\n ? hex\n .split('')\n .map((c) => c + c)\n .join('')\n : hex;\n\n // Parse the RGB values\n const r = parseInt(fullHex.substring(0, 2), 16);\n const g = parseInt(fullHex.substring(2, 4), 16);\n const b = parseInt(fullHex.substring(4, 6), 16);\n\n // Calculate YIQ contrast (Standard formula for human eye brightness perception)\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n // If the background is light (yiq >= 128), return black text. Otherwise, white text.\n return yiq >= 128 ? '#000000' : '#ffffff';\n }\n\n change(event: any) {\n this.value.set(event.target.value);\n }\n}\n","<div class=\"mb-2\">\n @if (showLabel()) {\n <label class=\"form-label fw-700\"\n >{{ label() }}\n @if (required()) {\n <span class=\"text-danger\" ngbTooltip=\"Είναι υποχρεωτικό\" triggers=\"hover\">*</span>\n }\n </label>\n }\n\n <div class=\"input-group input-group-sm\">\n <input\n type=\"color\"\n class=\"form-control form-control-color\"\n (input)=\"change($event)\"\n [value]=\"value()\"\n title=\"Επιλέξτε χρώμα\"\n (blur)=\"touched.set(true)\"\n />\n <span\n class=\"input-group-text font-monospace\"\n [style.backgroundColor]=\"value()\"\n [style.color]=\"getTextColor(value() ?? '')\"\n >\n {{ value() }}\n </span>\n </div>\n</div>\n","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KmService {\r\n private loading = signal<boolean>(false);\r\n\r\n getLoading(): boolean {\r\n return this.loading();\r\n }\r\n\r\n setLoading(value: boolean): void {\r\n this.loading.set(value);\r\n }\r\n}\r\n","import { Directive, ElementRef, effect, inject, input, Renderer2 } from '@angular/core'\r\n\r\n@Directive({\r\n selector: '[KmBlockUI]',\r\n})\r\nexport class KmBlockDirective {\r\n KmBlockUI = input<boolean>(false)\r\n private el = inject(ElementRef)\r\n private renderer = inject(Renderer2)\r\n\r\n constructor() {\r\n this.renderer.setStyle(this.el.nativeElement, 'position', 'relative')\r\n effect(() => {\r\n this.KmBlockUI() ? this.block() : this.unblock()\r\n })\r\n }\r\n\r\n private block() {\r\n this.renderer.addClass(this.el.nativeElement, 'block-loading')\r\n\r\n // Create the overlay div\r\n const overlay = this.renderer.createElement('div')\r\n this.renderer.addClass(overlay, 'block-overlay')\r\n this.renderer.setAttribute(overlay, 'id', 'block-overlay-node')\r\n\r\n // Optional: Add a spinner icon or text\r\n overlay.innerHTML = '<div class=\"spinner\"></div>'\r\n\r\n this.renderer.appendChild(this.el.nativeElement, overlay)\r\n }\r\n\r\n private unblock() {\r\n this.renderer.removeClass(this.el.nativeElement, 'block-loading')\r\n const overlay = this.el.nativeElement.querySelector('#block-overlay-node')\r\n if (overlay) {\r\n this.renderer.removeChild(this.el.nativeElement, overlay)\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, input, output, signal } from '@angular/core';\r\nimport { KmGenericCardButtonInterface, KmGenericCardInterface } from './km-generic-card.interface';\r\nimport { CommonModule } from '@angular/common';\r\nimport { KmService } from '../../services/km.service';\r\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\nimport { KmBlockDirective } from '../../directives/km-block.directive';\r\n\r\n@Component({\r\n selector: 'km-generic-card',\r\n imports: [CommonModule, KmBlockDirective, NgbTooltip],\r\n templateUrl: './km-generic-card.html',\r\n styleUrl: './km-generic-card.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmGenericCard {\r\n panelTitle = input<string>('');\r\n subtitle = input<string>('');\r\n visible = input<boolean>(true);\r\n isCollapsed = signal<boolean>(false);\r\n isVisible = signal<boolean>(this.visible());\r\n showBackButton = input<boolean>(false);\r\n buttons = input<KmGenericCardInterface>();\r\n formValid = input<boolean | undefined>(undefined);\r\n backClicked = output<void>();\r\n service = inject(KmService);\r\n\r\n clicked = output<void>();\r\n\r\n toggleCollapse() {\r\n this.isCollapsed.set(!this.isCollapsed());\r\n }\r\n closePanel() {\r\n this.isVisible.set(false);\r\n }\r\n\r\n onButtonClicked() {\r\n this.clicked.emit();\r\n }\r\n\r\n onBackClicked() {\r\n this.backClicked.emit();\r\n }\r\n}\r\n","<div class=\"panel\" [KmBlockUI]=\"service.getLoading()\">\r\n <div class=\"panel-hdr\">\r\n <h2>\r\n {{ panelTitle() }}\r\n <span class=\"fw-300\"\r\n ><i>{{ subtitle() }}</i></span\r\n >\r\n </h2>\r\n <div class=\"panel-toolbar\">\r\n @for (button of buttons()?.buttons; track $index) {\r\n <button\r\n (click)=\"button.clicked()\"\r\n [disabled]=\"button.disabled\"\r\n [ngbTooltip]=\"button.tooltip\"\r\n triggers=\"hover\"\r\n class=\"btn {{\r\n button.color\r\n }} btn-sm btn-icon rounded-circle waves-effect waves-themed gap-5\"\r\n >\r\n <i [class]=\"button.icon\"></i>\r\n </button>\r\n }\r\n @if (showBackButton()) {\r\n <button\r\n (click)=\"backClicked.emit()\"\r\n ngbTooltip=\"Επιστροφή\"\r\n triggers=\"hover\"\r\n class=\"btn btn-dark btn-sm btn-icon rounded-circle waves-effect waves-themed\"\r\n >\r\n <i class=\"fa-light fa-arrow-left\"></i>\r\n </button>\r\n }\r\n\r\n <button\r\n (click)=\"toggleCollapse()\"\r\n ngbTooltip=\"{{ isCollapsed() ? 'Ανοιγμα' : 'Κλεισιμο' }}\"\r\n class=\"btn btn-outline-dark btn-sm btn-icon rounded-circle waves-effect waves-themed\"\r\n >\r\n <i [class]=\"isCollapsed() ? 'fa-light fa-plus' : 'fa-light fa-minus'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"panel-container\" [class.show]=\"!isCollapsed()\" [hidden]=\"isCollapsed()\">\r\n <div class=\"panel-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\r\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\r\nimport { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';\r\n\r\nexport type InputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url';\r\n\r\n@Component({\r\n selector: 'km-input',\r\n imports: [NgbTooltip],\r\n templateUrl: './km-input.component.html',\r\n styleUrl: './km-input.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmInputComponent implements FormValueControl<string | null> {\r\n readonly value = model<string | null>(null);\r\n\r\n readonly invalid = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly required = input<boolean>(false);\r\n readonly errors = input<readonly ValidationError[]>([]);\r\n\r\n inputType = input<InputType>('text');\r\n placeholder = input<string>('Εισάγετε μια τιμή');\r\n label = input<string>('Label');\r\n showLabel = input<boolean>(true);\r\n\r\n formControlSize = input<string>('sm');\r\n\r\n change(event: any) {\r\n this.value.set(event.target.value);\r\n }\r\n}\r\n","<div class=\"mb-2\">\r\n @if (showLabel()) {\r\n <label class=\"form-label fw-700\"\r\n >{{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\" ngbTooltip=\"Είναι υποχρεωτικό\" triggers=\"hover\">*</span>\r\n }\r\n </label>\r\n }\r\n <div class=\"input-wrapper\">\r\n <input\r\n class=\"form-control form-control-{{ formControlSize() }}\"\r\n [type]=\"inputType()\"\r\n [placeholder]=\"placeholder()\"\r\n (input)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <span class=\"corner top-left\"></span>\r\n <span class=\"corner top-right\"></span>\r\n <span class=\"corner bottom-left\"></span>\r\n <span class=\"corner bottom-right\"></span>\r\n </div>\r\n @if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, model, output } from '@angular/core';\r\nimport { FormValueControl } from '@angular/forms/signals';\r\nimport { KmInputComponent } from '../km-input/km-input.component';\r\n\r\n@Component({\r\n selector: 'km-input-group',\r\n imports: [],\r\n templateUrl: './km-input-group.component.html',\r\n styleUrl: './km-input-group.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmInputGroupComponent implements FormValueControl<number | null> {\r\n readonly value = model<number | null>(null);\r\n\r\n readonly invalid = input<boolean>(false);\r\n readonly required = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly errors = input<readonly any[]>([]);\r\n readonly readOnly = input<boolean>(false, { alias: 'readonly' });\r\n actionClicked = output<void>();\r\n\r\n placeholder = input<string>('Εισάγετε τιμή');\r\n label = input<string>('Label');\r\n addonText = input<string>('');\r\n type = input<string>('text');\r\n icon = input<string>('');\r\n buttonClass = input<string>('');\r\n\r\n onActionClicked() {\r\n this.actionClicked.emit();\r\n }\r\n\r\n change(event: any) {\r\n if (this.disabled()) return;\r\n if (this.readOnly()) return;\r\n this.touched.set(true);\r\n this.value.set(event.target.value);\r\n }\r\n}\r\n","<div class=\"mb-2\">\r\n <label class=\"form-label fw-700\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n <div class=\"input-group\">\r\n <input\r\n [type]=\"type()\"\r\n [placeholder]=\"placeholder()\"\r\n (change)=\"change($event)\"\r\n [value]=\"value()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n (blur)=\"touched.set(true)\"\r\n [disabled]=\"disabled()\"\r\n class=\"form-control form-control-sm\"\r\n [readOnly]=\"readOnly()\"\r\n />\r\n <button type=\"button\" [class]=\"buttonClass()\" (click)=\"onActionClicked()\">\r\n <i [class]=\"icon()\"></i>\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'km-modal',\r\n imports: [],\r\n templateUrl: './km-modal.html',\r\n styleUrl: './km-modal.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmModal {\r\n title = input('Τίτλος παραθύρου');\r\n saveLabel = input('Αποθήκευση');\r\n cancelLabel = input('Ακύρωση');\r\n closeLabel = input('Κλείσιμο');\r\n resetLabel = input('Επαναφορά');\r\n showSave = input<boolean>(true);\r\n showReset = input<boolean>(false);\r\n showClose = input('Κλείσιμο');\r\n saveDisabled = input<boolean>(false);\r\n\r\n save = output();\r\n cancel = output();\r\n closeClicked = output();\r\n reset = output();\r\n\r\n saveClicked() {\r\n this.save.emit();\r\n }\r\n\r\n cancelClicked() {\r\n this.cancel.emit();\r\n }\r\n\r\n resetClicked() {\r\n this.reset.emit();\r\n }\r\n\r\n close() {\r\n this.closeClicked.emit();\r\n }\r\n}\r\n","<div class=\"compact-modal\">\r\n <div class=\"modal-header d-flex align-items-center bg-light border-bottom-1\">\r\n <h6 class=\"modal-title text-truncate me-3\">{{ title() }}</h6>\r\n\r\n <div class=\"ms-auto d-flex gap-1\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n\r\n <button type=\"button\" class=\"btn-close ms-2\" (click)=\"cancelClicked()\" aria-label=\"Close\"></button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"modal-footer border-top-0\">\r\n @if(showReset()){\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-link text-muted me-auto px-0\" (click)=\"reset.emit()\">\r\n {{ resetLabel() }}\r\n </button>\r\n }\r\n\r\n <button type=\"button\" class=\"btn btn-sm-custom btn-secondary px-3\" (click)=\"cancelClicked()\">\r\n {{ cancelLabel() }}\r\n </button>\r\n\r\n @if(showSave()){\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm-custom btn-primary px-4\"\r\n [disabled]=\"saveDisabled()\"\r\n (click)=\"save.emit()\"\r\n >\r\n {{ saveLabel() }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FormValueControl, ValidationError } from '@angular/forms/signals';\r\nimport { NgSelectModule } from '@ng-select/ng-select';\r\n\r\n@Component({\r\n selector: 'km-select',\r\n imports: [FormsModule, NgSelectModule, CommonModule],\r\n templateUrl: './km-select.component.html',\r\n styleUrl: './km-select.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class KmSelectComponent implements FormValueControl<string | number | null> {\r\n value = model<string | number | null>(null);\r\n readonly invalid = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n readonly disabled = input<boolean>(false);\r\n readonly readOnly = input<boolean>(false, { alias: 'readonly' });\r\n readonly errors = input<readonly ValidationError[]>([]);\r\n\r\n items = input.required<any[]>();\r\n multiple = input<boolean>(true);\r\n bindLabel = input<string>('label');\r\n bindValue = input<string>('value');\r\n placeholder = input<string>('Select...');\r\n class = input<string>('custom');\r\n limit = input<number>(3);\r\n label = input<string>('Label');\r\n\r\n searchable = input<boolean>(true);\r\n clearable = input<boolean>(true);\r\n\r\n displayArray = computed(() => {\r\n const val = this.value();\r\n if (!val) return [];\r\n return Array.isArray(val) ? val : [val];\r\n });\r\n\r\n change = (event: any) => {\r\n this.touched.set(true);\r\n this.value.set(event[this.bindValue()]);\r\n };\r\n\r\n clear = () => {\r\n this.value.set(null);\r\n };\r\n\r\n remainingCount = computed(() => Math.max(0, this.displayArray().length - this.limit()));\r\n}\r\n","<label class=\"form-label fw-700\">{{ label() }}</label>\r\n<ng-select\r\n [ngModel]=\"value()\"\r\n [class]=\"class()\"\r\n [class.is-invalid]=\"invalid() && touched()\"\r\n [items]=\"items()\"\r\n [multiple]=\"multiple()\"\r\n [bindLabel]=\"bindLabel()\"\r\n appendTo=\"body\"\r\n [bindValue]=\"bindValue()\"\r\n [placeholder]=\"placeholder()\"\r\n [searchable]=\"searchable()\"\r\n [clearable]=\"clearable()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"change($event)\"\r\n (clear)=\"value.set(null)\"\r\n [readonly]=\"readOnly()\"\r\n [closeOnSelect]=\"!multiple()\"\r\n>\r\n @if (multiple()) {\r\n <ng-template ng-multi-label-tmp let-items=\"items\" let-clear=\"clear\">\r\n @for (item of items | slice: 0 : 2; track item) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ $any(item)[bindLabel()].value }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">×</span>\r\n </div>\r\n }\r\n @if (items.length > 2) {\r\n <div class=\"ng-value\">\r\n <span class=\"ng-value-label\">{{ items.length - 2 }} more...</span>\r\n </div>\r\n }\r\n </ng-template>\r\n }\r\n</ng-select>\r\n@if (invalid() && touched() && errors().length > 0) {\r\n @for (error of errors(); track error.kind) {\r\n <small class=\"invalid-feedback\">{{ error.message }}</small>\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\nimport { KmToastrMessage, KmToastrOptions, KmToastrPosition, KmToastrType } from './toastr.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class KmToastrService {\r\n private nextId = 0;\r\n private timeouts = new Map<number, ReturnType<typeof setTimeout>>();\r\n\r\n /** Default position used when no position is specified in ToastrOptions */\r\n defaultPosition: KmToastrPosition = 'top-right';\r\n\r\n readonly toasts = signal<KmToastrMessage[]>([]);\r\n\r\n private show(type: KmToastrType, message: string, options: KmToastrOptions = {}): void {\r\n const toast: KmToastrMessage = {\r\n id: ++this.nextId,\r\n type,\r\n message,\r\n title: options.title,\r\n duration: options.duration ?? 4000,\r\n position: options.position ?? this.defaultPosition,\r\n };\r\n this.toasts.update((list) => [...list, toast]);\r\n\r\n if (toast.duration > 0) {\r\n const timeout = setTimeout(() => this.dismiss(toast.id), toast.duration);\r\n this.timeouts.set(toast.id, timeout);\r\n }\r\n }\r\n\r\n success(message: string, options?: KmToastrOptions): void {\r\n this.show('success', message, options);\r\n }\r\n\r\n error(message: string, options?: KmToastrOptions): void {\r\n this.show('error', message, options);\r\n }\r\n\r\n warning(message: string, options?: KmToastrOptions): void {\r\n this.show('warning', message, options);\r\n }\r\n\r\n info(message: string, options?: KmToastrOptions): void {\r\n this.show('info', message, options);\r\n }\r\n\r\n dismiss(id: number): void {\r\n this.toasts.update((list) => list.filter((t) => t.id !== id));\r\n const timeout = this.timeouts.get(id);\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n this.timeouts.delete(id);\r\n }\r\n }\r\n\r\n clear(): void {\r\n this.toasts.set([]);\r\n for (const timeout of this.timeouts.values()) {\r\n clearTimeout(timeout);\r\n }\r\n this.timeouts.clear();\r\n }\r\n}\r\n","import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n input,\r\n output,\r\n signal,\r\n OnInit,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { KmToastrMessage } from './toastr.model';\r\n\r\n@Component({\r\n selector: 'km-toast-item',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'alert',\r\n 'aria-live': 'assertive',\r\n 'aria-atomic': 'true',\r\n '[class]': 'hostClass()',\r\n '[class.toast-leaving]': 'leaving()',\r\n },\r\n template: `\r\n <div class=\"toast-icon\" [attr.aria-hidden]=\"true\">\r\n @switch (toast().type) {\r\n @case ('success') {\r\n <span>✓</span>\r\n }\r\n @case ('error') {\r\n <span>✕</span>\r\n }\r\n @case ('warning') {\r\n <span>⚠</span>\r\n }\r\n @case ('info') {\r\n <span>ℹ</span>\r\n }\r\n }\r\n </div>\r\n <div class=\"toast-body\">\r\n @if (toast().title) {\r\n <div class=\"toast-title\">{{ toast().title }}</div>\r\n }\r\n <div class=\"toast-message\">{{ toast().message }}</div>\r\n </div>\r\n <button class=\"toast-close\" type=\"button\" aria-label=\"Close notification\" (click)=\"close()\">\r\n ×\r\n </button>\r\n @if (toast().duration > 0) {\r\n <div\r\n class=\"toast-progress\"\r\n [style.animation-duration.ms]=\"toast().duration\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n }\r\n `,\r\n styles: [\r\n `\r\n @keyframes toast-enter {\r\n from {\r\n opacity: 0;\r\n transform: translateX(var(--toast-slide-x, 40px)) scale(0.92);\r\n }\r\n to {\r\n opacity: 1;\r\n transform: translateX(0) scale(1);\r\n }\r\n }\r\n\r\n :host {\r\n position: relative;\r\n display: flex;\r\n align-items: flex-start;\r\n gap: 12px;\r\n padding: 14px 16px;\r\n border-radius: 8px;\r\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.18);\r\n min-width: 280px;\r\n max-width: 400px;\r\n backdrop-filter: blur(6px);\r\n overflow: hidden;\r\n animation: toast-enter 0.5s cubic-bezier(0.34, 1.28, 0.64, 1) both;\r\n transition:\r\n opacity 0.3s ease,\r\n transform 0.3s ease;\r\n opacity: 1;\r\n transform: translateX(0);\r\n color: #fff;\r\n }\r\n\r\n :host.toast-leaving {\r\n opacity: 0;\r\n transform: translateX(var(--toast-slide-x, 40px));\r\n pointer-events: none;\r\n }\r\n\r\n :host.toast-success {\r\n background: linear-gradient(135deg, #1a7f4b, #22a563);\r\n }\r\n :host.toast-error {\r\n background: linear-gradient(135deg, #9b1d1d, #c0392b);\r\n }\r\n :host.toast-warning {\r\n background: linear-gradient(135deg, #8a5a00, #d4871a);\r\n }\r\n :host.toast-info {\r\n background: linear-gradient(135deg, #145a8a, #1b78c4);\r\n }\r\n\r\n .toast-icon {\r\n font-size: 1.2rem;\r\n font-weight: bold;\r\n flex-shrink: 0;\r\n width: 24px;\r\n height: 24px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: rgba(255, 255, 255, 0.2);\r\n border-radius: 50%;\r\n }\r\n\r\n .toast-body {\r\n flex: 1;\r\n min-width: 0;\r\n }\r\n\r\n .toast-title {\r\n font-weight: 600;\r\n font-size: 0.9rem;\r\n margin-bottom: 2px;\r\n }\r\n\r\n .toast-message {\r\n font-size: 0.85rem;\r\n opacity: 0.92;\r\n word-break: break-word;\r\n }\r\n\r\n .toast-close {\r\n background: none;\r\n border: none;\r\n color: rgba(255, 255, 255, 0.8);\r\n font-size: 1.4rem;\r\n line-height: 1;\r\n cursor: pointer;\r\n padding: 0;\r\n flex-shrink: 0;\r\n transition: color 0.2s;\r\n\r\n &:hover {\r\n color: #fff;\r\n }\r\n &:focus-visible {\r\n outline: 2px solid #fff;\r\n border-radius: 2px;\r\n }\r\n }\r\n\r\n @keyframes toast-progress {\r\n from {\r\n transform: scaleX(1);\r\n }\r\n to {\r\n transform: scaleX(0);\r\n }\r\n }\r\n\r\n .toast-progress {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 3px;\r\n background: rgba(255, 255, 255, 0.45);\r\n transform-origin: left center;\r\n animation: toast-progress linear forwards;\r\n border-radius: 0 0 8px 8px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class KmToastItemComponent implements OnInit, OnDestroy {\r\n readonly toast = input.required<KmToastrMessage>();\r\n readonly dismissed = output<void>();\r\n\r\n protected readonly leaving = signal(false);\r\n private leaveTimeout?: ReturnType<typeof setTimeout>;\r\n private dismissTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n protected hostClass(): string {\r\n return `toast-item toast-${this.toast().type}`;\r\n }\r\n\r\n ngOnInit(): void {\r\n // Pre-animate out before the service removes it\r\n if (this.toast().duration > 0) {\r\n const leaveTime = Math.max(0, this.toast().duration - 300);\r\n this.leaveTimeout = setTimeout(() => this.leaving.set(true), leaveTime);\r\n }\r\n }\r\n\r\n protected close(): void {\r\n this.leaving.set(true);\r\n if (this.leaveTimeout) clearTimeout(this.leaveTimeout);\r\n this.dismissTimeout = setTimeout(() => this.dismissed.emit(), 300);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.leaveTimeout) clearTimeout(this.leaveTimeout);\r\n if (this.dismissTimeout) clearTimeout(this.dismissTimeout);\r\n }\r\n}\r\n","import { InjectionToken, Type } from '@angular/core';\r\n\r\nexport const KM_TOASTR_ITEM_COMPONENT = new InjectionToken<Type<unknown>>(\r\n 'KM_TOASTR_ITEM_COMPONENT',\r\n);\r\n","import { Component, ChangeDetectionStrategy, inject, computed } from '@angular/core';\r\nimport { NgComponentOutlet } from '@angular/common';\r\nimport { KmToastItemComponent } from './toast-item.component';\r\nimport { KmToastrPosition } from './toastr.model';\r\nimport { KmToastrService } from './toastr.service';\r\nimport { KM_TOASTR_ITEM_COMPONENT } from './toastr.tokens';\r\n\r\nconst ALL_POSITIONS: KmToastrPosition[] = [\r\n 'top-left',\r\n 'top-center',\r\n 'top-right',\r\n 'bottom-left',\r\n 'bottom-center',\r\n 'bottom-right',\r\n];\r\n\r\n@Component({\r\n selector: 'km-toastr',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [KmToastItemComponent, NgComponentOutlet],\r\n host: { 'aria-label': 'Notifications' },\r\n template: `\r\n @for (pos of positions; track pos) {\r\n @let group = toastsByPosition()[pos];\r\n @if (group.length > 0) {\r\n <div\r\n class=\"toast-group\"\r\n [class]=\"'toast-group toast-group--' + pos\"\r\n role=\"region\"\r\n [attr.aria-label]=\"'Notifications ' + pos\"\r\n >\r\n @for (toast of group; track toast.id) {\r\n @if (customItemComponent) {\r\n <ng-container\r\n [ngComponentOutlet]=\"customItemComponent\"\r\n [ngComponentOutletInputs]=\"{ toast: toast }\"\r\n />\r\n } @else {\r\n <km-toast-item [toast]=\"toast\" (dismissed)=\"toastr.dismiss(toast.id)\" />\r\n }\r\n }\r\n </div>\r\n }\r\n }\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n position: fixed;\r\n inset: 0;\r\n pointer-events: none;\r\n z-index: 9999;\r\n }\r\n\r\n .toast-group {\r\n position: absolute;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 10px;\r\n pointer-events: none;\r\n }\r\n\r\n /* Top positions stack downward */\r\n .toast-group--top-left,\r\n .toast-group--top-center,\r\n .toast-group--top-right {\r\n top: 24px;\r\n flex-direction: column;\r\n }\r\n\r\n /* Bottom positions stack upward */\r\n .toast-group--bottom-left,\r\n .toast-group--bottom-center,\r\n .toast-group--bottom-right {\r\n bottom: 24px;\r\n flex-direction: column-reverse;\r\n }\r\n\r\n .toast-group--top-left,\r\n .toast-group--bottom-left {\r\n left: 24px;\r\n --toast-slide-x: -40px;\r\n }\r\n\r\n .toast-group--top-center,\r\n .toast-group--bottom-center {\r\n left: 50%;\r\n transform: translateX(-50%);\r\n --toast-slide-x: 0px;\r\n }\r\n\r\n .toast-group--top-right,\r\n .toast-group--bottom-right {\r\n right: 24px;\r\n --toast-slide-x: 40px;\r\n }\r\n\r\n .toast-group > * {\r\n pointer-events: auto;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class KmToastrComponent {\r\n protected readonly toastr = inject(KmToastrService);\r\n protected readonly positions = ALL_POSITIONS;\r\n protected readonly customItemComponent = inject(KM_TOASTR_ITEM_COMPONENT, { optional: true });\r\n\r\n protected readonly toastsByPosition = computed(() => {\r\n const map: Record<KmToastrPosition, ReturnType<typeof this.toastr.toasts>> = {\r\n 'top-left': [],\r\n 'top-center': [],\r\n 'top-right': [],\r\n 'bottom-left': [],\r\n 'bottom-center': [],\r\n 'bottom-right': [],\r\n };\r\n for (const toast of this.toastr.toasts()) {\r\n map[toast.position].push(toast);\r\n }\r\n return map;\r\n });\r\n}\r\n","import {\r\n ApplicationRef,\r\n createComponent,\r\n EnvironmentProviders,\r\n inject,\r\n makeEnvironmentProviders,\r\n provideEnvironmentInitializer,\r\n Type,\r\n} from '@angular/core';\r\nimport { KmToastrComponent } from './toastr.component';\r\nimport { KM_TOASTR_ITEM_COMPONENT } from './toastr.tokens';\r\n\r\nexport interface KmToastrProviderOptions {\r\n /** Provide a custom component to render each toast item. */\r\n itemComponent?: Type<unknown>;\r\n}\r\n\r\nexport function provideKmToastr(options: KmToastrProviderOptions = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n ...(options.itemComponent\r\n ? [{ provide: KM_TOASTR_ITEM_COMPONENT, useValue: options.itemComponent }]\r\n : []),\r\n provideEnvironmentInitializer(() => {\r\n const appRef = inject(ApplicationRef);\r\n const componentRef = createComponent(KmToastrComponent, {\r\n environmentInjector: appRef.injector,\r\n });\r\n appRef.attachView(componentRef.hostView);\r\n document.body.appendChild(componentRef.location.nativeElement);\r\n }),\r\n ]);\r\n}\r\n","/*\r\n * Public API Surface of my-km-components\r\n */\r\n\r\nexport * from './lib/km-button/index';\r\nexport * from './lib/km-color-combo/index';\r\nexport * from './lib/km-generic-card/index';\r\nexport * from './lib/km-input/index';\r\nexport * from './lib/km-input-group/index';\r\nexport * from './lib/km-modal/index';\r\nexport * from './lib/km-select/index';\r\nexport * from './lib/km-toastr/index';\r\nexport * from './directives/index';\r\nexport * from './services/index';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,11 @@
1
1
  {
2
2
  "name": "my-km-components",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
+ "description": "A collection of Angular components for my projects.",
5
+ "main": "dist/my-km-components/bundles/my-km-components.umd.js",
6
+ "module": "fesm2022/my-km-components.mjs",
7
+ "types": "dist/my-km-components/fesm2015/my-km-components.js",
8
+ "unpkg": "dist/my-km-components/index.js",
4
9
  "peerDependencies": {
5
10
  "@angular/common": "^21.2.0",
6
11
  "@angular/core": "^21.2.0",
@@ -15,7 +20,6 @@
15
20
  "tslib": "^2.3.0"
16
21
  },
17
22
  "sideEffects": false,
18
- "module": "fesm2022/my-km-components.mjs",
19
23
  "typings": "types/my-km-components.d.ts",
20
24
  "exports": {
21
25
  "./package.json": {
@@ -2,61 +2,102 @@ import * as _angular_core from '@angular/core';
2
2
  import { Type, EnvironmentProviders, InjectionToken } from '@angular/core';
3
3
  import { FormValueControl, ValidationError } from '@angular/forms/signals';
4
4
 
5
- declare class KmSelectComponent implements FormValueControl<string | number | null> {
6
- value: _angular_core.ModelSignal<string | number | null>;
7
- readonly invalid: _angular_core.InputSignal<boolean>;
8
- readonly touched: _angular_core.ModelSignal<boolean>;
5
+ type ButtonVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark' | 'link';
6
+ type ButtonSize = 'sm' | 'md' | 'lg';
7
+ type ButtonType = 'button' | 'submit' | 'reset';
8
+ declare class KmButtonComponent {
9
+ readonly variant: _angular_core.InputSignal<ButtonVariant>;
10
+ readonly size: _angular_core.InputSignal<ButtonSize>;
11
+ readonly type: _angular_core.InputSignal<ButtonType>;
12
+ readonly outline: _angular_core.InputSignal<boolean>;
13
+ readonly block: _angular_core.InputSignal<boolean>;
14
+ readonly loading: _angular_core.InputSignal<boolean>;
9
15
  readonly disabled: _angular_core.InputSignal<boolean>;
10
- readonly readOnly: _angular_core.InputSignal<boolean>;
11
- readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
12
- items: _angular_core.InputSignal<any[]>;
13
- multiple: _angular_core.InputSignal<boolean>;
14
- bindLabel: _angular_core.InputSignal<string>;
15
- bindValue: _angular_core.InputSignal<string>;
16
- placeholder: _angular_core.InputSignal<string>;
17
- class: _angular_core.InputSignal<string>;
18
- limit: _angular_core.InputSignal<number>;
19
- label: _angular_core.InputSignal<string>;
20
- searchable: _angular_core.InputSignal<boolean>;
21
- clearable: _angular_core.InputSignal<boolean>;
22
- displayArray: _angular_core.Signal<(string & any[]) | (number & any[]) | (string | number)[]>;
23
- change: (event: any) => void;
24
- clear: () => void;
25
- remainingCount: _angular_core.Signal<number>;
26
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmSelectComponent, never>;
27
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmSelectComponent, "km-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readonly"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
16
+ readonly ariaLabel: _angular_core.InputSignal<string>;
17
+ readonly loadingLabel: _angular_core.InputSignal<string>;
18
+ readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
19
+ readonly btnClass: _angular_core.Signal<string>;
20
+ readonly isDisabled: _angular_core.Signal<boolean>;
21
+ handleClick(event: MouseEvent): void;
22
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmButtonComponent, never>;
23
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmButtonComponent, "km-button", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "outline": { "alias": "outline"; "required": false; "isSignal": true; }; "block": { "alias": "block"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "loadingLabel": { "alias": "loadingLabel"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
28
24
  }
29
25
 
30
- declare class KmInputComponent implements FormValueControl<string | null> {
26
+ declare class KmColorComboComponent implements FormValueControl<string | null> {
31
27
  readonly value: _angular_core.ModelSignal<string | null>;
32
28
  readonly invalid: _angular_core.InputSignal<boolean>;
33
29
  readonly touched: _angular_core.ModelSignal<boolean>;
34
30
  readonly disabled: _angular_core.InputSignal<boolean>;
35
31
  readonly required: _angular_core.InputSignal<boolean>;
36
32
  readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
37
- inputType: _angular_core.InputSignal<string>;
38
- placeholder: _angular_core.InputSignal<string>;
39
- label: _angular_core.InputSignal<string>;
40
33
  showLabel: _angular_core.InputSignal<boolean>;
41
- formControlSize: _angular_core.InputSignal<string>;
34
+ label: _angular_core.InputSignal<string>;
35
+ getTextColor(hexColor: string): string;
42
36
  change(event: any): void;
43
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmInputComponent, never>;
44
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmInputComponent, "km-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "inputType": { "alias": "inputType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "formControlSize": { "alias": "formControlSize"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
37
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmColorComboComponent, never>;
38
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmColorComboComponent, "km-color-combo", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
45
39
  }
46
40
 
47
- declare class KmColorComboComponent implements FormValueControl<string | null> {
41
+ interface KmGenericCardInterface {
42
+ title: string;
43
+ subtitle: string;
44
+ isCollapsed: boolean;
45
+ isVisible: boolean;
46
+ buttons: KmGenericCardButtonInterface[];
47
+ }
48
+ interface KmGenericCardButtonInterface {
49
+ label: string;
50
+ tooltip: string;
51
+ icon: string;
52
+ color: string;
53
+ clicked: () => void;
54
+ disabled?: boolean;
55
+ }
56
+
57
+ declare class KmService {
58
+ private loading;
59
+ getLoading(): boolean;
60
+ setLoading(value: boolean): void;
61
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmService, never>;
62
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<KmService>;
63
+ }
64
+
65
+ declare class KmGenericCard {
66
+ panelTitle: _angular_core.InputSignal<string>;
67
+ subtitle: _angular_core.InputSignal<string>;
68
+ visible: _angular_core.InputSignal<boolean>;
69
+ isCollapsed: _angular_core.WritableSignal<boolean>;
70
+ isVisible: _angular_core.WritableSignal<boolean>;
71
+ showBackButton: _angular_core.InputSignal<boolean>;
72
+ buttons: _angular_core.InputSignal<KmGenericCardInterface | undefined>;
73
+ formValid: _angular_core.InputSignal<boolean | undefined>;
74
+ backClicked: _angular_core.OutputEmitterRef<void>;
75
+ service: KmService;
76
+ clicked: _angular_core.OutputEmitterRef<void>;
77
+ toggleCollapse(): void;
78
+ closePanel(): void;
79
+ onButtonClicked(): void;
80
+ onBackClicked(): void;
81
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmGenericCard, never>;
82
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmGenericCard, "km-generic-card", never, { "panelTitle": { "alias": "panelTitle"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "formValid": { "alias": "formValid"; "required": false; "isSignal": true; }; }, { "backClicked": "backClicked"; "clicked": "clicked"; }, never, ["*"], true, never>;
83
+ }
84
+
85
+ type InputType = 'text' | 'password' | 'email' | 'number' | 'search' | 'tel' | 'url';
86
+ declare class KmInputComponent implements FormValueControl<string | null> {
48
87
  readonly value: _angular_core.ModelSignal<string | null>;
49
88
  readonly invalid: _angular_core.InputSignal<boolean>;
50
89
  readonly touched: _angular_core.ModelSignal<boolean>;
51
90
  readonly disabled: _angular_core.InputSignal<boolean>;
52
91
  readonly required: _angular_core.InputSignal<boolean>;
53
92
  readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
54
- showLabel: _angular_core.InputSignal<boolean>;
93
+ inputType: _angular_core.InputSignal<InputType>;
94
+ placeholder: _angular_core.InputSignal<string>;
55
95
  label: _angular_core.InputSignal<string>;
56
- getTextColor(hexColor: string): string;
96
+ showLabel: _angular_core.InputSignal<boolean>;
97
+ formControlSize: _angular_core.InputSignal<string>;
57
98
  change(event: any): void;
58
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmColorComboComponent, never>;
59
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmColorComboComponent, "km-color-combo", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
99
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmInputComponent, never>;
100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmInputComponent, "km-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "inputType": { "alias": "inputType"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "formControlSize": { "alias": "formControlSize"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
60
101
  }
61
102
 
62
103
  declare class KmInputGroupComponent implements FormValueControl<number | null> {
@@ -102,59 +143,29 @@ declare class KmModal {
102
143
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmModal, "km-modal", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "saveLabel": { "alias": "saveLabel"; "required": false; "isSignal": true; }; "cancelLabel": { "alias": "cancelLabel"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "resetLabel": { "alias": "resetLabel"; "required": false; "isSignal": true; }; "showSave": { "alias": "showSave"; "required": false; "isSignal": true; }; "showReset": { "alias": "showReset"; "required": false; "isSignal": true; }; "showClose": { "alias": "showClose"; "required": false; "isSignal": true; }; "saveDisabled": { "alias": "saveDisabled"; "required": false; "isSignal": true; }; }, { "save": "save"; "cancel": "cancel"; "closeClicked": "closeClicked"; "reset": "reset"; }, never, ["[header-actions]", "*"], true, never>;
103
144
  }
104
145
 
105
- interface KmGenericCardInterface {
106
- title: string;
107
- subtitle: string;
108
- isCollapsed: boolean;
109
- isVisible: boolean;
110
- buttons: KmGenericCardButtonInterface[];
111
- }
112
- interface KmGenericCardButtonInterface {
113
- label: string;
114
- tooltip: string;
115
- icon: string;
116
- color: string;
117
- clicked: () => void;
118
- disabled?: boolean;
119
- }
120
-
121
- declare class KmService {
122
- private loading;
123
- getLoading(): boolean;
124
- setLoading(value: boolean): void;
125
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmService, never>;
126
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<KmService>;
127
- }
128
-
129
- declare class KmGenericCard {
130
- panelTitle: _angular_core.InputSignal<string>;
131
- subtitle: _angular_core.InputSignal<string>;
132
- visible: _angular_core.InputSignal<boolean>;
133
- isCollapsed: _angular_core.WritableSignal<boolean>;
134
- isVisible: _angular_core.WritableSignal<boolean>;
135
- showBackButton: _angular_core.InputSignal<boolean>;
136
- buttons: _angular_core.InputSignal<KmGenericCardInterface | undefined>;
137
- formValid: _angular_core.InputSignal<boolean | undefined>;
138
- backClicked: _angular_core.OutputEmitterRef<void>;
139
- service: KmService;
140
- clicked: _angular_core.OutputEmitterRef<void>;
141
- toggleCollapse(): void;
142
- closePanel(): void;
143
- onButtonClicked(): void;
144
- onBackClicked(): void;
145
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmGenericCard, never>;
146
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmGenericCard, "km-generic-card", never, { "panelTitle": { "alias": "panelTitle"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "showBackButton": { "alias": "showBackButton"; "required": false; "isSignal": true; }; "buttons": { "alias": "buttons"; "required": false; "isSignal": true; }; "formValid": { "alias": "formValid"; "required": false; "isSignal": true; }; }, { "backClicked": "backClicked"; "clicked": "clicked"; }, never, ["*"], true, never>;
147
- }
148
-
149
- declare class KmBlockDirective {
150
- KmBlockUI: _angular_core.InputSignal<boolean>;
151
- private el;
152
- private renderer;
153
- constructor();
154
- private block;
155
- private unblock;
156
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmBlockDirective, never>;
157
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KmBlockDirective, "[KmBlockUI]", never, { "KmBlockUI": { "alias": "KmBlockUI"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
146
+ declare class KmSelectComponent implements FormValueControl<string | number | null> {
147
+ value: _angular_core.ModelSignal<string | number | null>;
148
+ readonly invalid: _angular_core.InputSignal<boolean>;
149
+ readonly touched: _angular_core.ModelSignal<boolean>;
150
+ readonly disabled: _angular_core.InputSignal<boolean>;
151
+ readonly readOnly: _angular_core.InputSignal<boolean>;
152
+ readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
153
+ items: _angular_core.InputSignal<any[]>;
154
+ multiple: _angular_core.InputSignal<boolean>;
155
+ bindLabel: _angular_core.InputSignal<string>;
156
+ bindValue: _angular_core.InputSignal<string>;
157
+ placeholder: _angular_core.InputSignal<string>;
158
+ class: _angular_core.InputSignal<string>;
159
+ limit: _angular_core.InputSignal<number>;
160
+ label: _angular_core.InputSignal<string>;
161
+ searchable: _angular_core.InputSignal<boolean>;
162
+ clearable: _angular_core.InputSignal<boolean>;
163
+ displayArray: _angular_core.Signal<(string & any[]) | (number & any[]) | (string | number)[]>;
164
+ change: (event: any) => void;
165
+ clear: () => void;
166
+ remainingCount: _angular_core.Signal<number>;
167
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmSelectComponent, never>;
168
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KmSelectComponent, "km-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readonly"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "bindLabel": { "alias": "bindLabel"; "required": false; "isSignal": true; }; "bindValue": { "alias": "bindValue"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
158
169
  }
159
170
 
160
171
  type KmToastrType = 'success' | 'error' | 'warning' | 'info';
@@ -198,5 +209,16 @@ declare function provideKmToastr(options?: KmToastrProviderOptions): Environment
198
209
 
199
210
  declare const KM_TOASTR_ITEM_COMPONENT: InjectionToken<Type<unknown>>;
200
211
 
201
- export { KM_TOASTR_ITEM_COMPONENT, KmBlockDirective, KmColorComboComponent, KmGenericCard, KmInputComponent, KmInputGroupComponent, KmModal, KmSelectComponent, KmService, KmToastrService, provideKmToastr };
202
- export type { KmToastrMessage, KmToastrOptions, KmToastrPosition, KmToastrProviderOptions, KmToastrType };
212
+ declare class KmBlockDirective {
213
+ KmBlockUI: _angular_core.InputSignal<boolean>;
214
+ private el;
215
+ private renderer;
216
+ constructor();
217
+ private block;
218
+ private unblock;
219
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KmBlockDirective, never>;
220
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<KmBlockDirective, "[KmBlockUI]", never, { "KmBlockUI": { "alias": "KmBlockUI"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
221
+ }
222
+
223
+ export { KM_TOASTR_ITEM_COMPONENT, KmBlockDirective, KmButtonComponent, KmColorComboComponent, KmGenericCard, KmInputComponent, KmInputGroupComponent, KmModal, KmSelectComponent, KmService, KmToastrService, provideKmToastr };
224
+ export type { ButtonSize, ButtonType, ButtonVariant, InputType, KmGenericCardButtonInterface, KmGenericCardInterface, KmToastrMessage, KmToastrOptions, KmToastrPosition, KmToastrProviderOptions, KmToastrType };