@ngneers/controls 0.0.1-pre4 → 0.0.1-pre6
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 +32 -32
- package/fesm2022/ngneers-controls-accordion.mjs.map +1 -1
- package/fesm2022/ngneers-controls-api-ng.mjs +19 -19
- package/fesm2022/ngneers-controls-api-ng.mjs.map +1 -1
- package/fesm2022/ngneers-controls-api-resize.mjs +706 -0
- package/fesm2022/ngneers-controls-api-resize.mjs.map +1 -0
- package/fesm2022/ngneers-controls-avatar.mjs +13 -13
- package/fesm2022/ngneers-controls-avatar.mjs.map +1 -1
- package/fesm2022/ngneers-controls-base.mjs +89 -64
- package/fesm2022/ngneers-controls-base.mjs.map +1 -1
- package/fesm2022/ngneers-controls-breadcrumb.mjs +18 -18
- package/fesm2022/ngneers-controls-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngneers-controls-button-group.mjs +8 -8
- package/fesm2022/ngneers-controls-button-group.mjs.map +1 -1
- package/fesm2022/ngneers-controls-button.mjs +16 -10
- package/fesm2022/ngneers-controls-button.mjs.map +1 -1
- package/fesm2022/{ngneers-controls-calendar-time-C7UnIFzU.mjs → ngneers-controls-calendar-time-Bzlv9Vkn.mjs} +9 -9
- package/fesm2022/{ngneers-controls-calendar-time-C7UnIFzU.mjs.map → ngneers-controls-calendar-time-Bzlv9Vkn.mjs.map} +1 -1
- package/fesm2022/ngneers-controls-calendar.mjs +54 -54
- package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
- package/fesm2022/ngneers-controls-checkbox.mjs +9 -9
- package/fesm2022/ngneers-controls-checkbox.mjs.map +1 -1
- package/fesm2022/ngneers-controls-chip.mjs +6 -6
- package/fesm2022/ngneers-controls-chip.mjs.map +1 -1
- package/fesm2022/ngneers-controls-defer.mjs +10 -10
- package/fesm2022/ngneers-controls-defer.mjs.map +1 -1
- package/fesm2022/ngneers-controls-dialog.mjs +37 -39
- package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
- package/fesm2022/ngneers-controls-directives.mjs +45 -39
- package/fesm2022/ngneers-controls-directives.mjs.map +1 -1
- package/fesm2022/ngneers-controls-drawer.mjs +28 -28
- package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
- package/fesm2022/ngneers-controls-edit-inplace.mjs +15 -15
- package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
- package/fesm2022/ngneers-controls-filter.mjs +192 -44
- package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
- package/fesm2022/{ngneers-controls-i18n-de-CdTPeBiR.mjs → ngneers-controls-i18n-de-CF0xTWEX.mjs} +9 -5
- package/fesm2022/ngneers-controls-i18n-de-CF0xTWEX.mjs.map +1 -0
- package/fesm2022/{ngneers-controls-i18n-en-Cfp2pOLY.mjs → ngneers-controls-i18n-en-8B7xAjH2.mjs} +9 -5
- package/fesm2022/ngneers-controls-i18n-en-8B7xAjH2.mjs.map +1 -0
- package/fesm2022/ngneers-controls-i18n.mjs +5 -5
- package/fesm2022/ngneers-controls-i18n.mjs.map +1 -1
- package/fesm2022/ngneers-controls-icon.mjs +10 -10
- package/fesm2022/ngneers-controls-icon.mjs.map +1 -1
- package/fesm2022/ngneers-controls-inplace.mjs +18 -18
- package/fesm2022/ngneers-controls-inplace.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input-field.mjs +15 -15
- package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input-mask.mjs +8 -8
- package/fesm2022/ngneers-controls-input-mask.mjs.map +1 -1
- package/fesm2022/ngneers-controls-input.mjs +7 -6
- package/fesm2022/ngneers-controls-input.mjs.map +1 -1
- package/fesm2022/ngneers-controls-item-view.mjs +33 -33
- package/fesm2022/ngneers-controls-item-view.mjs.map +1 -1
- package/fesm2022/ngneers-controls-list-box.mjs +31 -31
- package/fesm2022/ngneers-controls-list-box.mjs.map +1 -1
- package/fesm2022/ngneers-controls-menu.mjs +32 -32
- package/fesm2022/ngneers-controls-menu.mjs.map +1 -1
- package/fesm2022/ngneers-controls-message.mjs +4 -4
- package/fesm2022/ngneers-controls-message.mjs.map +1 -1
- package/fesm2022/ngneers-controls-paginator.mjs +12 -12
- package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
- package/fesm2022/ngneers-controls-popover.mjs +13 -13
- package/fesm2022/ngneers-controls-popover.mjs.map +1 -1
- package/fesm2022/ngneers-controls-progress.mjs +16 -16
- package/fesm2022/ngneers-controls-progress.mjs.map +1 -1
- package/fesm2022/ngneers-controls-scroller.mjs +74 -39
- package/fesm2022/ngneers-controls-scroller.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select-button.mjs +6 -6
- package/fesm2022/ngneers-controls-select-button.mjs.map +1 -1
- package/fesm2022/ngneers-controls-select.mjs +46 -46
- package/fesm2022/ngneers-controls-select.mjs.map +1 -1
- package/fesm2022/ngneers-controls-slider.mjs +12 -12
- package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
- package/fesm2022/ngneers-controls-spinner.mjs +7 -7
- package/fesm2022/ngneers-controls-spinner.mjs.map +1 -1
- package/fesm2022/ngneers-controls-splitter.mjs +141 -328
- package/fesm2022/ngneers-controls-splitter.mjs.map +1 -1
- package/fesm2022/ngneers-controls-switch.mjs +3 -3
- package/fesm2022/ngneers-controls-table.mjs +1520 -80
- package/fesm2022/ngneers-controls-table.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tabs.mjs +40 -39
- package/fesm2022/ngneers-controls-tabs.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tag.mjs +4 -4
- package/fesm2022/ngneers-controls-tag.mjs.map +1 -1
- package/fesm2022/ngneers-controls-toast.mjs +18 -18
- package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
- package/fesm2022/ngneers-controls-toggle-button.mjs +9 -9
- package/fesm2022/ngneers-controls-toggle-button.mjs.map +1 -1
- package/fesm2022/ngneers-controls-tooltip.mjs +37 -45
- package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
- package/fesm2022/ngneers-controls-utils-ng.mjs +9 -9
- package/fesm2022/ngneers-controls-utils-ng.mjs.map +1 -1
- package/package.json +14 -10
- package/types/ngneers-controls-api-ng.d.ts +2 -2
- package/types/ngneers-controls-api-resize.d.ts +318 -0
- package/types/ngneers-controls-base.d.ts +8 -0
- package/types/ngneers-controls-breadcrumb.d.ts +1 -1
- package/types/ngneers-controls-button.d.ts +13 -8
- package/types/ngneers-controls-calendar.d.ts +5 -1
- package/types/ngneers-controls-checkbox.d.ts +1 -1
- package/types/ngneers-controls-directives.d.ts +7 -1
- package/types/ngneers-controls-drawer.d.ts +4 -0
- package/types/ngneers-controls-edit-inplace.d.ts +4 -0
- package/types/ngneers-controls-filter.d.ts +53 -4
- package/types/ngneers-controls-i18n.d.ts +4 -0
- package/types/ngneers-controls-icon.d.ts +1 -1
- package/types/ngneers-controls-input-field.d.ts +4 -0
- package/types/ngneers-controls-input.d.ts +1 -1
- package/types/ngneers-controls-list-box.d.ts +5 -1
- package/types/ngneers-controls-menu.d.ts +1 -1
- package/types/ngneers-controls-paginator.d.ts +4 -0
- package/types/ngneers-controls-popover.d.ts +1 -1
- package/types/ngneers-controls-scroller.d.ts +12 -2
- package/types/ngneers-controls-select.d.ts +6 -2
- package/types/ngneers-controls-spinner.d.ts +1 -1
- package/types/ngneers-controls-splitter.d.ts +29 -59
- package/types/ngneers-controls-table.d.ts +392 -24
- package/types/ngneers-controls-toast.d.ts +1 -1
- package/types/ngneers-controls-tooltip.d.ts +1 -7
- package/fesm2022/ngneers-controls-i18n-de-CdTPeBiR.mjs.map +0 -1
- package/fesm2022/ngneers-controls-i18n-en-Cfp2pOLY.mjs.map +0 -1
|
@@ -17,42 +17,42 @@ class NgnToggleButton extends ValueControlBase {
|
|
|
17
17
|
* Optional labels for on and off states.
|
|
18
18
|
* If not provided, the {@link label} input will be used.
|
|
19
19
|
*/
|
|
20
|
-
labelOn = input(...(ngDevMode ? [undefined, { debugName: "labelOn" }] : []));
|
|
20
|
+
labelOn = input(...(ngDevMode ? [undefined, { debugName: "labelOn" }] : /* istanbul ignore next */ []));
|
|
21
21
|
/**
|
|
22
22
|
* Optional labels for on and off states.
|
|
23
23
|
* If not provided, the {@link label} input will be used.
|
|
24
24
|
*/
|
|
25
|
-
labelOff = input(...(ngDevMode ? [undefined, { debugName: "labelOff" }] : []));
|
|
25
|
+
labelOff = input(...(ngDevMode ? [undefined, { debugName: "labelOff" }] : /* istanbul ignore next */ []));
|
|
26
26
|
/**
|
|
27
27
|
* Optional icon for the button. Can be used instead of the label or in combination with it.
|
|
28
28
|
* If {@link iconOn} and {@link iconOff} are provided, they will take precedence over this input for their respective states.
|
|
29
29
|
*/
|
|
30
|
-
icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : []));
|
|
30
|
+
icon = input(...(ngDevMode ? [undefined, { debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
31
31
|
/**
|
|
32
32
|
* Optional icons for on and off states.
|
|
33
33
|
* If not provided, the {@link icon} input will be used.
|
|
34
34
|
*/
|
|
35
|
-
iconOn = input(...(ngDevMode ? [undefined, { debugName: "iconOn" }] : []));
|
|
35
|
+
iconOn = input(...(ngDevMode ? [undefined, { debugName: "iconOn" }] : /* istanbul ignore next */ []));
|
|
36
36
|
/**
|
|
37
37
|
* Optional icons for on and off states.
|
|
38
38
|
* If not provided, the {@link icon} input will be used.
|
|
39
39
|
*/
|
|
40
|
-
iconOff = input(...(ngDevMode ? [undefined, { debugName: "iconOff" }] : []));
|
|
40
|
+
iconOff = input(...(ngDevMode ? [undefined, { debugName: "iconOff" }] : /* istanbul ignore next */ []));
|
|
41
41
|
/**
|
|
42
42
|
* If true, the button will always have the width of the longest possible content.
|
|
43
43
|
* @default false
|
|
44
44
|
*/
|
|
45
|
-
fixedWidth = input(false, ...(ngDevMode ? [{ debugName: "fixedWidth" }] : []));
|
|
45
|
+
fixedWidth = input(false, ...(ngDevMode ? [{ debugName: "fixedWidth" }] : /* istanbul ignore next */ []));
|
|
46
46
|
toggle() {
|
|
47
47
|
if (this.disabled() || this.readonly()) {
|
|
48
48
|
return;
|
|
49
49
|
}
|
|
50
50
|
this.value.update(v => !v);
|
|
51
51
|
}
|
|
52
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
53
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.
|
|
52
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnToggleButton, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
53
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.2", type: NgnToggleButton, isStandalone: true, selector: "ngn-toggle-button", inputs: { labelOn: { classPropertyName: "labelOn", publicName: "labelOn", isSignal: true, isRequired: false, transformFunction: null }, labelOff: { classPropertyName: "labelOff", publicName: "labelOff", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconOn: { classPropertyName: "iconOn", publicName: "iconOn", isSignal: true, isRequired: false, transformFunction: null }, iconOff: { classPropertyName: "iconOff", publicName: "iconOff", isSignal: true, isRequired: false, transformFunction: null }, fixedWidth: { classPropertyName: "fixedWidth", publicName: "fixedWidth", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnToggleButton)], usesInheritance: true, ngImport: i0, template: "<button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'button'\"\r\n (click)=\"toggle()\"\r\n [disabled]=\"disabled()\"\r\n [ariaReadOnly]=\"readonly()\"\r\n (blur)=\"touched.set(true)\"\r\n>\r\n <span [ptInt]=\"this\" [ptClass]=\"'label'\">\r\n @let renderedIcon = (value() ? iconOn() : iconOff()) ?? icon();\r\n @if (renderedIcon) {\r\n <ngn-icon [icon]=\"renderedIcon\" />\r\n }\r\n {{ (value() ? labelOn() : labelOff()) ?? label() }}\r\n </span>\r\n @if (fixedWidth()) {\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder-active'\">\r\n @let renderedIconOn = iconOn() ?? icon();\r\n @if (renderedIconOn) {\r\n <ngn-icon [icon]=\"renderedIconOn\" />\r\n }\r\n {{ labelOn() ?? label() }}\r\n </span>\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder'\">\r\n @let renderedIconOff = iconOff() ?? icon();\r\n @if (renderedIconOff) {\r\n <ngn-icon [icon]=\"renderedIconOff\" />\r\n }\r\n {{ labelOff() ?? label() }}\r\n </span>\r\n }\r\n</button>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
54
54
|
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnToggleButton, decorators: [{
|
|
56
56
|
type: Component,
|
|
57
57
|
args: [{ selector: 'ngn-toggle-button', providers: [provideSelf(NgnToggleButton)], changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgnPt, NgnIcon], template: "<button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'button'\"\r\n (click)=\"toggle()\"\r\n [disabled]=\"disabled()\"\r\n [ariaReadOnly]=\"readonly()\"\r\n (blur)=\"touched.set(true)\"\r\n>\r\n <span [ptInt]=\"this\" [ptClass]=\"'label'\">\r\n @let renderedIcon = (value() ? iconOn() : iconOff()) ?? icon();\r\n @if (renderedIcon) {\r\n <ngn-icon [icon]=\"renderedIcon\" />\r\n }\r\n {{ (value() ? labelOn() : labelOff()) ?? label() }}\r\n </span>\r\n @if (fixedWidth()) {\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder-active'\">\r\n @let renderedIconOn = iconOn() ?? icon();\r\n @if (renderedIconOn) {\r\n <ngn-icon [icon]=\"renderedIconOn\" />\r\n }\r\n {{ labelOn() ?? label() }}\r\n </span>\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder'\">\r\n @let renderedIconOff = iconOff() ?? icon();\r\n @if (renderedIconOff) {\r\n <ngn-icon [icon]=\"renderedIconOff\" />\r\n }\r\n {{ labelOff() ?? label() }}\r\n </span>\r\n }\r\n</button>\r\n" }]
|
|
58
58
|
}], propDecorators: { labelOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelOn", required: false }] }], labelOff: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelOff", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconOn: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOn", required: false }] }], iconOff: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOff", required: false }] }], fixedWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedWidth", required: false }] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-toggle-button.mjs","sources":["../../src/toggle-button/toggle-button.ts","../../src/toggle-button/toggle-button.html","../../src/toggle-button/ngneers-controls-toggle-button.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { provideSelf, ValueControlBase, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { toggleButtonControlTemplate } from '@ngneers/controls-themes/templates/toggle-button';\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 selector: 'ngn-toggle-button',\r\n providers: [provideSelf(NgnToggleButton)],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgnPt, NgnIcon],\r\n templateUrl: './toggle-button.html',\r\n})\r\nexport class NgnToggleButton extends ValueControlBase<'toggleButton', boolean> {\r\n protected readonly theme = this.injectThemeTemplate(toggleButtonControlTemplate, {\r\n root: true,\r\n active: () => this.value(),\r\n invalid: () => this.invalid(),\r\n });\r\n\r\n /**\r\n * Optional labels for on and off states.\r\n * If not provided, the {@link label} input will be used.\r\n */\r\n public readonly labelOn = input<string>();\r\n /**\r\n * Optional labels for on and off states.\r\n * If not provided, the {@link label} input will be used.\r\n */\r\n public readonly labelOff = input<string>();\r\n /**\r\n * Optional icon for the button. Can be used instead of the label or in combination with it.\r\n * If {@link iconOn} and {@link iconOff} are provided, they will take precedence over this input for their respective states.\r\n */\r\n public readonly icon = input<IconType>();\r\n /**\r\n * Optional icons for on and off states.\r\n * If not provided, the {@link icon} input will be used.\r\n */\r\n public readonly iconOn = input<IconType>();\r\n /**\r\n * Optional icons for on and off states.\r\n * If not provided, the {@link icon} input will be used.\r\n */\r\n public readonly iconOff = input<IconType>();\r\n /**\r\n * If true, the button will always have the width of the longest possible content.\r\n * @default false\r\n */\r\n public readonly fixedWidth = input<boolean>(false);\r\n\r\n public toggle() {\r\n if (this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n this.value.update(v => !v);\r\n }\r\n}\r\n","<button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'button'\"\r\n (click)=\"toggle()\"\r\n [disabled]=\"disabled()\"\r\n [ariaReadOnly]=\"readonly()\"\r\n (blur)=\"touched.set(true)\"\r\n>\r\n <span [ptInt]=\"this\" [ptClass]=\"'label'\">\r\n @let renderedIcon = (value() ? iconOn() : iconOff()) ?? icon();\r\n @if (renderedIcon) {\r\n <ngn-icon [icon]=\"renderedIcon\" />\r\n }\r\n {{ (value() ? labelOn() : labelOff()) ?? label() }}\r\n </span>\r\n @if (fixedWidth()) {\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder-active'\">\r\n @let renderedIconOn = iconOn() ?? icon();\r\n @if (renderedIconOn) {\r\n <ngn-icon [icon]=\"renderedIconOn\" />\r\n }\r\n {{ labelOn() ?? label() }}\r\n </span>\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder'\">\r\n @let renderedIconOff = iconOff() ?? icon();\r\n @if (renderedIconOff) {\r\n <ngn-icon [icon]=\"renderedIconOff\" />\r\n }\r\n {{ labelOff() ?? label() }}\r\n </span>\r\n }\r\n</button>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAOA;;AAEG;AAQG,MAAO,eAAgB,SAAQ,gBAAyC,CAAA;AACzD,IAAA,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,EAAE;AAC/E,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AAC9B,KAAA,CAAC;AAEF;;;AAGG;IACa,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"ngneers-controls-toggle-button.mjs","sources":["../../src/toggle-button/toggle-button.ts","../../src/toggle-button/toggle-button.html","../../src/toggle-button/ngneers-controls-toggle-button.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { provideSelf, ValueControlBase, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { toggleButtonControlTemplate } from '@ngneers/controls-themes/templates/toggle-button';\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 selector: 'ngn-toggle-button',\r\n providers: [provideSelf(NgnToggleButton)],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [NgnPt, NgnIcon],\r\n templateUrl: './toggle-button.html',\r\n})\r\nexport class NgnToggleButton extends ValueControlBase<'toggleButton', boolean> {\r\n protected readonly theme = this.injectThemeTemplate(toggleButtonControlTemplate, {\r\n root: true,\r\n active: () => this.value(),\r\n invalid: () => this.invalid(),\r\n });\r\n\r\n /**\r\n * Optional labels for on and off states.\r\n * If not provided, the {@link label} input will be used.\r\n */\r\n public readonly labelOn = input<string>();\r\n /**\r\n * Optional labels for on and off states.\r\n * If not provided, the {@link label} input will be used.\r\n */\r\n public readonly labelOff = input<string>();\r\n /**\r\n * Optional icon for the button. Can be used instead of the label or in combination with it.\r\n * If {@link iconOn} and {@link iconOff} are provided, they will take precedence over this input for their respective states.\r\n */\r\n public readonly icon = input<IconType>();\r\n /**\r\n * Optional icons for on and off states.\r\n * If not provided, the {@link icon} input will be used.\r\n */\r\n public readonly iconOn = input<IconType>();\r\n /**\r\n * Optional icons for on and off states.\r\n * If not provided, the {@link icon} input will be used.\r\n */\r\n public readonly iconOff = input<IconType>();\r\n /**\r\n * If true, the button will always have the width of the longest possible content.\r\n * @default false\r\n */\r\n public readonly fixedWidth = input<boolean>(false);\r\n\r\n public toggle() {\r\n if (this.disabled() || this.readonly()) {\r\n return;\r\n }\r\n this.value.update(v => !v);\r\n }\r\n}\r\n","<button\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'button'\"\r\n (click)=\"toggle()\"\r\n [disabled]=\"disabled()\"\r\n [ariaReadOnly]=\"readonly()\"\r\n (blur)=\"touched.set(true)\"\r\n>\r\n <span [ptInt]=\"this\" [ptClass]=\"'label'\">\r\n @let renderedIcon = (value() ? iconOn() : iconOff()) ?? icon();\r\n @if (renderedIcon) {\r\n <ngn-icon [icon]=\"renderedIcon\" />\r\n }\r\n {{ (value() ? labelOn() : labelOff()) ?? label() }}\r\n </span>\r\n @if (fixedWidth()) {\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder-active'\">\r\n @let renderedIconOn = iconOn() ?? icon();\r\n @if (renderedIconOn) {\r\n <ngn-icon [icon]=\"renderedIconOn\" />\r\n }\r\n {{ labelOn() ?? label() }}\r\n </span>\r\n <span inert [ptInt]=\"this\" [ptClass]=\"'placeholder'\">\r\n @let renderedIconOff = iconOff() ?? icon();\r\n @if (renderedIconOff) {\r\n <ngn-icon [icon]=\"renderedIconOff\" />\r\n }\r\n {{ labelOff() ?? label() }}\r\n </span>\r\n }\r\n</button>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -42,93 +42,87 @@ class NgnTooltip extends NgnBase {
|
|
|
42
42
|
theme = null;
|
|
43
43
|
_viewContainerRef = inject(ViewContainerRef);
|
|
44
44
|
_config = inject(NGN_CONFIG);
|
|
45
|
-
_tooltip = signal(null, ...(ngDevMode ? [{ debugName: "_tooltip" }] : []));
|
|
45
|
+
_tooltip = signal(null, ...(ngDevMode ? [{ debugName: "_tooltip" }] : /* istanbul ignore next */ []));
|
|
46
46
|
/**
|
|
47
47
|
* The content of the tooltip, can be a string or a TemplateRef.
|
|
48
48
|
* If the value is falsy, the tooltip will not be shown.
|
|
49
49
|
* @alias ngnTooltip
|
|
50
50
|
*/
|
|
51
|
-
content = input(null, { ...(ngDevMode ? { debugName: "content" } : {}), alias: 'ngnTooltip' });
|
|
52
|
-
/**
|
|
53
|
-
* The CSS class to apply to the tooltip.
|
|
54
|
-
* This can be used to apply custom styles to the tooltip.
|
|
55
|
-
* @alias ngnTooltipStyleClass
|
|
56
|
-
*/
|
|
57
|
-
styleClass = input(null, { ...(ngDevMode ? { debugName: "styleClass" } : {}), alias: 'ngnTooltipStyleClass' });
|
|
51
|
+
content = input(null, { ...(ngDevMode ? { debugName: "content" } : /* istanbul ignore next */ {}), alias: 'ngnTooltip' });
|
|
58
52
|
/**
|
|
59
53
|
* If set to `true`, the tooltip will only be shown if the anchor element is truncated. `""` is equivalent to `true`.
|
|
60
54
|
* @alias ngnTooltipShowOnlyIfTruncated
|
|
61
55
|
* @default false
|
|
62
56
|
*/
|
|
63
|
-
showOnlyIfTruncated = input(false, { ...(ngDevMode ? { debugName: "showOnlyIfTruncated" } : {}), alias: 'ngnTooltipShowOnlyIfTruncated' });
|
|
57
|
+
showOnlyIfTruncated = input(false, { ...(ngDevMode ? { debugName: "showOnlyIfTruncated" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipShowOnlyIfTruncated' });
|
|
64
58
|
/**
|
|
65
59
|
* The size constraints for the tooltip.
|
|
66
60
|
* This can be used to limit the width and height of the tooltip.
|
|
67
61
|
* If not provided, the tooltip is only constrained by the size of the screen.
|
|
68
62
|
* @alias ngnTooltipSize
|
|
69
63
|
*/
|
|
70
|
-
size = input(null, { ...(ngDevMode ? { debugName: "size" } : {}), alias: 'ngnTooltipSize' });
|
|
64
|
+
size = input(null, { ...(ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipSize' });
|
|
71
65
|
/**
|
|
72
66
|
* The options for the tooltip.
|
|
73
67
|
* This is a shorthand for setting multiple options at once.
|
|
74
68
|
* The individual options take precedence over the options set here.
|
|
75
69
|
* @alias ngnTooltipOptions
|
|
76
70
|
*/
|
|
77
|
-
options = input(null, { ...(ngDevMode ? { debugName: "options" } : {}), alias: 'ngnTooltipOptions' });
|
|
71
|
+
options = input(null, { ...(ngDevMode ? { debugName: "options" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipOptions' });
|
|
78
72
|
/**
|
|
79
73
|
* The placement of the tooltip relative to the anchor element.
|
|
80
74
|
* @alias ngnTooltipPlacement
|
|
81
75
|
* @default 'bottom'
|
|
82
76
|
*/
|
|
83
|
-
placement = input(null, { ...(ngDevMode ? { debugName: "placement" } : {}), alias: 'ngnTooltipPlacement' });
|
|
77
|
+
placement = input(null, { ...(ngDevMode ? { debugName: "placement" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipPlacement' });
|
|
84
78
|
/**
|
|
85
79
|
* The offset in Pixels of the tooltip from the anchor element.
|
|
86
80
|
* @alias ngnTooltipOffset
|
|
87
81
|
* @default 4
|
|
88
82
|
*/
|
|
89
|
-
offset = input(null, { ...(ngDevMode ? { debugName: "offset" } : {}), alias: 'ngnTooltipOffset' });
|
|
83
|
+
offset = input(null, { ...(ngDevMode ? { debugName: "offset" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipOffset' });
|
|
90
84
|
/**
|
|
91
85
|
* The delay before the tooltip is shown. If a number is provided, it is interpreted as milliseconds.
|
|
92
86
|
* @alias ngnTooltipShowDelay
|
|
93
87
|
* @default '0.5s'
|
|
94
88
|
*/
|
|
95
|
-
showDelay = input(null, { ...(ngDevMode ? { debugName: "showDelay" } : {}), alias: 'ngnTooltipShowDelay' });
|
|
89
|
+
showDelay = input(null, { ...(ngDevMode ? { debugName: "showDelay" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipShowDelay' });
|
|
96
90
|
/**
|
|
97
91
|
* The delay before the tooltip is hidden. If a number is provided, it is interpreted as milliseconds.
|
|
98
92
|
* @alias ngnTooltipHideDelay
|
|
99
93
|
* @default '0.1s'
|
|
100
94
|
*/
|
|
101
|
-
hideDelay = input(null, { ...(ngDevMode ? { debugName: "hideDelay" } : {}), alias: 'ngnTooltipHideDelay' });
|
|
95
|
+
hideDelay = input(null, { ...(ngDevMode ? { debugName: "hideDelay" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipHideDelay' });
|
|
102
96
|
/**
|
|
103
97
|
* Whether to show an arrow pointing to the anchor element. `""` is equivalent to `true`.
|
|
104
98
|
* @alias ngnTooltipShowArrow
|
|
105
99
|
* @default true
|
|
106
100
|
*/
|
|
107
|
-
showArrow = input(null, { ...(ngDevMode ? { debugName: "showArrow" } : {}), alias: 'ngnTooltipShowArrow' });
|
|
101
|
+
showArrow = input(null, { ...(ngDevMode ? { debugName: "showArrow" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipShowArrow' });
|
|
108
102
|
/**
|
|
109
103
|
* Shows the tooltip on hover.
|
|
110
104
|
* @alias ngnTooltipShowOnHover
|
|
111
105
|
* @default true
|
|
112
106
|
*/
|
|
113
|
-
showOnHover = input(null, { ...(ngDevMode ? { debugName: "showOnHover" } : {}), alias: 'ngnTooltipShowOnHover' });
|
|
107
|
+
showOnHover = input(null, { ...(ngDevMode ? { debugName: "showOnHover" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipShowOnHover' });
|
|
114
108
|
/**
|
|
115
109
|
* Shows the tooltip on focus.
|
|
116
110
|
* @alias ngnTooltipShowOnFocus
|
|
117
111
|
* @default true
|
|
118
112
|
*/
|
|
119
|
-
showOnFocus = input(null, { ...(ngDevMode ? { debugName: "showOnFocus" } : {}), alias: 'ngnTooltipShowOnFocus' });
|
|
113
|
+
showOnFocus = input(null, { ...(ngDevMode ? { debugName: "showOnFocus" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipShowOnFocus' });
|
|
120
114
|
/**
|
|
121
115
|
* Hides the tooltip (without delay) when the mouse hovers over the tooltip.
|
|
122
116
|
* @alias ngnTooltipHideOnTooltipHover
|
|
123
117
|
* @default false
|
|
124
118
|
*/
|
|
125
|
-
hideOnTooltipHover = input(null, { ...(ngDevMode ? { debugName: "hideOnTooltipHover" } : {}), alias: 'ngnTooltipHideOnTooltipHover' });
|
|
119
|
+
hideOnTooltipHover = input(null, { ...(ngDevMode ? { debugName: "hideOnTooltipHover" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipHideOnTooltipHover' });
|
|
126
120
|
/**
|
|
127
121
|
* Hides the tooltip (without delay) when the user clicks on the tooltip.
|
|
128
122
|
* @alias ngnTooltipHideOnClick
|
|
129
123
|
* @default true
|
|
130
124
|
*/
|
|
131
|
-
hideOnClick = input(null, { ...(ngDevMode ? { debugName: "hideOnClick" } : {}), alias: 'ngnTooltipHideOnClick' });
|
|
125
|
+
hideOnClick = input(null, { ...(ngDevMode ? { debugName: "hideOnClick" } : /* istanbul ignore next */ {}), alias: 'ngnTooltipHideOnClick' });
|
|
132
126
|
effectiveOptions = computed(() => {
|
|
133
127
|
const defaults = this._config.defaults.tooltip;
|
|
134
128
|
return {
|
|
@@ -144,8 +138,8 @@ class NgnTooltip extends NgnBase {
|
|
|
144
138
|
defaults.hideOnTooltipHover) !== false,
|
|
145
139
|
hideOnClick: (this.hideOnClick() ?? this.options()?.hideOnClick ?? defaults.hideOnClick) !== false,
|
|
146
140
|
};
|
|
147
|
-
}, ...(ngDevMode ? [{ debugName: "effectiveOptions" }] : []));
|
|
148
|
-
tooltip = computed(() => this._tooltip()?.instance, ...(ngDevMode ? [{ debugName: "tooltip" }] : []));
|
|
141
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveOptions" }] : /* istanbul ignore next */ []));
|
|
142
|
+
tooltip = computed(() => this._tooltip()?.instance, ...(ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []));
|
|
149
143
|
constructor() {
|
|
150
144
|
super();
|
|
151
145
|
const abortSignal = abortSignalOnDestroy();
|
|
@@ -166,7 +160,6 @@ class NgnTooltip extends NgnBase {
|
|
|
166
160
|
if (tooltip)
|
|
167
161
|
this.updateContent(tooltip);
|
|
168
162
|
});
|
|
169
|
-
effect(() => this._tooltip()?.setInput('styleClass', this.styleClass()));
|
|
170
163
|
effect(() => this._tooltip()?.setInput('showOnlyIfTruncated', this.showOnlyIfTruncated()));
|
|
171
164
|
effect(() => this._tooltip()?.setInput('size', this.size()));
|
|
172
165
|
effect(() => this._tooltip()?.setInput('options', this.effectiveOptions()));
|
|
@@ -216,7 +209,6 @@ class NgnTooltip extends NgnBase {
|
|
|
216
209
|
tooltip = this._viewContainerRef.createComponent(TooltipComponent);
|
|
217
210
|
tooltip.setInput('anchor', this.element.nativeElement);
|
|
218
211
|
this.updateContent(tooltip);
|
|
219
|
-
tooltip.setInput('styleClass', this.styleClass());
|
|
220
212
|
tooltip.setInput('showOnlyIfTruncated', this.showOnlyIfTruncated());
|
|
221
213
|
tooltip.setInput('size', this.size());
|
|
222
214
|
tooltip.setInput('options', this.effectiveOptions());
|
|
@@ -235,17 +227,17 @@ class NgnTooltip extends NgnBase {
|
|
|
235
227
|
tooltip.setInput('content', null);
|
|
236
228
|
}
|
|
237
229
|
}
|
|
238
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
239
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.
|
|
230
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
231
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.2", type: NgnTooltip, isStandalone: true, selector: "[ngnTooltip]", inputs: { content: { classPropertyName: "content", publicName: "ngnTooltip", isSignal: true, isRequired: false, transformFunction: null }, showOnlyIfTruncated: { classPropertyName: "showOnlyIfTruncated", publicName: "ngnTooltipShowOnlyIfTruncated", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "ngnTooltipSize", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "ngnTooltipOptions", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "ngnTooltipPlacement", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "ngnTooltipOffset", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "ngnTooltipShowDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "ngnTooltipHideDelay", isSignal: true, isRequired: false, transformFunction: null }, showArrow: { classPropertyName: "showArrow", publicName: "ngnTooltipShowArrow", isSignal: true, isRequired: false, transformFunction: null }, showOnHover: { classPropertyName: "showOnHover", publicName: "ngnTooltipShowOnHover", isSignal: true, isRequired: false, transformFunction: null }, showOnFocus: { classPropertyName: "showOnFocus", publicName: "ngnTooltipShowOnFocus", isSignal: true, isRequired: false, transformFunction: null }, hideOnTooltipHover: { classPropertyName: "hideOnTooltipHover", publicName: "ngnTooltipHideOnTooltipHover", isSignal: true, isRequired: false, transformFunction: null }, hideOnClick: { classPropertyName: "hideOnClick", publicName: "ngnTooltipHideOnClick", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideSelf(NgnTooltip)], exportAs: ["ngnTooltip"], usesInheritance: true, ngImport: i0 });
|
|
240
232
|
}
|
|
241
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
233
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnTooltip, decorators: [{
|
|
242
234
|
type: Directive,
|
|
243
235
|
args: [{
|
|
244
236
|
selector: '[ngnTooltip]',
|
|
245
237
|
exportAs: 'ngnTooltip',
|
|
246
238
|
providers: [provideSelf(NgnTooltip)],
|
|
247
239
|
}]
|
|
248
|
-
}], ctorParameters: () => [], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltip", required: false }] }],
|
|
240
|
+
}], ctorParameters: () => [], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltip", required: false }] }], showOnlyIfTruncated: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipShowOnlyIfTruncated", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipSize", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipOptions", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipPlacement", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipOffset", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipShowDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipHideDelay", required: false }] }], showArrow: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipShowArrow", required: false }] }], showOnHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipShowOnHover", required: false }] }], showOnFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipShowOnFocus", required: false }] }], hideOnTooltipHover: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipHideOnTooltipHover", required: false }] }], hideOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "ngnTooltipHideOnClick", required: false }] }] } });
|
|
249
241
|
class TooltipComponent extends NgnBase {
|
|
250
242
|
_showHideTimeout;
|
|
251
243
|
theme = this.injectThemeTemplate(tooltipControlTemplate, {
|
|
@@ -257,43 +249,43 @@ class TooltipComponent extends NgnBase {
|
|
|
257
249
|
/**
|
|
258
250
|
* The anchor element to which the tooltip is attached.
|
|
259
251
|
*/
|
|
260
|
-
anchor = input.required(...(ngDevMode ? [{ debugName: "anchor" }] : []));
|
|
252
|
+
anchor = input.required(...(ngDevMode ? [{ debugName: "anchor" }] : /* istanbul ignore next */ []));
|
|
261
253
|
/**
|
|
262
254
|
* The text content of the tooltip.
|
|
263
255
|
*/
|
|
264
|
-
text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : []));
|
|
256
|
+
text = input(...(ngDevMode ? [undefined, { debugName: "text" }] : /* istanbul ignore next */ []));
|
|
265
257
|
/**
|
|
266
258
|
* The content template of the tooltip.
|
|
267
259
|
*/
|
|
268
|
-
content = input(...(ngDevMode ? [undefined, { debugName: "content" }] : []));
|
|
260
|
+
content = input(...(ngDevMode ? [undefined, { debugName: "content" }] : /* istanbul ignore next */ []));
|
|
269
261
|
/**
|
|
270
262
|
* If set to `true`, the tooltip will only be shown if the anchor element is truncated. `""` is equivalent to `true`.
|
|
271
263
|
* @default `false`
|
|
272
264
|
*/
|
|
273
|
-
showOnlyIfTruncated = input(false, ...(ngDevMode ? [{ debugName: "showOnlyIfTruncated" }] : []));
|
|
265
|
+
showOnlyIfTruncated = input(false, ...(ngDevMode ? [{ debugName: "showOnlyIfTruncated" }] : /* istanbul ignore next */ []));
|
|
274
266
|
/**
|
|
275
267
|
* The size constraints for the tooltip.
|
|
276
268
|
* This can be used to limit the width and height of the tooltip.
|
|
277
269
|
* If not provided, the tooltip is only constrained by the size of the screen.
|
|
278
270
|
*/
|
|
279
|
-
size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
|
|
271
|
+
size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : /* istanbul ignore next */ []));
|
|
280
272
|
/**
|
|
281
273
|
* The options for the tooltip.
|
|
282
274
|
*
|
|
283
275
|
*/
|
|
284
|
-
options = input(this._config.defaults.tooltip, ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
285
|
-
showDelayMs = computed(() => getTimeSpanMilliseconds(this.options().showDelay), ...(ngDevMode ? [{ debugName: "showDelayMs" }] : []));
|
|
286
|
-
hideDelayMs = computed(() => getTimeSpanMilliseconds(this.options().hideDelay), ...(ngDevMode ? [{ debugName: "hideDelayMs" }] : []));
|
|
287
|
-
position = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "position" }] : []));
|
|
288
|
-
positionClass = signal('', ...(ngDevMode ? [{ debugName: "positionClass" }] : []));
|
|
289
|
-
relativeAnchorElementPosition = signal(undefined, ...(ngDevMode ? [{ debugName: "relativeAnchorElementPosition" }] : []));
|
|
290
|
-
_isShown = signal(false, ...(ngDevMode ? [{ debugName: "_isShown" }] : []));
|
|
291
|
-
_isClosing = signal(false, ...(ngDevMode ? [{ debugName: "_isClosing" }] : []));
|
|
276
|
+
options = input(this._config.defaults.tooltip, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
277
|
+
showDelayMs = computed(() => getTimeSpanMilliseconds(this.options().showDelay), ...(ngDevMode ? [{ debugName: "showDelayMs" }] : /* istanbul ignore next */ []));
|
|
278
|
+
hideDelayMs = computed(() => getTimeSpanMilliseconds(this.options().hideDelay), ...(ngDevMode ? [{ debugName: "hideDelayMs" }] : /* istanbul ignore next */ []));
|
|
279
|
+
position = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
280
|
+
positionClass = signal('', ...(ngDevMode ? [{ debugName: "positionClass" }] : /* istanbul ignore next */ []));
|
|
281
|
+
relativeAnchorElementPosition = signal(undefined, ...(ngDevMode ? [{ debugName: "relativeAnchorElementPosition" }] : /* istanbul ignore next */ []));
|
|
282
|
+
_isShown = signal(false, ...(ngDevMode ? [{ debugName: "_isShown" }] : /* istanbul ignore next */ []));
|
|
283
|
+
_isClosing = signal(false, ...(ngDevMode ? [{ debugName: "_isClosing" }] : /* istanbul ignore next */ []));
|
|
292
284
|
id = generateElementId();
|
|
293
285
|
isShown = this._isShown.asReadonly();
|
|
294
286
|
isClosing = this._isClosing.asReadonly();
|
|
295
287
|
_defaultContentTemplate = viewChild.required('defaultContentTemplate');
|
|
296
|
-
contentTemplate = computed(() => this.content() ?? this._defaultContentTemplate(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : []));
|
|
288
|
+
contentTemplate = computed(() => this.content() ?? this._defaultContentTemplate(), ...(ngDevMode ? [{ debugName: "contentTemplate" }] : /* istanbul ignore next */ []));
|
|
297
289
|
_autoPos = computedWithPrevious(prev => {
|
|
298
290
|
prev?.stop();
|
|
299
291
|
const element = this.element.nativeElement;
|
|
@@ -417,10 +409,10 @@ class TooltipComponent extends NgnBase {
|
|
|
417
409
|
toPixels(value) {
|
|
418
410
|
return value !== undefined ? `${value}px` : undefined;
|
|
419
411
|
}
|
|
420
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
421
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.
|
|
412
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
413
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.2", type: TooltipComponent, isStandalone: true, selector: "ngn-tooltip", inputs: { anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: true, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, showOnlyIfTruncated: { classPropertyName: "showOnlyIfTruncated", publicName: "showOnlyIfTruncated", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "toggle": "onToggle($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "click": "onClick($event)" }, properties: { "class": "positionClass()", "style.--anchor-start": "toPixels(relativeAnchorElementPosition()?.start)", "style.--anchor-center": "toPixels(relativeAnchorElementPosition()?.center)", "style.--anchor-end": "toPixels(relativeAnchorElementPosition()?.end)", "style.left": "toPixels(position().x)", "style.top": "toPixels(position().y)", "attr.popover": "'hint'", "attr.id": "id", "attr.role": "'tooltip'" } }, providers: [provideSelf(TooltipComponent)], viewQueries: [{ propertyName: "_defaultContentTemplate", first: true, predicate: ["defaultContentTemplate"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ngn-defer [lazyContent]=\"contentTemplate()\" [open]=\"isShown()\" [cache]=\"false\"></ngn-defer>\r\n</div>\r\n\r\n<ng-template #defaultContentTemplate>\r\n <span [ptInt]=\"this\" [ptClass]=\"'text'\">{{ text() }}</span>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
422
414
|
}
|
|
423
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
415
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: TooltipComponent, decorators: [{
|
|
424
416
|
type: Component,
|
|
425
417
|
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ngn-tooltip', imports: [NgnPt, NgnDefer], providers: [provideSelf(TooltipComponent)], host: {
|
|
426
418
|
'[class]': `positionClass()`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngneers-controls-tooltip.mjs","sources":["../../src/tooltip/relative-anchor-element-position.ts","../../src/tooltip/tooltip.ts","../../src/tooltip/tooltip.html","../../src/tooltip/ngneers-controls-tooltip.ts"],"sourcesContent":["import type { Middleware, Placement } from '@floating-ui/dom';\r\n\r\nexport type RelativeAnchorElementPositionData = {\r\n start: number;\r\n center: number;\r\n end: number;\r\n};\r\n\r\nexport const relativeAnchorElementPosition: Middleware = {\r\n name: 'relativeAnchorElementPosition',\r\n async fn(state) {\r\n const { placement, rects } = state;\r\n\r\n const axis = getAxis(placement);\r\n const axisSize = axis === 'x' ? 'width' : 'height';\r\n\r\n return {\r\n data: {\r\n start: rects.reference[axis] - state[axis],\r\n center: rects.reference[axis] + rects.reference[axisSize] / 2 - state[axis],\r\n end: rects.reference[axis] + rects.reference[axisSize] - state[axis],\r\n } satisfies RelativeAnchorElementPositionData,\r\n };\r\n },\r\n};\r\n\r\nfunction getAxis(placement: Placement): 'x' | 'y' {\r\n switch (placement.split('-')[0]) {\r\n case 'top':\r\n case 'bottom':\r\n return 'x';\r\n case 'left':\r\n case 'right':\r\n return 'y';\r\n default:\r\n throw new Error(`Unknown placement: ${placement}`);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ComponentRef,\r\n computed,\r\n Directive,\r\n DOCUMENT,\r\n effect,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n abortSignalOnDestroy,\r\n autoPositionElement,\r\n type AutoPositioningHandle,\r\n NGN_CONFIG,\r\n type PositioningSizeConstraints,\r\n splitPlacement,\r\n type TooltipOptions,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { getTimeSpanMilliseconds, notNullish, type TimeSpan } from '@ngneers/controls/utils';\r\nimport { computedWithPrevious, generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { tooltipControlTemplate } from '@ngneers/controls-themes/templates/tooltip';\r\n\r\nimport {\r\n relativeAnchorElementPosition,\r\n type RelativeAnchorElementPositionData,\r\n} from './relative-anchor-element-position';\r\n\r\nimport type { Placement } from '@floating-ui/dom';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Directive({\r\n selector: '[ngnTooltip]',\r\n exportAs: 'ngnTooltip',\r\n providers: [provideSelf(NgnTooltip)],\r\n})\r\nexport class NgnTooltip extends NgnBase<'tooltip'> implements OnDestroy {\r\n protected readonly theme = null;\r\n private readonly _viewContainerRef = inject(ViewContainerRef);\r\n private readonly _config = inject(NGN_CONFIG);\r\n private readonly _tooltip = signal<ComponentRef<TooltipComponent> | null>(null);\r\n\r\n /**\r\n * The content of the tooltip, can be a string or a TemplateRef.\r\n * If the value is falsy, the tooltip will not be shown.\r\n * @alias ngnTooltip\r\n */\r\n public readonly content = input<TemplateRef<unknown> | string | null | undefined>(null, {\r\n alias: 'ngnTooltip',\r\n });\r\n /**\r\n * The CSS class to apply to the tooltip.\r\n * This can be used to apply custom styles to the tooltip.\r\n * @alias ngnTooltipStyleClass\r\n */\r\n public readonly styleClass = input<string | null | undefined>(null, {\r\n alias: 'ngnTooltipStyleClass',\r\n });\r\n /**\r\n * If set to `true`, the tooltip will only be shown if the anchor element is truncated. `\"\"` is equivalent to `true`.\r\n * @alias ngnTooltipShowOnlyIfTruncated\r\n * @default false\r\n */\r\n public readonly showOnlyIfTruncated = input<boolean | ''>(false, {\r\n alias: 'ngnTooltipShowOnlyIfTruncated',\r\n });\r\n /**\r\n * The size constraints for the tooltip.\r\n * This can be used to limit the width and height of the tooltip.\r\n * If not provided, the tooltip is only constrained by the size of the screen.\r\n * @alias ngnTooltipSize\r\n */\r\n public readonly size = input<PositioningSizeConstraints | null | undefined>(null, {\r\n alias: 'ngnTooltipSize',\r\n });\r\n\r\n /**\r\n * The options for the tooltip.\r\n * This is a shorthand for setting multiple options at once.\r\n * The individual options take precedence over the options set here.\r\n * @alias ngnTooltipOptions\r\n */\r\n public readonly options = input<Partial<TooltipOptions> | null | undefined>(null, {\r\n alias: 'ngnTooltipOptions',\r\n });\r\n /**\r\n * The placement of the tooltip relative to the anchor element.\r\n * @alias ngnTooltipPlacement\r\n * @default 'bottom'\r\n */\r\n public readonly placement = input<Placement | null | undefined>(null, {\r\n alias: 'ngnTooltipPlacement',\r\n });\r\n /**\r\n * The offset in Pixels of the tooltip from the anchor element.\r\n * @alias ngnTooltipOffset\r\n * @default 4\r\n */\r\n public readonly offset = input<number | null | undefined>(null, {\r\n alias: 'ngnTooltipOffset',\r\n });\r\n /**\r\n * The delay before the tooltip is shown. If a number is provided, it is interpreted as milliseconds.\r\n * @alias ngnTooltipShowDelay\r\n * @default '0.5s'\r\n */\r\n public readonly showDelay = input<TimeSpan | null | undefined>(null, {\r\n alias: 'ngnTooltipShowDelay',\r\n });\r\n /**\r\n * The delay before the tooltip is hidden. If a number is provided, it is interpreted as milliseconds.\r\n * @alias ngnTooltipHideDelay\r\n * @default '0.1s'\r\n */\r\n public readonly hideDelay = input<TimeSpan | null | undefined>(null, {\r\n alias: 'ngnTooltipHideDelay',\r\n });\r\n /**\r\n * Whether to show an arrow pointing to the anchor element. `\"\"` is equivalent to `true`.\r\n * @alias ngnTooltipShowArrow\r\n * @default true\r\n */\r\n public readonly showArrow = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipShowArrow',\r\n });\r\n /**\r\n * Shows the tooltip on hover.\r\n * @alias ngnTooltipShowOnHover\r\n * @default true\r\n */\r\n public readonly showOnHover = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipShowOnHover',\r\n });\r\n /**\r\n * Shows the tooltip on focus.\r\n * @alias ngnTooltipShowOnFocus\r\n * @default true\r\n */\r\n public readonly showOnFocus = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipShowOnFocus',\r\n });\r\n /**\r\n * Hides the tooltip (without delay) when the mouse hovers over the tooltip.\r\n * @alias ngnTooltipHideOnTooltipHover\r\n * @default false\r\n */\r\n public readonly hideOnTooltipHover = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipHideOnTooltipHover',\r\n });\r\n /**\r\n * Hides the tooltip (without delay) when the user clicks on the tooltip.\r\n * @alias ngnTooltipHideOnClick\r\n * @default true\r\n */\r\n public readonly hideOnClick = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipHideOnClick',\r\n });\r\n\r\n public readonly effectiveOptions = computed<TooltipOptions>(() => {\r\n const defaults = this._config.defaults.tooltip;\r\n return {\r\n placement: this.placement() ?? this.options()?.placement ?? defaults.placement,\r\n offset: this.offset() ?? this.options()?.offset ?? defaults.offset,\r\n showDelay: this.showDelay() ?? this.options()?.showDelay ?? defaults.showDelay,\r\n hideDelay: this.hideDelay() ?? this.options()?.hideDelay ?? defaults.hideDelay,\r\n showArrow: (this.showArrow() ?? this.options()?.showArrow ?? defaults.showArrow) !== false,\r\n showOnHover:\r\n (this.showOnHover() ?? this.options()?.showOnHover ?? defaults.showOnHover) !== false,\r\n showOnFocus:\r\n (this.showOnFocus() ?? this.options()?.showOnFocus ?? defaults.showOnFocus) !== false,\r\n hideOnTooltipHover:\r\n (this.hideOnTooltipHover() ??\r\n this.options()?.hideOnTooltipHover ??\r\n defaults.hideOnTooltipHover) !== false,\r\n hideOnClick:\r\n (this.hideOnClick() ?? this.options()?.hideOnClick ?? defaults.hideOnClick) !== false,\r\n };\r\n });\r\n\r\n public readonly tooltip = computed(() => this._tooltip()?.instance);\r\n\r\n constructor() {\r\n super();\r\n\r\n const abortSignal = abortSignalOnDestroy();\r\n this.element.nativeElement.addEventListener('mouseenter', this.onMouseEnter.bind(this), {\r\n signal: abortSignal,\r\n });\r\n this.element.nativeElement.addEventListener('mouseleave', this.onMouseLeave.bind(this), {\r\n signal: abortSignal,\r\n });\r\n this.element.nativeElement.addEventListener('focus', this.onFocus.bind(this), {\r\n signal: abortSignal,\r\n });\r\n this.element.nativeElement.addEventListener('blur', this.onBlur.bind(this), {\r\n signal: abortSignal,\r\n });\r\n\r\n effect(() => {\r\n const tooltip = this._tooltip();\r\n if (tooltip) this.updateContent(tooltip);\r\n });\r\n effect(() => this._tooltip()?.setInput('styleClass', this.styleClass()));\r\n effect(() => this._tooltip()?.setInput('showOnlyIfTruncated', this.showOnlyIfTruncated()));\r\n effect(() => this._tooltip()?.setInput('size', this.size()));\r\n effect(() => this._tooltip()?.setInput('options', this.effectiveOptions()));\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._tooltip()?.destroy();\r\n this._tooltip.set(null);\r\n }\r\n\r\n public show(): void {\r\n const tooltip = this._tooltip();\r\n if (tooltip) {\r\n tooltip.instance.show();\r\n } else {\r\n const tooltip = this.getTooltip();\r\n if (tooltip) {\r\n requestAnimationFrame(() => tooltip.show());\r\n }\r\n }\r\n }\r\n\r\n public hide(): void {\r\n this._tooltip()?.instance.hide();\r\n }\r\n\r\n protected onMouseEnter() {\r\n if (this.effectiveOptions().showOnHover) {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onMouseLeave() {\r\n if (this.effectiveOptions().showOnHover) {\r\n this.hide();\r\n }\r\n }\r\n\r\n protected onFocus() {\r\n if (this.effectiveOptions().showOnFocus) {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onBlur() {\r\n if (this.effectiveOptions().showOnFocus) {\r\n this.hide();\r\n }\r\n }\r\n\r\n private getTooltip(): TooltipComponent | undefined {\r\n let tooltip = this._tooltip();\r\n if (!tooltip && this.content()) {\r\n tooltip = this._viewContainerRef.createComponent(TooltipComponent);\r\n tooltip.setInput('anchor', this.element.nativeElement);\r\n this.updateContent(tooltip);\r\n tooltip.setInput('styleClass', this.styleClass());\r\n tooltip.setInput('showOnlyIfTruncated', this.showOnlyIfTruncated());\r\n tooltip.setInput('size', this.size());\r\n tooltip.setInput('options', this.effectiveOptions());\r\n this._tooltip.set(tooltip);\r\n }\r\n return tooltip?.instance;\r\n }\r\n\r\n private updateContent(tooltip: ComponentRef<TooltipComponent>) {\r\n const content = this.content();\r\n if (content instanceof TemplateRef) {\r\n tooltip.setInput('text', null);\r\n tooltip.setInput('content', content);\r\n } else {\r\n tooltip.setInput('text', content);\r\n tooltip.setInput('content', null);\r\n }\r\n }\r\n}\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-tooltip',\r\n templateUrl: './tooltip.html',\r\n imports: [NgnPt, NgnDefer],\r\n providers: [provideSelf(TooltipComponent)],\r\n host: {\r\n '[class]': `positionClass()`,\r\n '[style.--anchor-start]': `toPixels(relativeAnchorElementPosition()?.start)`,\r\n '[style.--anchor-center]': `toPixels(relativeAnchorElementPosition()?.center)`,\r\n '[style.--anchor-end]': `toPixels(relativeAnchorElementPosition()?.end)`,\r\n '[style.left]': `toPixels(position().x)`,\r\n '[style.top]': `toPixels(position().y)`,\r\n '[attr.popover]': `'hint'`,\r\n '[attr.id]': `id`,\r\n '[attr.role]': `'tooltip'`,\r\n '(toggle)': 'onToggle($event)',\r\n '(mouseenter)': 'onMouseEnter()',\r\n '(mouseleave)': 'onMouseLeave()',\r\n '(click)': 'onClick($event)',\r\n },\r\n})\r\nexport class TooltipComponent extends NgnBase<'tooltip'> {\r\n private _showHideTimeout?: ReturnType<typeof setTimeout>;\r\n protected readonly theme = this.injectThemeTemplate(tooltipControlTemplate, {\r\n root: true,\r\n closing: () => this.isClosing(),\r\n 'with-arrow': () => this.options().showArrow !== false,\r\n });\r\n private readonly _config = inject(NGN_CONFIG);\r\n\r\n /**\r\n * The anchor element to which the tooltip is attached.\r\n */\r\n public readonly anchor = input.required<HTMLElement>();\r\n /**\r\n * The text content of the tooltip.\r\n */\r\n public readonly text = input<string | null>();\r\n /**\r\n * The content template of the tooltip.\r\n */\r\n public readonly content = input<TemplateRef<unknown>>();\r\n /**\r\n * If set to `true`, the tooltip will only be shown if the anchor element is truncated. `\"\"` is equivalent to `true`.\r\n * @default `false`\r\n */\r\n public readonly showOnlyIfTruncated = input<boolean | ''>(false);\r\n /**\r\n * The size constraints for the tooltip.\r\n * This can be used to limit the width and height of the tooltip.\r\n * If not provided, the tooltip is only constrained by the size of the screen.\r\n */\r\n public readonly size = input<PositioningSizeConstraints | null>();\r\n /**\r\n * The options for the tooltip.\r\n *\r\n */\r\n public readonly options = input<TooltipOptions>(this._config.defaults.tooltip);\r\n\r\n protected readonly showDelayMs = computed(() =>\r\n getTimeSpanMilliseconds(this.options().showDelay)\r\n );\r\n protected readonly hideDelayMs = computed(() =>\r\n getTimeSpanMilliseconds(this.options().hideDelay)\r\n );\r\n\r\n protected readonly position = signal<{ x: number; y: number }>({ x: 0, y: 0 });\r\n protected readonly positionClass = signal<string>('');\r\n protected readonly relativeAnchorElementPosition = signal<\r\n RelativeAnchorElementPositionData | undefined\r\n >(undefined);\r\n\r\n private readonly _isShown = signal(false);\r\n private readonly _isClosing = signal(false);\r\n\r\n public readonly id = generateElementId();\r\n public readonly isShown = this._isShown.asReadonly();\r\n public readonly isClosing = this._isClosing.asReadonly();\r\n\r\n private readonly _defaultContentTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultContentTemplate');\r\n protected readonly contentTemplate = computed(\r\n () => this.content() ?? this._defaultContentTemplate()\r\n );\r\n\r\n private readonly _autoPos = computedWithPrevious<AutoPositioningHandle | undefined>(prev => {\r\n prev?.stop();\r\n const element = this.element.nativeElement;\r\n if (!element) {\r\n return undefined;\r\n }\r\n return autoPositionElement(this.anchor(), element, {\r\n injector: this.injector,\r\n stopped: true,\r\n resize: false,\r\n sizeConstraints: this.size() ?? undefined,\r\n placement: this.options().placement,\r\n offset: this.options().offset,\r\n middleware: [relativeAnchorElementPosition],\r\n disableSettingStyles: true,\r\n strategy: 'fixed',\r\n onPositionChange: ({ x, y, placement, middlewareData }) => {\r\n this.relativeAnchorElementPosition.set(middlewareData[relativeAnchorElementPosition.name]);\r\n this.position.set({ x, y });\r\n this.positionClass.set(\r\n splitPlacement(placement)\r\n .filter(notNullish)\r\n .map(x => this.theme.class(x))\r\n .join(' ')\r\n );\r\n },\r\n });\r\n });\r\n\r\n constructor() {\r\n super();\r\n const document = inject(DOCUMENT);\r\n const destroyAbortSignal = abortSignalOnDestroy();\r\n effect(() => {\r\n if (this.isShown() && !this.isClosing()) {\r\n document.addEventListener('keydown', this.onDocumentKeyDown.bind(this), {\r\n signal: destroyAbortSignal,\r\n });\r\n } else {\r\n document.removeEventListener('keydown', this.onDocumentKeyDown.bind(this));\r\n }\r\n });\r\n effect(() => {\r\n if (this.isShown()) {\r\n this._autoPos()?.start();\r\n } else {\r\n this._autoPos()?.stop();\r\n }\r\n });\r\n }\r\n\r\n public show(skipDelay = false) {\r\n clearTimeout(this._showHideTimeout);\r\n\r\n const delay = skipDelay ? 0 : this.showDelayMs();\r\n if (delay <= 0) {\r\n this.onShow();\r\n } else {\r\n this._showHideTimeout = setTimeout(() => this.onShow(), delay);\r\n }\r\n }\r\n\r\n public hide(skipDelay = false) {\r\n clearTimeout(this._showHideTimeout);\r\n\r\n const delay = skipDelay ? 0 : this.hideDelayMs();\r\n if (delay <= 0) {\r\n this.onHide();\r\n } else {\r\n this._showHideTimeout = setTimeout(() => this.onHide(), delay);\r\n }\r\n }\r\n\r\n protected onMouseEnter() {\r\n if (this.options().hideOnTooltipHover) {\r\n this.hide(true);\r\n } else {\r\n this.show(true);\r\n }\r\n }\r\n\r\n protected onMouseLeave() {\r\n this.hide();\r\n }\r\n\r\n protected onClick(event: PointerEvent) {\r\n if (this.options().hideOnClick) {\r\n this.hide(true);\r\n }\r\n event.stopPropagation();\r\n }\r\n\r\n protected onDocumentKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape' || event.key === 'Esc') {\r\n this.hide(true);\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected onShow() {\r\n if (!this.content() && !this.text()) {\r\n return;\r\n }\r\n if (this.showOnlyIfTruncated() !== false && !isElementTruncated(this.anchor())) {\r\n return;\r\n }\r\n\r\n this._isShown.set(true);\r\n this.element.nativeElement.showPopover();\r\n }\r\n\r\n protected onHide() {\r\n this._isClosing.set(true);\r\n requestAnimationFrame(() => {\r\n Promise.all(this.element.nativeElement.getAnimations().map(a => a.finished))\r\n .then(() => this.element.nativeElement.hidePopover())\r\n .catch(() => {})\r\n .finally(() => this._isClosing.set(false));\r\n });\r\n }\r\n\r\n protected onToggle(event: Event) {\r\n const evt = event as ToggleEvent;\r\n if (evt.newState === 'closed') {\r\n this._isShown.set(false);\r\n } else {\r\n this._isShown.set(true);\r\n }\r\n }\r\n\r\n protected toPixels(value: number | undefined): string | undefined {\r\n return value !== undefined ? `${value}px` : undefined;\r\n }\r\n}\r\n\r\nfunction isElementTruncated(element: HTMLElement): boolean {\r\n return (\r\n element.clientWidth < element.scrollWidth || // horizontal overflow\r\n element.clientHeight < element.scrollHeight || // vertical overflow\r\n element.offsetWidth < element.scrollWidth || // single-line ellipsis\r\n element.offsetHeight < element.scrollHeight // multi-line ellipsis (line-clamp)\r\n );\r\n}\r\n","<div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ngn-defer [lazyContent]=\"contentTemplate()\" [open]=\"isShown()\" [cache]=\"false\"></ngn-defer>\r\n</div>\r\n\r\n<ng-template #defaultContentTemplate>\r\n <span [ptInt]=\"this\" [ptClass]=\"'text'\">{{ text() }}</span>\r\n</ng-template>\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-tooltip.mjs","sources":["../../src/tooltip/relative-anchor-element-position.ts","../../src/tooltip/tooltip.ts","../../src/tooltip/tooltip.html","../../src/tooltip/ngneers-controls-tooltip.ts"],"sourcesContent":["import type { Middleware, Placement } from '@floating-ui/dom';\r\n\r\nexport type RelativeAnchorElementPositionData = {\r\n start: number;\r\n center: number;\r\n end: number;\r\n};\r\n\r\nexport const relativeAnchorElementPosition: Middleware = {\r\n name: 'relativeAnchorElementPosition',\r\n async fn(state) {\r\n const { placement, rects } = state;\r\n\r\n const axis = getAxis(placement);\r\n const axisSize = axis === 'x' ? 'width' : 'height';\r\n\r\n return {\r\n data: {\r\n start: rects.reference[axis] - state[axis],\r\n center: rects.reference[axis] + rects.reference[axisSize] / 2 - state[axis],\r\n end: rects.reference[axis] + rects.reference[axisSize] - state[axis],\r\n } satisfies RelativeAnchorElementPositionData,\r\n };\r\n },\r\n};\r\n\r\nfunction getAxis(placement: Placement): 'x' | 'y' {\r\n switch (placement.split('-')[0]) {\r\n case 'top':\r\n case 'bottom':\r\n return 'x';\r\n case 'left':\r\n case 'right':\r\n return 'y';\r\n default:\r\n throw new Error(`Unknown placement: ${placement}`);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ComponentRef,\r\n computed,\r\n Directive,\r\n DOCUMENT,\r\n effect,\r\n inject,\r\n input,\r\n type OnDestroy,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n abortSignalOnDestroy,\r\n autoPositionElement,\r\n type AutoPositioningHandle,\r\n NGN_CONFIG,\r\n type PositioningSizeConstraints,\r\n splitPlacement,\r\n type TooltipOptions,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnBase, provideSelf, NgnPt } from '@ngneers/controls/base';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { getTimeSpanMilliseconds, notNullish, type TimeSpan } from '@ngneers/controls/utils';\r\nimport { computedWithPrevious, generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { tooltipControlTemplate } from '@ngneers/controls-themes/templates/tooltip';\r\n\r\nimport {\r\n relativeAnchorElementPosition,\r\n type RelativeAnchorElementPositionData,\r\n} from './relative-anchor-element-position';\r\n\r\nimport type { Placement } from '@floating-ui/dom';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Directive({\r\n selector: '[ngnTooltip]',\r\n exportAs: 'ngnTooltip',\r\n providers: [provideSelf(NgnTooltip)],\r\n})\r\nexport class NgnTooltip extends NgnBase<'tooltip'> implements OnDestroy {\r\n protected readonly theme = null;\r\n private readonly _viewContainerRef = inject(ViewContainerRef);\r\n private readonly _config = inject(NGN_CONFIG);\r\n private readonly _tooltip = signal<ComponentRef<TooltipComponent> | null>(null);\r\n\r\n /**\r\n * The content of the tooltip, can be a string or a TemplateRef.\r\n * If the value is falsy, the tooltip will not be shown.\r\n * @alias ngnTooltip\r\n */\r\n public readonly content = input<TemplateRef<unknown> | string | null | undefined>(null, {\r\n alias: 'ngnTooltip',\r\n });\r\n /**\r\n * If set to `true`, the tooltip will only be shown if the anchor element is truncated. `\"\"` is equivalent to `true`.\r\n * @alias ngnTooltipShowOnlyIfTruncated\r\n * @default false\r\n */\r\n public readonly showOnlyIfTruncated = input<boolean | ''>(false, {\r\n alias: 'ngnTooltipShowOnlyIfTruncated',\r\n });\r\n /**\r\n * The size constraints for the tooltip.\r\n * This can be used to limit the width and height of the tooltip.\r\n * If not provided, the tooltip is only constrained by the size of the screen.\r\n * @alias ngnTooltipSize\r\n */\r\n public readonly size = input<PositioningSizeConstraints | null | undefined>(null, {\r\n alias: 'ngnTooltipSize',\r\n });\r\n\r\n /**\r\n * The options for the tooltip.\r\n * This is a shorthand for setting multiple options at once.\r\n * The individual options take precedence over the options set here.\r\n * @alias ngnTooltipOptions\r\n */\r\n public readonly options = input<Partial<TooltipOptions> | null | undefined>(null, {\r\n alias: 'ngnTooltipOptions',\r\n });\r\n /**\r\n * The placement of the tooltip relative to the anchor element.\r\n * @alias ngnTooltipPlacement\r\n * @default 'bottom'\r\n */\r\n public readonly placement = input<Placement | null | undefined>(null, {\r\n alias: 'ngnTooltipPlacement',\r\n });\r\n /**\r\n * The offset in Pixels of the tooltip from the anchor element.\r\n * @alias ngnTooltipOffset\r\n * @default 4\r\n */\r\n public readonly offset = input<number | null | undefined>(null, {\r\n alias: 'ngnTooltipOffset',\r\n });\r\n /**\r\n * The delay before the tooltip is shown. If a number is provided, it is interpreted as milliseconds.\r\n * @alias ngnTooltipShowDelay\r\n * @default '0.5s'\r\n */\r\n public readonly showDelay = input<TimeSpan | null | undefined>(null, {\r\n alias: 'ngnTooltipShowDelay',\r\n });\r\n /**\r\n * The delay before the tooltip is hidden. If a number is provided, it is interpreted as milliseconds.\r\n * @alias ngnTooltipHideDelay\r\n * @default '0.1s'\r\n */\r\n public readonly hideDelay = input<TimeSpan | null | undefined>(null, {\r\n alias: 'ngnTooltipHideDelay',\r\n });\r\n /**\r\n * Whether to show an arrow pointing to the anchor element. `\"\"` is equivalent to `true`.\r\n * @alias ngnTooltipShowArrow\r\n * @default true\r\n */\r\n public readonly showArrow = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipShowArrow',\r\n });\r\n /**\r\n * Shows the tooltip on hover.\r\n * @alias ngnTooltipShowOnHover\r\n * @default true\r\n */\r\n public readonly showOnHover = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipShowOnHover',\r\n });\r\n /**\r\n * Shows the tooltip on focus.\r\n * @alias ngnTooltipShowOnFocus\r\n * @default true\r\n */\r\n public readonly showOnFocus = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipShowOnFocus',\r\n });\r\n /**\r\n * Hides the tooltip (without delay) when the mouse hovers over the tooltip.\r\n * @alias ngnTooltipHideOnTooltipHover\r\n * @default false\r\n */\r\n public readonly hideOnTooltipHover = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipHideOnTooltipHover',\r\n });\r\n /**\r\n * Hides the tooltip (without delay) when the user clicks on the tooltip.\r\n * @alias ngnTooltipHideOnClick\r\n * @default true\r\n */\r\n public readonly hideOnClick = input<boolean | '' | null | undefined>(null, {\r\n alias: 'ngnTooltipHideOnClick',\r\n });\r\n\r\n public readonly effectiveOptions = computed<TooltipOptions>(() => {\r\n const defaults = this._config.defaults.tooltip;\r\n return {\r\n placement: this.placement() ?? this.options()?.placement ?? defaults.placement,\r\n offset: this.offset() ?? this.options()?.offset ?? defaults.offset,\r\n showDelay: this.showDelay() ?? this.options()?.showDelay ?? defaults.showDelay,\r\n hideDelay: this.hideDelay() ?? this.options()?.hideDelay ?? defaults.hideDelay,\r\n showArrow: (this.showArrow() ?? this.options()?.showArrow ?? defaults.showArrow) !== false,\r\n showOnHover:\r\n (this.showOnHover() ?? this.options()?.showOnHover ?? defaults.showOnHover) !== false,\r\n showOnFocus:\r\n (this.showOnFocus() ?? this.options()?.showOnFocus ?? defaults.showOnFocus) !== false,\r\n hideOnTooltipHover:\r\n (this.hideOnTooltipHover() ??\r\n this.options()?.hideOnTooltipHover ??\r\n defaults.hideOnTooltipHover) !== false,\r\n hideOnClick:\r\n (this.hideOnClick() ?? this.options()?.hideOnClick ?? defaults.hideOnClick) !== false,\r\n };\r\n });\r\n\r\n public readonly tooltip = computed(() => this._tooltip()?.instance);\r\n\r\n constructor() {\r\n super();\r\n\r\n const abortSignal = abortSignalOnDestroy();\r\n this.element.nativeElement.addEventListener('mouseenter', this.onMouseEnter.bind(this), {\r\n signal: abortSignal,\r\n });\r\n this.element.nativeElement.addEventListener('mouseleave', this.onMouseLeave.bind(this), {\r\n signal: abortSignal,\r\n });\r\n this.element.nativeElement.addEventListener('focus', this.onFocus.bind(this), {\r\n signal: abortSignal,\r\n });\r\n this.element.nativeElement.addEventListener('blur', this.onBlur.bind(this), {\r\n signal: abortSignal,\r\n });\r\n\r\n effect(() => {\r\n const tooltip = this._tooltip();\r\n if (tooltip) this.updateContent(tooltip);\r\n });\r\n effect(() => this._tooltip()?.setInput('showOnlyIfTruncated', this.showOnlyIfTruncated()));\r\n effect(() => this._tooltip()?.setInput('size', this.size()));\r\n effect(() => this._tooltip()?.setInput('options', this.effectiveOptions()));\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._tooltip()?.destroy();\r\n this._tooltip.set(null);\r\n }\r\n\r\n public show(): void {\r\n const tooltip = this._tooltip();\r\n if (tooltip) {\r\n tooltip.instance.show();\r\n } else {\r\n const tooltip = this.getTooltip();\r\n if (tooltip) {\r\n requestAnimationFrame(() => tooltip.show());\r\n }\r\n }\r\n }\r\n\r\n public hide(): void {\r\n this._tooltip()?.instance.hide();\r\n }\r\n\r\n protected onMouseEnter() {\r\n if (this.effectiveOptions().showOnHover) {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onMouseLeave() {\r\n if (this.effectiveOptions().showOnHover) {\r\n this.hide();\r\n }\r\n }\r\n\r\n protected onFocus() {\r\n if (this.effectiveOptions().showOnFocus) {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onBlur() {\r\n if (this.effectiveOptions().showOnFocus) {\r\n this.hide();\r\n }\r\n }\r\n\r\n private getTooltip(): TooltipComponent | undefined {\r\n let tooltip = this._tooltip();\r\n if (!tooltip && this.content()) {\r\n tooltip = this._viewContainerRef.createComponent(TooltipComponent);\r\n tooltip.setInput('anchor', this.element.nativeElement);\r\n this.updateContent(tooltip);\r\n tooltip.setInput('showOnlyIfTruncated', this.showOnlyIfTruncated());\r\n tooltip.setInput('size', this.size());\r\n tooltip.setInput('options', this.effectiveOptions());\r\n this._tooltip.set(tooltip);\r\n }\r\n return tooltip?.instance;\r\n }\r\n\r\n private updateContent(tooltip: ComponentRef<TooltipComponent>) {\r\n const content = this.content();\r\n if (content instanceof TemplateRef) {\r\n tooltip.setInput('text', null);\r\n tooltip.setInput('content', content);\r\n } else {\r\n tooltip.setInput('text', content);\r\n tooltip.setInput('content', null);\r\n }\r\n }\r\n}\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-tooltip',\r\n templateUrl: './tooltip.html',\r\n imports: [NgnPt, NgnDefer],\r\n providers: [provideSelf(TooltipComponent)],\r\n host: {\r\n '[class]': `positionClass()`,\r\n '[style.--anchor-start]': `toPixels(relativeAnchorElementPosition()?.start)`,\r\n '[style.--anchor-center]': `toPixels(relativeAnchorElementPosition()?.center)`,\r\n '[style.--anchor-end]': `toPixels(relativeAnchorElementPosition()?.end)`,\r\n '[style.left]': `toPixels(position().x)`,\r\n '[style.top]': `toPixels(position().y)`,\r\n '[attr.popover]': `'hint'`,\r\n '[attr.id]': `id`,\r\n '[attr.role]': `'tooltip'`,\r\n '(toggle)': 'onToggle($event)',\r\n '(mouseenter)': 'onMouseEnter()',\r\n '(mouseleave)': 'onMouseLeave()',\r\n '(click)': 'onClick($event)',\r\n },\r\n})\r\nexport class TooltipComponent extends NgnBase<'tooltip'> {\r\n private _showHideTimeout?: ReturnType<typeof setTimeout>;\r\n protected readonly theme = this.injectThemeTemplate(tooltipControlTemplate, {\r\n root: true,\r\n closing: () => this.isClosing(),\r\n 'with-arrow': () => this.options().showArrow !== false,\r\n });\r\n private readonly _config = inject(NGN_CONFIG);\r\n\r\n /**\r\n * The anchor element to which the tooltip is attached.\r\n */\r\n public readonly anchor = input.required<HTMLElement>();\r\n /**\r\n * The text content of the tooltip.\r\n */\r\n public readonly text = input<string | null>();\r\n /**\r\n * The content template of the tooltip.\r\n */\r\n public readonly content = input<TemplateRef<unknown>>();\r\n /**\r\n * If set to `true`, the tooltip will only be shown if the anchor element is truncated. `\"\"` is equivalent to `true`.\r\n * @default `false`\r\n */\r\n public readonly showOnlyIfTruncated = input<boolean | ''>(false);\r\n /**\r\n * The size constraints for the tooltip.\r\n * This can be used to limit the width and height of the tooltip.\r\n * If not provided, the tooltip is only constrained by the size of the screen.\r\n */\r\n public readonly size = input<PositioningSizeConstraints | null>();\r\n /**\r\n * The options for the tooltip.\r\n *\r\n */\r\n public readonly options = input<TooltipOptions>(this._config.defaults.tooltip);\r\n\r\n protected readonly showDelayMs = computed(() =>\r\n getTimeSpanMilliseconds(this.options().showDelay)\r\n );\r\n protected readonly hideDelayMs = computed(() =>\r\n getTimeSpanMilliseconds(this.options().hideDelay)\r\n );\r\n\r\n protected readonly position = signal<{ x: number; y: number }>({ x: 0, y: 0 });\r\n protected readonly positionClass = signal<string>('');\r\n protected readonly relativeAnchorElementPosition = signal<\r\n RelativeAnchorElementPositionData | undefined\r\n >(undefined);\r\n\r\n private readonly _isShown = signal(false);\r\n private readonly _isClosing = signal(false);\r\n\r\n public readonly id = generateElementId();\r\n public readonly isShown = this._isShown.asReadonly();\r\n public readonly isClosing = this._isClosing.asReadonly();\r\n\r\n private readonly _defaultContentTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultContentTemplate');\r\n protected readonly contentTemplate = computed(\r\n () => this.content() ?? this._defaultContentTemplate()\r\n );\r\n\r\n private readonly _autoPos = computedWithPrevious<AutoPositioningHandle | undefined>(prev => {\r\n prev?.stop();\r\n const element = this.element.nativeElement;\r\n if (!element) {\r\n return undefined;\r\n }\r\n return autoPositionElement(this.anchor(), element, {\r\n injector: this.injector,\r\n stopped: true,\r\n resize: false,\r\n sizeConstraints: this.size() ?? undefined,\r\n placement: this.options().placement,\r\n offset: this.options().offset,\r\n middleware: [relativeAnchorElementPosition],\r\n disableSettingStyles: true,\r\n strategy: 'fixed',\r\n onPositionChange: ({ x, y, placement, middlewareData }) => {\r\n this.relativeAnchorElementPosition.set(middlewareData[relativeAnchorElementPosition.name]);\r\n this.position.set({ x, y });\r\n this.positionClass.set(\r\n splitPlacement(placement)\r\n .filter(notNullish)\r\n .map(x => this.theme.class(x))\r\n .join(' ')\r\n );\r\n },\r\n });\r\n });\r\n\r\n constructor() {\r\n super();\r\n const document = inject(DOCUMENT);\r\n const destroyAbortSignal = abortSignalOnDestroy();\r\n effect(() => {\r\n if (this.isShown() && !this.isClosing()) {\r\n document.addEventListener('keydown', this.onDocumentKeyDown.bind(this), {\r\n signal: destroyAbortSignal,\r\n });\r\n } else {\r\n document.removeEventListener('keydown', this.onDocumentKeyDown.bind(this));\r\n }\r\n });\r\n effect(() => {\r\n if (this.isShown()) {\r\n this._autoPos()?.start();\r\n } else {\r\n this._autoPos()?.stop();\r\n }\r\n });\r\n }\r\n\r\n public show(skipDelay = false) {\r\n clearTimeout(this._showHideTimeout);\r\n\r\n const delay = skipDelay ? 0 : this.showDelayMs();\r\n if (delay <= 0) {\r\n this.onShow();\r\n } else {\r\n this._showHideTimeout = setTimeout(() => this.onShow(), delay);\r\n }\r\n }\r\n\r\n public hide(skipDelay = false) {\r\n clearTimeout(this._showHideTimeout);\r\n\r\n const delay = skipDelay ? 0 : this.hideDelayMs();\r\n if (delay <= 0) {\r\n this.onHide();\r\n } else {\r\n this._showHideTimeout = setTimeout(() => this.onHide(), delay);\r\n }\r\n }\r\n\r\n protected onMouseEnter() {\r\n if (this.options().hideOnTooltipHover) {\r\n this.hide(true);\r\n } else {\r\n this.show(true);\r\n }\r\n }\r\n\r\n protected onMouseLeave() {\r\n this.hide();\r\n }\r\n\r\n protected onClick(event: PointerEvent) {\r\n if (this.options().hideOnClick) {\r\n this.hide(true);\r\n }\r\n event.stopPropagation();\r\n }\r\n\r\n protected onDocumentKeyDown(event: KeyboardEvent) {\r\n if (event.key === 'Escape' || event.key === 'Esc') {\r\n this.hide(true);\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n protected onShow() {\r\n if (!this.content() && !this.text()) {\r\n return;\r\n }\r\n if (this.showOnlyIfTruncated() !== false && !isElementTruncated(this.anchor())) {\r\n return;\r\n }\r\n\r\n this._isShown.set(true);\r\n this.element.nativeElement.showPopover();\r\n }\r\n\r\n protected onHide() {\r\n this._isClosing.set(true);\r\n requestAnimationFrame(() => {\r\n Promise.all(this.element.nativeElement.getAnimations().map(a => a.finished))\r\n .then(() => this.element.nativeElement.hidePopover())\r\n .catch(() => {})\r\n .finally(() => this._isClosing.set(false));\r\n });\r\n }\r\n\r\n protected onToggle(event: Event) {\r\n const evt = event as ToggleEvent;\r\n if (evt.newState === 'closed') {\r\n this._isShown.set(false);\r\n } else {\r\n this._isShown.set(true);\r\n }\r\n }\r\n\r\n protected toPixels(value: number | undefined): string | undefined {\r\n return value !== undefined ? `${value}px` : undefined;\r\n }\r\n}\r\n\r\nfunction isElementTruncated(element: HTMLElement): boolean {\r\n return (\r\n element.clientWidth < element.scrollWidth || // horizontal overflow\r\n element.clientHeight < element.scrollHeight || // vertical overflow\r\n element.offsetWidth < element.scrollWidth || // single-line ellipsis\r\n element.offsetHeight < element.scrollHeight // multi-line ellipsis (line-clamp)\r\n );\r\n}\r\n","<div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ngn-defer [lazyContent]=\"contentTemplate()\" [open]=\"isShown()\" [cache]=\"false\"></ngn-defer>\r\n</div>\r\n\r\n<ng-template #defaultContentTemplate>\r\n <span [ptInt]=\"this\" [ptClass]=\"'text'\">{{ text() }}</span>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -43,9 +43,9 @@ function explicitAfterRenderEffect(signals, effectFn) {
|
|
|
43
43
|
function asyncComputed(computeFn, initial) {
|
|
44
44
|
let latestId = 0;
|
|
45
45
|
let latestCompletedId = 0;
|
|
46
|
-
const isRunningSignal = signal(false, ...(ngDevMode ? [{ debugName: "isRunningSignal" }] : []));
|
|
47
|
-
const firstRunCompleted = signal(false, ...(ngDevMode ? [{ debugName: "firstRunCompleted" }] : []));
|
|
48
|
-
const returnSignal = signal(initial, ...(ngDevMode ? [{ debugName: "returnSignal" }] : []));
|
|
46
|
+
const isRunningSignal = signal(false, ...(ngDevMode ? [{ debugName: "isRunningSignal" }] : /* istanbul ignore next */ []));
|
|
47
|
+
const firstRunCompleted = signal(false, ...(ngDevMode ? [{ debugName: "firstRunCompleted" }] : /* istanbul ignore next */ []));
|
|
48
|
+
const returnSignal = signal(initial, ...(ngDevMode ? [{ debugName: "returnSignal" }] : /* istanbul ignore next */ []));
|
|
49
49
|
effect(() => {
|
|
50
50
|
const currentId = ++latestId;
|
|
51
51
|
isRunningSignal.set(true);
|
|
@@ -81,7 +81,7 @@ function setInputSignalValue(input, value) {
|
|
|
81
81
|
input[SIGNAL].applyValueToInputSignal(input[SIGNAL], value);
|
|
82
82
|
}
|
|
83
83
|
function afterRenderComputed(computeFn, defaultValue) {
|
|
84
|
-
const value = signal(defaultValue, ...(ngDevMode ? [{ debugName: "value" }] : []));
|
|
84
|
+
const value = signal(defaultValue, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
85
85
|
afterRenderEffect(() => {
|
|
86
86
|
value.set(computeFn());
|
|
87
87
|
});
|
|
@@ -89,7 +89,7 @@ function afterRenderComputed(computeFn, defaultValue) {
|
|
|
89
89
|
}
|
|
90
90
|
function debounceSignal(input, delayMs) {
|
|
91
91
|
const delayFn = typeof delayMs === 'function' ? delayMs : () => delayMs;
|
|
92
|
-
const debounced = signal(input(), ...(ngDevMode ? [{ debugName: "debounced" }] : []));
|
|
92
|
+
const debounced = signal(input(), ...(ngDevMode ? [{ debugName: "debounced" }] : /* istanbul ignore next */ []));
|
|
93
93
|
let timeoutId;
|
|
94
94
|
effect(onCleanup => {
|
|
95
95
|
const value = input();
|
|
@@ -145,10 +145,10 @@ class NgnGlobal {
|
|
|
145
145
|
set fancyLogging(value) {
|
|
146
146
|
this._window[globalPropertyName].fancyLogging = value;
|
|
147
147
|
}
|
|
148
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.
|
|
149
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.
|
|
148
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnGlobal, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
149
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnGlobal });
|
|
150
150
|
}
|
|
151
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.
|
|
151
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.2", ngImport: i0, type: NgnGlobal, decorators: [{
|
|
152
152
|
type: Injectable
|
|
153
153
|
}], ctorParameters: () => [] });
|
|
154
154
|
|
|
@@ -182,7 +182,7 @@ function registerState(options) {
|
|
|
182
182
|
const k = key();
|
|
183
183
|
return k ? loadState(storage(), k) : null;
|
|
184
184
|
};
|
|
185
|
-
const stateSignal = signal(undefined, ...(ngDevMode ? [{ debugName: "stateSignal" }] : []));
|
|
185
|
+
const stateSignal = signal(undefined, ...(ngDevMode ? [{ debugName: "stateSignal" }] : /* istanbul ignore next */ []));
|
|
186
186
|
let timer = undefined;
|
|
187
187
|
const save = () => {
|
|
188
188
|
const k = key();
|