@ng-forge/dynamic-forms 0.10.0-next.3 → 1.0.0-rc.1
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/{ng-forge-dynamic-forms-array-field.component-D6GEsH72.mjs → ng-forge-dynamic-forms-array-field.component-By12r5Cj.mjs} +49 -27
- package/fesm2022/ng-forge-dynamic-forms-array-field.component-By12r5Cj.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-QJzwEYSj.mjs +2347 -0
- package/fesm2022/ng-forge-dynamic-forms-bootstrap-derivation-orchestrator-QJzwEYSj.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-container-field.component-BluTT44A.mjs → ng-forge-dynamic-forms-container-field.component-BGFguOa9.mjs} +23 -14
- package/fesm2022/ng-forge-dynamic-forms-container-field.component-BGFguOa9.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-container-utils-diYAWMa_.mjs → ng-forge-dynamic-forms-container-utils-BZFz6ztF.mjs} +4 -3
- package/fesm2022/ng-forge-dynamic-forms-container-utils-BZFz6ztF.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-css-wrapper.component-CgMQOaG7.mjs → ng-forge-dynamic-forms-css-wrapper.component-AScQAJTQ.mjs} +9 -7
- package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-AScQAJTQ.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-emit-initialization-CB86IMsQ.mjs → ng-forge-dynamic-forms-emit-initialization-DhHwU6FJ.mjs} +2 -2
- package/fesm2022/ng-forge-dynamic-forms-emit-initialization-DhHwU6FJ.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-group-field.component-2bWHql4u.mjs → ng-forge-dynamic-forms-group-field.component-Bz4GD8Hy.mjs} +43 -24
- package/fesm2022/ng-forge-dynamic-forms-group-field.component-Bz4GD8Hy.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs +130 -85
- package/fesm2022/ng-forge-dynamic-forms-integration.mjs.map +1 -1
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs +3374 -0
- package/fesm2022/ng-forge-dynamic-forms-internal.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-DTkMZcnb.mjs +5425 -0
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-DTkMZcnb.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-page-field.component-zF-vEv5V.mjs → ng-forge-dynamic-forms-page-field.component-CjCd5Byo.mjs} +27 -16
- package/fesm2022/ng-forge-dynamic-forms-page-field.component-CjCd5Byo.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-row-wrapper.component-CwkYn5yl.mjs → ng-forge-dynamic-forms-row-wrapper.component-BlVa801t.mjs} +6 -5
- package/fesm2022/ng-forge-dynamic-forms-row-wrapper.component-BlVa801t.mjs.map +1 -0
- package/fesm2022/{ng-forge-dynamic-forms-text-field.component-_8_vVeH0.mjs → ng-forge-dynamic-forms-text-field.component-CNCpmf5_.mjs} +19 -12
- package/fesm2022/ng-forge-dynamic-forms-text-field.component-CNCpmf5_.mjs.map +1 -0
- package/fesm2022/ng-forge-dynamic-forms.mjs +2 -1
- package/fesm2022/ng-forge-dynamic-forms.mjs.map +1 -1
- package/package.json +17 -4
- package/schematics/collection.json +10 -0
- package/schematics/generators.json +12 -0
- package/schematics/ng-add/index.js +87 -0
- package/schematics/ng-add/index.js.map +1 -0
- package/schematics/ng-add/nx-wrapper.js +5 -0
- package/schematics/ng-add/nx-wrapper.js.map +1 -0
- package/schematics/ng-add/recipes.js +60 -0
- package/schematics/ng-add/recipes.js.map +1 -0
- package/schematics/ng-add/rules/add-packages.js +73 -0
- package/schematics/ng-add/rules/add-packages.js.map +1 -0
- package/schematics/ng-add/rules/add-providers.js +132 -0
- package/schematics/ng-add/rules/add-providers.js.map +1 -0
- package/schematics/ng-add/rules/add-styles.js +123 -0
- package/schematics/ng-add/rules/add-styles.js.map +1 -0
- package/schematics/ng-add/schema.json +48 -0
- package/schematics/package.json +1 -0
- package/schematics/versions.js +33 -0
- package/schematics/versions.js.map +1 -0
- package/types/ng-forge-dynamic-forms-integration.d.ts +4 -2
- package/types/ng-forge-dynamic-forms-internal.d.ts +3508 -0
- package/types/ng-forge-dynamic-forms.d.ts +16 -2734
- package/fesm2022/ng-forge-dynamic-forms-array-field.component-D6GEsH72.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-container-field.component-BluTT44A.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-container-utils-diYAWMa_.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-css-wrapper.component-CgMQOaG7.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-emit-initialization-CB86IMsQ.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-group-field.component-2bWHql4u.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CPkVjU_N.mjs +0 -10876
- package/fesm2022/ng-forge-dynamic-forms-ng-forge-dynamic-forms-CPkVjU_N.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-page-field.component-zF-vEv5V.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-row-wrapper.component-CwkYn5yl.mjs.map +0 -1
- package/fesm2022/ng-forge-dynamic-forms-text-field.component-_8_vVeH0.mjs.map +0 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addPackages = addPackages;
|
|
4
|
+
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
5
|
+
const dependencies_1 = require("@schematics/angular/utility/dependencies");
|
|
6
|
+
const versions_1 = require("../../versions");
|
|
7
|
+
const CORE_PACKAGE = {
|
|
8
|
+
name: '@ng-forge/dynamic-forms',
|
|
9
|
+
version: versions_1.VERSIONS['@ng-forge/dynamic-forms'],
|
|
10
|
+
};
|
|
11
|
+
// provideAnimations() (wired unless providers are skipped) imports from
|
|
12
|
+
// @angular/platform-browser/animations, which needs @angular/animations —
|
|
13
|
+
// not present in a fresh Angular app.
|
|
14
|
+
// This is installed even for the `none` (core-only) adapter, because the
|
|
15
|
+
// schematic still wires provideAnimations() unconditionally on the providers
|
|
16
|
+
// path. Pass --skipProviders to opt out of both the wiring and the install.
|
|
17
|
+
const ANIMATIONS_PACKAGE = {
|
|
18
|
+
name: '@angular/animations',
|
|
19
|
+
version: versions_1.VERSIONS['@angular/animations'],
|
|
20
|
+
};
|
|
21
|
+
function addPackages(recipe, includeAnimations, state) {
|
|
22
|
+
return (tree, ctx) => {
|
|
23
|
+
const all = [CORE_PACKAGE, ...(includeAnimations ? [ANIMATIONS_PACKAGE] : []), ...recipe.packages];
|
|
24
|
+
// @angular/animations ships from the core monorepo and pins @angular/core
|
|
25
|
+
// to its EXACT patch version. So it must match the installed core exactly,
|
|
26
|
+
// otherwise npm resolves the range to a newer patch and the peer check
|
|
27
|
+
// fails (e.g. animations@21.2.15 vs core@21.2.14). Material/CDK are a
|
|
28
|
+
// separate train (peer `^21.0.0`) and keep their declared range.
|
|
29
|
+
const angularVersion = getInstalledAngularVersion(tree);
|
|
30
|
+
let added = 0;
|
|
31
|
+
for (const pkg of all) {
|
|
32
|
+
const existing = (0, dependencies_1.getPackageJsonDependency)(tree, pkg.name);
|
|
33
|
+
if (existing) {
|
|
34
|
+
ctx.logger.info(`${pkg.name} already declared (${existing.version}); leaving as-is.`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const version = pkg.name === '@angular/animations' && angularVersion ? angularVersion : pkg.version;
|
|
38
|
+
(0, dependencies_1.addPackageJsonDependency)(tree, {
|
|
39
|
+
type: dependencies_1.NodeDependencyType.Default,
|
|
40
|
+
name: pkg.name,
|
|
41
|
+
version,
|
|
42
|
+
overwrite: false,
|
|
43
|
+
});
|
|
44
|
+
added++;
|
|
45
|
+
}
|
|
46
|
+
if (added > 0) {
|
|
47
|
+
ctx.addTask(new tasks_1.NodePackageInstallTask());
|
|
48
|
+
}
|
|
49
|
+
state.added = added;
|
|
50
|
+
return tree;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Exact installed @angular/core version (e.g. "21.2.14"), so @angular/*
|
|
55
|
+
* packages we add lockstep with it. Prefers the resolved version in
|
|
56
|
+
* node_modules; falls back to the spec in package.json; null if neither.
|
|
57
|
+
*/
|
|
58
|
+
function getInstalledAngularVersion(tree) {
|
|
59
|
+
const corePkgPath = '/node_modules/@angular/core/package.json';
|
|
60
|
+
if (tree.exists(corePkgPath)) {
|
|
61
|
+
try {
|
|
62
|
+
const json = JSON.parse(tree.read(corePkgPath).toString('utf-8'));
|
|
63
|
+
if (typeof json.version === 'string' && json.version.length > 0) {
|
|
64
|
+
return json.version;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// fall through to package.json spec
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return (0, dependencies_1.getPackageJsonDependency)(tree, '@angular/core')?.version ?? null;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=add-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-packages.js","sourceRoot":"","sources":["../../../../../../packages/dynamic-forms/schematics/ng-add/rules/add-packages.ts"],"names":[],"mappings":";;AAgCA,kCAkCC;AAjED,4DAA0E;AAC1E,2EAAkI;AAGlI,6CAA0C;AAW1C,MAAM,YAAY,GAAgB;IAChC,IAAI,EAAE,yBAAyB;IAC/B,OAAO,EAAE,mBAAQ,CAAC,yBAAyB,CAAC;CAC7C,CAAC;AAEF,wEAAwE;AACxE,0EAA0E;AAC1E,sCAAsC;AACtC,yEAAyE;AACzE,6EAA6E;AAC7E,4EAA4E;AAC5E,MAAM,kBAAkB,GAAgB;IACtC,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,mBAAQ,CAAC,qBAAqB,CAAC;CACzC,CAAC;AAEF,SAAgB,WAAW,CAAC,MAAqB,EAAE,iBAA0B,EAAE,KAAmB;IAChG,OAAO,CAAC,IAAU,EAAE,GAAqB,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnG,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,sEAAsE;QACtE,iEAAiE;QACjE,MAAM,cAAc,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAA,uCAAwB,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,QAAQ,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,sBAAsB,QAAQ,CAAC,OAAO,mBAAmB,CAAC,CAAC;gBACtF,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,qBAAqB,IAAI,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC;YACpG,IAAA,uCAAwB,EAAC,IAAI,EAAE;gBAC7B,IAAI,EAAE,iCAAkB,CAAC,OAAO;gBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,OAAO;gBACP,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;YACH,KAAK,EAAE,CAAC;QACV,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,GAAG,CAAC,OAAO,CAAC,IAAI,8BAAsB,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QAEpB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,0BAA0B,CAAC,IAAU;IAC5C,MAAM,WAAW,GAAG,0CAA0C,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA0B,CAAC;YAC5F,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChE,OAAO,IAAI,CAAC,OAAO,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;IACH,CAAC;IACD,OAAO,IAAA,uCAAwB,EAAC,IAAI,EAAE,eAAe,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addProviders = addProviders;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const ast_utils_1 = require("@schematics/angular/utility/ast-utils");
|
|
6
|
+
const rules_1 = require("@schematics/angular/utility/standalone/rules");
|
|
7
|
+
const app_config_1 = require("@schematics/angular/utility/standalone/app_config");
|
|
8
|
+
const util_1 = require("@schematics/angular/utility/standalone/util");
|
|
9
|
+
function addProviders(recipe, legacyStatusClasses, projectName) {
|
|
10
|
+
return (tree, ctx) => {
|
|
11
|
+
// No target project (workspace has no application, or the workspace file
|
|
12
|
+
// couldn't be read). Don't guess a name — addRootProvider would throw and
|
|
13
|
+
// abort the whole ng-add. Warn and skip, mirroring addStyles' behaviour.
|
|
14
|
+
if (!projectName) {
|
|
15
|
+
ctx.logger.warn('No application project found; skipping provider wiring. ' +
|
|
16
|
+
'Add provideDynamicForm(...) to your ApplicationConfig manually — see ' +
|
|
17
|
+
'https://ng-forge.com/dynamic-forms/getting-started');
|
|
18
|
+
return tree;
|
|
19
|
+
}
|
|
20
|
+
const project = projectName;
|
|
21
|
+
return (0, schematics_1.chain)([
|
|
22
|
+
maybeAddRootProvider(project, 'provideAnimations', ({ code, external }) => code `${external('provideAnimations', '@angular/platform-browser/animations')}()`),
|
|
23
|
+
...recipe.adapterProviders.flatMap((spec) => adapterProviderRules(project, spec)),
|
|
24
|
+
maybeAddRootProvider(project, 'provideDynamicForm', ({ code, external }) => {
|
|
25
|
+
const provide = external('provideDynamicForm', '@ng-forge/dynamic-forms');
|
|
26
|
+
if (recipe.withFields === null) {
|
|
27
|
+
return code `${provide}()`;
|
|
28
|
+
}
|
|
29
|
+
const withFields = external(recipe.withFields.symbol, recipe.withFields.from);
|
|
30
|
+
if (legacyStatusClasses) {
|
|
31
|
+
const withLegacy = external('withLegacyStatusClasses', '@ng-forge/dynamic-forms');
|
|
32
|
+
return code `${provide}(...${withFields}(), ${withLegacy}())`;
|
|
33
|
+
}
|
|
34
|
+
return code `${provide}(...${withFields}())`;
|
|
35
|
+
}),
|
|
36
|
+
]);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function adapterProviderRules(project, spec) {
|
|
40
|
+
return [
|
|
41
|
+
...spec.defaultImports.map((imp) => addDefaultImportRule(imp.symbol, imp.from, project)),
|
|
42
|
+
maybeAddRootProvider(project, spec.marker, spec.builder),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
function addDefaultImportRule(symbol, module, project) {
|
|
46
|
+
return async (tree, ctx) => {
|
|
47
|
+
let mainFilePath;
|
|
48
|
+
try {
|
|
49
|
+
mainFilePath = await (0, util_1.getMainFilePath)(tree, project);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
ctx.logger.warn(`Could not locate main.ts; skipping default import for ${symbol}.`);
|
|
53
|
+
return tree;
|
|
54
|
+
}
|
|
55
|
+
let filePath = mainFilePath;
|
|
56
|
+
try {
|
|
57
|
+
const bootstrapCall = (0, util_1.findBootstrapApplicationCall)(tree, mainFilePath);
|
|
58
|
+
const appConfig = (0, app_config_1.findAppConfig)(bootstrapCall, tree, mainFilePath);
|
|
59
|
+
if (appConfig) {
|
|
60
|
+
filePath = appConfig.filePath;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// fall back to main.ts
|
|
65
|
+
}
|
|
66
|
+
// insertImport throws (rather than no-op'ing) for an already-present
|
|
67
|
+
// DEFAULT import, so guard idempotency ourselves before calling it.
|
|
68
|
+
// Strip comments first so a commented-out import doesn't suppress the
|
|
69
|
+
// real insertion.
|
|
70
|
+
const existing = stripJsComments(tree.read(filePath)?.toString('utf-8') ?? '');
|
|
71
|
+
const moduleSpecifier = new RegExp(`from\\s+['"]${escapeRegExp(module)}['"]`);
|
|
72
|
+
if (moduleSpecifier.test(existing)) {
|
|
73
|
+
ctx.logger.info(`import ${symbol} from '${module}' already present; skipping.`);
|
|
74
|
+
return tree;
|
|
75
|
+
}
|
|
76
|
+
const source = (0, util_1.getSourceFile)(tree, filePath);
|
|
77
|
+
const change = (0, ast_utils_1.insertImport)(source, filePath, symbol, module, true);
|
|
78
|
+
(0, util_1.applyChangesToFile)(tree, filePath, [change]);
|
|
79
|
+
return tree;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function escapeRegExp(value) {
|
|
83
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Strips line and block comments from JS/TS source for token-presence
|
|
87
|
+
* checks. Naive: doesn't account for `//` or `/*` characters that appear
|
|
88
|
+
* inside string/template literals — those would be unusual and aren't a
|
|
89
|
+
* realistic concern for the call-expression markers we're scanning for.
|
|
90
|
+
*/
|
|
91
|
+
function stripJsComments(source) {
|
|
92
|
+
return source.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/[^\n]*/g, '');
|
|
93
|
+
}
|
|
94
|
+
function maybeAddRootProvider(project, marker, callback) {
|
|
95
|
+
return async (tree, ctx) => {
|
|
96
|
+
const present = await isProviderPresent(tree, project, marker);
|
|
97
|
+
if (present) {
|
|
98
|
+
ctx.logger.info(`${marker}(...) already present in providers; skipping.`);
|
|
99
|
+
return (0, schematics_1.noop)();
|
|
100
|
+
}
|
|
101
|
+
return (0, rules_1.addRootProvider)(project, callback);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async function isProviderPresent(tree, project, marker) {
|
|
105
|
+
let mainFilePath;
|
|
106
|
+
try {
|
|
107
|
+
mainFilePath = await (0, util_1.getMainFilePath)(tree, project);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
let filePath = mainFilePath;
|
|
113
|
+
try {
|
|
114
|
+
const bootstrapCall = (0, util_1.findBootstrapApplicationCall)(tree, mainFilePath);
|
|
115
|
+
const appConfig = (0, app_config_1.findAppConfig)(bootstrapCall, tree, mainFilePath);
|
|
116
|
+
if (appConfig) {
|
|
117
|
+
filePath = appConfig.filePath;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
const buffer = tree.read(filePath);
|
|
124
|
+
if (!buffer) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
// Strip comments so a commented-out reference (e.g. `// provideDynamicForm()`)
|
|
128
|
+
// doesn't cause the schematic to skip real wiring.
|
|
129
|
+
const source = stripJsComments(buffer.toString('utf-8'));
|
|
130
|
+
return new RegExp(`\\b${marker}\\s*\\(`).test(source);
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=add-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-providers.js","sourceRoot":"","sources":["../../../../../../packages/dynamic-forms/schematics/ng-add/rules/add-providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addStyles = addStyles;
|
|
4
|
+
const workspace_1 = require("@schematics/angular/utility/workspace");
|
|
5
|
+
const FALLBACK_STYLES_PATHS = ['src/styles.scss', 'src/styles.css'];
|
|
6
|
+
function addStyles(recipe, projectName) {
|
|
7
|
+
return async (tree, ctx) => {
|
|
8
|
+
if (recipe.styles.length === 0) {
|
|
9
|
+
return tree;
|
|
10
|
+
}
|
|
11
|
+
const stylesPath = await resolveStylesPath(tree, projectName);
|
|
12
|
+
if (!stylesPath) {
|
|
13
|
+
ctx.logger.warn('Could not locate a global styles file from angular.json. Skipping style imports. ' +
|
|
14
|
+
'Add the following imports manually:\n' +
|
|
15
|
+
recipe.styles.map((p) => ` @import '${p}';`).join('\n'));
|
|
16
|
+
return tree;
|
|
17
|
+
}
|
|
18
|
+
const buffer = tree.read(stylesPath);
|
|
19
|
+
const current = buffer ? buffer.toString('utf-8') : '';
|
|
20
|
+
const additions = [];
|
|
21
|
+
for (const style of recipe.styles) {
|
|
22
|
+
if (current.includes(style)) {
|
|
23
|
+
ctx.logger.info(`${style} already imported; skipping.`);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
additions.push(`@import '${style}';`);
|
|
27
|
+
}
|
|
28
|
+
if (additions.length === 0) {
|
|
29
|
+
return tree;
|
|
30
|
+
}
|
|
31
|
+
const block = additions.join('\n');
|
|
32
|
+
const updated = insertImports(current, block);
|
|
33
|
+
tree.overwrite(stylesPath, updated);
|
|
34
|
+
ctx.logger.info(`Added ${additions.length} style import(s) to ${stylesPath}.`);
|
|
35
|
+
return tree;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Inserts the import block near the top, but AFTER any leading `@use` /
|
|
40
|
+
* `@forward` rules. In SCSS those must precede all other statements, so blindly
|
|
41
|
+
* prepending `@import` above them is a compile error. Plain CSS has no such
|
|
42
|
+
* constraint, so for a file with no `@use`/`@forward` this just prepends.
|
|
43
|
+
*/
|
|
44
|
+
function insertImports(current, block) {
|
|
45
|
+
if (current.length === 0) {
|
|
46
|
+
return `${block}\n`;
|
|
47
|
+
}
|
|
48
|
+
const lines = current.split('\n');
|
|
49
|
+
let insertAt = 0;
|
|
50
|
+
let inBlockComment = false;
|
|
51
|
+
for (let i = 0; i < lines.length; i++) {
|
|
52
|
+
const trimmed = lines[i].trim();
|
|
53
|
+
if (inBlockComment) {
|
|
54
|
+
if (trimmed.endsWith('*/')) {
|
|
55
|
+
inBlockComment = false;
|
|
56
|
+
}
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (trimmed === '' || trimmed.startsWith('//')) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (trimmed.startsWith('/*')) {
|
|
63
|
+
// Single-line block comment (e.g. `/* foo */`) stays out of block mode.
|
|
64
|
+
if (!trimmed.endsWith('*/')) {
|
|
65
|
+
inBlockComment = true;
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (trimmed.startsWith('@use ') || trimmed.startsWith('@forward ')) {
|
|
70
|
+
insertAt = i + 1; // insert after the last leading @use/@forward
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
break; // first real rule — stop
|
|
74
|
+
}
|
|
75
|
+
if (insertAt === 0) {
|
|
76
|
+
return `${block}\n${current}`;
|
|
77
|
+
}
|
|
78
|
+
const head = lines.slice(0, insertAt);
|
|
79
|
+
const tail = lines.slice(insertAt);
|
|
80
|
+
return [...head, block, ...tail].join('\n');
|
|
81
|
+
}
|
|
82
|
+
async function resolveStylesPath(tree, projectName) {
|
|
83
|
+
try {
|
|
84
|
+
const workspace = await (0, workspace_1.getWorkspace)(tree);
|
|
85
|
+
const project = projectName ? workspace.projects.get(projectName) : firstApplicationProject(workspace);
|
|
86
|
+
if (!project) {
|
|
87
|
+
return firstFallback(tree);
|
|
88
|
+
}
|
|
89
|
+
const buildTarget = project.targets.get('build');
|
|
90
|
+
const stylesOption = buildTarget?.options?.['styles'];
|
|
91
|
+
if (Array.isArray(stylesOption)) {
|
|
92
|
+
for (const entry of stylesOption) {
|
|
93
|
+
if (typeof entry === 'string' && tree.exists(entry)) {
|
|
94
|
+
return entry;
|
|
95
|
+
}
|
|
96
|
+
if (entry && typeof entry === 'object' && 'input' in entry && typeof entry.input === 'string' && tree.exists(entry.input)) {
|
|
97
|
+
return entry.input;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return firstFallback(tree);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return firstFallback(tree);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function firstApplicationProject(workspace) {
|
|
108
|
+
for (const [, project] of workspace.projects) {
|
|
109
|
+
if (project.extensions['projectType'] === 'application') {
|
|
110
|
+
return project;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
function firstFallback(tree) {
|
|
116
|
+
for (const candidate of FALLBACK_STYLES_PATHS) {
|
|
117
|
+
if (tree.exists(candidate)) {
|
|
118
|
+
return candidate;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=add-styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-styles.js","sourceRoot":"","sources":["../../../../../../packages/dynamic-forms/schematics/ng-add/rules/add-styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "NgForgeDynamicFormsNgAdd",
|
|
4
|
+
"title": "ng-forge dynamic-forms ng-add",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Project to target. Defaults to the workspace default project.",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"adapter": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Which UI adapter to wire up.",
|
|
17
|
+
"enum": ["material", "bootstrap", "primeng", "ionic", "none"],
|
|
18
|
+
"x-prompt": {
|
|
19
|
+
"message": "Which UI adapter should ng-forge use?",
|
|
20
|
+
"type": "list",
|
|
21
|
+
"items": [
|
|
22
|
+
{ "value": "material", "label": "Angular Material" },
|
|
23
|
+
{ "value": "bootstrap", "label": "Bootstrap" },
|
|
24
|
+
{ "value": "primeng", "label": "PrimeNG" },
|
|
25
|
+
{ "value": "ionic", "label": "Ionic" },
|
|
26
|
+
{ "value": "none", "label": "Core only (no adapter)" }
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"legacyStatusClasses": {
|
|
31
|
+
"type": "boolean",
|
|
32
|
+
"default": true,
|
|
33
|
+
"description": "Add withLegacyStatusClasses() to enable legacy .ng-touched / .ng-invalid CSS classes.",
|
|
34
|
+
"x-prompt": "Enable legacy .ng-touched / .ng-invalid CSS classes? (recommended)"
|
|
35
|
+
},
|
|
36
|
+
"skipStyles": {
|
|
37
|
+
"type": "boolean",
|
|
38
|
+
"default": false,
|
|
39
|
+
"description": "Do not modify the global styles file."
|
|
40
|
+
},
|
|
41
|
+
"skipProviders": {
|
|
42
|
+
"type": "boolean",
|
|
43
|
+
"default": false,
|
|
44
|
+
"description": "Do not modify the host ApplicationConfig."
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"required": ["adapter"]
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VERSIONS = void 0;
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_path_1 = require("node:path");
|
|
6
|
+
function readOwnManifest() {
|
|
7
|
+
try {
|
|
8
|
+
return JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return {};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const manifest = readOwnManifest();
|
|
15
|
+
const NG_FORGE = manifest.version ? `~${manifest.version}` : '~0.9.0';
|
|
16
|
+
const ANGULAR = manifest.peerDependencies?.['@angular/core'] ?? '~21.2.0';
|
|
17
|
+
const THIRD_PARTY = manifest.ngForgeSchematicDeps ?? {};
|
|
18
|
+
exports.VERSIONS = {
|
|
19
|
+
'@ng-forge/dynamic-forms': NG_FORGE,
|
|
20
|
+
'@ng-forge/dynamic-forms-material': NG_FORGE,
|
|
21
|
+
'@ng-forge/dynamic-forms-bootstrap': NG_FORGE,
|
|
22
|
+
'@ng-forge/dynamic-forms-primeng': NG_FORGE,
|
|
23
|
+
'@ng-forge/dynamic-forms-ionic': NG_FORGE,
|
|
24
|
+
'@angular/animations': ANGULAR,
|
|
25
|
+
'@angular/material': ANGULAR,
|
|
26
|
+
'@angular/cdk': ANGULAR,
|
|
27
|
+
bootstrap: THIRD_PARTY['bootstrap'] ?? '^5.3.0',
|
|
28
|
+
primeng: THIRD_PARTY['primeng'] ?? '^21.0.0',
|
|
29
|
+
'@primeuix/themes': THIRD_PARTY['@primeuix/themes'] ?? '^2.0.0',
|
|
30
|
+
primeicons: THIRD_PARTY['primeicons'] ?? '^7.0.0',
|
|
31
|
+
'@ionic/angular': THIRD_PARTY['@ionic/angular'] ?? '^8.8.0',
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../packages/dynamic-forms/schematics/versions.ts"],"names":[],"mappings":";;;AAAA,qCAAuC;AACvC,yCAAiC;AAQjC,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAA,gBAAI,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAa,CAAC;IAC9F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;AAEnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtE,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC;AAC1E,MAAM,WAAW,GAAG,QAAQ,CAAC,oBAAoB,IAAI,EAAE,CAAC;AAE3C,QAAA,QAAQ,GAAG;IACtB,yBAAyB,EAAE,QAAQ;IACnC,kCAAkC,EAAE,QAAQ;IAC5C,mCAAmC,EAAE,QAAQ;IAC7C,iCAAiC,EAAE,QAAQ;IAC3C,+BAA+B,EAAE,QAAQ;IACzC,qBAAqB,EAAE,OAAO;IAC9B,mBAAmB,EAAE,OAAO;IAC5B,cAAc,EAAE,OAAO;IACvB,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,QAAQ;IAC/C,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,IAAI,SAAS;IAC5C,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,IAAI,QAAQ;IAC/D,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,IAAI,QAAQ;IACjD,gBAAgB,EAAE,WAAW,CAAC,gBAAgB,CAAC,IAAI,QAAQ;CAC3B,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { FormEvent,
|
|
2
|
-
export { FieldWrapper, InferWrapperRegistry, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType,
|
|
1
|
+
import { FormEvent, FormEventConstructor, NextPageEvent, PreviousPageEvent, FieldWithValidation, ArrayItemContext, BaseAddon, AddonActionHandler, DynamicValue } from '@ng-forge/dynamic-forms';
|
|
2
|
+
export { ADDON_ACTION_HANDLERS, ADDON_ACTION_REGISTRY, ADDON_KIND_COMPONENT_CACHE, ADDON_KIND_DEFINITIONS, ADDON_KIND_REGISTRY, AddonActionHandler, BUILT_IN_FIELDS, FieldAddonSupportEntry, FieldWrapper, InferWrapperRegistry, NonFieldLogicConfig, NonFieldLogicContext, NonFieldLogicType, PresetCollaborators, WrapperRegistration, WrapperTypeDefinition, WrappersBundle, createWrappers, injectAddonKindRegistry, injectFieldsSupportingAddons, isWrappersBundle, resolveNonFieldDisabled, resolveNonFieldHidden, runPresetAction, wrapperProps } from '@ng-forge/dynamic-forms';
|
|
3
|
+
import { FieldDef, StateLogicConfig, BaseCheckedField, FieldMeta, BaseValueField, FieldOption, ArrayAllowedChildren, NonFieldLogicConfig, ValidationMessages, DynamicText, AnyAddon, WrapperFieldInputs, AddonActionContext, EventBus } from '@ng-forge/dynamic-forms/internal';
|
|
4
|
+
export { ARRAY_CONTEXT, ArrayContext, ArrayFieldTree, CheckedFieldComponent, DEFAULT_PROPS, DEFAULT_VALIDATION_MESSAGES, DEFAULT_WRAPPERS, DynamicTextPipe, EventBus, FIELD_REGISTRY, FIELD_SIGNAL_CONTEXT, FORM_OPTIONS, FieldScope, FieldSignalContext, FieldStateContext, FieldStateInfo, FieldTypeDefinition, FormFieldStateMap, GROUP_CONTEXT, HttpResourceRequest, INITIALIZATION_TIMEOUT_MS, MapperFn, ReadonlyFieldTree, RootFormRegistryService, ValueFieldComponent, ValueHandlingMode, WrapperFieldInputs, applyMetaToElement, applyValidator, applyValidators, arrayFieldMapper, baseFieldMapper, buildBaseInputs, containerFieldMapper, dynamicTextToObservable, getArrayLength, groupFieldMapper, injectFieldSignalContext, interpolateParams, isEqual, pageFieldMapper, resolveDynamicValue, resolveTokens, rowFieldMapper, textFieldMapper, toReadonlyFieldTree, withPreviousValue, writeToFieldValue } from '@ng-forge/dynamic-forms/internal';
|
|
3
5
|
import * as i0 from '@angular/core';
|
|
4
6
|
import { Signal, Injector, ElementRef, InjectionToken, Provider, WritableSignal, Type } from '@angular/core';
|
|
5
7
|
import { FieldTree, SchemaPath } from '@angular/forms/signals';
|