@ngneers/controls 0.0.1-pre6 → 0.0.1-pre7
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/ngneers-controls-accordion.mjs +10 -10
- package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
- package/fesm2022/ngneers-controls-api-ng.mjs +12 -9
- package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
- package/fesm2022/ngneers-controls-avatar.mjs +6 -6
- package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
- package/fesm2022/ngneers-controls-base.mjs +9 -9
- package/fesm2022/ngneers-controls-base.mjs.map +1 -1
- package/fesm2022/ngneers-controls-breadcrumb.mjs +7 -7
- package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngneers-controls-button-group.mjs +3 -3
- package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
- package/fesm2022/ngneers-controls-button.mjs +6 -6
- package/fesm2022/ngneers-controls-button.mjs.map +1 -1
- package/fesm2022/{ngneers-controls-calendar-time-Bzlv9Vkn.mjs → ngneers-controls-calendar-time-CKAqRgOP.mjs} +4 -4
- package/fesm2022/{ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map → ngneers-controls-calendar-time-CKAqRgOP.mjs.map} +1 -1
- package/fesm2022/ngneers-controls-calendar.mjs +11 -11
- package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
- package/fesm2022/ngneers-controls-checkbox.mjs +4 -4
- package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
- package/fesm2022/ngneers-controls-chip.mjs +4 -4
- package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
- package/fesm2022/ngneers-controls-default-icons.mjs +61 -0
- package/fesm2022/ngneers-controls-default-icons.mjs.map +1 -0
- package/fesm2022/ngneers-controls-defer.mjs +3 -3
- package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
- package/fesm2022/ngneers-controls-dialog.mjs +10 -10
- package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
- package/fesm2022/ngneers-controls-directives.mjs +21 -21
- package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
- package/fesm2022/ngneers-controls-drawer.mjs +7 -7
- package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
- package/fesm2022/ngneers-controls-edit-inplace.mjs +7 -7
- package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
- package/fesm2022/ngneers-controls-filter.mjs +4 -4
- package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
- package/fesm2022/ngneers-controls-i18n.mjs +3 -3
- package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
- package/fesm2022/ngneers-controls-icon.mjs +108 -44
- package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
- package/fesm2022/ngneers-controls-inplace.mjs +6 -6
- package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input-field.mjs +5 -5
- package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input-mask.mjs +3 -3
- package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input.mjs +3 -3
- package/fesm2022/ngneers-controls-input.mjs.map +1 -1
- package/fesm2022/ngneers-controls-item-view.mjs +6 -6
- package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
- package/fesm2022/ngneers-controls-list-box.mjs +6 -6
- package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
- package/fesm2022/ngneers-controls-menu.mjs +10 -10
- package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
- package/fesm2022/ngneers-controls-message.mjs +3 -3
- package/fesm2022/ngneers-controls-message.mjs.map +1 -1
- package/fesm2022/ngneers-controls-paginator.mjs +4 -4
- package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
- package/fesm2022/ngneers-controls-popover.mjs +11 -6
- package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
- package/fesm2022/ngneers-controls-progress.mjs +3 -3
- package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
- package/fesm2022/ngneers-controls-scroll-shadow.mjs +54 -0
- package/fesm2022/ngneers-controls-scroll-shadow.mjs.map +1 -0
- package/fesm2022/ngneers-controls-scroller.mjs +9 -9
- package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select-button.mjs +4 -4
- package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select.mjs +8 -7
- package/fesm2022/ngneers-controls-select.mjs.map +1 -1
- package/fesm2022/ngneers-controls-slider.mjs +3 -3
- package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
- package/fesm2022/ngneers-controls-spinner.mjs +3 -3
- package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
- package/fesm2022/ngneers-controls-splitter.mjs +10 -10
- package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
- package/fesm2022/ngneers-controls-switch.mjs +3 -3
- package/fesm2022/ngneers-controls-switch.mjs.map +1 -1
- package/fesm2022/ngneers-controls-table.mjs +227 -293
- package/fesm2022/ngneers-controls-table.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tabs.mjs +10 -10
- package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tag.mjs +3 -3
- package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
- package/fesm2022/ngneers-controls-toast.mjs +10 -10
- package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
- package/fesm2022/ngneers-controls-toggle-button.mjs +4 -4
- package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tooltip.mjs +44 -8
- package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
- package/fesm2022/ngneers-controls-utils-ng.mjs +3 -3
- package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
- package/fesm2022/ngneers-controls-utils.mjs +1 -1
- package/fesm2022/ngneers-controls-utils.mjs.map +1 -1
- package/package.json +29 -11
- package/types/ngneers-controls-accordion.d.ts +6 -4
- package/types/ngneers-controls-api-ng.d.ts +5 -0
- package/types/ngneers-controls-api.d.ts +2 -2
- package/types/ngneers-controls-breadcrumb.d.ts +5 -3
- package/types/ngneers-controls-checkbox.d.ts +5 -3
- package/types/ngneers-controls-chip.d.ts +3 -1
- package/types/ngneers-controls-default-icons.d.ts +5 -0
- package/types/ngneers-controls-drawer.d.ts +3 -1
- package/types/ngneers-controls-filter.d.ts +1 -1
- package/types/ngneers-controls-icon.d.ts +23 -40
- package/types/ngneers-controls-input-field.d.ts +3 -1
- package/types/ngneers-controls-item-view.d.ts +4 -2
- package/types/ngneers-controls-menu.d.ts +3 -1
- package/types/ngneers-controls-message.d.ts +3 -1
- package/types/ngneers-controls-popover.d.ts +1 -0
- package/types/ngneers-controls-scroll-shadow.d.ts +16 -0
- package/types/ngneers-controls-select.d.ts +5 -10
- package/types/ngneers-controls-table.d.ts +29 -41
- package/types/ngneers-controls-tabs.d.ts +4 -2
- package/types/ngneers-controls-tag.d.ts +3 -1
- package/types/ngneers-controls-toast.d.ts +4 -2
- package/types/ngneers-controls-toggle-button.d.ts +5 -3
- package/types/ngneers-controls-tooltip.d.ts +7 -1
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-calendar-z5xA9wTT.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-check-DdAQ9k-T.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_down-HO-z-xOr.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_left-CC5psi16.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_right-BRxlzx4G.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-chevron_up-cqhPO7g2.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-ellipsis-DXIGA1sk.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-filter-oU7E6Xgr.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-filter_solid-CqIKuR4N.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-magnifying_glass-T4Hzbkig.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-minus-oGDEFO4E.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-sort-CRD4tafz.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-sort_down-DiFB1P6R.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-sort_up-Bq_q3hIi.mjs.map +0 -1
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs +0 -4
- package/fesm2022/ngneers-controls-icon-xmark-BZKZORiu.mjs.map +0 -1
|
@@ -36,12 +36,12 @@ class NgnChip extends NgnBase {
|
|
|
36
36
|
* Emitted when the chip is clicked.
|
|
37
37
|
*/
|
|
38
38
|
clicked = output();
|
|
39
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
40
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnChip, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnChip, isStandalone: true, selector: "ngn-chip", inputs: { closable: { classPropertyName: "closable", publicName: "closable", isSignal: true, isRequired: false, transformFunction: null }, actionable: { classPropertyName: "actionable", publicName: "actionable", isSignal: true, isRequired: false, transformFunction: null }, iconClose: { classPropertyName: "iconClose", publicName: "iconClose", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", clicked: "clicked" }, providers: [provideSelf(NgnChip)], usesInheritance: true, ngImport: i0, template: "@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'chip-remove'\"\r\n />\r\n </button>\r\n}\r\n\r\n<ng-template #content>\r\n <ng-content />\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
41
41
|
}
|
|
42
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnChip, decorators: [{
|
|
43
43
|
type: Component,
|
|
44
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-chip', imports: [NgnPt, NgnIcon, NgTemplateOutlet], providers: [provideSelf(NgnChip)], template: "@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'
|
|
44
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-chip', imports: [NgnPt, NgnIcon, NgTemplateOutlet], providers: [provideSelf(NgnChip)], template: "@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'chip-remove'\"\r\n />\r\n </button>\r\n}\r\n\r\n<ng-template #content>\r\n <ng-content />\r\n</ng-template>\r\n" }]
|
|
45
45
|
}], propDecorators: { closable: [{ type: i0.Input, args: [{ isSignal: true, alias: "closable", required: false }] }], actionable: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionable", required: false }] }], iconClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconClose", required: false }] }], closed: [{ type: i0.Output, args: ["closed"] }], clicked: [{ type: i0.Output, args: ["clicked"] }] } });
|
|
46
46
|
|
|
47
47
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-chip.mjs","sources":["../../src/chip/chip.ts","../../src/chip/chip.html","../../src/chip/ngneers-controls-chip.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport { booleanAttribute, Component, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { chipControlTemplate } from '@ngneers/controls-themes/templates/chip';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-chip',\r\n templateUrl: './chip.html',\r\n imports: [NgnPt, NgnIcon, NgTemplateOutlet],\r\n providers: [provideSelf(NgnChip)],\r\n})\r\nexport class NgnChip extends NgnBase<'chip'> {\r\n protected readonly theme = this.injectThemeTemplate(chipControlTemplate, {\r\n root: true,\r\n closable: () => this.closable(),\r\n actionable: () => this.actionable(),\r\n });\r\n\r\n /**\r\n * Set whether the chip can be closed (removed).\r\n * @default false\r\n */\r\n public readonly closable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set whether the chip is actionable (can be clicked).\r\n * @default false\r\n */\r\n public readonly actionable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set a custom icon for the close button.\r\n */\r\n public readonly iconClose = input<IconType>();\r\n /**\r\n * Emitted when the chip is closed (removed).\r\n */\r\n public readonly closed = output<Event>();\r\n /**\r\n * Emitted when the chip is clicked.\r\n */\r\n public readonly clicked = output<Event>();\r\n}\r\n","@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'
|
|
1
|
+
{"version":3,"file":"ngneers-controls-chip.mjs","sources":["../../src/chip/chip.ts","../../src/chip/chip.html","../../src/chip/ngneers-controls-chip.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport { booleanAttribute, Component, input, output, ChangeDetectionStrategy } from '@angular/core';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { chipControlTemplate } from '@ngneers/controls-themes/templates/chip';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-chip',\r\n templateUrl: './chip.html',\r\n imports: [NgnPt, NgnIcon, NgTemplateOutlet],\r\n providers: [provideSelf(NgnChip)],\r\n})\r\nexport class NgnChip extends NgnBase<'chip'> {\r\n protected readonly theme = this.injectThemeTemplate(chipControlTemplate, {\r\n root: true,\r\n closable: () => this.closable(),\r\n actionable: () => this.actionable(),\r\n });\r\n\r\n /**\r\n * Set whether the chip can be closed (removed).\r\n * @default false\r\n */\r\n public readonly closable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set whether the chip is actionable (can be clicked).\r\n * @default false\r\n */\r\n public readonly actionable = input(false, { transform: booleanAttribute });\r\n /**\r\n * Set a custom icon for the close button.\r\n */\r\n public readonly iconClose = input<IconType>();\r\n /**\r\n * Emitted when the chip is closed (removed).\r\n */\r\n public readonly closed = output<Event>();\r\n /**\r\n * Emitted when the chip is clicked.\r\n */\r\n public readonly clicked = output<Event>();\r\n}\r\n","@if (actionable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'content'\" (click)=\"clicked.emit($event)\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </button>\r\n} @else {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n}\r\n\r\n@if (closable()) {\r\n <button type=\"button\" [ptInt]=\"this\" [ptClass]=\"'close-button'\" (click)=\"closed.emit($event)\">\r\n <ngn-icon\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'close-icon'\"\r\n [icon]=\"iconClose()\"\r\n [defaultIcon]=\"'chip-remove'\"\r\n />\r\n </button>\r\n}\r\n\r\n<ng-template #content>\r\n <ng-content />\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;AAQA;;AAEG;AAQG,MAAO,OAAQ,SAAQ,OAAe,CAAA;AACvB,IAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;AACvE,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,UAAU,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;AACpC,KAAA,CAAC;AAEF;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACxE;;;AAGG;IACa,UAAU,GAAG,KAAK,CAAC,KAAK,kFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAC1E;;AAEG;IACa,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAY;AAC7C;;AAEG;IACa,MAAM,GAAG,MAAM,EAAS;AACxC;;AAEG;IACa,OAAO,GAAG,MAAM,EAAS;wGA5B9B,OAAO,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAP,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,OAAO,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAFP,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChBnC,yuBAwBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDTY,KAAK,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,sFAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAG/B,OAAO,EAAA,UAAA,EAAA,CAAA;kBAPnB,SAAS;AACS,YAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC,UAAU,EAAA,OAAA,EAEX,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAA,SAAA,EAChC,CAAC,WAAW,SAAS,CAAC,EAAA,QAAA,EAAA,yuBAAA,EAAA;;;AEhBnC;;AAEG;;;;"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import tablerArrowsSort from '@iconify/icons-tabler/arrows-sort';
|
|
2
|
+
import tablerCalendar from '@iconify/icons-tabler/calendar';
|
|
3
|
+
import tablerCheck from '@iconify/icons-tabler/check';
|
|
4
|
+
import tablerChevronDown from '@iconify/icons-tabler/chevron-down';
|
|
5
|
+
import tablerChevronLeft from '@iconify/icons-tabler/chevron-left';
|
|
6
|
+
import tablerChevronRight from '@iconify/icons-tabler/chevron-right';
|
|
7
|
+
import tablerChevronUp from '@iconify/icons-tabler/chevron-up';
|
|
8
|
+
import tablerDots from '@iconify/icons-tabler/dots';
|
|
9
|
+
import tablerFilter from '@iconify/icons-tabler/filter';
|
|
10
|
+
import tablerFilterFilled from '@iconify/icons-tabler/filter-filled';
|
|
11
|
+
import tablerMinus from '@iconify/icons-tabler/minus';
|
|
12
|
+
import tablerSearch from '@iconify/icons-tabler/search';
|
|
13
|
+
import tablerSortAscending from '@iconify/icons-tabler/sort-ascending';
|
|
14
|
+
import tablerSortDescending from '@iconify/icons-tabler/sort-descending';
|
|
15
|
+
import tablerX from '@iconify/icons-tabler/x';
|
|
16
|
+
import { NGN_ICON_REGISTRY, NGN_CUSTOM_ICONS } from '@ngneers/controls/icon';
|
|
17
|
+
|
|
18
|
+
const NGN_DEFAULT_ICON_REGISTRY = {
|
|
19
|
+
'accordion-collapse': { icon: tablerChevronUp, scale: 1.71 },
|
|
20
|
+
'accordion-expand': { icon: tablerChevronDown, scale: 1.71 },
|
|
21
|
+
'breadcrumb-separator': { icon: tablerChevronRight, scale: 1.71 },
|
|
22
|
+
'breadcrumb-overflow': { icon: tablerDots, scale: 1.33 },
|
|
23
|
+
'calendar-trigger': { icon: tablerCalendar, scale: 1.14 },
|
|
24
|
+
'calendar-previous-month': { icon: tablerChevronLeft, scale: 1.71 },
|
|
25
|
+
'calendar-next-month': { icon: tablerChevronRight, scale: 1.71 },
|
|
26
|
+
'checkbox-checked': { icon: tablerCheck, scale: 1.41 },
|
|
27
|
+
'checkbox-indeterminate': { icon: tablerMinus, scale: 1.5 },
|
|
28
|
+
'chip-remove': { icon: tablerX, scale: 1.71 },
|
|
29
|
+
'dialog-close': { icon: tablerX, scale: 1.71 },
|
|
30
|
+
'drawer-close': { icon: tablerX, scale: 1.71 },
|
|
31
|
+
'dropdown-toggle': { icon: tablerChevronDown, scale: 1.71 },
|
|
32
|
+
'edit-confirm': { icon: tablerCheck, scale: 1.41 },
|
|
33
|
+
'filter-active': { icon: tablerFilterFilled, scale: 1 },
|
|
34
|
+
'filter-inactive': { icon: tablerFilter, scale: 1.12 },
|
|
35
|
+
'filter-remove': { icon: tablerX, scale: 1.71 },
|
|
36
|
+
'input-clear': { icon: tablerX, scale: 1.71 },
|
|
37
|
+
'menu-submenu': { icon: tablerChevronRight, scale: 1.71 },
|
|
38
|
+
'paginator-previous': { icon: tablerChevronLeft, scale: 1.71 },
|
|
39
|
+
'paginator-next': { icon: tablerChevronRight, scale: 1.71 },
|
|
40
|
+
search: { icon: tablerSearch, scale: 1.2 },
|
|
41
|
+
'sort-neutral': { icon: tablerArrowsSort, scale: 1.2 },
|
|
42
|
+
'sort-ascending': { icon: tablerSortAscending, scale: 1.26 },
|
|
43
|
+
'sort-descending': { icon: tablerSortDescending, scale: 1.26 },
|
|
44
|
+
'table-group-toggle': { icon: tablerChevronRight, scale: 1.71 },
|
|
45
|
+
'tabs-scroll-left': { icon: tablerChevronLeft, scale: 1.71 },
|
|
46
|
+
'tabs-scroll-right': { icon: tablerChevronRight, scale: 1.71 },
|
|
47
|
+
'toast-close': { icon: tablerX, scale: 1.71 },
|
|
48
|
+
};
|
|
49
|
+
function provideNgnDefaultIcons() {
|
|
50
|
+
return [
|
|
51
|
+
{ provide: NGN_ICON_REGISTRY, useValue: NGN_DEFAULT_ICON_REGISTRY },
|
|
52
|
+
{ provide: NGN_CUSTOM_ICONS, useValue: false },
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Generated bundle index. Do not edit.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
export { provideNgnDefaultIcons };
|
|
61
|
+
//# sourceMappingURL=ngneers-controls-default-icons.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngneers-controls-default-icons.mjs","sources":["../../src/default-icons/provider.ts","../../src/default-icons/ngneers-controls-default-icons.ts"],"sourcesContent":["import tablerArrowsSort from '@iconify/icons-tabler/arrows-sort';\r\nimport tablerCalendar from '@iconify/icons-tabler/calendar';\r\nimport tablerCheck from '@iconify/icons-tabler/check';\r\nimport tablerChevronDown from '@iconify/icons-tabler/chevron-down';\r\nimport tablerChevronLeft from '@iconify/icons-tabler/chevron-left';\r\nimport tablerChevronRight from '@iconify/icons-tabler/chevron-right';\r\nimport tablerChevronUp from '@iconify/icons-tabler/chevron-up';\r\nimport tablerDots from '@iconify/icons-tabler/dots';\r\nimport tablerFilter from '@iconify/icons-tabler/filter';\r\nimport tablerFilterFilled from '@iconify/icons-tabler/filter-filled';\r\nimport tablerMinus from '@iconify/icons-tabler/minus';\r\nimport tablerSearch from '@iconify/icons-tabler/search';\r\nimport tablerSortAscending from '@iconify/icons-tabler/sort-ascending';\r\nimport tablerSortDescending from '@iconify/icons-tabler/sort-descending';\r\nimport tablerX from '@iconify/icons-tabler/x';\r\n\r\nimport { NGN_CUSTOM_ICONS, NGN_ICON_REGISTRY, type NgnIconRegistry } from '@ngneers/controls/icon';\r\n\r\nimport type { Provider } from '@angular/core';\r\n\r\nconst NGN_DEFAULT_ICON_REGISTRY: NgnIconRegistry = {\r\n 'accordion-collapse': { icon: tablerChevronUp, scale: 1.71 },\r\n 'accordion-expand': { icon: tablerChevronDown, scale: 1.71 },\r\n 'breadcrumb-separator': { icon: tablerChevronRight, scale: 1.71 },\r\n 'breadcrumb-overflow': { icon: tablerDots, scale: 1.33 },\r\n 'calendar-trigger': { icon: tablerCalendar, scale: 1.14 },\r\n 'calendar-previous-month': { icon: tablerChevronLeft, scale: 1.71 },\r\n 'calendar-next-month': { icon: tablerChevronRight, scale: 1.71 },\r\n 'checkbox-checked': { icon: tablerCheck, scale: 1.41 },\r\n 'checkbox-indeterminate': { icon: tablerMinus, scale: 1.5 },\r\n 'chip-remove': { icon: tablerX, scale: 1.71 },\r\n 'dialog-close': { icon: tablerX, scale: 1.71 },\r\n 'drawer-close': { icon: tablerX, scale: 1.71 },\r\n 'dropdown-toggle': { icon: tablerChevronDown, scale: 1.71 },\r\n 'edit-confirm': { icon: tablerCheck, scale: 1.41 },\r\n 'filter-active': { icon: tablerFilterFilled, scale: 1 },\r\n 'filter-inactive': { icon: tablerFilter, scale: 1.12 },\r\n 'filter-remove': { icon: tablerX, scale: 1.71 },\r\n 'input-clear': { icon: tablerX, scale: 1.71 },\r\n 'menu-submenu': { icon: tablerChevronRight, scale: 1.71 },\r\n 'paginator-previous': { icon: tablerChevronLeft, scale: 1.71 },\r\n 'paginator-next': { icon: tablerChevronRight, scale: 1.71 },\r\n search: { icon: tablerSearch, scale: 1.2 },\r\n 'sort-neutral': { icon: tablerArrowsSort, scale: 1.2 },\r\n 'sort-ascending': { icon: tablerSortAscending, scale: 1.26 },\r\n 'sort-descending': { icon: tablerSortDescending, scale: 1.26 },\r\n 'table-group-toggle': { icon: tablerChevronRight, scale: 1.71 },\r\n 'tabs-scroll-left': { icon: tablerChevronLeft, scale: 1.71 },\r\n 'tabs-scroll-right': { icon: tablerChevronRight, scale: 1.71 },\r\n 'toast-close': { icon: tablerX, scale: 1.71 },\r\n};\r\n\r\nexport function provideNgnDefaultIcons(): Provider[] {\r\n return [\r\n { provide: NGN_ICON_REGISTRY, useValue: NGN_DEFAULT_ICON_REGISTRY },\r\n { provide: NGN_CUSTOM_ICONS, useValue: false },\r\n ];\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAoBA,MAAM,yBAAyB,GAAoB;IACjD,oBAAoB,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5D,kBAAkB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5D,sBAAsB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;IACjE,qBAAqB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE;IACxD,kBAAkB,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;IACzD,yBAAyB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;IACnE,qBAAqB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;IAChE,kBAAkB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;IACtD,wBAAwB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3D,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7C,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9C,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9C,iBAAiB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3D,cAAc,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;IAClD,eAAe,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE;IACvD,iBAAiB,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;IACtD,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/C,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;IAC7C,cAAc,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;IACzD,oBAAoB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9D,gBAAgB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3D,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE;IAC1C,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE;IACtD,gBAAgB,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5D,iBAAiB,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9D,oBAAoB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC/D,kBAAkB,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5D,mBAAmB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;IAC9D,aAAa,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;CAC9C;SAEe,sBAAsB,GAAA;IACpC,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AACnE,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE;KAC/C;AACH;;ACzDA;;AAEG;;;;"}
|
|
@@ -23,10 +23,10 @@ class NgnDefer extends NgnBase {
|
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
27
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDefer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnDefer, isStandalone: true, selector: "ngn-defer", inputs: { lazyContent: { classPropertyName: "lazyContent", publicName: "lazyContent", isSignal: true, isRequired: false, transformFunction: null }, lazyContentContext: { classPropertyName: "lazyContentContext", publicName: "lazyContentContext", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, hiddenOnClosed: { classPropertyName: "hiddenOnClosed", publicName: "hiddenOnClosed", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.open": "open()", "class.hidden": "!open() && hiddenOnClosed()", "aria-hidden": "!open()" } }, providers: [provideSelf(NgnDefer)], usesInheritance: true, ngImport: i0, template: "@if (lazyContent()) {\r\n @if (open() || (cache() && hasBeenOpened()) || !lazy()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lazyContent()\"\r\n [ngTemplateOutletContext]=\"lazyContentContext()\"\r\n />\r\n }\r\n} @else {\r\n <ng-content></ng-content>\r\n}\r\n", styles: [":host.hidden{visibility:hidden;position:absolute;top:-9999px;left:-9999px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28
28
|
}
|
|
29
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDefer, decorators: [{
|
|
30
30
|
type: Component,
|
|
31
31
|
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-defer', imports: [NgTemplateOutlet], providers: [provideSelf(NgnDefer)], host: {
|
|
32
32
|
'[class.open]': 'open()',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-defer.mjs","sources":["../../src/defer/defer.ts","../../src/defer/defer.html","../../src/defer/ngneers-controls-defer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n effect,\r\n input,\r\n signal,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-defer',\r\n templateUrl: './defer.html',\r\n imports: [NgTemplateOutlet],\r\n providers: [provideSelf(NgnDefer)],\r\n host: {\r\n '[class.open]': 'open()',\r\n '[class.hidden]': '!open() && hiddenOnClosed()',\r\n '[aria-hidden]': '!open()',\r\n },\r\n styles: [\r\n `\r\n :host.hidden {\r\n visibility: hidden;\r\n position: absolute;\r\n top: -9999px;\r\n left: -9999px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class NgnDefer<T> extends NgnBase<null> {\r\n protected readonly theme = null;\r\n public readonly lazyContent = input<TemplateRef<T> | undefined | null>(undefined);\r\n public readonly lazyContentContext = input<T | null>(null);\r\n public readonly open = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly hiddenOnClosed = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly hasBeenOpened = signal(false);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.open()) {\r\n this.hasBeenOpened.set(true);\r\n }\r\n });\r\n }\r\n}\r\n","@if (lazyContent()) {\r\n @if (open() || (cache() && hasBeenOpened()) || !lazy()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lazyContent()\"\r\n [ngTemplateOutletContext]=\"lazyContentContext()\"\r\n />\r\n }\r\n} @else {\r\n <ng-content></ng-content>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAYA;;AAEG;AAuBG,MAAO,QAAY,SAAQ,OAAa,CAAA;IACzB,KAAK,GAAG,IAAI;AACf,IAAA,WAAW,GAAG,KAAK,CAAoC,SAAS,kFAAC;AACjE,IAAA,kBAAkB,GAAG,KAAK,CAAW,IAAI,yFAAC;IAC1C,IAAI,GAAG,KAAK,CAAC,KAAK,4EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACpD,IAAI,GAAG,KAAK,CAAC,IAAI,4EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACnD,KAAK,GAAG,KAAK,CAAC,KAAK,6EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACrD,cAAc,GAAG,KAAK,CAAC,IAAI,sFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE1D,IAAA,aAAa,GAAG,MAAM,CAAC,KAAK,oFAAC;AAEhD,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QACP,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACf,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC9B;AACF,QAAA,CAAC,CAAC;IACJ;
|
|
1
|
+
{"version":3,"file":"ngneers-controls-defer.mjs","sources":["../../src/defer/defer.ts","../../src/defer/defer.html","../../src/defer/ngneers-controls-defer.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n booleanAttribute,\r\n Component,\r\n effect,\r\n input,\r\n signal,\r\n TemplateRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport { NgnBase, provideSelf } from '@ngneers/controls/base';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-defer',\r\n templateUrl: './defer.html',\r\n imports: [NgTemplateOutlet],\r\n providers: [provideSelf(NgnDefer)],\r\n host: {\r\n '[class.open]': 'open()',\r\n '[class.hidden]': '!open() && hiddenOnClosed()',\r\n '[aria-hidden]': '!open()',\r\n },\r\n styles: [\r\n `\r\n :host.hidden {\r\n visibility: hidden;\r\n position: absolute;\r\n top: -9999px;\r\n left: -9999px;\r\n }\r\n `,\r\n ],\r\n})\r\nexport class NgnDefer<T> extends NgnBase<null> {\r\n protected readonly theme = null;\r\n public readonly lazyContent = input<TemplateRef<T> | undefined | null>(undefined);\r\n public readonly lazyContentContext = input<T | null>(null);\r\n public readonly open = input(false, { transform: booleanAttribute });\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n public readonly hiddenOnClosed = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly hasBeenOpened = signal(false);\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (this.open()) {\r\n this.hasBeenOpened.set(true);\r\n }\r\n });\r\n }\r\n}\r\n","@if (lazyContent()) {\r\n @if (open() || (cache() && hasBeenOpened()) || !lazy()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"lazyContent()\"\r\n [ngTemplateOutletContext]=\"lazyContentContext()\"\r\n />\r\n }\r\n} @else {\r\n <ng-content></ng-content>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -40,10 +40,10 @@ class DialogTemplates extends NgnBase {
|
|
|
40
40
|
* Types for the dialog templates.
|
|
41
41
|
*/
|
|
42
42
|
templateTypes = templateTypesFn();
|
|
43
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
44
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.
|
|
43
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: DialogTemplates, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
44
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.10", type: DialogTemplates, isStandalone: true, inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, templateHeader: { classPropertyName: "templateHeader", publicName: "templateHeader", isSignal: true, isRequired: false, transformFunction: null }, templateFooter: { classPropertyName: "templateFooter", publicName: "templateFooter", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "_userContentTemplate", first: true, predicate: ["content"], descendants: true, isSignal: true }, { propertyName: "_userHeaderTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "_userFooterTemplate", first: true, predicate: ["footer"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_defaultHeaderTemplate", first: true, predicate: ["defaultHeaderTemplate"], descendants: true, isSignal: true }, { propertyName: "_defaultFooterTemplate", first: true, predicate: ["defaultFooterTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0 });
|
|
45
45
|
}
|
|
46
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
46
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: DialogTemplates, decorators: [{
|
|
47
47
|
type: Directive
|
|
48
48
|
}], propDecorators: { _userContentTemplate: [{ type: i0.ContentChild, args: ['content', { isSignal: true }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], _defaultHeaderTemplate: [{ type: i0.ViewChild, args: ['defaultHeaderTemplate', { isSignal: true }] }], _userHeaderTemplate: [{ type: i0.ContentChild, args: ['header', { isSignal: true }] }], templateHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateHeader", required: false }] }], _defaultFooterTemplate: [{ type: i0.ViewChild, args: ['defaultFooterTemplate', { isSignal: true }] }], _userFooterTemplate: [{ type: i0.ContentChild, args: ['footer', { isSignal: true }] }], templateFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "templateFooter", required: false }] }] } });
|
|
49
49
|
|
|
@@ -60,10 +60,10 @@ class PromptDialogBase {
|
|
|
60
60
|
fulfilPrompt(data) {
|
|
61
61
|
this.ngnPromptDialogResolveFn()?.fn(data ?? null);
|
|
62
62
|
}
|
|
63
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
64
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.
|
|
63
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: PromptDialogBase, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.10", type: PromptDialogBase, isStandalone: true, selector: "ng-component", inputs: { ngnPromptDialogResolveFn: { classPropertyName: "ngnPromptDialogResolveFn", publicName: "ngnPromptDialogResolveFn", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
65
65
|
}
|
|
66
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: PromptDialogBase, decorators: [{
|
|
67
67
|
type: Component,
|
|
68
68
|
args: [{
|
|
69
69
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
@@ -283,10 +283,10 @@ class NgnDialog extends DialogTemplates {
|
|
|
283
283
|
this.buttonClicked.emit(button);
|
|
284
284
|
this._latestClickedButtonValue.set({ button });
|
|
285
285
|
}
|
|
286
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
287
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
286
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDialog, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
287
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", type: NgnDialog, isStandalone: true, selector: "ngn-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, footerButtons: { classPropertyName: "footerButtons", publicName: "footerButtons", isSignal: true, isRequired: false, transformFunction: null }, movable: { classPropertyName: "movable", publicName: "movable", isSignal: true, isRequired: false, transformFunction: null }, resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", buttonClicked: "buttonClicked", closed: "closed", promptResult: "promptResult" }, providers: [provideSelf(NgnDialog)], viewQueries: [{ propertyName: "_dialogElement", first: true, predicate: ["dialog"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'dialog-close'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnMovable, selector: "[ngnMovable]", inputs: ["ngnMovable", "ngnMovableDragHandle", "ngnMovableChangeCursor", "ngnMovableLimitToViewport"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnActionButton, selector: "ngn-action-button", inputs: ["config", "inline"], outputs: ["clicked"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnResizable, selector: "[ngnResizable]", inputs: ["ngnResizable", "ngnResizableSizeLimits"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
288
288
|
}
|
|
289
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: NgnDialog, decorators: [{
|
|
290
290
|
type: Component,
|
|
291
291
|
args: [{ selector: 'ngn-dialog', imports: [
|
|
292
292
|
NgTemplateOutlet,
|
|
@@ -299,7 +299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImpor
|
|
|
299
299
|
NgComponentOutlet,
|
|
300
300
|
NgnIcon,
|
|
301
301
|
NgnResizable,
|
|
302
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnDialog)], template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'
|
|
302
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, providers: [provideSelf(NgnDialog)], template: "<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'dialog-close'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n" }]
|
|
303
303
|
}], ctorParameters: () => [], propDecorators: { _dialogElement: [{ type: i0.ViewChild, args: ['dialog', { isSignal: true }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }, { type: i0.Output, args: ["openChange"] }], lazy: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazy", required: false }] }], cache: [{ type: i0.Input, args: [{ isSignal: true, alias: "cache", required: false }] }], modal: [{ type: i0.Input, args: [{ isSignal: true, alias: "modal", required: false }] }], autofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autofocus", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], closeBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeBy", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], footerButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerButtons", required: false }] }], movable: [{ type: i0.Input, args: [{ isSignal: true, alias: "movable", required: false }] }], resizable: [{ type: i0.Input, args: [{ isSignal: true, alias: "resizable", required: false }] }], buttonClicked: [{ type: i0.Output, args: ["buttonClicked"] }], closed: [{ type: i0.Output, args: ["closed"] }], promptResult: [{ type: i0.Output, args: ["promptResult"] }] } });
|
|
304
304
|
|
|
305
305
|
function applyDialogConfig(dialogRef, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-dialog.mjs","sources":["../../src/dialog/dialog-templates.ts","../../src/dialog/prompt-dialog-base.ts","../../src/dialog/dialog.ts","../../src/dialog/dialog.html","../../src/dialog/create-dialog.ts","../../src/dialog/ngneers-controls-dialog.ts"],"sourcesContent":["import {\r\n computed,\r\n contentChild,\r\n Directive,\r\n input,\r\n TemplateRef,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\n@Directive()\r\nexport abstract class DialogTemplates<T> extends NgnBase<'dialog'> {\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The content of the dialog.\r\n * Can be a string, a component type, or a template reference.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null | Type<T> | string>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<unknown>>('header');\r\n /**\r\n * Set a custom template for the header of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<unknown> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _defaultFooterTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultFooterTemplate');\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: {\r\n headerId: string;\r\n title: string | null;\r\n };\r\n }>();\r\n}\r\n","import { Component, effect, input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '',\r\n})\r\nexport abstract class PromptDialogBase<D, ButtonValues> {\r\n public readonly ngnPromptDialogResolveFn = input<{\r\n fn: (value: D | null) => void;\r\n button: ButtonValues;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const fn = this.ngnPromptDialogResolveFn(); // trigger\r\n if (fn) {\r\n this.onDialogButtonClicked(fn.button);\r\n }\r\n });\r\n }\r\n\r\n protected fulfilPrompt(data?: D) {\r\n this.ngnPromptDialogResolveFn()?.fn(data ?? null);\r\n }\r\n\r\n protected abstract onDialogButtonClicked(button: ButtonValues): void;\r\n}\r\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n Type,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n type CloseBy,\r\n toModalCloseBy,\r\n toPopoverCloseBy,\r\n NgnTemplate,\r\n type Openable,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnActionButton, NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnMovable, NgnResizable } from '@ngneers/controls/directives';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';\r\n\r\nimport { DialogTemplates } from './dialog-templates';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogSize } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\ntype TypedContent = {\r\n template?: TemplateRef<unknown>;\r\n string?: string;\r\n component?: Type<unknown>;\r\n};\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-dialog',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnMovable,\r\n NgnDefer,\r\n NgnPt,\r\n NgnButton,\r\n NgnActionButton,\r\n NgComponentOutlet,\r\n NgnIcon,\r\n NgnResizable,\r\n ],\r\n templateUrl: './dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnDialog)],\r\n})\r\nexport class NgnDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>\r\n extends DialogTemplates<T>\r\n implements Openable\r\n{\r\n protected readonly theme = this.injectThemeTemplate(dialogControlTemplate);\r\n protected readonly headerId = generateElementId();\r\n\r\n private readonly _dialogElement = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\r\n /**\r\n * Shows or hides the dialog.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model(true);\r\n /**\r\n * When `true`, the content will be loaded lazily when the dialog is opened for the first time.\r\n * Only applies when using a template for the content.\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will automatically receive focus when opened.\r\n * @default modal()\r\n */\r\n public readonly autofocus = input(this.modal());\r\n /**\r\n * The title of the dialog. Displayed in the default header template.\r\n */\r\n public readonly title = input<string | null | undefined>(null);\r\n /**\r\n * Determines how the dialog can be closed by the user.\r\n * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.\r\n * - `'escape'` - The dialog can only be closed by pressing the Escape key.\r\n * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<CloseBy>('any');\r\n /**\r\n * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.\r\n */\r\n public readonly size = input<DialogSize>({});\r\n /**\r\n * Action buttons to be displayed in the footer of the dialog.\r\n */\r\n public readonly footerButtons = input<Buttons>();\r\n /**\r\n * Whether the dialog is movable by dragging its header.\r\n */\r\n public readonly movable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * Whether the dialog is resizable.\r\n */\r\n public readonly resizable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.\r\n */\r\n public readonly buttonClicked = output<Buttons[number]['value'] | null>();\r\n /**\r\n * Emits when the dialog has fully closed.\r\n */\r\n public readonly closed = output();\r\n\r\n public readonly promptResult = output<{\r\n value: (T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) | null;\r\n button: Buttons[number]['value'] | null;\r\n }>();\r\n\r\n private readonly _latestClickedButtonValue = signal<{ button: Buttons[number]['value'] } | null>(\r\n null\r\n );\r\n\r\n protected readonly contentComponentInputs = computed(() => {\r\n const component = this.typedContent().component;\r\n if (!component || !(component.prototype instanceof PromptDialogBase)) {\r\n return {};\r\n }\r\n const latestButton = this._latestClickedButtonValue();\r\n if (latestButton === null) {\r\n return {};\r\n }\r\n return {\r\n ngnPromptDialogResolveFn: {\r\n button: latestButton.button,\r\n fn: (result: T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) => {\r\n this.promptResult.emit({\r\n value: result,\r\n button: latestButton.button,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n this.open.set(false);\r\n },\r\n },\r\n };\r\n });\r\n\r\n /**\r\n * How a modal dialog can be closed by the user.\r\n */\r\n protected readonly modalClosedBy = computed(() => toModalCloseBy(this.closeBy()));\r\n /**\r\n * How a popover dialog can be closed by the user.\r\n */\r\n protected readonly popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n protected readonly typedContent = computed<TypedContent>(() => {\r\n const content = this.contentTemplate();\r\n if (!content) {\r\n return {};\r\n }\r\n if (typeof content === 'string') {\r\n return { string: content };\r\n } else if (content instanceof TemplateRef) {\r\n return { template: content };\r\n } else {\r\n return { component: content };\r\n }\r\n });\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n if (untracked(this.modal)) {\r\n this._dialogElement().nativeElement.showModal();\r\n } else {\r\n this._dialogElement().nativeElement.showPopover();\r\n }\r\n } else {\r\n this._dialogElement().nativeElement.close();\r\n this._dialogElement().nativeElement.hidePopover();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Different cancel handlers for different event types. Required for modal and popover dialogs.\r\n */\r\n protected onCancel(event?: ToggleEvent | KeyboardEvent): void {\r\n if (event instanceof KeyboardEvent) {\r\n // Modal dialogs handle Escape via the native (cancel) event\r\n if (this.modal()) {\r\n return;\r\n }\r\n if (event.key !== 'Escape' || (event.target as HTMLElement).tagName !== 'DIALOG') {\r\n // TODO: limitation: when focus is inside a different element, we cannot know if it is safe to close, so we skip it\r\n return;\r\n }\r\n if (this.closeBy() === 'escape') {\r\n this.setStateToClosed();\r\n }\r\n return;\r\n }\r\n\r\n if (event instanceof ToggleEvent && event.newState !== 'closed') {\r\n // This is also just for popover dialogs\r\n return;\r\n }\r\n /**\r\n * In case the dialog is closed with the same click event that tries to open it again immediately,\r\n * we need to wait for the next animation frame to avoid a stuck state where the outside thinks it's opened\r\n * but inside `open` is set to false.\r\n */\r\n requestAnimationFrame(() => {\r\n this.setStateToClosed();\r\n });\r\n }\r\n\r\n private setStateToClosed() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n\r\n private cancelPrompt() {\r\n if (this.contentComponentInputs()) {\r\n this.promptResult.emit({\r\n value: null,\r\n button: null,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n }\r\n }\r\n\r\n protected closeWithButton() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n }\r\n\r\n /**\r\n * Opens the dialog. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show(): void {\r\n this.open.set(true);\r\n }\r\n public hide(): void {\r\n this.open.set(false);\r\n }\r\n public toggle(): void {\r\n this.open.update(open => !open);\r\n }\r\n\r\n protected singleButtonTypeFix(button: unknown): Buttons[number] {\r\n return button as Buttons[number];\r\n }\r\n\r\n protected buttonClick(button: Buttons[number]['value']): void {\r\n this.buttonClicked.emit(button);\r\n this._latestClickedButtonValue.set({ button });\r\n }\r\n}\r\n","<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'xmark'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';\r\nimport { setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { NgnDialog } from './dialog';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogConfig } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\nexport type DialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n buttonClicked: Observable<Buttons[number]['value'] | null>;\r\n};\r\n\r\nexport type PromptDialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n result: Promise<{\r\n value: T extends PromptDialogBase<infer D, Buttons> ? D : never | null;\r\n button: Buttons[number]['value'] | null;\r\n }>;\r\n};\r\n\r\nfunction applyDialogConfig<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(dialogRef: ComponentRef<NgnDialog<T, Buttons>>, config: DialogConfig<T, Buttons>): void {\r\n if (config.title !== undefined) {\r\n setComponentInput(dialogRef, 'title', config.title);\r\n }\r\n if (config.size !== undefined) {\r\n setComponentInput(dialogRef, 'size', config.size);\r\n }\r\n if (config.modal !== undefined) {\r\n setComponentInput(dialogRef, 'modal', config.modal);\r\n }\r\n if (config.footerButtons !== undefined) {\r\n setComponentInput(dialogRef, 'footerButtons', config.footerButtons);\r\n }\r\n if (config.closeBy !== undefined) {\r\n setComponentInput(dialogRef, 'closeBy', config.closeBy);\r\n }\r\n if (config.content !== undefined) {\r\n setComponentInput(dialogRef, 'content', config.content);\r\n }\r\n if (config.movable !== undefined) {\r\n setComponentInput(dialogRef, 'movable', config.movable);\r\n }\r\n if (config.resizable !== undefined) {\r\n setComponentInput(dialogRef, 'resizable', config.resizable);\r\n }\r\n}\r\n\r\nexport function createDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(\r\n injector: Injector,\r\n config: DialogConfig<T, Buttons>\r\n): T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons> {\r\n type ButtonValues = Buttons[number]['value'];\r\n\r\n const viewContainerRef = injector.get(ViewContainerRef);\r\n const dialogRef = viewContainerRef.createComponent(NgnDialog, {\r\n injector,\r\n }) as unknown as ComponentRef<NgnDialog<T, Buttons>>;\r\n\r\n applyDialogConfig(dialogRef, config);\r\n dialogRef.instance.buttonClicked.subscribe(value => {\r\n buttonClicked.next(value);\r\n });\r\n\r\n const buttonClicked = new Subject<ButtonValues | null>();\r\n dialogRef.onDestroy(() => {\r\n buttonClicked.complete();\r\n });\r\n\r\n if (\r\n typeof config.content === 'function' &&\r\n config.content.prototype instanceof PromptDialogBase\r\n ) {\r\n const _result = Promise.withResolvers<{\r\n value: (T extends PromptDialogBase<infer D, ButtonValues> ? D : never) | null;\r\n button: ButtonValues | null;\r\n }>();\r\n\r\n (dialogRef.instance as unknown as NgnDialog<T, Buttons>).promptResult.subscribe(result => {\r\n _result.resolve(result);\r\n });\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n result: _result.promise,\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n }\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n buttonClicked: buttonClicked.asObservable(),\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngneers-controls-dialog.mjs","sources":["../../src/dialog/dialog-templates.ts","../../src/dialog/prompt-dialog-base.ts","../../src/dialog/dialog.ts","../../src/dialog/dialog.html","../../src/dialog/create-dialog.ts","../../src/dialog/ngneers-controls-dialog.ts"],"sourcesContent":["import {\r\n computed,\r\n contentChild,\r\n Directive,\r\n input,\r\n TemplateRef,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\n@Directive()\r\nexport abstract class DialogTemplates<T> extends NgnBase<'dialog'> {\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The content of the dialog.\r\n * Can be a string, a component type, or a template reference.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null | Type<T> | string>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<unknown>>('header');\r\n /**\r\n * Set a custom template for the header of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<unknown> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _defaultFooterTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultFooterTemplate');\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: {\r\n headerId: string;\r\n title: string | null;\r\n };\r\n }>();\r\n}\r\n","import { Component, effect, input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '',\r\n})\r\nexport abstract class PromptDialogBase<D, ButtonValues> {\r\n public readonly ngnPromptDialogResolveFn = input<{\r\n fn: (value: D | null) => void;\r\n button: ButtonValues;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const fn = this.ngnPromptDialogResolveFn(); // trigger\r\n if (fn) {\r\n this.onDialogButtonClicked(fn.button);\r\n }\r\n });\r\n }\r\n\r\n protected fulfilPrompt(data?: D) {\r\n this.ngnPromptDialogResolveFn()?.fn(data ?? null);\r\n }\r\n\r\n protected abstract onDialogButtonClicked(button: ButtonValues): void;\r\n}\r\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n Type,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n type CloseBy,\r\n toModalCloseBy,\r\n toPopoverCloseBy,\r\n NgnTemplate,\r\n type Openable,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnActionButton, NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnMovable, NgnResizable } from '@ngneers/controls/directives';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';\r\n\r\nimport { DialogTemplates } from './dialog-templates';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogSize } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\ntype TypedContent = {\r\n template?: TemplateRef<unknown>;\r\n string?: string;\r\n component?: Type<unknown>;\r\n};\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-dialog',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnMovable,\r\n NgnDefer,\r\n NgnPt,\r\n NgnButton,\r\n NgnActionButton,\r\n NgComponentOutlet,\r\n NgnIcon,\r\n NgnResizable,\r\n ],\r\n templateUrl: './dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnDialog)],\r\n})\r\nexport class NgnDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>\r\n extends DialogTemplates<T>\r\n implements Openable\r\n{\r\n protected readonly theme = this.injectThemeTemplate(dialogControlTemplate);\r\n protected readonly headerId = generateElementId();\r\n\r\n private readonly _dialogElement = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\r\n /**\r\n * Shows or hides the dialog.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model(true);\r\n /**\r\n * When `true`, the content will be loaded lazily when the dialog is opened for the first time.\r\n * Only applies when using a template for the content.\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will automatically receive focus when opened.\r\n * @default modal()\r\n */\r\n public readonly autofocus = input(this.modal());\r\n /**\r\n * The title of the dialog. Displayed in the default header template.\r\n */\r\n public readonly title = input<string | null | undefined>(null);\r\n /**\r\n * Determines how the dialog can be closed by the user.\r\n * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.\r\n * - `'escape'` - The dialog can only be closed by pressing the Escape key.\r\n * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<CloseBy>('any');\r\n /**\r\n * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.\r\n */\r\n public readonly size = input<DialogSize>({});\r\n /**\r\n * Action buttons to be displayed in the footer of the dialog.\r\n */\r\n public readonly footerButtons = input<Buttons>();\r\n /**\r\n * Whether the dialog is movable by dragging its header.\r\n */\r\n public readonly movable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * Whether the dialog is resizable.\r\n */\r\n public readonly resizable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.\r\n */\r\n public readonly buttonClicked = output<Buttons[number]['value'] | null>();\r\n /**\r\n * Emits when the dialog has fully closed.\r\n */\r\n public readonly closed = output();\r\n\r\n public readonly promptResult = output<{\r\n value: (T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) | null;\r\n button: Buttons[number]['value'] | null;\r\n }>();\r\n\r\n private readonly _latestClickedButtonValue = signal<{ button: Buttons[number]['value'] } | null>(\r\n null\r\n );\r\n\r\n protected readonly contentComponentInputs = computed(() => {\r\n const component = this.typedContent().component;\r\n if (!component || !(component.prototype instanceof PromptDialogBase)) {\r\n return {};\r\n }\r\n const latestButton = this._latestClickedButtonValue();\r\n if (latestButton === null) {\r\n return {};\r\n }\r\n return {\r\n ngnPromptDialogResolveFn: {\r\n button: latestButton.button,\r\n fn: (result: T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) => {\r\n this.promptResult.emit({\r\n value: result,\r\n button: latestButton.button,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n this.open.set(false);\r\n },\r\n },\r\n };\r\n });\r\n\r\n /**\r\n * How a modal dialog can be closed by the user.\r\n */\r\n protected readonly modalClosedBy = computed(() => toModalCloseBy(this.closeBy()));\r\n /**\r\n * How a popover dialog can be closed by the user.\r\n */\r\n protected readonly popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n protected readonly typedContent = computed<TypedContent>(() => {\r\n const content = this.contentTemplate();\r\n if (!content) {\r\n return {};\r\n }\r\n if (typeof content === 'string') {\r\n return { string: content };\r\n } else if (content instanceof TemplateRef) {\r\n return { template: content };\r\n } else {\r\n return { component: content };\r\n }\r\n });\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n if (untracked(this.modal)) {\r\n this._dialogElement().nativeElement.showModal();\r\n } else {\r\n this._dialogElement().nativeElement.showPopover();\r\n }\r\n } else {\r\n this._dialogElement().nativeElement.close();\r\n this._dialogElement().nativeElement.hidePopover();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Different cancel handlers for different event types. Required for modal and popover dialogs.\r\n */\r\n protected onCancel(event?: ToggleEvent | KeyboardEvent): void {\r\n if (event instanceof KeyboardEvent) {\r\n // Modal dialogs handle Escape via the native (cancel) event\r\n if (this.modal()) {\r\n return;\r\n }\r\n if (event.key !== 'Escape' || (event.target as HTMLElement).tagName !== 'DIALOG') {\r\n // TODO: limitation: when focus is inside a different element, we cannot know if it is safe to close, so we skip it\r\n return;\r\n }\r\n if (this.closeBy() === 'escape') {\r\n this.setStateToClosed();\r\n }\r\n return;\r\n }\r\n\r\n if (event instanceof ToggleEvent && event.newState !== 'closed') {\r\n // This is also just for popover dialogs\r\n return;\r\n }\r\n /**\r\n * In case the dialog is closed with the same click event that tries to open it again immediately,\r\n * we need to wait for the next animation frame to avoid a stuck state where the outside thinks it's opened\r\n * but inside `open` is set to false.\r\n */\r\n requestAnimationFrame(() => {\r\n this.setStateToClosed();\r\n });\r\n }\r\n\r\n private setStateToClosed() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n\r\n private cancelPrompt() {\r\n if (this.contentComponentInputs()) {\r\n this.promptResult.emit({\r\n value: null,\r\n button: null,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n }\r\n }\r\n\r\n protected closeWithButton() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n }\r\n\r\n /**\r\n * Opens the dialog. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show(): void {\r\n this.open.set(true);\r\n }\r\n public hide(): void {\r\n this.open.set(false);\r\n }\r\n public toggle(): void {\r\n this.open.update(open => !open);\r\n }\r\n\r\n protected singleButtonTypeFix(button: unknown): Buttons[number] {\r\n return button as Buttons[number];\r\n }\r\n\r\n protected buttonClick(button: Buttons[number]['value']): void {\r\n this.buttonClicked.emit(button);\r\n this._latestClickedButtonValue.set({ button });\r\n }\r\n}\r\n","<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'dialog-close'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';\r\nimport { setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { NgnDialog } from './dialog';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogConfig } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\nexport type DialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n buttonClicked: Observable<Buttons[number]['value'] | null>;\r\n};\r\n\r\nexport type PromptDialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n result: Promise<{\r\n value: T extends PromptDialogBase<infer D, Buttons> ? D : never | null;\r\n button: Buttons[number]['value'] | null;\r\n }>;\r\n};\r\n\r\nfunction applyDialogConfig<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(dialogRef: ComponentRef<NgnDialog<T, Buttons>>, config: DialogConfig<T, Buttons>): void {\r\n if (config.title !== undefined) {\r\n setComponentInput(dialogRef, 'title', config.title);\r\n }\r\n if (config.size !== undefined) {\r\n setComponentInput(dialogRef, 'size', config.size);\r\n }\r\n if (config.modal !== undefined) {\r\n setComponentInput(dialogRef, 'modal', config.modal);\r\n }\r\n if (config.footerButtons !== undefined) {\r\n setComponentInput(dialogRef, 'footerButtons', config.footerButtons);\r\n }\r\n if (config.closeBy !== undefined) {\r\n setComponentInput(dialogRef, 'closeBy', config.closeBy);\r\n }\r\n if (config.content !== undefined) {\r\n setComponentInput(dialogRef, 'content', config.content);\r\n }\r\n if (config.movable !== undefined) {\r\n setComponentInput(dialogRef, 'movable', config.movable);\r\n }\r\n if (config.resizable !== undefined) {\r\n setComponentInput(dialogRef, 'resizable', config.resizable);\r\n }\r\n}\r\n\r\nexport function createDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(\r\n injector: Injector,\r\n config: DialogConfig<T, Buttons>\r\n): T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons> {\r\n type ButtonValues = Buttons[number]['value'];\r\n\r\n const viewContainerRef = injector.get(ViewContainerRef);\r\n const dialogRef = viewContainerRef.createComponent(NgnDialog, {\r\n injector,\r\n }) as unknown as ComponentRef<NgnDialog<T, Buttons>>;\r\n\r\n applyDialogConfig(dialogRef, config);\r\n dialogRef.instance.buttonClicked.subscribe(value => {\r\n buttonClicked.next(value);\r\n });\r\n\r\n const buttonClicked = new Subject<ButtonValues | null>();\r\n dialogRef.onDestroy(() => {\r\n buttonClicked.complete();\r\n });\r\n\r\n if (\r\n typeof config.content === 'function' &&\r\n config.content.prototype instanceof PromptDialogBase\r\n ) {\r\n const _result = Promise.withResolvers<{\r\n value: (T extends PromptDialogBase<infer D, ButtonValues> ? D : never) | null;\r\n button: ButtonValues | null;\r\n }>();\r\n\r\n (dialogRef.instance as unknown as NgnDialog<T, Buttons>).promptResult.subscribe(result => {\r\n _result.resolve(result);\r\n });\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n result: _result.promise,\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n }\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n buttonClicked: buttonClicked.asObservable(),\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|