@ng-forge/dynamic-forms-ionic 1.3.0-next.2 → 1.3.0-next.3

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.
Files changed (48) hide show
  1. package/README.md +0 -2
  2. package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-bXoq9uY6.mjs +64 -0
  3. package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-bXoq9uY6.mjs.map +1 -0
  4. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-button.mjs +129 -34
  5. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-button.mjs.map +1 -1
  6. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-icon.mjs +118 -35
  7. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-addon-icon.mjs.map +1 -1
  8. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-button.mjs +113 -33
  9. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-button.mjs.map +1 -1
  10. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-checkbox.mjs +124 -24
  11. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-checkbox.mjs.map +1 -1
  12. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-datepicker.mjs +374 -90
  13. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-datepicker.mjs.map +1 -1
  14. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-input.mjs +262 -126
  15. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-input.mjs.map +1 -1
  16. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-multi-checkbox.mjs +191 -64
  17. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-multi-checkbox.mjs.map +1 -1
  18. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-radio.mjs +178 -27
  19. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-radio.mjs.map +1 -1
  20. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-select.mjs +163 -27
  21. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-select.mjs.map +1 -1
  22. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-slider.mjs +144 -27
  23. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-slider.mjs.map +1 -1
  24. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-textarea.mjs +157 -45
  25. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-textarea.mjs.map +1 -1
  26. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-toggle.mjs +386 -75
  27. package/fesm2022/ng-forge-dynamic-forms-ionic-lazy-toggle.mjs.map +1 -1
  28. package/fesm2022/ng-forge-dynamic-forms-ionic-shared.mjs +139 -62
  29. package/fesm2022/ng-forge-dynamic-forms-ionic-shared.mjs.map +1 -1
  30. package/fesm2022/ng-forge-dynamic-forms-ionic.mjs +238 -251
  31. package/fesm2022/ng-forge-dynamic-forms-ionic.mjs.map +1 -1
  32. package/package.json +2 -3
  33. package/types/ng-forge-dynamic-forms-ionic-lazy-addon-button.d.ts +28 -28
  34. package/types/ng-forge-dynamic-forms-ionic-lazy-addon-icon.d.ts +24 -17
  35. package/types/ng-forge-dynamic-forms-ionic-lazy-button.d.ts +92 -86
  36. package/types/ng-forge-dynamic-forms-ionic-lazy-checkbox.d.ts +24 -18
  37. package/types/ng-forge-dynamic-forms-ionic-lazy-datepicker.d.ts +59 -34
  38. package/types/ng-forge-dynamic-forms-ionic-lazy-input.d.ts +69 -57
  39. package/types/ng-forge-dynamic-forms-ionic-lazy-multi-checkbox.d.ts +34 -23
  40. package/types/ng-forge-dynamic-forms-ionic-lazy-radio.d.ts +31 -20
  41. package/types/ng-forge-dynamic-forms-ionic-lazy-select.d.ts +37 -26
  42. package/types/ng-forge-dynamic-forms-ionic-lazy-slider.d.ts +53 -38
  43. package/types/ng-forge-dynamic-forms-ionic-lazy-textarea.d.ts +29 -23
  44. package/types/ng-forge-dynamic-forms-ionic-lazy-toggle.d.ts +119 -55
  45. package/types/ng-forge-dynamic-forms-ionic-shared.d.ts +78 -83
  46. package/types/ng-forge-dynamic-forms-ionic.d.ts +243 -266
  47. package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-CN0CagvT.mjs +0 -26
  48. package/fesm2022/ng-forge-dynamic-forms-ionic-ionic-field-errors-wrapper.component-CN0CagvT.mjs.map +0 -1
