@koalarx/ui 21.1.11 → 21.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/koalarx-ui-core-components-kl-root.mjs +2 -2
- package/fesm2022/koalarx-ui-core-components-kl-root.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-alert.mjs +2 -2
- package/fesm2022/koalarx-ui-shared-components-alert.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-dialog.mjs +4 -13
- package/fesm2022/koalarx-ui-shared-components-dialog.mjs.map +1 -1
- package/fesm2022/koalarx-ui-shared-components-input-field-select.mjs +2 -2
- package/fesm2022/koalarx-ui-shared-components-input-field-select.mjs.map +1 -1
- package/package.json +1 -1
- package/types/koalarx-ui-shared-components-dialog.d.ts +1 -3
|
@@ -28,7 +28,7 @@ class KlRoot {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: KlRoot, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
31
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: KlRoot, isStandalone: true, selector: "kl-root", inputs: { routerLoaderColor: { classPropertyName: "routerLoaderColor", publicName: "routerLoaderColor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ngx-loading-bar\n [color]=\"routerLoaderColor()\"\n height=\"4px\"\n [includeSpinner]=\"false\"\n/>\n\n<main class=\"overflow-x-hidden\">\n <kl-loader-page-content />\n <kl-
|
|
31
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.6", type: KlRoot, isStandalone: true, selector: "kl-root", inputs: { routerLoaderColor: { classPropertyName: "routerLoaderColor", publicName: "routerLoaderColor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ngx-loading-bar\n [color]=\"routerLoaderColor()\"\n height=\"4px\"\n [includeSpinner]=\"false\"\n/>\n\n<main class=\"overflow-x-hidden\">\n <kl-loader-page-content />\n <kl-dialog-container />\n <kl-side-window-container />\n <kl-snackbar-container />\n <div class=\"kl-generic-component-container\"></div>\n\n <ng-content />\n</main>\n", dependencies: [{ kind: "component", type: DialogContainer, selector: "kl-dialog-container" }, { kind: "ngmodule", type: LoadingBarRouterModule }, { kind: "component", type: i1.LoadingBarComponent, selector: "ngx-loading-bar" }, { kind: "component", type: SideWindowContainer, selector: "kl-side-window-container" }, { kind: "component", type: SnackbarContainer, selector: "kl-snackbar-container" }, { kind: "component", type: LoaderPageContent, selector: "kl-loader-page-content" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
32
32
|
}
|
|
33
33
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: KlRoot, decorators: [{
|
|
34
34
|
type: Component,
|
|
@@ -38,7 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImpor
|
|
|
38
38
|
SideWindowContainer,
|
|
39
39
|
SnackbarContainer,
|
|
40
40
|
LoaderPageContent,
|
|
41
|
-
], template: "<ngx-loading-bar\n [color]=\"routerLoaderColor()\"\n height=\"4px\"\n [includeSpinner]=\"false\"\n/>\n\n<main class=\"overflow-x-hidden\">\n <kl-loader-page-content />\n <kl-
|
|
41
|
+
], template: "<ngx-loading-bar\n [color]=\"routerLoaderColor()\"\n height=\"4px\"\n [includeSpinner]=\"false\"\n/>\n\n<main class=\"overflow-x-hidden\">\n <kl-loader-page-content />\n <kl-dialog-container />\n <kl-side-window-container />\n <kl-snackbar-container />\n <div class=\"kl-generic-component-container\"></div>\n\n <ng-content />\n</main>\n" }]
|
|
42
42
|
}], propDecorators: { routerLoaderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLoaderColor", required: false }] }] } });
|
|
43
43
|
|
|
44
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-core-components-kl-root.mjs","sources":["../../projects/koala-ui/core/components/kl-root/kl-root.ts","../../projects/koala-ui/core/components/kl-root/kl-root.html","../../projects/koala-ui/core/components/kl-root/koalarx-ui-core-components-kl-root.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n input,\n OnInit,\n} from '@angular/core';\nimport { DialogContainer } from '@koalarx/ui/core/components/dialog';\nimport { LoaderPageContent } from '@koalarx/ui/core/components/loader-page';\nimport { SideWindowContainer } from '@koalarx/ui/core/components/side-window';\nimport { SnackbarContainer } from '@koalarx/ui/core/components/snackbar';\nimport { CURRENT_THEME } from '@koalarx/ui/core/config';\nimport { ThemeName } from '@koalarx/ui/theme';\nimport { LoadingBarRouterModule } from '@ngx-loading-bar/router';\n\n@Component({\n selector: 'kl-root',\n templateUrl: './kl-root.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogContainer,\n LoadingBarRouterModule,\n SideWindowContainer,\n SnackbarContainer,\n LoaderPageContent,\n ],\n})\nexport class KlRoot implements OnInit {\n routerLoaderColor = input<string>('#6A1B9A');\n\n ngOnInit(): void {\n if (document.querySelector('html')?.getAttribute('data-theme') === null) {\n document.querySelector('html')?.setAttribute('data-theme', 'light');\n }\n\n const htmlElement = document.querySelector('html');\n\n if (htmlElement) {\n htmlElement.onchange = () => {\n setTimeout(() => {\n const theme = htmlElement.getAttribute(\n 'data-theme'\n ) as ThemeName | null;\n\n if (theme === CURRENT_THEME()) {\n return;\n }\n\n CURRENT_THEME.set(theme);\n });\n };\n }\n }\n}\n","<ngx-loading-bar\n [color]=\"routerLoaderColor()\"\n height=\"4px\"\n [includeSpinner]=\"false\"\n/>\n\n<main class=\"overflow-x-hidden\">\n <kl-loader-page-content />\n <kl-
|
|
1
|
+
{"version":3,"file":"koalarx-ui-core-components-kl-root.mjs","sources":["../../projects/koala-ui/core/components/kl-root/kl-root.ts","../../projects/koala-ui/core/components/kl-root/kl-root.html","../../projects/koala-ui/core/components/kl-root/koalarx-ui-core-components-kl-root.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n input,\n OnInit,\n} from '@angular/core';\nimport { DialogContainer } from '@koalarx/ui/core/components/dialog';\nimport { LoaderPageContent } from '@koalarx/ui/core/components/loader-page';\nimport { SideWindowContainer } from '@koalarx/ui/core/components/side-window';\nimport { SnackbarContainer } from '@koalarx/ui/core/components/snackbar';\nimport { CURRENT_THEME } from '@koalarx/ui/core/config';\nimport { ThemeName } from '@koalarx/ui/theme';\nimport { LoadingBarRouterModule } from '@ngx-loading-bar/router';\n\n@Component({\n selector: 'kl-root',\n templateUrl: './kl-root.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DialogContainer,\n LoadingBarRouterModule,\n SideWindowContainer,\n SnackbarContainer,\n LoaderPageContent,\n ],\n})\nexport class KlRoot implements OnInit {\n routerLoaderColor = input<string>('#6A1B9A');\n\n ngOnInit(): void {\n if (document.querySelector('html')?.getAttribute('data-theme') === null) {\n document.querySelector('html')?.setAttribute('data-theme', 'light');\n }\n\n const htmlElement = document.querySelector('html');\n\n if (htmlElement) {\n htmlElement.onchange = () => {\n setTimeout(() => {\n const theme = htmlElement.getAttribute(\n 'data-theme'\n ) as ThemeName | null;\n\n if (theme === CURRENT_THEME()) {\n return;\n }\n\n CURRENT_THEME.set(theme);\n });\n };\n }\n }\n}\n","<ngx-loading-bar\n [color]=\"routerLoaderColor()\"\n height=\"4px\"\n [includeSpinner]=\"false\"\n/>\n\n<main class=\"overflow-x-hidden\">\n <kl-loader-page-content />\n <kl-dialog-container />\n <kl-side-window-container />\n <kl-snackbar-container />\n <div class=\"kl-generic-component-container\"></div>\n\n <ng-content />\n</main>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;MA0Ba,MAAM,CAAA;AACjB,IAAA,iBAAiB,GAAG,KAAK,CAAS,SAAS,6DAAC;IAE5C,QAAQ,GAAA;AACN,QAAA,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;AACvE,YAAA,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;;QAGrE,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAElD,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,CAAC,QAAQ,GAAG,MAAK;gBAC1B,UAAU,CAAC,MAAK;oBACd,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CACpC,YAAY,CACO;AAErB,oBAAA,IAAI,KAAK,KAAK,aAAa,EAAE,EAAE;wBAC7B;;AAGF,oBAAA,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,iBAAC,CAAC;AACJ,aAAC;;;uGAvBM,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAN,MAAM,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BnB,4VAeA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDII,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,mBAAmB,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,wBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAGR,MAAM,EAAA,UAAA,EAAA,CAAA;kBAZlB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,eAAA,EAEF,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,eAAe;wBACf,sBAAsB;wBACtB,mBAAmB;wBACnB,iBAAiB;wBACjB,iBAAiB;AAClB,qBAAA,EAAA,QAAA,EAAA,4VAAA,EAAA;;;AExBH;;AAEG;;;;"}
|
|
@@ -10,11 +10,11 @@ class AlertContent {
|
|
|
10
10
|
this.dialogRef.dismiss('close');
|
|
11
11
|
}
|
|
12
12
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AlertContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AlertContent, isStandalone: true, selector: "kl-alert-content", ngImport: i0, template: "<kl-dialog-content>\n @if (data.title) {\n <h2>{{ data.title }}</h2>\n }\n\n <div class=\"flex flex-col items-center justify-center gap-4\" content>\n @switch (data.type) {\n @case ('info') {\n <i class=\"fa-solid fa-circle-info text-6xl text-indigo-500\"></i>\n }\n @case ('success') {\n <i class=\"fa-solid fa-circle-check text-6xl text-green-500\"></i>\n }\n @case ('warning') {\n <i class=\"fa-solid fa-triangle-exclamation text-6xl text-yellow-500\"></i>\n\n }\n @case ('error') {\n <i class=\"fa-solid fa-circle-xmark text-6xl text-red-500\"></i>\n }\n }\n\n <p [innerHTML]=\"data.message\"></p>\n </div>\n\n <div class=\"flex items-center justify-center w-full\" actions>\n <button klButton outline [color]=\"data.type\" (click)=\"close()\">\n {{ data.okButtonText ?? 'OK' }}\n </button>\n </div>\n</kl-dialog-content>\n", dependencies: [{ kind: "component", type: DialogContent, selector: "kl-dialog-content" }, { kind: "directive", type: Button, selector: "button[klButton], a[klButton]", inputs: ["color", "type", "circle", "outline", "soft", "showLoader", "disabled", "size"] }] });
|
|
13
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: AlertContent, isStandalone: true, selector: "kl-alert-content", ngImport: i0, template: "<kl-dialog-content>\n @if (data.title) {\n <h2>{{ data.title }}</h2>\n }\n\n <div class=\"flex flex-col items-center justify-center gap-4\" content>\n @switch (data.type) {\n @case ('info') {\n <i class=\"fa-solid fa-circle-info text-6xl text-indigo-500\"></i>\n }\n @case ('success') {\n <i class=\"fa-solid fa-circle-check text-6xl text-green-500\"></i>\n }\n @case ('warning') {\n <i class=\"fa-solid fa-triangle-exclamation text-6xl text-yellow-500\"></i>\n\n }\n @case ('error') {\n <i class=\"fa-solid fa-circle-xmark text-6xl text-red-500\"></i>\n }\n }\n\n <p class=\"text-center\" [innerHTML]=\"data.message\"></p>\n </div>\n\n <div class=\"flex items-center justify-center w-full\" actions>\n <button klButton outline [color]=\"data.type\" (click)=\"close()\">\n {{ data.okButtonText ?? 'OK' }}\n </button>\n </div>\n</kl-dialog-content>\n", dependencies: [{ kind: "component", type: DialogContent, selector: "kl-dialog-content" }, { kind: "directive", type: Button, selector: "button[klButton], a[klButton]", inputs: ["color", "type", "circle", "outline", "soft", "showLoader", "disabled", "size"] }] });
|
|
14
14
|
}
|
|
15
15
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: AlertContent, decorators: [{
|
|
16
16
|
type: Component,
|
|
17
|
-
args: [{ selector: 'kl-alert-content', imports: [DialogContent, Button], template: "<kl-dialog-content>\n @if (data.title) {\n <h2>{{ data.title }}</h2>\n }\n\n <div class=\"flex flex-col items-center justify-center gap-4\" content>\n @switch (data.type) {\n @case ('info') {\n <i class=\"fa-solid fa-circle-info text-6xl text-indigo-500\"></i>\n }\n @case ('success') {\n <i class=\"fa-solid fa-circle-check text-6xl text-green-500\"></i>\n }\n @case ('warning') {\n <i class=\"fa-solid fa-triangle-exclamation text-6xl text-yellow-500\"></i>\n\n }\n @case ('error') {\n <i class=\"fa-solid fa-circle-xmark text-6xl text-red-500\"></i>\n }\n }\n\n <p [innerHTML]=\"data.message\"></p>\n </div>\n\n <div class=\"flex items-center justify-center w-full\" actions>\n <button klButton outline [color]=\"data.type\" (click)=\"close()\">\n {{ data.okButtonText ?? 'OK' }}\n </button>\n </div>\n</kl-dialog-content>\n" }]
|
|
17
|
+
args: [{ selector: 'kl-alert-content', imports: [DialogContent, Button], template: "<kl-dialog-content>\n @if (data.title) {\n <h2>{{ data.title }}</h2>\n }\n\n <div class=\"flex flex-col items-center justify-center gap-4\" content>\n @switch (data.type) {\n @case ('info') {\n <i class=\"fa-solid fa-circle-info text-6xl text-indigo-500\"></i>\n }\n @case ('success') {\n <i class=\"fa-solid fa-circle-check text-6xl text-green-500\"></i>\n }\n @case ('warning') {\n <i class=\"fa-solid fa-triangle-exclamation text-6xl text-yellow-500\"></i>\n\n }\n @case ('error') {\n <i class=\"fa-solid fa-circle-xmark text-6xl text-red-500\"></i>\n }\n }\n\n <p class=\"text-center\" [innerHTML]=\"data.message\"></p>\n </div>\n\n <div class=\"flex items-center justify-center w-full\" actions>\n <button klButton outline [color]=\"data.type\" (click)=\"close()\">\n {{ data.okButtonText ?? 'OK' }}\n </button>\n </div>\n</kl-dialog-content>\n" }]
|
|
18
18
|
}] });
|
|
19
19
|
|
|
20
20
|
class Alert {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-components-alert.mjs","sources":["../../projects/koala-ui/shared/components/alert/alert-content.ts","../../projects/koala-ui/shared/components/alert/alert-content.html","../../projects/koala-ui/shared/components/alert/alert.ts","../../projects/koala-ui/shared/components/alert/koalarx-ui-shared-components-alert.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport {\n DIALOG_DATA,\n DialogContent,\n DialogRef,\n} from '@koalarx/ui/shared/components/dialog';\nimport { Button } from '@koalarx/ui/shared/directives';\nimport { AlertData } from './alert';\n\n@Component({\n selector: 'kl-alert-content',\n templateUrl: './alert-content.html',\n imports: [DialogContent, Button],\n})\nexport class AlertContent {\n private readonly dialogRef = inject(DialogRef);\n\n data = inject<AlertData>(DIALOG_DATA);\n\n close() {\n this.dialogRef.dismiss('close');\n }\n}\n","<kl-dialog-content>\n @if (data.title) {\n <h2>{{ data.title }}</h2>\n }\n\n <div class=\"flex flex-col items-center justify-center gap-4\" content>\n @switch (data.type) {\n @case ('info') {\n <i class=\"fa-solid fa-circle-info text-6xl text-indigo-500\"></i>\n }\n @case ('success') {\n <i class=\"fa-solid fa-circle-check text-6xl text-green-500\"></i>\n }\n @case ('warning') {\n <i class=\"fa-solid fa-triangle-exclamation text-6xl text-yellow-500\"></i>\n\n }\n @case ('error') {\n <i class=\"fa-solid fa-circle-xmark text-6xl text-red-500\"></i>\n }\n }\n\n <p [innerHTML]=\"data.message\"></p>\n </div>\n\n <div class=\"flex items-center justify-center w-full\" actions>\n <button klButton outline [color]=\"data.type\" (click)=\"close()\">\n {{ data.okButtonText ?? 'OK' }}\n </button>\n </div>\n</kl-dialog-content>\n","import { inject, Injectable } from '@angular/core';\nimport { Dialog } from '@koalarx/ui/shared/components/dialog';\nimport { AlertContent } from './alert-content';\n\nexport interface AlertData {\n type: 'info' | 'warning' | 'error' | 'success';\n message: string;\n title?: string;\n okButtonText?: string;\n}\n\nexport interface AlertConfig {\n data: AlertData;\n onClose?: () => void;\n}\n\nexport interface AlertOptions extends Omit<AlertData, 'type'> {\n onClose?: () => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class Alert {\n private readonly dialog = inject(Dialog);\n\n private open(config: AlertConfig) {\n this.dialog.open(AlertContent, {\n data: config.data,\n afterClosed: config.onClose\n ? {\n trigger: 'close',\n callback: config.onClose,\n }\n : undefined,\n });\n }\n\n success(options: AlertOptions) {\n this.open({\n data: {\n type: 'success',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n\n error(options: AlertOptions) {\n this.open({\n data: {\n type: 'error',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n\n info(options: AlertOptions) {\n this.open({\n data: {\n type: 'info',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n\n warning(options: AlertOptions) {\n this.open({\n data: {\n type: 'warning',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAca,YAAY,CAAA;AACN,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C,IAAA,IAAI,GAAG,MAAM,CAAY,WAAW,CAAC;IAErC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;;uGANtB,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdzB,
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-components-alert.mjs","sources":["../../projects/koala-ui/shared/components/alert/alert-content.ts","../../projects/koala-ui/shared/components/alert/alert-content.html","../../projects/koala-ui/shared/components/alert/alert.ts","../../projects/koala-ui/shared/components/alert/koalarx-ui-shared-components-alert.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport {\n DIALOG_DATA,\n DialogContent,\n DialogRef,\n} from '@koalarx/ui/shared/components/dialog';\nimport { Button } from '@koalarx/ui/shared/directives';\nimport { AlertData } from './alert';\n\n@Component({\n selector: 'kl-alert-content',\n templateUrl: './alert-content.html',\n imports: [DialogContent, Button],\n})\nexport class AlertContent {\n private readonly dialogRef = inject(DialogRef);\n\n data = inject<AlertData>(DIALOG_DATA);\n\n close() {\n this.dialogRef.dismiss('close');\n }\n}\n","<kl-dialog-content>\n @if (data.title) {\n <h2>{{ data.title }}</h2>\n }\n\n <div class=\"flex flex-col items-center justify-center gap-4\" content>\n @switch (data.type) {\n @case ('info') {\n <i class=\"fa-solid fa-circle-info text-6xl text-indigo-500\"></i>\n }\n @case ('success') {\n <i class=\"fa-solid fa-circle-check text-6xl text-green-500\"></i>\n }\n @case ('warning') {\n <i class=\"fa-solid fa-triangle-exclamation text-6xl text-yellow-500\"></i>\n\n }\n @case ('error') {\n <i class=\"fa-solid fa-circle-xmark text-6xl text-red-500\"></i>\n }\n }\n\n <p class=\"text-center\" [innerHTML]=\"data.message\"></p>\n </div>\n\n <div class=\"flex items-center justify-center w-full\" actions>\n <button klButton outline [color]=\"data.type\" (click)=\"close()\">\n {{ data.okButtonText ?? 'OK' }}\n </button>\n </div>\n</kl-dialog-content>\n","import { inject, Injectable } from '@angular/core';\nimport { Dialog } from '@koalarx/ui/shared/components/dialog';\nimport { AlertContent } from './alert-content';\n\nexport interface AlertData {\n type: 'info' | 'warning' | 'error' | 'success';\n message: string;\n title?: string;\n okButtonText?: string;\n}\n\nexport interface AlertConfig {\n data: AlertData;\n onClose?: () => void;\n}\n\nexport interface AlertOptions extends Omit<AlertData, 'type'> {\n onClose?: () => void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class Alert {\n private readonly dialog = inject(Dialog);\n\n private open(config: AlertConfig) {\n this.dialog.open(AlertContent, {\n data: config.data,\n afterClosed: config.onClose\n ? {\n trigger: 'close',\n callback: config.onClose,\n }\n : undefined,\n });\n }\n\n success(options: AlertOptions) {\n this.open({\n data: {\n type: 'success',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n\n error(options: AlertOptions) {\n this.open({\n data: {\n type: 'error',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n\n info(options: AlertOptions) {\n this.open({\n data: {\n type: 'info',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n\n warning(options: AlertOptions) {\n this.open({\n data: {\n type: 'warning',\n message: options.message,\n title: options.title,\n okButtonText: options.okButtonText,\n },\n onClose: options.onClose,\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { Component, InjectionToken, inject, ApplicationRef, EnvironmentInjector, createComponent, Injector, Injectable } from '@angular/core';
|
|
3
3
|
import { randomString } from '@koalarx/utils/KlString';
|
|
4
4
|
|
|
5
5
|
class DialogContent {
|
|
6
|
-
dialogElement = viewChild('dialog', ...(ngDevMode ? [{ debugName: "dialogElement" }] : []));
|
|
7
|
-
constructor() {
|
|
8
|
-
effect(() => {
|
|
9
|
-
const dialog = this.dialogElement();
|
|
10
|
-
if (dialog) {
|
|
11
|
-
dialog.nativeElement.showModal();
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
6
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
16
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
7
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.6", type: DialogContent, isStandalone: true, selector: "kl-dialog-content", ngImport: i0, template: "<div role=\"dialog\" class=\"modal modal-open\">\n <div class=\"modal-box bg-base-200 border-4 border-neutral-200 dark:border-neutral-900 rounded-lg shadow-sm\">\n <ng-content select=\"[header]\" />\n <ng-content select=\"[content]\" />\n\n <div class=\"modal-action\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n</div>\n" });
|
|
17
8
|
}
|
|
18
9
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: DialogContent, decorators: [{
|
|
19
10
|
type: Component,
|
|
20
|
-
args: [{ selector: 'kl-dialog-content', template: "<
|
|
21
|
-
}]
|
|
11
|
+
args: [{ selector: 'kl-dialog-content', template: "<div role=\"dialog\" class=\"modal modal-open\">\n <div class=\"modal-box bg-base-200 border-4 border-neutral-200 dark:border-neutral-900 rounded-lg shadow-sm\">\n <ng-content select=\"[header]\" />\n <ng-content select=\"[content]\" />\n\n <div class=\"modal-action\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n</div>\n" }]
|
|
12
|
+
}] });
|
|
22
13
|
|
|
23
14
|
const DIALOG_CONFIG = new InjectionToken('DialogConfig');
|
|
24
15
|
const DIALOG_DATA = new InjectionToken('DialogData');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-components-dialog.mjs","sources":["../../projects/koala-ui/shared/components/dialog/dialog-content.ts","../../projects/koala-ui/shared/components/dialog/dialog-content.html","../../projects/koala-ui/shared/components/dialog/dialog.ts","../../projects/koala-ui/shared/components/dialog/dialog-ref.ts","../../projects/koala-ui/shared/components/dialog/koalarx-ui-shared-components-dialog.ts"],"sourcesContent":["import { Component
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-components-dialog.mjs","sources":["../../projects/koala-ui/shared/components/dialog/dialog-content.ts","../../projects/koala-ui/shared/components/dialog/dialog-content.html","../../projects/koala-ui/shared/components/dialog/dialog.ts","../../projects/koala-ui/shared/components/dialog/dialog-ref.ts","../../projects/koala-ui/shared/components/dialog/koalarx-ui-shared-components-dialog.ts"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'kl-dialog-content',\n templateUrl: './dialog-content.html',\n})\nexport class DialogContent {}\n","<div role=\"dialog\" class=\"modal modal-open\">\n <div class=\"modal-box bg-base-200 border-4 border-neutral-200 dark:border-neutral-900 rounded-lg shadow-sm\">\n <ng-content select=\"[header]\" />\n <ng-content select=\"[content]\" />\n\n <div class=\"modal-action\">\n <ng-content select=\"[actions]\" />\n </div>\n </div>\n</div>\n","import {\n ApplicationRef,\n createComponent,\n EnvironmentInjector,\n inject,\n Injectable,\n InjectionToken,\n Injector,\n Type,\n} from '@angular/core';\nimport { randomString } from '@koalarx/utils/KlString';\nimport { DIALOG_REF_TOKEN, DialogRef } from './dialog-ref';\n\nexport type DialogAfterCloseTrigger = string | Record<string, any>;\nexport type DialogAfterCloseTriggerFn = (\n trigger: DialogAfterCloseTrigger\n) => void;\nexport const DIALOG_CONFIG = new InjectionToken('DialogConfig');\nexport const DIALOG_DATA = new InjectionToken('DialogData');\nexport const DIALOG_APP_REF = new InjectionToken('DialogAppRef');\nexport const DIALOG_AFTER_CLOSE_TRIGGER =\n new InjectionToken<DialogAfterCloseTriggerFn>('DialogAfterCloseTrigger');\n\nexport interface DialogConfig {\n data?: any;\n afterClosed?: {\n trigger: DialogAfterCloseTrigger;\n callback: (trigger: any) => void;\n };\n}\n\n@Injectable({ providedIn: 'root' })\nexport class Dialog {\n private readonly appRef = inject(ApplicationRef);\n private readonly injector = inject(EnvironmentInjector);\n\n private generateElementId() {\n let elementId: string;\n\n do {\n elementId = randomString(50, {\n numbers: false,\n lowercase: true,\n uppercase: true,\n specialCharacters: false,\n });\n } while (document.getElementById(elementId));\n\n return elementId;\n }\n\n open(component: Type<any>, config?: DialogConfig) {\n const main = document.querySelector<HTMLElement>(\n 'kl-dialog-container .dialog-container'\n );\n\n if (main) {\n const elementId = this.generateElementId();\n const container = main.appendChild(document.createElement('div'));\n\n container.id = elementId;\n\n const componentRef = createComponent(component, {\n environmentInjector: this.injector,\n hostElement: container,\n elementInjector: Injector.create({\n providers: [\n { provide: DIALOG_CONFIG, useValue: config },\n { provide: DIALOG_APP_REF, useValue: this.appRef },\n {\n provide: DIALOG_REF_TOKEN,\n useValue: () => componentRef,\n },\n { provide: DIALOG_DATA, useValue: config?.data },\n {\n provide: DIALOG_AFTER_CLOSE_TRIGGER,\n useValue: (trigger: DialogAfterCloseTrigger) => {\n if (\n config?.afterClosed &&\n (config.afterClosed.trigger === trigger ||\n typeof trigger === 'object')\n ) {\n config.afterClosed.callback(trigger);\n }\n },\n },\n {\n provide: DialogRef,\n deps: [\n DIALOG_CONFIG,\n DIALOG_APP_REF,\n DIALOG_REF_TOKEN,\n DIALOG_AFTER_CLOSE_TRIGGER,\n DIALOG_DATA,\n ],\n },\n ],\n }),\n });\n\n this.appRef.attachView(componentRef.hostView);\n\n componentRef.changeDetectorRef.detectChanges();\n }\n }\n}\n","import {\n ApplicationRef,\n ComponentRef,\n inject,\n Injectable,\n InjectionToken,\n Type,\n} from '@angular/core';\nimport {\n DIALOG_AFTER_CLOSE_TRIGGER,\n DIALOG_APP_REF,\n DialogAfterCloseTrigger,\n DialogAfterCloseTriggerFn,\n} from './dialog';\n\nexport const DIALOG_REF_TOKEN = new InjectionToken('DialogRefToken');\n\n@Injectable()\nexport class DialogRef {\n private readonly appRef = inject<ApplicationRef>(DIALOG_APP_REF);\n private readonly componentRef =\n inject<() => ComponentRef<Type<any>>>(DIALOG_REF_TOKEN);\n private readonly afterCloseTrigger = inject<DialogAfterCloseTriggerFn>(\n DIALOG_AFTER_CLOSE_TRIGGER\n );\n\n dismiss(afterCloseTrigger?: DialogAfterCloseTrigger) {\n this.componentRef().destroy();\n this.appRef.detachView(this.componentRef().hostView);\n\n if (afterCloseTrigger) {\n this.afterCloseTrigger(afterCloseTrigger);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -425,11 +425,11 @@ class Select extends InputFieldBase {
|
|
|
425
425
|
inputValue.click();
|
|
426
426
|
}
|
|
427
427
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Select, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
428
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: Select, isStandalone: true, selector: "kl-select", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, internalFilter: { classPropertyName: "internalFilter", publicName: "internalFilter", isSignal: true, isRequired: false, transformFunction: null }, withoutFilter: { classPropertyName: "withoutFilter", publicName: "withoutFilter", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "filterChange", selectedItem: "selectedItem" }, viewQueries: [{ propertyName: "selectField", first: true, predicate: ["selectField"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kl-select-container relative w-full has-[select:disabled]:cursor-not-allowed\"\n [class.has-value]=\"hasValue()\">\n\n @if (label(); as label) {\n <label class=\"kl-select-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\"\n [attr.for]=\"fieldId\">\n @if (isDisabled()) {\n <span class=\"text-neutral-200 dark:text-neutral-600\">\n {{ label }} {{ isRequired() ? '*' : '' }}\n </span>\n } @else {\n <span>{{ label }} {{ isRequired() ? '*' : '' }}</span>\n }\n </label>\n }\n\n @if (!isDisabled() && hasValue()) {\n <div class=\"flex items-center justify-center h-full absolute top-0 right-7 z-10 pr-2\">\n <button class=\"kl-select-clear-button text-neutral-400 hover:cursor-pointer text-sm focus:shadow-none!\"\n type=\"button\"\n (click)=\"clear($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"kl-select-content\" #selectField>\n <button type=\"button\" class=\"kl-select-button flex gap-4 disabled:border-neutral-200! disabled:dark:border-neutral-800!\"\n [attr.popovertarget]=\"fieldId\"\n popovertargetaction=\"toggle\">\n\n <span class=\"selectcontent flex flex-wrap gap-1 items-center w-[calc(100%-3rem)] h-full text-left py-1\" [class.py-3]=\"multiple()\"></span>\n\n <span class=\"picker\">\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else {\n <i class=\"fa-solid fa-caret-down\"></i>\n }\n </span>\n </button>\n\n <div [id]=\"fieldId\" popover class=\"kl-select-options-container with-popover relative flex flex-col overflow-hidden bg-base-100 dark:bg-base-300\">\n @if (!withoutFilter()) {\n <div class=\"kl-select-filter-container border-b border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none dark:placeholder:opacity-80\"\n #searchInput\n type=\"search\"\n [(ngModel)]=\"filter\"\n [placeholder]=\"translations.selectTypeSearch\"\n />\n </label>\n </div>\n }\n\n <div class=\"kl-select-options-content p-1 overflow-auto\">\n @for (item of optionList(); track $index) {\n @let optionLabelId = fieldId + '-' + item.value;\n\n <label class=\"kl-select-option-content relative py-1 px-2 pr-8 rounded-md text-neutral-900 dark:text-neutral-300 has-[input:checked]:bg-neutral-200 dark:has-[input:checked]:bg-neutral-700 hover:bg-neutral-300 dark:hover:bg-neutral-600 cursor-pointer\"\n [attr.for]=\"optionLabelId\"\n [attr.data-index]=\"$index\">\n <span class=\"w-full flex flex-col justify-center\">\n @let isChecked = multiple() ? (control().value || []).includes(item.value) : item.value === control().value;\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId\"\n [attr.value]=\"item.value\"\n [checked]=\"isChecked\"\n (change)=\"setValue($event)\"\n />\n <span>{{ item.label }}</span>\n <small class=\"empty:hidden opacity-60\">{{ item.description }}</small>\n </span>\n </label>\n }\n </div>\n </div>\n </div>\n</div>\n\n@if (hint()) {\n <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FieldErrors, selector: "kl-field-errors", inputs: ["field"] }, { kind: "component", type: Loader, selector: "kl-loader", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
428
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.6", type: Select, isStandalone: true, selector: "kl-select", inputs: { filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, internalFilter: { classPropertyName: "internalFilter", publicName: "internalFilter", isSignal: true, isRequired: false, transformFunction: null }, withoutFilter: { classPropertyName: "withoutFilter", publicName: "withoutFilter", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filter: "filterChange", selectedItem: "selectedItem" }, viewQueries: [{ propertyName: "selectField", first: true, predicate: ["selectField"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kl-select-container relative w-full has-[select:disabled]:cursor-not-allowed\"\n [class.has-value]=\"hasValue()\">\n\n @if (label(); as label) {\n <label class=\"kl-select-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\"\n [attr.for]=\"fieldId\">\n @if (isDisabled()) {\n <span class=\"text-neutral-200 dark:text-neutral-600\">\n {{ label }} {{ isRequired() ? '*' : '' }}\n </span>\n } @else {\n <span>{{ label }} {{ isRequired() ? '*' : '' }}</span>\n }\n </label>\n }\n\n @if (!isDisabled() && hasValue()) {\n <div class=\"flex items-center justify-center h-full absolute top-0 right-7 z-10 pr-2\">\n <button class=\"kl-select-clear-button text-neutral-400 hover:cursor-pointer text-sm focus:shadow-none!\"\n type=\"button\"\n (click)=\"clear($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"kl-select-content\" #selectField>\n <button type=\"button\" class=\"kl-select-button flex gap-4 disabled:border-neutral-200! disabled:dark:border-neutral-800!\"\n [attr.popovertarget]=\"fieldId\"\n popovertargetaction=\"toggle\"\n [disabled]=\"isDisabled()\">\n\n <span class=\"selectcontent flex flex-wrap gap-1 items-center w-[calc(100%-3rem)] h-full text-left py-1\" [class.py-3]=\"multiple()\"></span>\n\n <span class=\"picker\">\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (!isDisabled()) {\n <i class=\"fa-solid fa-caret-down\"></i>\n }\n </span>\n </button>\n\n <div [id]=\"fieldId\" popover class=\"kl-select-options-container with-popover relative flex flex-col overflow-hidden bg-base-100 dark:bg-base-300\">\n @if (!withoutFilter()) {\n <div class=\"kl-select-filter-container border-b border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none dark:placeholder:opacity-80\"\n #searchInput\n type=\"search\"\n [(ngModel)]=\"filter\"\n [placeholder]=\"translations.selectTypeSearch\"\n />\n </label>\n </div>\n }\n\n <div class=\"kl-select-options-content p-1 overflow-auto\">\n @for (item of optionList(); track $index) {\n @let optionLabelId = fieldId + '-' + item.value;\n\n <label class=\"kl-select-option-content relative py-1 px-2 pr-8 rounded-md text-neutral-900 dark:text-neutral-300 has-[input:checked]:bg-neutral-200 dark:has-[input:checked]:bg-neutral-700 hover:bg-neutral-300 dark:hover:bg-neutral-600 cursor-pointer\"\n [attr.for]=\"optionLabelId\"\n [attr.data-index]=\"$index\">\n <span class=\"w-full flex flex-col justify-center\">\n @let isChecked = multiple() ? (control().value || []).includes(item.value) : item.value === control().value;\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId\"\n [attr.value]=\"item.value\"\n [checked]=\"isChecked\"\n (change)=\"setValue($event)\"\n />\n <span>{{ item.label }}</span>\n <small class=\"empty:hidden opacity-60\">{{ item.description }}</small>\n </span>\n </label>\n }\n </div>\n </div>\n </div>\n</div>\n\n@if (hint()) {\n <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FieldErrors, selector: "kl-field-errors", inputs: ["field"] }, { kind: "component", type: Loader, selector: "kl-loader", inputs: ["size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
429
429
|
}
|
|
430
430
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: Select, decorators: [{
|
|
431
431
|
type: Component,
|
|
432
|
-
args: [{ selector: 'kl-select', imports: [FormsModule, ReactiveFormsModule, FieldErrors, Loader], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kl-select-container relative w-full has-[select:disabled]:cursor-not-allowed\"\n [class.has-value]=\"hasValue()\">\n\n @if (label(); as label) {\n <label class=\"kl-select-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\"\n [attr.for]=\"fieldId\">\n @if (isDisabled()) {\n <span class=\"text-neutral-200 dark:text-neutral-600\">\n {{ label }} {{ isRequired() ? '*' : '' }}\n </span>\n } @else {\n <span>{{ label }} {{ isRequired() ? '*' : '' }}</span>\n }\n </label>\n }\n\n @if (!isDisabled() && hasValue()) {\n <div class=\"flex items-center justify-center h-full absolute top-0 right-7 z-10 pr-2\">\n <button class=\"kl-select-clear-button text-neutral-400 hover:cursor-pointer text-sm focus:shadow-none!\"\n type=\"button\"\n (click)=\"clear($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"kl-select-content\" #selectField>\n <button type=\"button\" class=\"kl-select-button flex gap-4 disabled:border-neutral-200! disabled:dark:border-neutral-800!\"\n [attr.popovertarget]=\"fieldId\"\n popovertargetaction=\"toggle\">\n\n <span class=\"selectcontent flex flex-wrap gap-1 items-center w-[calc(100%-3rem)] h-full text-left py-1\" [class.py-3]=\"multiple()\"></span>\n\n <span class=\"picker\">\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else {\n <i class=\"fa-solid fa-caret-down\"></i>\n }\n </span>\n </button>\n\n <div [id]=\"fieldId\" popover class=\"kl-select-options-container with-popover relative flex flex-col overflow-hidden bg-base-100 dark:bg-base-300\">\n @if (!withoutFilter()) {\n <div class=\"kl-select-filter-container border-b border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none dark:placeholder:opacity-80\"\n #searchInput\n type=\"search\"\n [(ngModel)]=\"filter\"\n [placeholder]=\"translations.selectTypeSearch\"\n />\n </label>\n </div>\n }\n\n <div class=\"kl-select-options-content p-1 overflow-auto\">\n @for (item of optionList(); track $index) {\n @let optionLabelId = fieldId + '-' + item.value;\n\n <label class=\"kl-select-option-content relative py-1 px-2 pr-8 rounded-md text-neutral-900 dark:text-neutral-300 has-[input:checked]:bg-neutral-200 dark:has-[input:checked]:bg-neutral-700 hover:bg-neutral-300 dark:hover:bg-neutral-600 cursor-pointer\"\n [attr.for]=\"optionLabelId\"\n [attr.data-index]=\"$index\">\n <span class=\"w-full flex flex-col justify-center\">\n @let isChecked = multiple() ? (control().value || []).includes(item.value) : item.value === control().value;\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId\"\n [attr.value]=\"item.value\"\n [checked]=\"isChecked\"\n (change)=\"setValue($event)\"\n />\n <span>{{ item.label }}</span>\n <small class=\"empty:hidden opacity-60\">{{ item.description }}</small>\n </span>\n </label>\n }\n </div>\n </div>\n </div>\n</div>\n\n@if (hint()) {\n <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n" }]
|
|
432
|
+
args: [{ selector: 'kl-select', imports: [FormsModule, ReactiveFormsModule, FieldErrors, Loader], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"kl-select-container relative w-full has-[select:disabled]:cursor-not-allowed\"\n [class.has-value]=\"hasValue()\">\n\n @if (label(); as label) {\n <label class=\"kl-select-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\"\n [attr.for]=\"fieldId\">\n @if (isDisabled()) {\n <span class=\"text-neutral-200 dark:text-neutral-600\">\n {{ label }} {{ isRequired() ? '*' : '' }}\n </span>\n } @else {\n <span>{{ label }} {{ isRequired() ? '*' : '' }}</span>\n }\n </label>\n }\n\n @if (!isDisabled() && hasValue()) {\n <div class=\"flex items-center justify-center h-full absolute top-0 right-7 z-10 pr-2\">\n <button class=\"kl-select-clear-button text-neutral-400 hover:cursor-pointer text-sm focus:shadow-none!\"\n type=\"button\"\n (click)=\"clear($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"kl-select-content\" #selectField>\n <button type=\"button\" class=\"kl-select-button flex gap-4 disabled:border-neutral-200! disabled:dark:border-neutral-800!\"\n [attr.popovertarget]=\"fieldId\"\n popovertargetaction=\"toggle\"\n [disabled]=\"isDisabled()\">\n\n <span class=\"selectcontent flex flex-wrap gap-1 items-center w-[calc(100%-3rem)] h-full text-left py-1\" [class.py-3]=\"multiple()\"></span>\n\n <span class=\"picker\">\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (!isDisabled()) {\n <i class=\"fa-solid fa-caret-down\"></i>\n }\n </span>\n </button>\n\n <div [id]=\"fieldId\" popover class=\"kl-select-options-container with-popover relative flex flex-col overflow-hidden bg-base-100 dark:bg-base-300\">\n @if (!withoutFilter()) {\n <div class=\"kl-select-filter-container border-b border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none dark:placeholder:opacity-80\"\n #searchInput\n type=\"search\"\n [(ngModel)]=\"filter\"\n [placeholder]=\"translations.selectTypeSearch\"\n />\n </label>\n </div>\n }\n\n <div class=\"kl-select-options-content p-1 overflow-auto\">\n @for (item of optionList(); track $index) {\n @let optionLabelId = fieldId + '-' + item.value;\n\n <label class=\"kl-select-option-content relative py-1 px-2 pr-8 rounded-md text-neutral-900 dark:text-neutral-300 has-[input:checked]:bg-neutral-200 dark:has-[input:checked]:bg-neutral-700 hover:bg-neutral-300 dark:hover:bg-neutral-600 cursor-pointer\"\n [attr.for]=\"optionLabelId\"\n [attr.data-index]=\"$index\">\n <span class=\"w-full flex flex-col justify-center\">\n @let isChecked = multiple() ? (control().value || []).includes(item.value) : item.value === control().value;\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId\"\n [attr.value]=\"item.value\"\n [checked]=\"isChecked\"\n (change)=\"setValue($event)\"\n />\n <span>{{ item.label }}</span>\n <small class=\"empty:hidden opacity-60\">{{ item.description }}</small>\n </span>\n </label>\n }\n </div>\n </div>\n </div>\n</div>\n\n@if (hint()) {\n <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n" }]
|
|
433
433
|
}], ctorParameters: () => [], propDecorators: { selectField: [{ type: i0.ViewChild, args: ['selectField', { isSignal: true }] }], filter: [{ type: i0.Input, args: [{ isSignal: true, alias: "filter", required: false }] }, { type: i0.Output, args: ["filterChange"] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], internalFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "internalFilter", required: false }] }], withoutFilter: [{ type: i0.Input, args: [{ isSignal: true, alias: "withoutFilter", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], selectedItem: [{ type: i0.Output, args: ["selectedItem"] }] } });
|
|
434
434
|
|
|
435
435
|
class SelectBuilder {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koalarx-ui-shared-components-input-field-select.mjs","sources":["../../projects/koala-ui/shared/components/input-field/select/accessibility/utils/change-selected-option.ts","../../projects/koala-ui/shared/components/input-field/select/accessibility/utils/update-scroll-position.ts","../../projects/koala-ui/shared/components/input-field/select/accessibility/on-keydown.ts","../../projects/koala-ui/shared/components/input-field/select/accessibility/index.ts","../../projects/koala-ui/shared/components/input-field/select/utils/ajust-options-container-size.ts","../../projects/koala-ui/shared/components/input-field/select/utils/generate-options-resource.ts","../../projects/koala-ui/shared/components/input-field/select/utils/is-loading-feedback.ts","../../projects/koala-ui/shared/components/input-field/select/utils/on-server-filter.ts","../../projects/koala-ui/shared/components/input-field/select/utils/options-loader.ts","../../projects/koala-ui/shared/components/input-field/select/select-option-badge.ts","../../projects/koala-ui/shared/components/input-field/select/select-option-badge.html","../../projects/koala-ui/shared/components/input-field/select/utils/set-selected-option-content.ts","../../projects/koala-ui/shared/components/input-field/select/select.ts","../../projects/koala-ui/shared/components/input-field/select/select.html","../../projects/koala-ui/shared/components/input-field/select/services/select-builder.ts","../../projects/koala-ui/shared/components/input-field/select/koalarx-ui-shared-components-input-field-select.ts"],"sourcesContent":["import { Select } from '../../select';\nimport { ScrollDirection } from './update-scroll-position';\n\nexport function changeSelectedOption(\n component: Select,\n direction: ScrollDirection = 'down'\n) {\n if (!component.selectElement.classList.contains('opened')) {\n return;\n }\n\n const options: NodeListOf<HTMLOptionElement | HTMLLabelElement> =\n component.selectElement.querySelectorAll(\n 'option, .kl-select-options-content .kl-select-option-content'\n );\n\n const selectedOption: HTMLOptionElement | HTMLLabelElement =\n component.selectElement.querySelector('option:checked') ??\n component.selectElement.querySelector(\n 'label.kl-select-option-content:has(input:checked)'\n )!;\n\n let newIndex = 0;\n\n if (selectedOption) {\n const currentIndex = Array.from(options).indexOf(selectedOption);\n\n if (direction === 'down') {\n newIndex =\n currentIndex + 1 < options.length ? currentIndex + 1 : currentIndex;\n } else {\n newIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : currentIndex;\n }\n }\n\n const option = options[newIndex];\n const event = new Event('change', { bubbles: true });\n\n if (option instanceof HTMLOptionElement) {\n option.selected = true;\n\n component.selectElement.dispatchEvent(event);\n } else {\n option.querySelector('input')!.checked = true;\n\n options.forEach((opt) => opt.classList.remove('active'));\n option.classList.toggle('active');\n\n option.querySelector('input')!.dispatchEvent(event);\n }\n}\n","import { Select } from '../../select';\n\nexport type ScrollDirection = 'down' | 'up';\n\nexport function updateScrollPosition(\n component: Select,\n direction: ScrollDirection = 'down'\n) {\n if (!component.selectElement.classList.contains('opened')) {\n return;\n }\n\n setTimeout(() => {\n const optionsContainer = component.selectElement.querySelector(\n '.kl-select-options-content'\n ) as HTMLDivElement;\n const focusedOptionElement =\n optionsContainer.querySelector('option:checked') ??\n component.selectElement.querySelector(\n 'label.kl-select-option-content:has(input:checked)'\n )!;\n\n if (focusedOptionElement) {\n optionsContainer.scrollTo({\n top:\n direction === 'down'\n ? optionsContainer.scrollTop +\n focusedOptionElement.getBoundingClientRect().height\n : optionsContainer.scrollTop -\n focusedOptionElement.getBoundingClientRect().height,\n });\n }\n }, 50);\n}\n","import { Select } from '../select';\nimport { changeSelectedOption } from './utils/change-selected-option';\nimport { updateScrollPosition } from './utils/update-scroll-position';\n\nexport function initOnKeyDownListener(component: Select) {\n function onKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown': {\n event.stopPropagation();\n event.preventDefault();\n\n changeSelectedOption(component, 'down');\n updateScrollPosition(component, 'down');\n break;\n }\n case 'ArrowUp': {\n event.stopPropagation();\n event.preventDefault();\n\n changeSelectedOption(component, 'up');\n updateScrollPosition(component, 'up');\n break;\n }\n }\n }\n\n addEventListener('keydown', onKeyDown);\n\n component.destroyRef.onDestroy(() => {\n removeEventListener('keydown', onKeyDown);\n });\n}\n","import { Select } from '../select';\nimport { initOnKeyDownListener } from './on-keydown';\n\nexport function assessibility(component: Select) {\n initOnKeyDownListener(component);\n}\n","import { afterRenderEffect } from '@angular/core';\nimport { Select } from '../select';\n\nexport function ajustOptionsContainerSize(component: Select) {\n afterRenderEffect(() => {\n const selectElement = component.selectElement;\n const optionsContainer = selectElement.parentElement?.querySelector(\n '.kl-select-options-container',\n ) as HTMLElement;\n\n function setMaxWidth() {\n const currentWidth = selectElement.offsetWidth;\n selectElement.style.setProperty('--select-width', `${currentWidth}px`);\n }\n\n function setMaxHeight() {\n const optionsRect = selectElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const sizeDiscount = 16 + optionsRect.height;\n\n let availableHeight = viewportHeight - optionsRect.top - sizeDiscount;\n\n if (availableHeight < 150) {\n availableHeight =\n viewportHeight - (viewportHeight - optionsRect.bottom) - sizeDiscount;\n selectElement.style.setProperty('--select-position-area', 'top');\n } else {\n selectElement.style.setProperty('--select-position-area', 'bottom');\n }\n\n optionsContainer.style.maxHeight = `${availableHeight}px`;\n }\n\n function getFilterInput() {\n return optionsContainer.querySelector(\n '.kl-select-filter-container input',\n ) as HTMLInputElement | null;\n }\n\n function disableFilter() {\n const filterInput = getFilterInput();\n\n if (filterInput) {\n filterInput.disabled = true;\n }\n }\n\n function enableAndFocusFilter() {\n const filterInput = getFilterInput();\n\n if (filterInput) {\n filterInput.disabled = false;\n filterInput.focus();\n }\n }\n\n function touchControl() {\n component.control().markAsTouched();\n }\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n component.selectElement.classList.add('opened');\n setMaxWidth();\n setMaxHeight();\n enableAndFocusFilter();\n touchControl();\n } else {\n component.selectElement.classList.remove('opened');\n disableFilter();\n }\n });\n });\n\n setMaxWidth();\n\n observer.observe(optionsContainer);\n component.destroyRef.onDestroy(() => observer.unobserve(optionsContainer));\n });\n}\n","import {\n isSignal,\n ResourceRef,\n runInInjectionContext,\n Signal,\n} from '@angular/core';\nimport { Select } from '../select';\nimport {\n OptionsResource,\n SelectDataOptionsFn,\n SelectList,\n} from '../select.type';\n\nexport function generateOptionsResource(component: Select) {\n const options = component.options();\n\n let optionsResource: OptionsResource;\n\n if (Object.hasOwn(options, 'value')) {\n optionsResource = { onServer: options as ResourceRef<SelectList> };\n } else if (isSignal(options)) {\n optionsResource = {\n inMemoryWithLoading: options as Signal<SelectList>,\n };\n } else if (typeof options === 'function') {\n const resourceFnOptions = options as SelectDataOptionsFn;\n\n optionsResource = {\n onDemand: runInInjectionContext(component.injector, () =>\n resourceFnOptions(component.requestOptionsParams)\n ),\n };\n } else {\n optionsResource = { inMemory: options as SelectList };\n }\n\n component.optionsResource.set(optionsResource);\n}\n","import { effect } from '@angular/core';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { Select } from '../select';\n\nexport function isLoadingFeedback(component: Select) {\n effect(async () => {\n const isLoading = component.isLoading();\n\n if (!isLoading) {\n while (!component.selectField()) {\n await delay(50);\n }\n\n const selectedContent = component.selectElement.querySelector(\n '.selectcontent'\n ) as HTMLElement;\n\n selectedContent.style.opacity = '0';\n\n if (!component.disabled()) {\n component.isDisabled.set(false);\n }\n\n await delay(1);\n\n selectedContent.style.opacity = '1';\n } else {\n component.isDisabled.set(true);\n }\n });\n}\n","import { effect } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\nimport { Select } from '../select';\n\nexport function onServerFilter(component: Select) {\n toObservable(component.filter, { injector: component.injector })\n .pipe(debounceTime(300), takeUntilDestroyed(component.destroyRef))\n .subscribe((value) => component.filteredValue.set(value ?? null));\n\n effect(\n () => {\n if (component.optionsResource()?.onDemand) {\n component.requestOptionsParams.set({\n filter: component.filteredValue(),\n internalFilter: component.internalFilter(),\n currentValue: component.control().value,\n });\n }\n },\n { injector: component.injector }\n );\n}\n","import { effect } from '@angular/core';\nimport { Select } from '../select';\n\nexport function loadOptions(component: Select) {\n effect(() => {\n const options = component.optionsResource();\n\n if (!options) {\n return;\n }\n\n const { onDemand, onServer, inMemory, inMemoryWithLoading } = options;\n\n if (onDemand) {\n component.optionList.set(onDemand.value());\n component.isLoading.set(onDemand.isLoading());\n } else if (onServer) {\n component.optionList.set(component.applyFilter(onServer.value()));\n component.isLoading.set(onServer.isLoading());\n } else if (inMemory) {\n component.optionList.set(component.applyFilter(inMemory));\n component.isLoading.set(false);\n } else if (inMemoryWithLoading) {\n const optionsWithLoading = inMemoryWithLoading();\n component.optionList.set(component.applyFilter(optionsWithLoading ?? []));\n component.isLoading.set(!optionsWithLoading);\n }\n });\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'kl-select-option-badge',\n templateUrl: './select-option-badge.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectOptionBadge {\n removeCallback: (event: MouseEvent) => void = () => {\n throw new Error('Remove callback not set');\n };\n}\n","<span class=\"flex items-center h-auto badge badge-outline badge-primary badge-sm rounded-sm bg-primary/20 dark:text-neutral-300 dark:border-primary\">\n <ng-content />\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer\"\n (click)=\"removeCallback($event)\">\n </i>\n</span>\n","import { createComponent } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isEmpty } from '@koalarx/ui/shared/utils';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\nimport { Select } from '../select';\nimport { SelectOptionBadge } from '../select-option-badge';\n\nfunction hasValue(value: any) {\n return Array.isArray(value) ? value.length > 0 : !isEmpty(value);\n}\n\nfunction createBadgeElement(component: Select, content: Node, value: any) {\n const badgeComponent = createComponent(SelectOptionBadge, {\n environmentInjector: component.appRef.injector,\n projectableNodes: [[content]],\n });\n\n badgeComponent.instance.removeCallback = (event: MouseEvent) =>\n component.removeOption(event);\n\n const element: HTMLElement = badgeComponent.location.nativeElement;\n const spanElement = element.firstElementChild as HTMLSpanElement;\n\n spanElement.dataset['value'] = value;\n\n return element;\n}\n\nasync function appendSelectedOptionContent(component: Select, value: any) {\n while (component.isLoading()) {\n await delay(50);\n }\n\n const selectedContent = component.selectElement.querySelector(\n '.selectcontent',\n ) as HTMLElement;\n\n if (!Array.isArray(value)) {\n value = isEmpty(value) ? [] : [value];\n }\n\n if (!component.multiple()) {\n selectedContent.innerHTML = '';\n }\n\n selectedContent\n .querySelectorAll<HTMLSpanElement>('span[data-value]')\n .forEach((node) => {\n if (!value.map(String).includes(node.dataset['value'])) {\n node.parentElement!.remove();\n }\n });\n\n for (const v of value) {\n const optionData = component\n .selectedOptions()\n .find((item) => String(item.value) === String(v));\n\n if (!optionData) {\n continue;\n }\n\n const optionContent = document.createElement('span');\n optionContent.dataset['value'] = String(v);\n optionContent.innerHTML = optionData?.label ?? v;\n\n if (selectedContent.querySelector(`[data-value=\"${v}\"]`)) {\n continue;\n }\n\n const optionBadge = component.multiple()\n ? createBadgeElement(component, optionContent, v)\n : optionContent;\n\n selectedContent.appendChild(optionBadge);\n }\n\n component.hasValue.set(hasValue(value));\n\n component.selectElement\n .querySelectorAll<HTMLInputElement>('input[type=checkbox]')\n .forEach((input) => {\n input.checked = value.map(String).includes(input.value);\n });\n}\n\nfunction setSelectedOptionsOnComponent(component: Select, value: any) {\n component.selectedOptions.set(\n component\n .optionList()\n .filter((item) =>\n Array.isArray(value)\n ? value.map(String).includes(String(item.value))\n : String(item.value) === String(value),\n ),\n );\n}\n\nexport async function setSelectedOptionContent(component: Select) {\n const value = component.control().value;\n\n component.hasValue.set(hasValue(value));\n\n while (component.isLoading()) {\n await delay(50);\n }\n\n setSelectedOptionsOnComponent(component, value);\n\n await appendSelectedOptionContent(component, value);\n\n component\n .control()\n .valueChanges.pipe(\n debounceTime(50),\n takeUntilDestroyed(component.destroyRef),\n )\n .subscribe((value) => {\n setSelectedOptionsOnComponent(component, value);\n appendSelectedOptionContent(component, value);\n });\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Loader } from '@koalarx/ui/core/components/loader';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { FieldErrors } from '@koalarx/ui/shared/components/field-errors';\nimport { InputFieldBase } from '@koalarx/ui/shared/components/input-field';\nimport { assessibility } from './accessibility';\nimport {\n OptionsResource,\n SelectDataOptions,\n SelectDataOptionsFnParams,\n SelectList,\n SelectValue,\n} from './select.type';\nimport { ajustOptionsContainerSize } from './utils/ajust-options-container-size';\nimport { generateOptionsResource } from './utils/generate-options-resource';\nimport { isLoadingFeedback } from './utils/is-loading-feedback';\nimport { onServerFilter } from './utils/on-server-filter';\nimport { loadOptions } from './utils/options-loader';\nimport { setSelectedOptionContent } from './utils/set-selected-option-content';\n\n@Component({\n selector: 'kl-select',\n templateUrl: './select.html',\n imports: [FormsModule, ReactiveFormsModule, FieldErrors, Loader],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Select extends InputFieldBase implements OnInit {\n readonly appRef = inject(ApplicationRef);\n readonly injector = inject(Injector);\n readonly selectField = viewChild<ElementRef<HTMLDivElement>>('selectField');\n\n readonly optionsResource = signal<OptionsResource | null>(null);\n readonly optionList = signal<SelectList>([]);\n readonly selectedOptions = signal<SelectList>([]);\n readonly isLoading = signal<boolean>(true);\n readonly requestOptionsParams = signal<SelectDataOptionsFnParams>({\n filter: null,\n currentValue: null,\n internalFilter: null,\n });\n readonly translations = inject(AppConfig).translation.form;\n readonly supportsExperimentalSelect = !CSS.supports(\n 'appearance',\n 'base-select',\n );\n readonly hasValue = signal<boolean>(false);\n\n filter = model<string>();\n filteredValue = signal<string | null>(null);\n\n options = input.required<SelectDataOptions>();\n internalFilter = input<string | null>(null);\n withoutFilter = input(false, { transform: booleanAttribute });\n multiple = input(false, { transform: booleanAttribute });\n selectedItem = output<any | null>();\n\n get selectElement() {\n const selectField = this.selectField();\n\n if (!selectField) {\n throw new Error('Select element not found');\n }\n\n return selectField.nativeElement;\n }\n\n constructor() {\n super();\n\n loadOptions(this);\n ajustOptionsContainerSize(this);\n isLoadingFeedback(this);\n assessibility(this);\n\n effect(() => {\n this.selectedItem.emit(\n this.selectedOptions().map((item) => item.data ?? null)[0] ?? null,\n );\n });\n }\n\n ngOnInit() {\n onServerFilter(this);\n generateOptionsResource(this);\n setSelectedOptionContent(this);\n }\n\n applyFilter(options: SelectList) {\n const filter = this.filter() ?? '';\n\n return options.filter((option) =>\n option.label.toLowerCase().includes(filter.toLowerCase()),\n );\n }\n\n setValue(event: Event) {\n const select = event.target as HTMLInputElement;\n const value: SelectValue = select.value;\n\n if (this.multiple()) {\n const selectedOptionsElements = this.selectElement.querySelectorAll(\n '.kl-select-options-content input[type=\"checkbox\"]:checked',\n ) as NodeListOf<HTMLInputElement>;\n\n const values: string[] = [];\n\n selectedOptionsElements.forEach((option) => values.push(option.value));\n\n if (select.checked) {\n this.selectedOptions.update((current) => [\n ...current,\n this.optionList().find((item) => String(item.value) === value)!,\n ]);\n } else {\n this.selectedOptions.update((current) =>\n current.filter((item) => String(item.value) !== value),\n );\n }\n\n const selectedValues = this.selectedOptions().map((item) => item.value);\n\n this.control().setValue(selectedValues, { emitEvent: true });\n\n return;\n }\n\n const selectedOption = this.optionList().find(\n (item) => String(item.value) === value,\n );\n\n if (selectedOption) {\n this.selectedOptions.set([selectedOption]);\n this.control().setValue(selectedOption.value, { emitEvent: true });\n }\n\n document\n .querySelector<HTMLElement>(`#${this.fieldId}[popover]`)\n ?.hidePopover();\n }\n\n clear(event: MouseEvent) {\n event.preventDefault();\n this.selectedOptions.set([]);\n this.control().setValue(null);\n }\n\n removeOption(event: MouseEvent) {\n event.preventDefault();\n\n const target = event.target as HTMLSpanElement;\n const value = target.parentElement?.dataset['value'];\n\n const inputValue = this.selectElement.querySelector(\n `.kl-select-options-content input[value=\"${value}\"]`,\n ) as HTMLInputElement;\n\n inputValue.click();\n }\n}\n","<div class=\"kl-select-container relative w-full has-[select:disabled]:cursor-not-allowed\"\n [class.has-value]=\"hasValue()\">\n\n @if (label(); as label) {\n <label class=\"kl-select-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\"\n [attr.for]=\"fieldId\">\n @if (isDisabled()) {\n <span class=\"text-neutral-200 dark:text-neutral-600\">\n {{ label }} {{ isRequired() ? '*' : '' }}\n </span>\n } @else {\n <span>{{ label }} {{ isRequired() ? '*' : '' }}</span>\n }\n </label>\n }\n\n @if (!isDisabled() && hasValue()) {\n <div class=\"flex items-center justify-center h-full absolute top-0 right-7 z-10 pr-2\">\n <button class=\"kl-select-clear-button text-neutral-400 hover:cursor-pointer text-sm focus:shadow-none!\"\n type=\"button\"\n (click)=\"clear($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"kl-select-content\" #selectField>\n <button type=\"button\" class=\"kl-select-button flex gap-4 disabled:border-neutral-200! disabled:dark:border-neutral-800!\"\n [attr.popovertarget]=\"fieldId\"\n popovertargetaction=\"toggle\">\n\n <span class=\"selectcontent flex flex-wrap gap-1 items-center w-[calc(100%-3rem)] h-full text-left py-1\" [class.py-3]=\"multiple()\"></span>\n\n <span class=\"picker\">\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else {\n <i class=\"fa-solid fa-caret-down\"></i>\n }\n </span>\n </button>\n\n <div [id]=\"fieldId\" popover class=\"kl-select-options-container with-popover relative flex flex-col overflow-hidden bg-base-100 dark:bg-base-300\">\n @if (!withoutFilter()) {\n <div class=\"kl-select-filter-container border-b border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none dark:placeholder:opacity-80\"\n #searchInput\n type=\"search\"\n [(ngModel)]=\"filter\"\n [placeholder]=\"translations.selectTypeSearch\"\n />\n </label>\n </div>\n }\n\n <div class=\"kl-select-options-content p-1 overflow-auto\">\n @for (item of optionList(); track $index) {\n @let optionLabelId = fieldId + '-' + item.value;\n\n <label class=\"kl-select-option-content relative py-1 px-2 pr-8 rounded-md text-neutral-900 dark:text-neutral-300 has-[input:checked]:bg-neutral-200 dark:has-[input:checked]:bg-neutral-700 hover:bg-neutral-300 dark:hover:bg-neutral-600 cursor-pointer\"\n [attr.for]=\"optionLabelId\"\n [attr.data-index]=\"$index\">\n <span class=\"w-full flex flex-col justify-center\">\n @let isChecked = multiple() ? (control().value || []).includes(item.value) : item.value === control().value;\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId\"\n [attr.value]=\"item.value\"\n [checked]=\"isChecked\"\n (change)=\"setValue($event)\"\n />\n <span>{{ item.label }}</span>\n <small class=\"empty:hidden opacity-60\">{{ item.description }}</small>\n </span>\n </label>\n }\n </div>\n </div>\n </div>\n</div>\n\n@if (hint()) {\n <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n","import { Injectable, ResourceRef, Signal } from '@angular/core';\nimport { SelectDataOptionsFn, SelectList } from '../select.type';\n\n@Injectable({ providedIn: 'root' })\nexport class SelectBuilder {\n onDemand(config: SelectDataOptionsFn) {\n return config;\n }\n\n onServer(config: ResourceRef<SelectList>) {\n return config;\n }\n\n inMemory(config: SelectList) {\n return config;\n }\n\n inMemoryWithLoading(config: Signal<SelectList>) {\n return config;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"koalarx-ui-shared-components-input-field-select.mjs","sources":["../../projects/koala-ui/shared/components/input-field/select/accessibility/utils/change-selected-option.ts","../../projects/koala-ui/shared/components/input-field/select/accessibility/utils/update-scroll-position.ts","../../projects/koala-ui/shared/components/input-field/select/accessibility/on-keydown.ts","../../projects/koala-ui/shared/components/input-field/select/accessibility/index.ts","../../projects/koala-ui/shared/components/input-field/select/utils/ajust-options-container-size.ts","../../projects/koala-ui/shared/components/input-field/select/utils/generate-options-resource.ts","../../projects/koala-ui/shared/components/input-field/select/utils/is-loading-feedback.ts","../../projects/koala-ui/shared/components/input-field/select/utils/on-server-filter.ts","../../projects/koala-ui/shared/components/input-field/select/utils/options-loader.ts","../../projects/koala-ui/shared/components/input-field/select/select-option-badge.ts","../../projects/koala-ui/shared/components/input-field/select/select-option-badge.html","../../projects/koala-ui/shared/components/input-field/select/utils/set-selected-option-content.ts","../../projects/koala-ui/shared/components/input-field/select/select.ts","../../projects/koala-ui/shared/components/input-field/select/select.html","../../projects/koala-ui/shared/components/input-field/select/services/select-builder.ts","../../projects/koala-ui/shared/components/input-field/select/koalarx-ui-shared-components-input-field-select.ts"],"sourcesContent":["import { Select } from '../../select';\nimport { ScrollDirection } from './update-scroll-position';\n\nexport function changeSelectedOption(\n component: Select,\n direction: ScrollDirection = 'down'\n) {\n if (!component.selectElement.classList.contains('opened')) {\n return;\n }\n\n const options: NodeListOf<HTMLOptionElement | HTMLLabelElement> =\n component.selectElement.querySelectorAll(\n 'option, .kl-select-options-content .kl-select-option-content'\n );\n\n const selectedOption: HTMLOptionElement | HTMLLabelElement =\n component.selectElement.querySelector('option:checked') ??\n component.selectElement.querySelector(\n 'label.kl-select-option-content:has(input:checked)'\n )!;\n\n let newIndex = 0;\n\n if (selectedOption) {\n const currentIndex = Array.from(options).indexOf(selectedOption);\n\n if (direction === 'down') {\n newIndex =\n currentIndex + 1 < options.length ? currentIndex + 1 : currentIndex;\n } else {\n newIndex = currentIndex - 1 >= 0 ? currentIndex - 1 : currentIndex;\n }\n }\n\n const option = options[newIndex];\n const event = new Event('change', { bubbles: true });\n\n if (option instanceof HTMLOptionElement) {\n option.selected = true;\n\n component.selectElement.dispatchEvent(event);\n } else {\n option.querySelector('input')!.checked = true;\n\n options.forEach((opt) => opt.classList.remove('active'));\n option.classList.toggle('active');\n\n option.querySelector('input')!.dispatchEvent(event);\n }\n}\n","import { Select } from '../../select';\n\nexport type ScrollDirection = 'down' | 'up';\n\nexport function updateScrollPosition(\n component: Select,\n direction: ScrollDirection = 'down'\n) {\n if (!component.selectElement.classList.contains('opened')) {\n return;\n }\n\n setTimeout(() => {\n const optionsContainer = component.selectElement.querySelector(\n '.kl-select-options-content'\n ) as HTMLDivElement;\n const focusedOptionElement =\n optionsContainer.querySelector('option:checked') ??\n component.selectElement.querySelector(\n 'label.kl-select-option-content:has(input:checked)'\n )!;\n\n if (focusedOptionElement) {\n optionsContainer.scrollTo({\n top:\n direction === 'down'\n ? optionsContainer.scrollTop +\n focusedOptionElement.getBoundingClientRect().height\n : optionsContainer.scrollTop -\n focusedOptionElement.getBoundingClientRect().height,\n });\n }\n }, 50);\n}\n","import { Select } from '../select';\nimport { changeSelectedOption } from './utils/change-selected-option';\nimport { updateScrollPosition } from './utils/update-scroll-position';\n\nexport function initOnKeyDownListener(component: Select) {\n function onKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown': {\n event.stopPropagation();\n event.preventDefault();\n\n changeSelectedOption(component, 'down');\n updateScrollPosition(component, 'down');\n break;\n }\n case 'ArrowUp': {\n event.stopPropagation();\n event.preventDefault();\n\n changeSelectedOption(component, 'up');\n updateScrollPosition(component, 'up');\n break;\n }\n }\n }\n\n addEventListener('keydown', onKeyDown);\n\n component.destroyRef.onDestroy(() => {\n removeEventListener('keydown', onKeyDown);\n });\n}\n","import { Select } from '../select';\nimport { initOnKeyDownListener } from './on-keydown';\n\nexport function assessibility(component: Select) {\n initOnKeyDownListener(component);\n}\n","import { afterRenderEffect } from '@angular/core';\nimport { Select } from '../select';\n\nexport function ajustOptionsContainerSize(component: Select) {\n afterRenderEffect(() => {\n const selectElement = component.selectElement;\n const optionsContainer = selectElement.parentElement?.querySelector(\n '.kl-select-options-container',\n ) as HTMLElement;\n\n function setMaxWidth() {\n const currentWidth = selectElement.offsetWidth;\n selectElement.style.setProperty('--select-width', `${currentWidth}px`);\n }\n\n function setMaxHeight() {\n const optionsRect = selectElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const sizeDiscount = 16 + optionsRect.height;\n\n let availableHeight = viewportHeight - optionsRect.top - sizeDiscount;\n\n if (availableHeight < 150) {\n availableHeight =\n viewportHeight - (viewportHeight - optionsRect.bottom) - sizeDiscount;\n selectElement.style.setProperty('--select-position-area', 'top');\n } else {\n selectElement.style.setProperty('--select-position-area', 'bottom');\n }\n\n optionsContainer.style.maxHeight = `${availableHeight}px`;\n }\n\n function getFilterInput() {\n return optionsContainer.querySelector(\n '.kl-select-filter-container input',\n ) as HTMLInputElement | null;\n }\n\n function disableFilter() {\n const filterInput = getFilterInput();\n\n if (filterInput) {\n filterInput.disabled = true;\n }\n }\n\n function enableAndFocusFilter() {\n const filterInput = getFilterInput();\n\n if (filterInput) {\n filterInput.disabled = false;\n filterInput.focus();\n }\n }\n\n function touchControl() {\n component.control().markAsTouched();\n }\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n component.selectElement.classList.add('opened');\n setMaxWidth();\n setMaxHeight();\n enableAndFocusFilter();\n touchControl();\n } else {\n component.selectElement.classList.remove('opened');\n disableFilter();\n }\n });\n });\n\n setMaxWidth();\n\n observer.observe(optionsContainer);\n component.destroyRef.onDestroy(() => observer.unobserve(optionsContainer));\n });\n}\n","import {\n isSignal,\n ResourceRef,\n runInInjectionContext,\n Signal,\n} from '@angular/core';\nimport { Select } from '../select';\nimport {\n OptionsResource,\n SelectDataOptionsFn,\n SelectList,\n} from '../select.type';\n\nexport function generateOptionsResource(component: Select) {\n const options = component.options();\n\n let optionsResource: OptionsResource;\n\n if (Object.hasOwn(options, 'value')) {\n optionsResource = { onServer: options as ResourceRef<SelectList> };\n } else if (isSignal(options)) {\n optionsResource = {\n inMemoryWithLoading: options as Signal<SelectList>,\n };\n } else if (typeof options === 'function') {\n const resourceFnOptions = options as SelectDataOptionsFn;\n\n optionsResource = {\n onDemand: runInInjectionContext(component.injector, () =>\n resourceFnOptions(component.requestOptionsParams)\n ),\n };\n } else {\n optionsResource = { inMemory: options as SelectList };\n }\n\n component.optionsResource.set(optionsResource);\n}\n","import { effect } from '@angular/core';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { Select } from '../select';\n\nexport function isLoadingFeedback(component: Select) {\n effect(async () => {\n const isLoading = component.isLoading();\n\n if (!isLoading) {\n while (!component.selectField()) {\n await delay(50);\n }\n\n const selectedContent = component.selectElement.querySelector(\n '.selectcontent'\n ) as HTMLElement;\n\n selectedContent.style.opacity = '0';\n\n if (!component.disabled()) {\n component.isDisabled.set(false);\n }\n\n await delay(1);\n\n selectedContent.style.opacity = '1';\n } else {\n component.isDisabled.set(true);\n }\n });\n}\n","import { effect } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\nimport { Select } from '../select';\n\nexport function onServerFilter(component: Select) {\n toObservable(component.filter, { injector: component.injector })\n .pipe(debounceTime(300), takeUntilDestroyed(component.destroyRef))\n .subscribe((value) => component.filteredValue.set(value ?? null));\n\n effect(\n () => {\n if (component.optionsResource()?.onDemand) {\n component.requestOptionsParams.set({\n filter: component.filteredValue(),\n internalFilter: component.internalFilter(),\n currentValue: component.control().value,\n });\n }\n },\n { injector: component.injector }\n );\n}\n","import { effect } from '@angular/core';\nimport { Select } from '../select';\n\nexport function loadOptions(component: Select) {\n effect(() => {\n const options = component.optionsResource();\n\n if (!options) {\n return;\n }\n\n const { onDemand, onServer, inMemory, inMemoryWithLoading } = options;\n\n if (onDemand) {\n component.optionList.set(onDemand.value());\n component.isLoading.set(onDemand.isLoading());\n } else if (onServer) {\n component.optionList.set(component.applyFilter(onServer.value()));\n component.isLoading.set(onServer.isLoading());\n } else if (inMemory) {\n component.optionList.set(component.applyFilter(inMemory));\n component.isLoading.set(false);\n } else if (inMemoryWithLoading) {\n const optionsWithLoading = inMemoryWithLoading();\n component.optionList.set(component.applyFilter(optionsWithLoading ?? []));\n component.isLoading.set(!optionsWithLoading);\n }\n });\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'kl-select-option-badge',\n templateUrl: './select-option-badge.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SelectOptionBadge {\n removeCallback: (event: MouseEvent) => void = () => {\n throw new Error('Remove callback not set');\n };\n}\n","<span class=\"flex items-center h-auto badge badge-outline badge-primary badge-sm rounded-sm bg-primary/20 dark:text-neutral-300 dark:border-primary\">\n <ng-content />\n <i class=\"fa-solid fa-xmark text-neutral-500 hover:cursor-pointer\"\n (click)=\"removeCallback($event)\">\n </i>\n</span>\n","import { createComponent } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isEmpty } from '@koalarx/ui/shared/utils';\nimport { delay } from '@koalarx/utils/KlDelay';\nimport { debounceTime } from 'rxjs/internal/operators/debounceTime';\nimport { Select } from '../select';\nimport { SelectOptionBadge } from '../select-option-badge';\n\nfunction hasValue(value: any) {\n return Array.isArray(value) ? value.length > 0 : !isEmpty(value);\n}\n\nfunction createBadgeElement(component: Select, content: Node, value: any) {\n const badgeComponent = createComponent(SelectOptionBadge, {\n environmentInjector: component.appRef.injector,\n projectableNodes: [[content]],\n });\n\n badgeComponent.instance.removeCallback = (event: MouseEvent) =>\n component.removeOption(event);\n\n const element: HTMLElement = badgeComponent.location.nativeElement;\n const spanElement = element.firstElementChild as HTMLSpanElement;\n\n spanElement.dataset['value'] = value;\n\n return element;\n}\n\nasync function appendSelectedOptionContent(component: Select, value: any) {\n while (component.isLoading()) {\n await delay(50);\n }\n\n const selectedContent = component.selectElement.querySelector(\n '.selectcontent',\n ) as HTMLElement;\n\n if (!Array.isArray(value)) {\n value = isEmpty(value) ? [] : [value];\n }\n\n if (!component.multiple()) {\n selectedContent.innerHTML = '';\n }\n\n selectedContent\n .querySelectorAll<HTMLSpanElement>('span[data-value]')\n .forEach((node) => {\n if (!value.map(String).includes(node.dataset['value'])) {\n node.parentElement!.remove();\n }\n });\n\n for (const v of value) {\n const optionData = component\n .selectedOptions()\n .find((item) => String(item.value) === String(v));\n\n if (!optionData) {\n continue;\n }\n\n const optionContent = document.createElement('span');\n optionContent.dataset['value'] = String(v);\n optionContent.innerHTML = optionData?.label ?? v;\n\n if (selectedContent.querySelector(`[data-value=\"${v}\"]`)) {\n continue;\n }\n\n const optionBadge = component.multiple()\n ? createBadgeElement(component, optionContent, v)\n : optionContent;\n\n selectedContent.appendChild(optionBadge);\n }\n\n component.hasValue.set(hasValue(value));\n\n component.selectElement\n .querySelectorAll<HTMLInputElement>('input[type=checkbox]')\n .forEach((input) => {\n input.checked = value.map(String).includes(input.value);\n });\n}\n\nfunction setSelectedOptionsOnComponent(component: Select, value: any) {\n component.selectedOptions.set(\n component\n .optionList()\n .filter((item) =>\n Array.isArray(value)\n ? value.map(String).includes(String(item.value))\n : String(item.value) === String(value),\n ),\n );\n}\n\nexport async function setSelectedOptionContent(component: Select) {\n const value = component.control().value;\n\n component.hasValue.set(hasValue(value));\n\n while (component.isLoading()) {\n await delay(50);\n }\n\n setSelectedOptionsOnComponent(component, value);\n\n await appendSelectedOptionContent(component, value);\n\n component\n .control()\n .valueChanges.pipe(\n debounceTime(50),\n takeUntilDestroyed(component.destroyRef),\n )\n .subscribe((value) => {\n setSelectedOptionsOnComponent(component, value);\n appendSelectedOptionContent(component, value);\n });\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n OnInit,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { Loader } from '@koalarx/ui/core/components/loader';\nimport { AppConfig } from '@koalarx/ui/core/config';\nimport { FieldErrors } from '@koalarx/ui/shared/components/field-errors';\nimport { InputFieldBase } from '@koalarx/ui/shared/components/input-field';\nimport { assessibility } from './accessibility';\nimport {\n OptionsResource,\n SelectDataOptions,\n SelectDataOptionsFnParams,\n SelectList,\n SelectValue,\n} from './select.type';\nimport { ajustOptionsContainerSize } from './utils/ajust-options-container-size';\nimport { generateOptionsResource } from './utils/generate-options-resource';\nimport { isLoadingFeedback } from './utils/is-loading-feedback';\nimport { onServerFilter } from './utils/on-server-filter';\nimport { loadOptions } from './utils/options-loader';\nimport { setSelectedOptionContent } from './utils/set-selected-option-content';\n\n@Component({\n selector: 'kl-select',\n templateUrl: './select.html',\n imports: [FormsModule, ReactiveFormsModule, FieldErrors, Loader],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Select extends InputFieldBase implements OnInit {\n readonly appRef = inject(ApplicationRef);\n readonly injector = inject(Injector);\n readonly selectField = viewChild<ElementRef<HTMLDivElement>>('selectField');\n\n readonly optionsResource = signal<OptionsResource | null>(null);\n readonly optionList = signal<SelectList>([]);\n readonly selectedOptions = signal<SelectList>([]);\n readonly isLoading = signal<boolean>(true);\n readonly requestOptionsParams = signal<SelectDataOptionsFnParams>({\n filter: null,\n currentValue: null,\n internalFilter: null,\n });\n readonly translations = inject(AppConfig).translation.form;\n readonly supportsExperimentalSelect = !CSS.supports(\n 'appearance',\n 'base-select',\n );\n readonly hasValue = signal<boolean>(false);\n\n filter = model<string>();\n filteredValue = signal<string | null>(null);\n\n options = input.required<SelectDataOptions>();\n internalFilter = input<string | null>(null);\n withoutFilter = input(false, { transform: booleanAttribute });\n multiple = input(false, { transform: booleanAttribute });\n selectedItem = output<any | null>();\n\n get selectElement() {\n const selectField = this.selectField();\n\n if (!selectField) {\n throw new Error('Select element not found');\n }\n\n return selectField.nativeElement;\n }\n\n constructor() {\n super();\n\n loadOptions(this);\n ajustOptionsContainerSize(this);\n isLoadingFeedback(this);\n assessibility(this);\n\n effect(() => {\n this.selectedItem.emit(\n this.selectedOptions().map((item) => item.data ?? null)[0] ?? null,\n );\n });\n }\n\n ngOnInit() {\n onServerFilter(this);\n generateOptionsResource(this);\n setSelectedOptionContent(this);\n }\n\n applyFilter(options: SelectList) {\n const filter = this.filter() ?? '';\n\n return options.filter((option) =>\n option.label.toLowerCase().includes(filter.toLowerCase()),\n );\n }\n\n setValue(event: Event) {\n const select = event.target as HTMLInputElement;\n const value: SelectValue = select.value;\n\n if (this.multiple()) {\n const selectedOptionsElements = this.selectElement.querySelectorAll(\n '.kl-select-options-content input[type=\"checkbox\"]:checked',\n ) as NodeListOf<HTMLInputElement>;\n\n const values: string[] = [];\n\n selectedOptionsElements.forEach((option) => values.push(option.value));\n\n if (select.checked) {\n this.selectedOptions.update((current) => [\n ...current,\n this.optionList().find((item) => String(item.value) === value)!,\n ]);\n } else {\n this.selectedOptions.update((current) =>\n current.filter((item) => String(item.value) !== value),\n );\n }\n\n const selectedValues = this.selectedOptions().map((item) => item.value);\n\n this.control().setValue(selectedValues, { emitEvent: true });\n\n return;\n }\n\n const selectedOption = this.optionList().find(\n (item) => String(item.value) === value,\n );\n\n if (selectedOption) {\n this.selectedOptions.set([selectedOption]);\n this.control().setValue(selectedOption.value, { emitEvent: true });\n }\n\n document\n .querySelector<HTMLElement>(`#${this.fieldId}[popover]`)\n ?.hidePopover();\n }\n\n clear(event: MouseEvent) {\n event.preventDefault();\n this.selectedOptions.set([]);\n this.control().setValue(null);\n }\n\n removeOption(event: MouseEvent) {\n event.preventDefault();\n\n const target = event.target as HTMLSpanElement;\n const value = target.parentElement?.dataset['value'];\n\n const inputValue = this.selectElement.querySelector(\n `.kl-select-options-content input[value=\"${value}\"]`,\n ) as HTMLInputElement;\n\n inputValue.click();\n }\n}\n","<div class=\"kl-select-container relative w-full has-[select:disabled]:cursor-not-allowed\"\n [class.has-value]=\"hasValue()\">\n\n @if (label(); as label) {\n <label class=\"kl-select-label flex items-center gap-2 whitespace-nowrap text-neutral-900 dark:text-neutral-300\"\n [attr.for]=\"fieldId\">\n @if (isDisabled()) {\n <span class=\"text-neutral-200 dark:text-neutral-600\">\n {{ label }} {{ isRequired() ? '*' : '' }}\n </span>\n } @else {\n <span>{{ label }} {{ isRequired() ? '*' : '' }}</span>\n }\n </label>\n }\n\n @if (!isDisabled() && hasValue()) {\n <div class=\"flex items-center justify-center h-full absolute top-0 right-7 z-10 pr-2\">\n <button class=\"kl-select-clear-button text-neutral-400 hover:cursor-pointer text-sm focus:shadow-none!\"\n type=\"button\"\n (click)=\"clear($event)\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n }\n\n <div class=\"kl-select-content\" #selectField>\n <button type=\"button\" class=\"kl-select-button flex gap-4 disabled:border-neutral-200! disabled:dark:border-neutral-800!\"\n [attr.popovertarget]=\"fieldId\"\n popovertargetaction=\"toggle\"\n [disabled]=\"isDisabled()\">\n\n <span class=\"selectcontent flex flex-wrap gap-1 items-center w-[calc(100%-3rem)] h-full text-left py-1\" [class.py-3]=\"multiple()\"></span>\n\n <span class=\"picker\">\n @if (isLoading()) {\n <kl-loader size=\"small\" />\n } @else if (!isDisabled()) {\n <i class=\"fa-solid fa-caret-down\"></i>\n }\n </span>\n </button>\n\n <div [id]=\"fieldId\" popover class=\"kl-select-options-container with-popover relative flex flex-col overflow-hidden bg-base-100 dark:bg-base-300\">\n @if (!withoutFilter()) {\n <div class=\"kl-select-filter-container border-b border-neutral-700\">\n <label class=\"flex items-center text-sm\">\n <i class=\"fa-solid fa-magnifying-glass opacity-60 absolute top-3 left-4\"></i>\n <input class=\"w-full p-2 pr-3 pl-10 outline-none dark:placeholder:opacity-80\"\n #searchInput\n type=\"search\"\n [(ngModel)]=\"filter\"\n [placeholder]=\"translations.selectTypeSearch\"\n />\n </label>\n </div>\n }\n\n <div class=\"kl-select-options-content p-1 overflow-auto\">\n @for (item of optionList(); track $index) {\n @let optionLabelId = fieldId + '-' + item.value;\n\n <label class=\"kl-select-option-content relative py-1 px-2 pr-8 rounded-md text-neutral-900 dark:text-neutral-300 has-[input:checked]:bg-neutral-200 dark:has-[input:checked]:bg-neutral-700 hover:bg-neutral-300 dark:hover:bg-neutral-600 cursor-pointer\"\n [attr.for]=\"optionLabelId\"\n [attr.data-index]=\"$index\">\n <span class=\"w-full flex flex-col justify-center\">\n @let isChecked = multiple() ? (control().value || []).includes(item.value) : item.value === control().value;\n\n <input\n [type]=\"multiple() ? 'checkbox' : 'radio'\"\n [id]=\"optionLabelId\"\n [name]=\"fieldId\"\n [attr.value]=\"item.value\"\n [checked]=\"isChecked\"\n (change)=\"setValue($event)\"\n />\n <span>{{ item.label }}</span>\n <small class=\"empty:hidden opacity-60\">{{ item.description }}</small>\n </span>\n </label>\n }\n </div>\n </div>\n </div>\n</div>\n\n@if (hint()) {\n <span class=\"hint-content\">{{hint()}}</span>\n}\n\n<kl-field-errors [field]=\"control()\">\n <ng-container errors>\n <ng-content select=\"[errors]\" />\n </ng-container>\n</kl-field-errors>\n","import { Injectable, ResourceRef, Signal } from '@angular/core';\nimport { SelectDataOptionsFn, SelectList } from '../select.type';\n\n@Injectable({ providedIn: 'root' })\nexport class SelectBuilder {\n onDemand(config: SelectDataOptionsFn) {\n return config;\n }\n\n onServer(config: ResourceRef<SelectList>) {\n return config;\n }\n\n inMemory(config: SelectList) {\n return config;\n }\n\n inMemoryWithLoading(config: Signal<SelectList>) {\n return config;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { InjectionToken, Type } from '@angular/core';
|
|
3
3
|
|
|
4
4
|
declare class DialogContent {
|
|
5
|
-
dialogElement: i0.Signal<ElementRef<HTMLDialogElement> | undefined>;
|
|
6
|
-
constructor();
|
|
7
5
|
static ɵfac: i0.ɵɵFactoryDeclaration<DialogContent, never>;
|
|
8
6
|
static ɵcmp: i0.ɵɵComponentDeclaration<DialogContent, "kl-dialog-content", never, {}, {}, never, ["[header]", "[content]", "[actions]"], true, never>;
|
|
9
7
|
}
|