@ng-forge/dynamic-forms-ionic 0.9.0-next.9 → 0.9.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-forge/dynamic-forms-ionic",
3
- "version": "0.9.0-next.9",
3
+ "version": "0.9.0",
4
4
  "description": "Ionic integration for @ng-forge/dynamic-forms. Pre-built Ionic form components for mobile and desktop.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -25,6 +25,16 @@
25
25
  "ng-forge"
26
26
  ],
27
27
  "sideEffects": true,
28
+ "exports": {
29
+ ".": {
30
+ "default": "./fesm2022/ng-forge-dynamic-forms-ionic.mjs",
31
+ "types": "./types/ng-forge-dynamic-forms-ionic.d.ts"
32
+ },
33
+ "./styles/defaults": "./styles/_defaults.scss",
34
+ "./package.json": {
35
+ "default": "./package.json"
36
+ }
37
+ },
28
38
  "engines": {
29
39
  "node": ">=20"
30
40
  },
@@ -33,7 +43,7 @@
33
43
  "@angular/core": "~21.2.0",
34
44
  "@angular/forms": "~21.2.0",
35
45
  "@ionic/angular": ">=7.0.0",
36
- "@ng-forge/dynamic-forms": "~0.9.0-next.9",
46
+ "@ng-forge/dynamic-forms": "~0.9.0",
37
47
  "rxjs": ">=7.0.0"
38
48
  },
39
49
  "dependencies": {
@@ -41,14 +51,5 @@
41
51
  "tslib": "^2.3.0"
42
52
  },
43
53
  "module": "fesm2022/ng-forge-dynamic-forms-ionic.mjs",
44
- "typings": "types/ng-forge-dynamic-forms-ionic.d.ts",
45
- "exports": {
46
- "./package.json": {
47
- "default": "./package.json"
48
- },
49
- ".": {
50
- "types": "./types/ng-forge-dynamic-forms-ionic.d.ts",
51
- "default": "./fesm2022/ng-forge-dynamic-forms-ionic.mjs"
52
- }
53
- }
54
- }
54
+ "typings": "types/ng-forge-dynamic-forms-ionic.d.ts"
55
+ }
@@ -0,0 +1,111 @@
1
+ /*
2
+ * Ionic form defaults.
3
+ *
4
+ * Opinionated host-framework defaults for Ionic apps. Library SCSS uses
5
+ * `var(--df-name, structural-fallback)` for layout-essential vars so forms
6
+ * render usefully without any opt-in. These mixins layer in the rest —
7
+ * color, typography, focus accent — that an Ionic app expects.
8
+ *
9
+ * Usage (in your app's global stylesheet):
10
+ *
11
+ * @use '@ng-forge/dynamic-forms-ionic/styles/defaults' as df;
12
+ *
13
+ * :root {
14
+ * @include df.apply-ionic-form-defaults;
15
+ * }
16
+ *
17
+ * Ionic doesn't auto-style components when `.ng-invalid` is set, so error
18
+ * styling depends on the `.ng-touched` / `.ng-invalid` compat classes from
19
+ * `withLegacyStatusClasses()`. If you opt into that feature, also include
20
+ * `apply-ionic-legacy-error-styles` once at the document level — the mixin
21
+ * emits unscoped `ion-*` selectors and matches globally regardless of where
22
+ * it's included:
23
+ *
24
+ * provideDynamicForm(...withIonicFields(), withLegacyStatusClasses())
25
+ *
26
+ * @include df.apply-ionic-legacy-error-styles;
27
+ */
28
+
29
+ @mixin form-grid-defaults {
30
+ --df-grid-columns: 12;
31
+ --df-grid-gap: 0.5rem;
32
+ --df-grid-row-gap: 0.5rem;
33
+
34
+ --df-grid-gap-sm: 0.5rem;
35
+ --df-grid-gap-md: 0.5rem;
36
+ --df-grid-gap-lg: 0.5rem;
37
+ --df-grid-gap-xl: 0.5rem;
38
+
39
+ --df-grid-row-gap-sm: 0.5rem;
40
+ --df-grid-row-gap-md: 0.5rem;
41
+ --df-grid-row-gap-lg: 0.5rem;
42
+ --df-grid-row-gap-xl: 0.5rem;
43
+
44
+ --df-array-item-gap: var(--df-grid-row-gap);
45
+
46
+ --df-focus-color: var(--ion-color-primary, #3880ff);
47
+ }
48
+
49
+ @mixin form-page-defaults {
50
+ --df-page-custom-spacing: 1.5rem;
51
+ --df-page-transition-duration: 0.3s;
52
+ --df-page-transition-timing: ease-in-out;
53
+ --df-page-slide-offset: -10px;
54
+ }
55
+
56
+ @mixin form-ionic-defaults {
57
+ --df-field-gap: 0.5rem;
58
+ --df-label-font-weight: 500;
59
+ --df-label-color: inherit;
60
+ --df-hint-color: var(--ion-color-medium, #92949c);
61
+ --df-hint-font-size: 0.875rem;
62
+ --df-error-color: var(--ion-color-danger, #eb445a);
63
+ --df-error-font-size: 0.875rem;
64
+ }
65
+
66
+ @mixin apply-ionic-form-defaults {
67
+ @include form-grid-defaults;
68
+ @include form-page-defaults;
69
+ @include form-ionic-defaults;
70
+ }
71
+
72
+ // Error-state colors for Ionic components, keyed on the legacy ng-touched /
73
+ // ng-invalid classes from `withLegacyStatusClasses()`. The selectors are
74
+ // unscoped `ion-*` element matches — include once at the document level.
75
+ // Fallback values match Ionic's documented defaults so the rules still
76
+ // produce sensible colors if `--ion-color-danger` isn't defined for some
77
+ // reason (e.g. Ionic CSS not loaded yet, or themed-out).
78
+ @mixin apply-ionic-legacy-error-styles {
79
+ ion-input.ng-invalid.ng-touched,
80
+ ion-textarea.ng-invalid.ng-touched {
81
+ --highlight-color: var(--ion-color-danger, #eb445a);
82
+ --border-color: var(--ion-color-danger, #eb445a);
83
+ }
84
+
85
+ ion-select.ng-invalid.ng-touched {
86
+ --highlight-color: var(--ion-color-danger, #eb445a);
87
+ --border-color: var(--ion-color-danger, #eb445a);
88
+ }
89
+
90
+ ion-checkbox.ng-invalid.ng-touched {
91
+ --checkbox-background-checked: var(--ion-color-danger, #eb445a);
92
+ --border-color: var(--ion-color-danger, #eb445a);
93
+ --border-color-checked: var(--ion-color-danger, #eb445a);
94
+ }
95
+
96
+ ion-radio.ng-invalid.ng-touched {
97
+ --color: var(--ion-color-danger, #eb445a);
98
+ --color-checked: var(--ion-color-danger, #eb445a);
99
+ }
100
+
101
+ ion-range.ng-invalid.ng-touched {
102
+ --bar-background: var(--ion-color-danger, #eb445a);
103
+ --knob-background: var(--ion-color-danger, #eb445a);
104
+ }
105
+
106
+ ion-toggle.ng-invalid.ng-touched {
107
+ --track-background: var(--ion-color-danger-tint, #f4707d);
108
+ --track-background-checked: var(--ion-color-danger, #eb445a);
109
+ --handle-background-checked: var(--ion-color-danger-contrast, #ffffff);
110
+ }
111
+ }