@@ -1,46 +1,60 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injector, computed, signal, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { AsyncPipe } from '@angular/common';
4
- import { IonIcon, IonSpinner } from '@ionic/angular/standalone';
5
- import * as i1 from '@ng-forge/dynamic-forms/integration';
6
- import { injectNgForgeAddonAction, resolveDynamicValue, DynamicTextPipe, NgForgeAddonAction, runPresetAction } from '@ng-forge/dynamic-forms/integration';
7
- import { explicitEffect } from 'ngxtension/explicit-effect';
8
-
9
- const IONIC_CONFIG = new InjectionToken('IONIC_CONFIG');
10
-
11
- const IONIC_INPUT_TYPE_OVERRIDE = new InjectionToken('IONIC_INPUT_TYPE_OVERRIDE');
12
-
13
- class IonicInlineButtonAddonComponent {
14
- injector = inject(Injector);
15
- action = injectNgForgeAddonAction();
16
- addon = this.action.addon;
17
- label = computed(() => this.addon().label, /* @ts-ignore */
18
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
19
- ariaLabel = computed(() => this.addon().ariaLabel, /* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
21
- icon = computed(() => this.addon().icon, /* @ts-ignore */
22
- ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
23
- color = computed(() => this.addon().color, /* @ts-ignore */
24
- ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
25
- fill = computed(() => this.addon().fill ?? 'clear', /* @ts-ignore */
26
- ...(ngDevMode ? [{ debugName: "fill" }] : /* istanbul ignore next */ []));
27
- iconOnly = computed(() => !!this.icon() && !this.label(), /* @ts-ignore */
28
- ...(ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []));
29
- ariaLabelSignal = signal(undefined, /* @ts-ignore */
30
- ...(ngDevMode ? [{ debugName: "ariaLabelSignal" }] : /* istanbul ignore next */ []));
31
- resolvedAriaLabel = computed(() => this.ariaLabelSignal()?.() ?? undefined, /* @ts-ignore */
32
- ...(ngDevMode ? [{ debugName: "resolvedAriaLabel" }] : /* istanbul ignore next */ []));
33
- constructor() {
34
- explicitEffect([this.ariaLabel], ([raw]) => {
35
- if (raw === undefined) {
36
- this.ariaLabelSignal.set(undefined);
37
- return;
38
- }
39
- this.ariaLabelSignal.set(resolveDynamicValue(raw, undefined, this.injector));
40
- });
41
- }
42
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: IonicInlineButtonAddonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
43
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: IonicInlineButtonAddonComponent, isStandalone: true, selector: "ion-button[df-ion-button-addon]", host: { listeners: { "click": "action.dispatch()" }, properties: { "attr.color": "color() ?? null", "attr.fill": "fill()", "attr.disabled": "action.disabled() || action.loading() ? \"true\" : null", "attr.aria-label": "resolvedAriaLabel() ?? null", "attr.aria-busy": "action.loading() || null" } }, hostDirectives: [{ directive: i1.NgForgeAddonAction }], ngImport: i0, template: `
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, InjectionToken, Injector, computed, inject, signal } from "@angular/core";
3
+ import { AsyncPipe } from "@angular/common";
4
+ import { IonIcon, IonSpinner } from "@ionic/angular/standalone";
5
+ import * as i1 from "@ng-forge/dynamic-forms/integration";
6
+ import { DynamicTextPipe, NgForgeAddonAction, injectNgForgeAddonAction, resolveDynamicValue, runPresetAction } from "@ng-forge/dynamic-forms/integration";
7
+ import { explicitEffect } from "ngxtension/explicit-effect";
8
+ const IONIC_CONFIG = new InjectionToken("IONIC_CONFIG");
9
+ const IONIC_INPUT_TYPE_OVERRIDE = new InjectionToken("IONIC_INPUT_TYPE_OVERRIDE");
10
+ var IonicInlineButtonAddonComponent = class IonicInlineButtonAddonComponent {
11
+ injector = inject(Injector);
12
+ action = injectNgForgeAddonAction();
13
+ addon = this.action.addon;
14
+ label = computed(() => this.addon().label, ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
15
+ ariaLabel = computed(() => this.addon().ariaLabel, ...ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []);
16
+ icon = computed(() => this.addon().icon, ...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
17
+ color = computed(() => this.addon().color, ...ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []);
18
+ fill = computed(() => this.addon().fill ?? "clear", ...ngDevMode ? [{ debugName: "fill" }] : /* istanbul ignore next */ []);
19
+ iconOnly = computed(() => !!this.icon() && !this.label(), ...ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []);
20
+ ariaLabelSignal = signal(void 0, ...ngDevMode ? [{ debugName: "ariaLabelSignal" }] : /* istanbul ignore next */ []);
21
+ resolvedAriaLabel = computed(() => this.ariaLabelSignal()?.() ?? void 0, ...ngDevMode ? [{ debugName: "resolvedAriaLabel" }] : /* istanbul ignore next */ []);
22
+ constructor() {
23
+ explicitEffect([this.ariaLabel], ([raw]) => {
24
+ if (raw === void 0) {
25
+ this.ariaLabelSignal.set(void 0);
26
+ return;
27
+ }
28
+ this.ariaLabelSignal.set(resolveDynamicValue(raw, void 0, this.injector));
29
+ });
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({
32
+ minVersion: "12.0.0",
33
+ version: "22.2.5",
34
+ ngImport: i0,
35
+ type: IonicInlineButtonAddonComponent,
36
+ deps: [],
37
+ target: i0.ɵɵFactoryTarget.Component
38
+ });
39
+ static ɵcmp = i0.ɵɵngDeclareComponent({
40
+ minVersion: "17.0.0",
41
+ version: "22.2.5",
42
+ type: IonicInlineButtonAddonComponent,
43
+ isStandalone: true,
44
+ selector: "ion-button[df-ion-button-addon]",
45
+ host: {
46
+ listeners: { "click": "action.dispatch()" },
47
+ properties: {
48
+ "attr.color": "color() ?? null",
49
+ "attr.fill": "fill()",
50
+ "attr.disabled": "action.disabled() || action.loading() ? \"true\" : null",
51
+ "attr.aria-label": "resolvedAriaLabel() ?? null",
52
+ "attr.aria-busy": "action.loading() || null"
53
+ }
54
+ },
55
+ hostDirectives: [{ directive: i1.NgForgeAddonAction }],
56
+ ngImport: i0,
57
+ template: `
44
58
  @if (action.loading()) {
45
59
  <ion-spinner [slot]="iconOnly() ? 'icon-only' : 'start'" name="dots"></ion-spinner>
46
60
  <span class="df-ion-sr-only" role="status">Loading…</span>
@@ -50,11 +64,70 @@ class IonicInlineButtonAddonComponent {
50
64
  @if (label(); as lbl) {
51
65
  {{ lbl | dynamicText | async }}
52
66
  }
53
- `, isInline: true, styles: [".df-ion-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "pipe", type: DynamicTextPipe, name: "dynamicText" }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
54
- }
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: IonicInlineButtonAddonComponent, decorators: [{
56
- type: Component,
57
- args: [{ selector: 'ion-button[df-ion-button-addon]', imports: [IonIcon, IonSpinner, DynamicTextPipe, AsyncPipe], hostDirectives: [NgForgeAddonAction], template: `
67
+ `,
68
+ isInline: true,
69
+ styles: [".df-ion-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"],
70
+ dependencies: [
71
+ {
72
+ kind: "component",
73
+ type: IonIcon,
74
+ selector: "ion-icon",
75
+ inputs: [
76
+ "color",
77
+ "flipRtl",
78
+ "icon",
79
+ "ios",
80
+ "lazy",
81
+ "md",
82
+ "mode",
83
+ "name",
84
+ "sanitize",
85
+ "size",
86
+ "src"
87
+ ]
88
+ },
89
+ {
90
+ kind: "component",
91
+ type: IonSpinner,
92
+ selector: "ion-spinner",
93
+ inputs: [
94
+ "color",
95
+ "duration",
96
+ "name",
97
+ "paused"
98
+ ]
99
+ },
100
+ {
101
+ kind: "pipe",
102
+ type: DynamicTextPipe,
103
+ name: "dynamicText"
104
+ },
105
+ {
106
+ kind: "pipe",
107
+ type: AsyncPipe,
108
+ name: "async"
109
+ }
110
+ ],
111
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
112
+ });
113
+ };
114
+ i0.ɵɵngDeclareClassMetadata({
115
+ minVersion: "12.0.0",
116
+ version: "22.2.5",
117
+ ngImport: i0,
118
+ type: IonicInlineButtonAddonComponent,
119
+ decorators: [{
120
+ type: Component,
121
+ args: [{
122
+ selector: "ion-button[df-ion-button-addon]",
123
+ imports: [
124
+ IonIcon,
125
+ IonSpinner,
126
+ DynamicTextPipe,
127
+ AsyncPipe
128
+ ],
129
+ hostDirectives: [NgForgeAddonAction],
130
+ template: `
58
131
  @if (action.loading()) {
59
132
  <ion-spinner [slot]="iconOnly() ? 'icon-only' : 'start'" name="dots"></ion-spinner>
60
133
  <span class="df-ion-sr-only" role="status">Loading…</span>
@@ -64,20 +137,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
64
137
  @if (label(); as lbl) {
65
138
  {{ lbl | dynamicText | async }}
66
139
  }
67
- `, host: {
68
- '[attr.color]': 'color() ?? null',
69
- '[attr.fill]': 'fill()',
70
- '[attr.disabled]': 'action.disabled() || action.loading() ? "true" : null',
71
- '[attr.aria-label]': 'resolvedAriaLabel() ?? null',
72
- '[attr.aria-busy]': 'action.loading() || null',
73
- '(click)': 'action.dispatch()',
74
- }, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".df-ion-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
75
- }], ctorParameters: () => [] });
76
-
140
+ `,
141
+ host: {
142
+ "[attr.color]": "color() ?? null",
143
+ "[attr.fill]": "fill()",
144
+ "[attr.disabled]": "action.disabled() || action.loading() ? \"true\" : null",
145
+ "[attr.aria-label]": "resolvedAriaLabel() ?? null",
146
+ "[attr.aria-busy]": "action.loading() || null",
147
+ "(click)": "action.dispatch()"
148
+ },
149
+ changeDetection: ChangeDetectionStrategy.OnPush,
150
+ styles: [".df-ion-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"]
151
+ }]
152
+ }],
153
+ ctorParameters: () => []
154
+ });
77
155
  function runIonicPresetAction(preset, context, collaborators) {
78
- return runPresetAction(preset, context, collaborators, 'Ionic', 'ion-input');
156
+ return runPresetAction(preset, context, collaborators, "Ionic", "ion-input");
79
157
  }
80
-
81
-
82
158
  export { IONIC_CONFIG, IONIC_INPUT_TYPE_OVERRIDE, IonicInlineButtonAddonComponent, runIonicPresetAction };
83
- //# sourceMappingURL=ng-forge-dynamic-forms-ionic-shared.mjs.map
159
+
160
+ //# sourceMappingURL=ng-forge-dynamic-forms-ionic-shared.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ng-forge-dynamic-forms-ionic-shared.mjs","mappings":";;;;;;;;;;;;;AAsDmB;;AAGE;;;;;;;;;AAKA;;AACA;;;;AAGA;;AAEnB;AACE;AACE;AACE;;;AAGF;AACF;;;AAtBS;;;;;;;;;;AA1BV;;;;AAbS;;;;;;;;;;;AA8BR;AACA;AACA;AACA;AACA;AACA;;;;;ACtCF;AACF","names":[],"ignoreList":[],"sources":["../../../../packages/dynamic-forms-ionic/shared/ionic-inline-button-addon.component.ts","../../../../packages/dynamic-forms-ionic/shared/preset-actions.ts"],"sourcesContent":["import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, Injector, type Signal, signal } from '@angular/core';\nimport { IonIcon, IonSpinner } from '@ionic/angular/standalone';\nimport type { DynamicText } from '@ng-forge/dynamic-forms';\nimport { DynamicTextPipe, injectNgForgeAddonAction, NgForgeAddonAction, resolveDynamicValue } from '@ng-forge/dynamic-forms/integration';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport type { IonicButtonAddon } from './addons';\n\n/**\n * Inline `ion-button` addon whose host is the slotted Ionic button itself.\n * It lives in the shared entry because the lazily loaded input component\n * consumes it while the primary package must not pull in field renderers.\n */\n@Component({\n selector: 'ion-button[df-ion-button-addon]',\n imports: [IonIcon, IonSpinner, DynamicTextPipe, AsyncPipe],\n hostDirectives: [NgForgeAddonAction],\n template: `\n @if (action.loading()) {\n <ion-spinner [slot]=\"iconOnly() ? 'icon-only' : 'start'\" name=\"dots\"></ion-spinner>\n <span class=\"df-ion-sr-only\" role=\"status\">Loading…</span>\n } @else if (icon(); as ic) {\n <ion-icon [name]=\"ic\" [slot]=\"iconOnly() ? 'icon-only' : 'start'\"></ion-icon>\n }\n @if (label(); as lbl) {\n {{ lbl | dynamicText | async }}\n }\n `,\n styles: [\n `\n .df-ion-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n host: {\n '[attr.color]': 'color() ?? null',\n '[attr.fill]': 'fill()',\n '[attr.disabled]': 'action.disabled() || action.loading() ? \"true\" : null',\n '[attr.aria-label]': 'resolvedAriaLabel() ?? null',\n '[attr.aria-busy]': 'action.loading() || null',\n '(click)': 'action.dispatch()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IonicInlineButtonAddonComponent {\n private readonly injector = inject(Injector);\n protected readonly action = injectNgForgeAddonAction<IonicButtonAddon>();\n\n protected readonly addon = this.action.addon;\n protected readonly label = computed(() => this.addon().label);\n protected readonly ariaLabel = computed(() => this.addon().ariaLabel);\n protected readonly icon = computed(() => this.addon().icon);\n protected readonly color = computed(() => this.addon().color);\n protected readonly fill = computed(() => this.addon().fill ?? 'clear');\n protected readonly iconOnly = computed(() => !!this.icon() && !this.label());\n\n private readonly ariaLabelSignal = signal<Signal<string | undefined> | undefined>(undefined);\n protected readonly resolvedAriaLabel = computed(() => this.ariaLabelSignal()?.() ?? undefined);\n\n constructor() {\n explicitEffect([this.ariaLabel], ([raw]) => {\n if (raw === undefined) {\n this.ariaLabelSignal.set(undefined);\n return;\n }\n this.ariaLabelSignal.set(resolveDynamicValue<string | undefined>(raw as DynamicText, undefined, this.injector));\n });\n }\n}\n","import type { AddonActionContext, AddonActionPreset } from '@ng-forge/dynamic-forms';\nimport { runPresetAction, type PresetCollaborators } from '@ng-forge/dynamic-forms/integration';\n\nexport type { PresetCollaborators };\n\n/** Ionic adapter binding for the shared preset runner. */\nexport function runIonicPresetAction(\n preset: AddonActionPreset,\n context: AddonActionContext,\n collaborators: PresetCollaborators,\n): Promise<void> {\n return runPresetAction(preset, context, collaborators, 'Ionic', 'ion-input');\n}\n"]}
1
+ {"version":3,"file":"ng-forge-dynamic-forms-ionic-shared.mjs","names":[],"sources":["../../../../packages/dynamic-forms-ionic/shared/ionic-config.token.ts","../../../../packages/dynamic-forms-ionic/shared/input-type-override.token.ts","../../../../packages/dynamic-forms-ionic/shared/ionic-inline-button-addon.component.ts","../../../../packages/dynamic-forms-ionic/shared/preset-actions.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { IonicConfig } from './ionic-config';\n\n/** Global configuration for Ionic form fields. */\nexport const IONIC_CONFIG = new InjectionToken<IonicConfig>('IONIC_CONFIG');\n","import { InjectionToken, type WritableSignal } from '@angular/core';\n\n/** Per-field writable signal that overrides the input's `type` attribute. */\nexport const IONIC_INPUT_TYPE_OVERRIDE = new InjectionToken<WritableSignal<string | undefined>>('IONIC_INPUT_TYPE_OVERRIDE');\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, Injector, type Signal, signal } from '@angular/core';\nimport { IonIcon, IonSpinner } from '@ionic/angular/standalone';\nimport type { DynamicText } from '@ng-forge/dynamic-forms';\nimport { DynamicTextPipe, injectNgForgeAddonAction, NgForgeAddonAction, resolveDynamicValue } from '@ng-forge/dynamic-forms/integration';\nimport { explicitEffect } from 'ngxtension/explicit-effect';\nimport type { IonicButtonAddon } from './addons';\n\n/**\n * Inline `ion-button` addon whose host is the slotted Ionic button itself.\n * It lives in the shared entry because the lazily loaded input component\n * consumes it while the primary package must not pull in field renderers.\n */\n@Component({\n selector: 'ion-button[df-ion-button-addon]',\n imports: [IonIcon, IonSpinner, DynamicTextPipe, AsyncPipe],\n hostDirectives: [NgForgeAddonAction],\n template: `\n @if (action.loading()) {\n <ion-spinner [slot]=\"iconOnly() ? 'icon-only' : 'start'\" name=\"dots\"></ion-spinner>\n <span class=\"df-ion-sr-only\" role=\"status\">Loading…</span>\n } @else if (icon(); as ic) {\n <ion-icon [name]=\"ic\" [slot]=\"iconOnly() ? 'icon-only' : 'start'\"></ion-icon>\n }\n @if (label(); as lbl) {\n {{ lbl | dynamicText | async }}\n }\n `,\n styles: [\n `\n .df-ion-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n ],\n host: {\n '[attr.color]': 'color() ?? null',\n '[attr.fill]': 'fill()',\n '[attr.disabled]': 'action.disabled() || action.loading() ? \"true\" : null',\n '[attr.aria-label]': 'resolvedAriaLabel() ?? null',\n '[attr.aria-busy]': 'action.loading() || null',\n '(click)': 'action.dispatch()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IonicInlineButtonAddonComponent {\n private readonly injector = inject(Injector);\n protected readonly action = injectNgForgeAddonAction<IonicButtonAddon>();\n\n protected readonly addon = this.action.addon;\n protected readonly label = computed(() => this.addon().label);\n protected readonly ariaLabel = computed(() => this.addon().ariaLabel);\n protected readonly icon = computed(() => this.addon().icon);\n protected readonly color = computed(() => this.addon().color);\n protected readonly fill = computed(() => this.addon().fill ?? 'clear');\n protected readonly iconOnly = computed(() => !!this.icon() && !this.label());\n\n private readonly ariaLabelSignal = signal<Signal<string | undefined> | undefined>(undefined);\n protected readonly resolvedAriaLabel = computed(() => this.ariaLabelSignal()?.() ?? undefined);\n\n constructor() {\n explicitEffect([this.ariaLabel], ([raw]) => {\n if (raw === undefined) {\n this.ariaLabelSignal.set(undefined);\n return;\n }\n this.ariaLabelSignal.set(resolveDynamicValue<string | undefined>(raw as DynamicText, undefined, this.injector));\n });\n }\n}\n","import type { AddonActionContext, AddonActionPreset } from '@ng-forge/dynamic-forms';\nimport { runPresetAction, type PresetCollaborators } from '@ng-forge/dynamic-forms/integration';\n\nexport type { PresetCollaborators };\n\n/** Ionic adapter binding for the shared preset runner. */\nexport function runIonicPresetAction(\n preset: AddonActionPreset,\n context: AddonActionContext,\n collaborators: PresetCollaborators,\n): Promise<void> {\n return runPresetAction(preset, context, collaborators, 'Ionic', 'ion-input');\n}\n"],"mappings":"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"}