create-ec-app 1.6.0 → 1.7.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/README.md +21 -14
- package/dist/cssScope.d.ts +2 -1
- package/dist/cssScope.d.ts.map +1 -1
- package/dist/cssScope.js +22 -6
- package/dist/cssScope.js.map +1 -1
- package/dist/index.js +2 -94
- package/dist/index.js.map +1 -1
- package/dist/pcf.d.ts.map +1 -1
- package/dist/pcf.js +9 -37
- package/dist/pcf.js.map +1 -1
- package/dist/portalContainers.d.ts +7 -0
- package/dist/portalContainers.d.ts.map +1 -0
- package/dist/portalContainers.js +118 -0
- package/dist/portalContainers.js.map +1 -0
- package/package.json +1 -1
- package/scripts/check-generated-css-scope.mjs +27 -6
- package/templates/base/src/main.tsx +1 -4
- package/templates/pcf/base/README.md +28 -4
- package/templates/pcf/base/index.ts +30 -6
- package/templates/pcf/base/runtime/PcfAppShell.tsx +17 -0
- package/templates/pcf/base/runtime/emptyStyles.js +1 -0
- package/templates/pcf/base/webpack.config.js +13 -0
- package/templates/targets/webresource/README.md +19 -6
- package/templates/ui/kendo/src/main.patch.tsx +1 -4
- package/templates/base/src/runtime/EcAppShell.tsx +0 -21
package/README.md
CHANGED
|
@@ -88,18 +88,12 @@ That shared CSS defines shadcn's Tailwind v4 custom variants and utilities, incl
|
|
|
88
88
|
|
|
89
89
|
After generation, the CLI applies small compatibility fixes for app embedding:
|
|
90
90
|
|
|
91
|
-
- Radix/Base UI portals
|
|
91
|
+
- Radix/Base UI portals are prepared to use a PCF-local portal root when a PCF wrapper is generated.
|
|
92
92
|
- Known generated selector issues are normalized so builds stay clean with current Vite/Tailwind.
|
|
93
93
|
|
|
94
94
|
## Style Scoping
|
|
95
95
|
|
|
96
|
-
Generated
|
|
97
|
-
|
|
98
|
-
```tsx
|
|
99
|
-
<div data-ec-app-root="">
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
When a webresource is converted into a PCF wrapper, the generator creates a local `pcf-scoped.css` file in the generated PCF project. That file is copied from the built `dist/main.css` with CSS custom-property rules rewritten under the PCF host selector, so shadcn/Tailwind theme variables stay inside that control without prefixing or scoping every utility selector.
|
|
96
|
+
Generated webresources use normal Tailwind/shadcn CSS by default. When a webresource is converted into a PCF wrapper, the generator creates a local PCF shell and a local `pcf-scoped.css` file in the generated PCF project. That CSS file is copied from the built `dist/main.css` with every non-keyframe selector rewritten under the `.pcf-shell-control[data-pcf-control="..."]` host selector, so Tailwind utilities, base selectors, and shadcn/Tailwind theme variables stay inside that control.
|
|
103
97
|
|
|
104
98
|
## Template Updates
|
|
105
99
|
|
|
@@ -123,10 +117,15 @@ Basic flow:
|
|
|
123
117
|
npm run build
|
|
124
118
|
```
|
|
125
119
|
|
|
126
|
-
2. Run the generator
|
|
120
|
+
2. Run the generator from the webresource root. Point `--pcf-dir` at the webresource root and `--output` at the PCF project folder you want to generate:
|
|
127
121
|
|
|
128
122
|
```bash
|
|
129
|
-
npx create-ec-app@latest
|
|
123
|
+
npx create-ec-app@latest \
|
|
124
|
+
--pcf-dir . \
|
|
125
|
+
--output ./pcf/{{ControlName}} \
|
|
126
|
+
--namespace EC \
|
|
127
|
+
--constructor {{ControlName}} \
|
|
128
|
+
--display-name "Control Name"
|
|
130
129
|
```
|
|
131
130
|
|
|
132
131
|
3. Install dependencies inside that generated PCF directory:
|
|
@@ -134,33 +133,41 @@ npx create-ec-app@latest --pcf-dir ./pcf/{{ControlName}} namespace {{EC}} --cons
|
|
|
134
133
|
```bash
|
|
135
134
|
cd ./pcf/{{ControlName}}
|
|
136
135
|
npm install
|
|
136
|
+
npm run build
|
|
137
137
|
```
|
|
138
138
|
|
|
139
139
|
This writes a standalone PCF project to the `--pcf-dir` folder. The generated control:
|
|
140
140
|
|
|
141
141
|
- imports `src/App.tsx` directly instead of wrapping built HTML in an iframe
|
|
142
142
|
- creates and imports `pcf-scoped.css` from the built `dist/main.css`
|
|
143
|
+
- scopes every non-keyframe CSS selector under the generated PCF host selector
|
|
143
144
|
- creates `src/runtime/types.ts` only if that file does not already exist
|
|
144
145
|
- provides a runtime object with record context and `context.webAPI` access inside the generated PCF shell, following the `PcfBase` pattern
|
|
145
146
|
- mounts your React app directly into the PCF container
|
|
146
147
|
|
|
147
|
-
|
|
148
|
+
Regenerate after app code or CSS changes by running the same sequence again from the webresource root:
|
|
148
149
|
|
|
149
150
|
```bash
|
|
150
|
-
npm install
|
|
151
151
|
npm run build
|
|
152
|
-
npx create-ec-app@latest
|
|
152
|
+
npx create-ec-app@latest \
|
|
153
|
+
--pcf-dir . \
|
|
154
|
+
--output ./pcf/FusionNotebookHost \
|
|
155
|
+
--namespace EC \
|
|
156
|
+
--constructor FusionNotebookHost \
|
|
157
|
+
--display-name "Fusion Notebook Host"
|
|
153
158
|
cd pcf/FusionNotebookHost
|
|
154
159
|
npm install
|
|
155
160
|
npm run build
|
|
156
161
|
```
|
|
157
162
|
|
|
163
|
+
Regeneration removes and recreates the PCF output folder, so keep durable app code in `src` and use generator templates or layers for repeatable PCF-specific changes.
|
|
164
|
+
|
|
158
165
|
What gets generated:
|
|
159
166
|
|
|
160
167
|
- a minimal PCF wrapper project under `pcf/<ConstructorName>`
|
|
161
168
|
- a checked-in PCF shell stamped out from `create-ec-app/templates/pcf/base`
|
|
162
169
|
- direct imports back to your webresource source
|
|
163
|
-
- a generated `pcf-scoped.css` file with CSS
|
|
170
|
+
- a generated `pcf-scoped.css` file with CSS selectors scoped to the PCF control
|
|
164
171
|
|
|
165
172
|
What does not happen:
|
|
166
173
|
|
package/dist/cssScope.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export declare const PCF_SCOPED_CSS_FILE = "pcf-scoped.css";
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function scopeCssForPcf(css: string, controlName: string): string;
|
|
3
|
+
export declare const scopeCssVariablesForPcf: typeof scopeCssForPcf;
|
|
3
4
|
//# sourceMappingURL=cssScope.d.ts.map
|
package/dist/cssScope.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cssScope.d.ts","sourceRoot":"","sources":["../src/cssScope.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,wBAAgB,
|
|
1
|
+
{"version":3,"file":"cssScope.d.ts","sourceRoot":"","sources":["../src/cssScope.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD,wBAAgB,cAAc,CAC7B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GACjB,MAAM,CAgBR;AAED,eAAO,MAAM,uBAAuB,uBAAiB,CAAC"}
|
package/dist/cssScope.js
CHANGED
|
@@ -1,21 +1,32 @@
|
|
|
1
1
|
import postcss from "postcss";
|
|
2
2
|
export const PCF_SCOPED_CSS_FILE = "pcf-scoped.css";
|
|
3
|
-
export function
|
|
4
|
-
const scopeSelector = `.
|
|
3
|
+
export function scopeCssForPcf(css, controlName) {
|
|
4
|
+
const scopeSelector = `.pcf-shell-control[data-pcf-control="${escapeCssAttributeValue(controlName)}"]`;
|
|
5
5
|
const root = postcss.parse(css);
|
|
6
6
|
root.walkRules((rule) => {
|
|
7
|
-
if (
|
|
7
|
+
if (isKeyframesRule(rule)) {
|
|
8
8
|
return;
|
|
9
9
|
}
|
|
10
10
|
rule.selector = scopeSelectorList(rule.selector, scopeSelector);
|
|
11
11
|
});
|
|
12
12
|
return [
|
|
13
|
-
"/* Generated by create-ec-app. CSS
|
|
13
|
+
"/* Generated by create-ec-app. CSS selectors are scoped to this PCF control. */",
|
|
14
14
|
root.toString(),
|
|
15
15
|
].join("\n");
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
export const scopeCssVariablesForPcf = scopeCssForPcf;
|
|
18
|
+
function isKeyframesRule(rule) {
|
|
19
|
+
let parent = rule.parent;
|
|
20
|
+
while (parent) {
|
|
21
|
+
if (parent.type === "atrule") {
|
|
22
|
+
const atRule = parent;
|
|
23
|
+
if (atRule.name.toLowerCase().endsWith("keyframes")) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
parent = parent.parent;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
19
30
|
}
|
|
20
31
|
function scopeSelectorList(selectorList, scopeSelector) {
|
|
21
32
|
const scopedSelectors = new Set();
|
|
@@ -37,9 +48,14 @@ function scopeSingleSelector(selector, scopeSelector) {
|
|
|
37
48
|
if (normalized === ":root" ||
|
|
38
49
|
normalized === ":host" ||
|
|
39
50
|
normalized === "html" ||
|
|
51
|
+
normalized === "body" ||
|
|
52
|
+
normalized === "[data-ec-app-root]" ||
|
|
40
53
|
/^\.ec-app(?:\[.*?\])?$/.test(normalized)) {
|
|
41
54
|
return [scopeSelector];
|
|
42
55
|
}
|
|
56
|
+
if (normalized === "*") {
|
|
57
|
+
return [scopeSelector, `${scopeSelector} *`];
|
|
58
|
+
}
|
|
43
59
|
if (normalized === ".dark" ||
|
|
44
60
|
/^\.ec-app(?:\[.*?\])?\.dark$/.test(normalized)) {
|
|
45
61
|
return [`${scopeSelector}.dark`, `${scopeSelector} .dark`];
|
package/dist/cssScope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cssScope.js","sourceRoot":"","sources":["../src/cssScope.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC;AAEpD,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"cssScope.js","sourceRoot":"","sources":["../src/cssScope.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { cancel, intro, isCancel, log, outro, select, spinner, text, } from "@cl
|
|
|
5
5
|
import fs from "fs-extra";
|
|
6
6
|
import { applyLayer, replaceTokensRecursively } from "./libFunctions.js";
|
|
7
7
|
import { generatePcfFromExistingWebresource } from "./pcf.js";
|
|
8
|
+
import { localizeShadcnPortals } from "./portalContainers.js";
|
|
8
9
|
const { execSync } = await import("node:child_process");
|
|
9
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
11
|
const __dirname = dirname(__filename);
|
|
@@ -112,24 +113,6 @@ async function generateShadcnUi(projectDir) {
|
|
|
112
113
|
await localizeShadcnPortals(projectDir);
|
|
113
114
|
return true;
|
|
114
115
|
}
|
|
115
|
-
async function localizeShadcnPortals(projectDir) {
|
|
116
|
-
const componentsDir = path.join(projectDir, "src", "components", "ui");
|
|
117
|
-
if (!(await fs.pathExists(componentsDir))) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
const entries = await fs.readdir(componentsDir, { withFileTypes: true });
|
|
121
|
-
for (const entry of entries) {
|
|
122
|
-
if (!entry.isFile() || !entry.name.endsWith(".tsx")) {
|
|
123
|
-
continue;
|
|
124
|
-
}
|
|
125
|
-
const filePath = path.join(componentsDir, entry.name);
|
|
126
|
-
const source = await fs.readFile(filePath, "utf8");
|
|
127
|
-
const updated = withGeneratedShadcnCompatibility(withEcPortalContainers(source, filePath));
|
|
128
|
-
if (updated !== source) {
|
|
129
|
-
await fs.writeFile(filePath, updated, "utf8");
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
116
|
async function cleanupCodeAppsScaffold(projectDir) {
|
|
134
117
|
const pathsToRemove = [
|
|
135
118
|
"token.json",
|
|
@@ -152,78 +135,6 @@ async function removeDirIfEmpty(dirPath) {
|
|
|
152
135
|
await fs.remove(dirPath);
|
|
153
136
|
}
|
|
154
137
|
}
|
|
155
|
-
function withEcPortalContainers(source, filePath) {
|
|
156
|
-
const withPortalContainers = source.replace(/<([A-Za-z][A-Za-z0-9]*Primitive)\.Portal\b(?![^>]*\bcontainer=)/g, "<$1.Portal container={portalContainer ?? undefined}");
|
|
157
|
-
if (withPortalContainers === source) {
|
|
158
|
-
return source;
|
|
159
|
-
}
|
|
160
|
-
return addEcPortalImport(addEcPortalHookDeclarations(withPortalContainers, filePath));
|
|
161
|
-
}
|
|
162
|
-
function withGeneratedShadcnCompatibility(source) {
|
|
163
|
-
const withChartAttributeSelectors = removeStandaloneEcPrefixes(source)
|
|
164
|
-
.replace(/\[stroke=#ccc\]/g, "[stroke='#ccc']")
|
|
165
|
-
.replace(/\[stroke=#fff\]/g, "[stroke='#fff']");
|
|
166
|
-
if (!withChartAttributeSelectors.includes('from "react-day-picker"')) {
|
|
167
|
-
return withChartAttributeSelectors;
|
|
168
|
-
}
|
|
169
|
-
return withChartAttributeSelectors.replace(/(\n\s*)table:/g, "$1month_grid:");
|
|
170
|
-
}
|
|
171
|
-
function removeStandaloneEcPrefixes(source) {
|
|
172
|
-
let updated = source;
|
|
173
|
-
let previous;
|
|
174
|
-
do {
|
|
175
|
-
previous = updated;
|
|
176
|
-
updated = updated.replace(/(^|[\s"'])ec:(?=\s|["'])/g, "$1");
|
|
177
|
-
} while (updated !== previous);
|
|
178
|
-
return updated;
|
|
179
|
-
}
|
|
180
|
-
function addEcPortalImport(source) {
|
|
181
|
-
if (source.includes('from "@/runtime/EcAppShell"')) {
|
|
182
|
-
return source;
|
|
183
|
-
}
|
|
184
|
-
const importPattern = /import[\s\S]*?from\s+["'][^"']+["'];?\n|import\s+["'][^"']+["'];?\n/g;
|
|
185
|
-
let insertAt = 0;
|
|
186
|
-
for (const match of source.matchAll(importPattern)) {
|
|
187
|
-
insertAt = (match.index ?? 0) + match[0].length;
|
|
188
|
-
}
|
|
189
|
-
const importLine = 'import { useEcPortalContainer } from "@/runtime/EcAppShell"\n';
|
|
190
|
-
return `${source.slice(0, insertAt)}${importLine}${source.slice(insertAt)}`;
|
|
191
|
-
}
|
|
192
|
-
function addEcPortalHookDeclarations(source, filePath) {
|
|
193
|
-
const lines = source.split("\n");
|
|
194
|
-
const hookBodyLines = new Set();
|
|
195
|
-
for (let index = 0; index < lines.length; index += 1) {
|
|
196
|
-
if (!lines[index]?.includes("container={portalContainer ?? undefined}")) {
|
|
197
|
-
continue;
|
|
198
|
-
}
|
|
199
|
-
const bodyLine = findContainingFunctionBodyLine(lines, index);
|
|
200
|
-
if (bodyLine === undefined) {
|
|
201
|
-
throw new Error(`Could not locate a function body for a shadcn Portal in ${filePath}.`);
|
|
202
|
-
}
|
|
203
|
-
hookBodyLines.add(bodyLine);
|
|
204
|
-
}
|
|
205
|
-
for (const bodyLine of [...hookBodyLines].sort((a, b) => b - a)) {
|
|
206
|
-
if (lines[bodyLine + 1]?.includes("const portalContainer")) {
|
|
207
|
-
continue;
|
|
208
|
-
}
|
|
209
|
-
const indent = lines[bodyLine]?.match(/^(\s*)/)?.[1] ?? "";
|
|
210
|
-
lines.splice(bodyLine + 1, 0, `${indent} const portalContainer = useEcPortalContainer()`);
|
|
211
|
-
}
|
|
212
|
-
return lines.join("\n");
|
|
213
|
-
}
|
|
214
|
-
function findContainingFunctionBodyLine(lines, portalLine) {
|
|
215
|
-
for (let index = portalLine; index >= 0; index -= 1) {
|
|
216
|
-
if (!/^\s*function\s+\w+/.test(lines[index] ?? "")) {
|
|
217
|
-
continue;
|
|
218
|
-
}
|
|
219
|
-
for (let bodyLine = index; bodyLine <= portalLine; bodyLine += 1) {
|
|
220
|
-
if (/\)\s*\{\s*$/.test(lines[bodyLine] ?? "")) {
|
|
221
|
-
return bodyLine;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
return undefined;
|
|
226
|
-
}
|
|
227
138
|
main().catch((err) => {
|
|
228
139
|
console.error(err);
|
|
229
140
|
process.exit(1);
|
|
@@ -429,7 +340,6 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
|
429
340
|
import "@progress/kendo-theme-fluent/dist/all.css";
|
|
430
341
|
import "./index.css";
|
|
431
342
|
import App from "./App.tsx";
|
|
432
|
-
import { EcAppShell } from "./runtime/EcAppShell.tsx";
|
|
433
343
|
|
|
434
344
|
import { AuthProvider } from "./context/AuthContext.tsx";
|
|
435
345
|
|
|
@@ -452,9 +362,7 @@ root.render(
|
|
|
452
362
|
<StrictMode>
|
|
453
363
|
<AuthProvider>
|
|
454
364
|
<QueryClientProvider client={queryClient}>
|
|
455
|
-
<
|
|
456
|
-
<App />
|
|
457
|
-
</EcAppShell>
|
|
365
|
+
<App />
|
|
458
366
|
</QueryClientProvider>
|
|
459
367
|
</AuthProvider>
|
|
460
368
|
</StrictMode>
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/pcf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcf.d.ts","sourceRoot":"","sources":["../src/pcf.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pcf.d.ts","sourceRoot":"","sources":["../src/pcf.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,aAAa;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,wBAAsB,kCAAkC,CACvD,OAAO,EAAE,aAAa,GACpB,OAAO,CAAC;IACV,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACpB,CAAC,CAyGD"}
|
package/dist/pcf.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import path, { dirname } from "node:path";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
3
|
import fs from "fs-extra";
|
|
4
|
-
import { PCF_SCOPED_CSS_FILE,
|
|
4
|
+
import { PCF_SCOPED_CSS_FILE, scopeCssForPcf, } from "./cssScope.js";
|
|
5
5
|
import { applyLayer, replaceTokensRecursively } from "./libFunctions.js";
|
|
6
|
+
import { ensurePortalContainerRuntime, localizeShadcnPortals, } from "./portalContainers.js";
|
|
6
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
7
8
|
const __dirname = dirname(__filename);
|
|
8
9
|
const RUNTIME_TYPES_TEMPLATE = `export interface PcfWebApi {
|
|
@@ -21,30 +22,6 @@ export interface PcfRuntimeContext {
|
|
|
21
22
|
\twebApi: PcfWebApi;
|
|
22
23
|
}
|
|
23
24
|
`;
|
|
24
|
-
function createAppShellTemplate() {
|
|
25
|
-
return `import * as React from "react";
|
|
26
|
-
|
|
27
|
-
const EcPortalContainerContext = React.createContext<HTMLElement | null>(null);
|
|
28
|
-
|
|
29
|
-
export function useEcPortalContainer() {
|
|
30
|
-
\treturn React.useContext(EcPortalContainerContext);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export function EcAppShell({ children }: { children: React.ReactNode }) {
|
|
34
|
-
\tconst [portalContainer, setPortalContainer] =
|
|
35
|
-
\t\tReact.useState<HTMLDivElement | null>(null);
|
|
36
|
-
|
|
37
|
-
\treturn (
|
|
38
|
-
\t\t<div data-ec-app-root="">
|
|
39
|
-
\t\t\t<EcPortalContainerContext.Provider value={portalContainer}>
|
|
40
|
-
\t\t\t\t{children}
|
|
41
|
-
\t\t\t\t<div data-ec-portal-root="" ref={setPortalContainer} />
|
|
42
|
-
\t\t\t</EcPortalContainerContext.Provider>
|
|
43
|
-
\t\t</div>
|
|
44
|
-
\t);
|
|
45
|
-
}
|
|
46
|
-
`;
|
|
47
|
-
}
|
|
48
25
|
export async function generatePcfFromExistingWebresource(options) {
|
|
49
26
|
const projectDir = path.resolve(process.cwd(), options.pcfDir);
|
|
50
27
|
const packageJson = await readJson(path.join(projectDir, "package.json"));
|
|
@@ -65,15 +42,18 @@ export async function generatePcfFromExistingWebresource(options) {
|
|
|
65
42
|
const packageNameToken = options.packageName ?? toKebabCase(constructorName);
|
|
66
43
|
const relToProject = toPosixPath(path.relative(outputDir, projectDir) || ".");
|
|
67
44
|
const appImportPath = ensureRelativeImport(toPosixPath(path.relative(outputDir, path.join(projectDir, "src", "App"))));
|
|
68
|
-
const
|
|
45
|
+
const portalContainerImportPath = ensureRelativeImport(toPosixPath(path.relative(path.join(outputDir, "runtime"), path.join(projectDir, "src", "runtime", "PortalContainer"))));
|
|
69
46
|
const runtimeTypesImportPath = ensureRelativeImport(toPosixPath(path.relative(outputDir, path.join(projectDir, "src", "runtime", "types"))));
|
|
70
47
|
const sourceCssPath = path.join(projectDir, distDirName, "main.css");
|
|
71
48
|
const cssImportPath = ensureRelativeImport(PCF_SCOPED_CSS_FILE);
|
|
72
49
|
await assertFileExists(path.join(projectDir, "src", "App.tsx"), `Could not find src/App.tsx in ${projectDir}.`);
|
|
73
50
|
await assertFileExists(sourceCssPath, `Could not find ${distDirName}/main.css in ${projectDir}. Run the webresource build first.`);
|
|
74
51
|
await ensureRuntimeTypes(projectDir);
|
|
75
|
-
await
|
|
76
|
-
|
|
52
|
+
await ensurePortalContainerRuntime(projectDir);
|
|
53
|
+
await localizeShadcnPortals(projectDir, {
|
|
54
|
+
includeGeneratedCompatibility: false,
|
|
55
|
+
});
|
|
56
|
+
const pcfCss = scopeCssForPcf(await fs.readFile(sourceCssPath, "utf8"), constructorName);
|
|
77
57
|
await fs.remove(outputDir);
|
|
78
58
|
await applyLayer(templateDir, outputDir);
|
|
79
59
|
for (const layerDir of layerDirs) {
|
|
@@ -89,7 +69,7 @@ export async function generatePcfFromExistingWebresource(options) {
|
|
|
89
69
|
PCF_VERSION: version,
|
|
90
70
|
PROJECT_APP_IMPORT: appImportPath,
|
|
91
71
|
PROJECT_CSS_IMPORT: cssImportPath,
|
|
92
|
-
|
|
72
|
+
PROJECT_PORTAL_CONTAINER_IMPORT: portalContainerImportPath,
|
|
93
73
|
PROJECT_NODE_MODULES_TYPES_ROOT: `${relToProject}/node_modules/@types`,
|
|
94
74
|
PROJECT_REACT_ALIAS: `${relToProject}/node_modules/react`,
|
|
95
75
|
PROJECT_REACT_DOM_ALIAS: `${relToProject}/node_modules/react-dom`,
|
|
@@ -113,14 +93,6 @@ async function ensureRuntimeTypes(projectDir) {
|
|
|
113
93
|
await fs.ensureDir(path.dirname(runtimeTypesPath));
|
|
114
94
|
await fs.writeFile(runtimeTypesPath, RUNTIME_TYPES_TEMPLATE, "utf8");
|
|
115
95
|
}
|
|
116
|
-
async function ensureAppShell(projectDir) {
|
|
117
|
-
const appShellPath = path.join(projectDir, "src", "runtime", "EcAppShell.tsx");
|
|
118
|
-
if (await fs.pathExists(appShellPath)) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
await fs.ensureDir(path.dirname(appShellPath));
|
|
122
|
-
await fs.writeFile(appShellPath, createAppShellTemplate(), "utf8");
|
|
123
|
-
}
|
|
124
96
|
async function readJson(filePath) {
|
|
125
97
|
try {
|
|
126
98
|
return await fs.readJson(filePath);
|
package/dist/pcf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcf.js","sourceRoot":"","sources":["../src/pcf.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EACN,mBAAmB,EACnB,
|
|
1
|
+
{"version":3,"file":"pcf.js","sourceRoot":"","sources":["../src/pcf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function ensurePortalContainerRuntime(projectDir: string): Promise<void>;
|
|
2
|
+
interface LocalizeShadcnPortalsOptions {
|
|
3
|
+
includeGeneratedCompatibility?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare function localizeShadcnPortals(projectDir: string, options?: LocalizeShadcnPortalsOptions): Promise<void>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=portalContainers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portalContainers.d.ts","sourceRoot":"","sources":["../src/portalContainers.ts"],"names":[],"mappings":"AAaA,wBAAsB,4BAA4B,CACjD,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,UAAU,4BAA4B;IACrC,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,wBAAsB,qBAAqB,CAC1C,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,4BAAiC,GACxC,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import fs from "fs-extra";
|
|
3
|
+
const PORTAL_CONTAINER_TEMPLATE = `import * as React from "react";
|
|
4
|
+
|
|
5
|
+
export const PortalContainerContext =
|
|
6
|
+
\tReact.createContext<HTMLElement | null>(null);
|
|
7
|
+
|
|
8
|
+
export function usePortalContainer() {
|
|
9
|
+
\treturn React.useContext(PortalContainerContext);
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
export async function ensurePortalContainerRuntime(projectDir) {
|
|
13
|
+
const portalContainerPath = path.join(projectDir, "src", "runtime", "PortalContainer.ts");
|
|
14
|
+
if (await fs.pathExists(portalContainerPath)) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
await fs.ensureDir(path.dirname(portalContainerPath));
|
|
18
|
+
await fs.writeFile(portalContainerPath, PORTAL_CONTAINER_TEMPLATE, "utf8");
|
|
19
|
+
}
|
|
20
|
+
export async function localizeShadcnPortals(projectDir, options = {}) {
|
|
21
|
+
const componentsDir = path.join(projectDir, "src", "components", "ui");
|
|
22
|
+
if (!(await fs.pathExists(componentsDir))) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
await ensurePortalContainerRuntime(projectDir);
|
|
26
|
+
const entries = await fs.readdir(componentsDir, { withFileTypes: true });
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
if (!entry.isFile() || !entry.name.endsWith(".tsx")) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
const filePath = path.join(componentsDir, entry.name);
|
|
32
|
+
const source = await fs.readFile(filePath, "utf8");
|
|
33
|
+
const withPortalContainers = withPortalRuntime(source, filePath);
|
|
34
|
+
const updated = options.includeGeneratedCompatibility === false
|
|
35
|
+
? withPortalContainers
|
|
36
|
+
: withGeneratedShadcnCompatibility(withPortalContainers);
|
|
37
|
+
if (updated !== source) {
|
|
38
|
+
await fs.writeFile(filePath, updated, "utf8");
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function withPortalRuntime(source, filePath) {
|
|
43
|
+
const migratedSource = source.replace(/from ["']@\/runtime\/EcAppShell["']/g, 'from "@/runtime/PortalContainer"');
|
|
44
|
+
const withGenericPortalRuntime = migratedSource
|
|
45
|
+
.replace(/from ["']@\/runtime\/EcPortalContainer["']/g, 'from "@/runtime/PortalContainer"')
|
|
46
|
+
.replace(/\buseEcPortalContainer\b/g, "usePortalContainer");
|
|
47
|
+
const withPortalContainers = withGenericPortalRuntime.replace(/<([A-Za-z][A-Za-z0-9]*Primitive)\.Portal\b(?![^>]*\bcontainer=)/g, "<$1.Portal container={portalContainer ?? undefined}");
|
|
48
|
+
if (withPortalContainers === withGenericPortalRuntime) {
|
|
49
|
+
return withGenericPortalRuntime;
|
|
50
|
+
}
|
|
51
|
+
return addPortalImport(addPortalHookDeclarations(withPortalContainers, filePath));
|
|
52
|
+
}
|
|
53
|
+
function withGeneratedShadcnCompatibility(source) {
|
|
54
|
+
const withChartAttributeSelectors = removeStandaloneClassPrefixes(source)
|
|
55
|
+
.replace(/\[stroke=#ccc\]/g, "[stroke='#ccc']")
|
|
56
|
+
.replace(/\[stroke=#fff\]/g, "[stroke='#fff']");
|
|
57
|
+
if (!withChartAttributeSelectors.includes('from "react-day-picker"')) {
|
|
58
|
+
return withChartAttributeSelectors;
|
|
59
|
+
}
|
|
60
|
+
return withChartAttributeSelectors.replace(/(\n\s*)table:/g, "$1month_grid:");
|
|
61
|
+
}
|
|
62
|
+
function removeStandaloneClassPrefixes(source) {
|
|
63
|
+
let updated = source;
|
|
64
|
+
let previous;
|
|
65
|
+
do {
|
|
66
|
+
previous = updated;
|
|
67
|
+
updated = updated.replace(/(^|[\s"'])ec:(?=\s|["'])/g, "$1");
|
|
68
|
+
} while (updated !== previous);
|
|
69
|
+
return updated;
|
|
70
|
+
}
|
|
71
|
+
function addPortalImport(source) {
|
|
72
|
+
if (source.includes('from "@/runtime/PortalContainer"')) {
|
|
73
|
+
return source;
|
|
74
|
+
}
|
|
75
|
+
const importPattern = /import[\s\S]*?from\s+["'][^"']+["'];?\n|import\s+["'][^"']+["'];?\n/g;
|
|
76
|
+
let insertAt = 0;
|
|
77
|
+
for (const match of source.matchAll(importPattern)) {
|
|
78
|
+
insertAt = (match.index ?? 0) + match[0].length;
|
|
79
|
+
}
|
|
80
|
+
const importLine = 'import { usePortalContainer } from "@/runtime/PortalContainer"\n';
|
|
81
|
+
return `${source.slice(0, insertAt)}${importLine}${source.slice(insertAt)}`;
|
|
82
|
+
}
|
|
83
|
+
function addPortalHookDeclarations(source, filePath) {
|
|
84
|
+
const lines = source.split("\n");
|
|
85
|
+
const hookBodyLines = new Set();
|
|
86
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
87
|
+
if (!lines[index]?.includes("container={portalContainer ?? undefined}")) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const bodyLine = findContainingFunctionBodyLine(lines, index);
|
|
91
|
+
if (bodyLine === undefined) {
|
|
92
|
+
throw new Error(`Could not locate a function body for a shadcn Portal in ${filePath}.`);
|
|
93
|
+
}
|
|
94
|
+
hookBodyLines.add(bodyLine);
|
|
95
|
+
}
|
|
96
|
+
for (const bodyLine of [...hookBodyLines].sort((a, b) => b - a)) {
|
|
97
|
+
if (lines[bodyLine + 1]?.includes("const portalContainer")) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const indent = lines[bodyLine]?.match(/^(\s*)/)?.[1] ?? "";
|
|
101
|
+
lines.splice(bodyLine + 1, 0, `${indent} const portalContainer = usePortalContainer()`);
|
|
102
|
+
}
|
|
103
|
+
return lines.join("\n");
|
|
104
|
+
}
|
|
105
|
+
function findContainingFunctionBodyLine(lines, portalLine) {
|
|
106
|
+
for (let index = portalLine; index >= 0; index -= 1) {
|
|
107
|
+
if (!/^\s*function\s+\w+/.test(lines[index] ?? "")) {
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
for (let bodyLine = index; bodyLine <= portalLine; bodyLine += 1) {
|
|
111
|
+
if (/\)\s*\{\s*$/.test(lines[bodyLine] ?? "")) {
|
|
112
|
+
return bodyLine;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=portalContainers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portalContainers.js","sourceRoot":"","sources":["../src/portalContainers.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,MAAM,yBAAyB,GAAG;;;;;;;;CAQjC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,4BAA4B,CACjD,UAAkB;IAElB,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CACpC,UAAU,EACV,KAAK,EACL,SAAS,EACT,oBAAoB,CACpB,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC9C,OAAO;IACR,CAAC;IAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;IACtD,MAAM,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,UAAkB,EAClB,UAAwC,EAAE;IAE1C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO;IACR,CAAC;IAED,MAAM,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrD,SAAS;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,OAAO,GACZ,OAAO,CAAC,6BAA6B,KAAK,KAAK;YAC9C,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,gCAAgC,CAAC,oBAAoB,CAAC,CAAC;QAE3D,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IAC1D,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CACpC,sCAAsC,EACtC,kCAAkC,CAClC,CAAC;IACF,MAAM,wBAAwB,GAAG,cAAc;SAC7C,OAAO,CACP,6CAA6C,EAC7C,kCAAkC,CAClC;SACA,OAAO,CAAC,2BAA2B,EAAE,oBAAoB,CAAC,CAAC;IAC7D,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,OAAO,CAC5D,kEAAkE,EAClE,qDAAqD,CACrD,CAAC;IAEF,IAAI,oBAAoB,KAAK,wBAAwB,EAAE,CAAC;QACvD,OAAO,wBAAwB,CAAC;IACjC,CAAC;IAED,OAAO,eAAe,CACrB,yBAAyB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CACzD,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CAAC,MAAc;IACvD,MAAM,2BAA2B,GAAG,6BAA6B,CAAC,MAAM,CAAC;SACvE,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC;SAC9C,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;IAEjD,IAAI,CAAC,2BAA2B,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACtE,OAAO,2BAA2B,CAAC;IACpC,CAAC;IAED,OAAO,2BAA2B,CAAC,OAAO,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAc;IACpD,IAAI,OAAO,GAAG,MAAM,CAAC;IACrB,IAAI,QAAgB,CAAC;IAErB,GAAG,CAAC;QACH,QAAQ,GAAG,OAAO,CAAC;QACnB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC,QAAQ,OAAO,KAAK,QAAQ,EAAE;IAE/B,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,MAAc;IACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,aAAa,GAClB,sEAAsE,CAAC;IACxE,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACpD,QAAQ,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IAED,MAAM,UAAU,GACf,kEAAkE,CAAC;IAEpE,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc,EAAE,QAAgB;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,0CAA0C,CAAC,EAAE,CAAC;YACzE,SAAS;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,8BAA8B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACd,2DAA2D,QAAQ,GAAG,CACtE,CAAC;QACH,CAAC;QAED,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC5D,SAAS;QACV,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,KAAK,CAAC,MAAM,CACX,QAAQ,GAAG,CAAC,EACZ,CAAC,EACD,GAAG,MAAM,gDAAgD,CACzD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,8BAA8B,CACtC,KAAe,EACf,UAAkB;IAElB,KAAK,IAAI,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACpD,SAAS;QACV,CAAC;QAED,KAAK,IAAI,QAAQ,GAAG,KAAK,EAAE,QAAQ,IAAI,UAAU,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClE,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC/C,OAAO,QAAQ,CAAC;YACjB,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -23,30 +23,51 @@ const root = postcss.parse(css, { from: cssPath });
|
|
|
23
23
|
const failures = [];
|
|
24
24
|
|
|
25
25
|
root.walkRules((rule) => {
|
|
26
|
-
if (
|
|
26
|
+
if (isKeyframesRule(rule)) {
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
for (const selector of splitSelectorList(rule.selector)) {
|
|
31
|
-
if (!selector.includes(".
|
|
32
|
-
failures.push(`unscoped
|
|
31
|
+
if (!selector.includes(".pcf-shell-control")) {
|
|
32
|
+
failures.push(`unscoped PCF rule: ${selector}`);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
if (!css.includes("[data-
|
|
37
|
+
if (!css.includes("[data-pcf-control=")) {
|
|
38
38
|
failures.push("missing PCF control data attribute scope");
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
if (css.includes(".ec-pcf-shell-control") || css.includes("[data-ec-pcf-control=")) {
|
|
42
|
+
failures.push("legacy EC PCF scope is still present");
|
|
43
|
+
}
|
|
44
|
+
|
|
41
45
|
if (failures.length > 0) {
|
|
42
|
-
console.error("PCF CSS
|
|
46
|
+
console.error("PCF CSS scope check failed:");
|
|
43
47
|
for (const failure of failures) {
|
|
44
48
|
console.error(`- ${failure}`);
|
|
45
49
|
}
|
|
46
50
|
process.exit(1);
|
|
47
51
|
}
|
|
48
52
|
|
|
49
|
-
console.log("PCF CSS
|
|
53
|
+
console.log("PCF CSS scope check passed.");
|
|
54
|
+
|
|
55
|
+
function isKeyframesRule(rule) {
|
|
56
|
+
let parent = rule.parent;
|
|
57
|
+
|
|
58
|
+
while (parent) {
|
|
59
|
+
if (
|
|
60
|
+
parent.type === "atrule" &&
|
|
61
|
+
parent.name.toLowerCase().endsWith("keyframes")
|
|
62
|
+
) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
parent = parent.parent;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
50
71
|
|
|
51
72
|
function splitSelectorList(selectorList) {
|
|
52
73
|
const selectors = [];
|
|
@@ -4,7 +4,6 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
|
4
4
|
|
|
5
5
|
import "./index.css";
|
|
6
6
|
import App from "./App.tsx";
|
|
7
|
-
import { EcAppShell } from "./runtime/EcAppShell.tsx";
|
|
8
7
|
|
|
9
8
|
const queryClient = new QueryClient({
|
|
10
9
|
defaultOptions: {
|
|
@@ -24,9 +23,7 @@ const root = createRoot(document.getElementById("root")!);
|
|
|
24
23
|
root.render(
|
|
25
24
|
<StrictMode>
|
|
26
25
|
<QueryClientProvider client={queryClient}>
|
|
27
|
-
<
|
|
28
|
-
<App />
|
|
29
|
-
</EcAppShell>
|
|
26
|
+
<App />
|
|
30
27
|
</QueryClientProvider>
|
|
31
28
|
</StrictMode>
|
|
32
29
|
);
|
|
@@ -9,6 +9,29 @@ npm install
|
|
|
9
9
|
npm run build
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
+
## Regenerate From Webresource Changes
|
|
13
|
+
|
|
14
|
+
Do not edit this generated PCF folder as the durable source of truth. From the webresource root, rebuild and regenerate:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm run build
|
|
18
|
+
npx create-ec-app@latest \
|
|
19
|
+
--pcf-dir . \
|
|
20
|
+
--output ./pcf/{{PCF_CONSTRUCTOR}} \
|
|
21
|
+
--namespace {{PCF_NAMESPACE}} \
|
|
22
|
+
--constructor {{PCF_CONSTRUCTOR}} \
|
|
23
|
+
--display-name "{{CONTROL_DISPLAY_NAME}}"
|
|
24
|
+
cd pcf/{{PCF_CONSTRUCTOR}}
|
|
25
|
+
npm install
|
|
26
|
+
npm run build
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Then run the harness:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm run start -- --no-open
|
|
33
|
+
```
|
|
34
|
+
|
|
12
35
|
## Control Info
|
|
13
36
|
|
|
14
37
|
- Namespace: `{{PCF_NAMESPACE}}`
|
|
@@ -18,14 +41,15 @@ npm run build
|
|
|
18
41
|
|
|
19
42
|
## Notes
|
|
20
43
|
|
|
21
|
-
- The wrapper imports `src/App` directly and uses generated `pcf-scoped.css` derived from the webresource build.
|
|
44
|
+
- The wrapper imports `src/App` directly, renders it through the local PCF shell, and uses generated `pcf-scoped.css` derived from the webresource build.
|
|
45
|
+
- Source-app CSS imports are ignored by the PCF webpack config because the built CSS is already included through `pcf-scoped.css`.
|
|
22
46
|
- Regenerate this folder after rebuilding the webresource whenever the app changes.
|
|
23
47
|
- The project includes both `pcf-scripts` build support and a `.pcfproj` for Dataverse solution packaging flows.
|
|
24
48
|
|
|
25
49
|
## CSS scoping
|
|
26
50
|
|
|
27
|
-
This PCF control renders the app inside the PCF host container class `.
|
|
51
|
+
This PCF control renders the app inside the PCF host container class `.pcf-shell-control`.
|
|
28
52
|
|
|
29
|
-
During PCF generation, `create-ec-app` reads the webresource's built `dist/main.css`, scopes CSS
|
|
53
|
+
During PCF generation, `create-ec-app` reads the webresource's built `dist/main.css`, scopes CSS selectors to this control's `.pcf-shell-control[data-pcf-control="{{PCF_CONSTRUCTOR}}"]` host selector, and writes the result to `pcf-scoped.css`.
|
|
30
54
|
|
|
31
|
-
Tailwind utilities
|
|
55
|
+
Tailwind utilities and base selectors are isolated under the generated PCF host selector. Radix/shadcn portals render into the PCF-local portal root where supported.
|
|
@@ -4,7 +4,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
|
4
4
|
|
|
5
5
|
import App from "{{PROJECT_APP_IMPORT}}";
|
|
6
6
|
import "{{PROJECT_CSS_IMPORT}}";
|
|
7
|
-
import {
|
|
7
|
+
import { PcfAppShell } from "./runtime/PcfAppShell";
|
|
8
8
|
import type { IInputs, IOutputs } from "./control/generated/ManifestTypes";
|
|
9
9
|
import type {
|
|
10
10
|
PcfRuntimeContext,
|
|
@@ -16,13 +16,37 @@ function sanitizeGuid(value: string | null | undefined): string | null {
|
|
|
16
16
|
return value.replace(/[{}]/g, "");
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
function getPageClientUrl(
|
|
20
|
+
pageContext:
|
|
21
|
+
| {
|
|
22
|
+
clientUrl?: unknown;
|
|
23
|
+
getClientUrl?: unknown;
|
|
24
|
+
}
|
|
25
|
+
| undefined,
|
|
26
|
+
): string | null {
|
|
27
|
+
const getClientUrl = pageContext?.getClientUrl;
|
|
28
|
+
if (typeof getClientUrl === "function") {
|
|
29
|
+
try {
|
|
30
|
+
const clientUrl = getClientUrl.call(pageContext);
|
|
31
|
+
return typeof clientUrl === "string" ? clientUrl : null;
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return typeof pageContext?.clientUrl === "string"
|
|
38
|
+
? pageContext.clientUrl
|
|
39
|
+
: null;
|
|
40
|
+
}
|
|
41
|
+
|
|
19
42
|
function getContextInfo(context: ComponentFramework.Context<IInputs>) {
|
|
20
43
|
const pageContext = (
|
|
21
44
|
context as ComponentFramework.Context<IInputs> & {
|
|
22
45
|
page?: {
|
|
46
|
+
clientUrl?: unknown;
|
|
23
47
|
entityId?: string;
|
|
24
48
|
entityTypeName?: string;
|
|
25
|
-
getClientUrl?:
|
|
49
|
+
getClientUrl?: unknown;
|
|
26
50
|
};
|
|
27
51
|
}
|
|
28
52
|
).page;
|
|
@@ -39,7 +63,7 @@ function getContextInfo(context: ComponentFramework.Context<IInputs>) {
|
|
|
39
63
|
),
|
|
40
64
|
entityName:
|
|
41
65
|
modeContextInfo?.entityTypeName ?? pageContext?.entityTypeName ?? null,
|
|
42
|
-
clientUrl: pageContext
|
|
66
|
+
clientUrl: getPageClientUrl(pageContext),
|
|
43
67
|
userId: sanitizeGuid(context.userSettings.userId),
|
|
44
68
|
};
|
|
45
69
|
}
|
|
@@ -112,8 +136,8 @@ export class {{PCF_CONSTRUCTOR}}
|
|
|
112
136
|
_state: ComponentFramework.Dictionary,
|
|
113
137
|
container: HTMLDivElement,
|
|
114
138
|
): void {
|
|
115
|
-
container.classList.add("
|
|
116
|
-
container.dataset.
|
|
139
|
+
container.classList.add("pcf-shell-control");
|
|
140
|
+
container.dataset.pcfControl = "{{PCF_CONSTRUCTOR}}";
|
|
117
141
|
this.runtime = createRuntime(context);
|
|
118
142
|
this.root = createRoot(container);
|
|
119
143
|
this.render();
|
|
@@ -144,7 +168,7 @@ export class {{PCF_CONSTRUCTOR}}
|
|
|
144
168
|
StrictMode,
|
|
145
169
|
null,
|
|
146
170
|
React.createElement(
|
|
147
|
-
|
|
171
|
+
PcfAppShell,
|
|
148
172
|
null,
|
|
149
173
|
React.createElement(
|
|
150
174
|
QueryClientProvider,
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
import { PortalContainerContext } from "{{PROJECT_PORTAL_CONTAINER_IMPORT}}";
|
|
4
|
+
|
|
5
|
+
export function PcfAppShell({ children }: { children: React.ReactNode }) {
|
|
6
|
+
const [portalContainer, setPortalContainer] =
|
|
7
|
+
React.useState<HTMLDivElement | null>(null);
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<div data-pcf-app-root="">
|
|
11
|
+
<PortalContainerContext.Provider value={portalContainer}>
|
|
12
|
+
{children}
|
|
13
|
+
<div data-pcf-portal-root="" ref={setPortalContainer} />
|
|
14
|
+
</PortalContainerContext.Provider>
|
|
15
|
+
</div>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = {};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
const path = require("path");
|
|
2
|
+
const webpack = require("webpack");
|
|
3
|
+
|
|
4
|
+
const projectSrcPath = path.resolve(__dirname, "{{PROJECT_SRC_ALIAS}}");
|
|
2
5
|
|
|
3
6
|
module.exports = {
|
|
4
7
|
resolve: {
|
|
@@ -8,4 +11,14 @@ module.exports = {
|
|
|
8
11
|
"react-dom": path.resolve(__dirname, "{{PROJECT_REACT_DOM_ALIAS}}"),
|
|
9
12
|
},
|
|
10
13
|
},
|
|
14
|
+
plugins: [
|
|
15
|
+
new webpack.NormalModuleReplacementPlugin(
|
|
16
|
+
/\.(css|scss|sass)$/,
|
|
17
|
+
(resource) => {
|
|
18
|
+
if (path.resolve(resource.context).startsWith(projectSrcPath)) {
|
|
19
|
+
resource.request = path.resolve(__dirname, "runtime/emptyStyles.js");
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
),
|
|
23
|
+
],
|
|
11
24
|
};
|
|
@@ -270,10 +270,15 @@ Basic flow:
|
|
|
270
270
|
npm run build
|
|
271
271
|
```
|
|
272
272
|
|
|
273
|
-
2. Run the generator
|
|
273
|
+
2. Run the generator from the webresource root. Point `--pcf-dir` at the webresource root and `--output` at the PCF project folder you want to generate:
|
|
274
274
|
|
|
275
275
|
```bash
|
|
276
|
-
npx create-ec-app@latest
|
|
276
|
+
npx create-ec-app@latest \
|
|
277
|
+
--pcf-dir . \
|
|
278
|
+
--output ./pcf/{{ControlName}} \
|
|
279
|
+
--namespace EC \
|
|
280
|
+
--constructor {{ControlName}} \
|
|
281
|
+
--display-name "Control Name"
|
|
277
282
|
```
|
|
278
283
|
|
|
279
284
|
3. Install dependencies inside that generated PCF directory:
|
|
@@ -281,33 +286,41 @@ npx create-ec-app@latest --pcf-dir ./pcf/{{ControlName}} namespace {{EC}} --cons
|
|
|
281
286
|
```bash
|
|
282
287
|
cd ./pcf/{{ControlName}}
|
|
283
288
|
npm install
|
|
289
|
+
npm run build
|
|
284
290
|
```
|
|
285
291
|
|
|
286
292
|
This writes a standalone PCF project to the `--pcf-dir` folder. The generated control:
|
|
287
293
|
|
|
288
294
|
- imports `src/App.tsx` directly instead of wrapping built HTML in an iframe
|
|
289
295
|
- creates and imports `pcf-scoped.css` from the built `dist/main.css`
|
|
296
|
+
- scopes every non-keyframe CSS selector under the generated PCF host selector
|
|
290
297
|
- creates `src/runtime/types.ts` only if that file does not already exist
|
|
291
298
|
- provides a runtime object with record context and `context.webAPI` access inside the generated PCF shell, following the `PcfBase` pattern
|
|
292
299
|
- mounts your React app directly into the PCF container
|
|
293
300
|
|
|
294
|
-
|
|
301
|
+
Regenerate after app code or CSS changes by running the same sequence again from the webresource root:
|
|
295
302
|
|
|
296
303
|
```bash
|
|
297
|
-
npm install
|
|
298
304
|
npm run build
|
|
299
|
-
npx create-ec-app@latest
|
|
305
|
+
npx create-ec-app@latest \
|
|
306
|
+
--pcf-dir . \
|
|
307
|
+
--output ./pcf/FusionNotebookHost \
|
|
308
|
+
--namespace EC \
|
|
309
|
+
--constructor FusionNotebookHost \
|
|
310
|
+
--display-name "Fusion Notebook Host"
|
|
300
311
|
cd pcf/FusionNotebookHost
|
|
301
312
|
npm install
|
|
302
313
|
npm run build
|
|
303
314
|
```
|
|
304
315
|
|
|
316
|
+
Regeneration removes and recreates the PCF output folder, so keep durable app code in `src` and use generator templates or layers for repeatable PCF-specific changes.
|
|
317
|
+
|
|
305
318
|
What gets generated:
|
|
306
319
|
|
|
307
320
|
- a minimal PCF wrapper project under `pcf/<ConstructorName>`
|
|
308
321
|
- a checked-in PCF shell stamped out from `create-ec-app/templates/pcf/base`
|
|
309
322
|
- direct imports back to your webresource source
|
|
310
|
-
- a generated `pcf-scoped.css` file with CSS
|
|
323
|
+
- a generated `pcf-scoped.css` file with CSS selectors scoped to the PCF control
|
|
311
324
|
|
|
312
325
|
## Notes
|
|
313
326
|
|
|
@@ -4,7 +4,6 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
|
4
4
|
import "@progress/kendo-theme-fluent/dist/all.css";
|
|
5
5
|
import "./index.css";
|
|
6
6
|
import App from "./App.tsx";
|
|
7
|
-
import { EcAppShell } from "./runtime/EcAppShell.tsx";
|
|
8
7
|
|
|
9
8
|
const queryClient = new QueryClient({
|
|
10
9
|
defaultOptions: {
|
|
@@ -24,9 +23,7 @@ const root = createRoot(document.getElementById("root")!);
|
|
|
24
23
|
root.render(
|
|
25
24
|
<StrictMode>
|
|
26
25
|
<QueryClientProvider client={queryClient}>
|
|
27
|
-
<
|
|
28
|
-
<App />
|
|
29
|
-
</EcAppShell>
|
|
26
|
+
<App />
|
|
30
27
|
</QueryClientProvider>
|
|
31
28
|
</StrictMode>
|
|
32
29
|
);
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
|
|
3
|
-
const EcPortalContainerContext = React.createContext<HTMLElement | null>(null);
|
|
4
|
-
|
|
5
|
-
export function useEcPortalContainer() {
|
|
6
|
-
return React.useContext(EcPortalContainerContext);
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function EcAppShell({ children }: { children: React.ReactNode }) {
|
|
10
|
-
const [portalContainer, setPortalContainer] =
|
|
11
|
-
React.useState<HTMLDivElement | null>(null);
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<div data-ec-app-root="">
|
|
15
|
-
<EcPortalContainerContext.Provider value={portalContainer}>
|
|
16
|
-
{children}
|
|
17
|
-
<div data-ec-portal-root="" ref={setPortalContainer} />
|
|
18
|
-
</EcPortalContainerContext.Provider>
|
|
19
|
-
</div>
|
|
20
|
-
);
|
|
21
|
-
}
|