@khester/create-dynamics-app 2.4.0 → 2.6.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 +1 -1
- package/dist/artifacts/registry.d.ts.map +1 -1
- package/dist/artifacts/registry.js +7 -3
- package/dist/artifacts/registry.js.map +1 -1
- package/package.json +2 -2
- package/templates/grid-starter/package.json +1 -0
- package/templates/grid-starter/src/dev-tools/DevPanel.tsx +2 -1
- package/templates/pcf-dataset/ControlManifest.Input.xml +3 -3
- package/templates/pcf-dataset/README.md +9 -2
- package/templates/pcf-dataset/featureconfig.json +3 -0
- package/templates/pcf-dataset/index.ts +8 -18
- package/templates/pcf-dataset/package.json +7 -4
- package/templates/pcf-dataset/strings/{{componentName}}.1033.resx +4 -24
- package/templates/pcf-dataset/tsconfig.json +2 -1
- package/templates/pcf-dataset/{{componentName}}Component.tsx +56 -6
- package/templates/react-custom-page/package.json +1 -0
- package/templates/react-custom-page/src/dev-tools/DevPanel.tsx +2 -1
- package/templates/starter-page/_variants/App.form.v8.tsx +9 -2
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ npm run metadata:pull -- --entities account,contact # live metadata → typed s
|
|
|
40
40
|
| `react-custom-page` | React SPA for a model-driven custom page | v8 |
|
|
41
41
|
| `power-pages` | Power Pages portal starter | v8 |
|
|
42
42
|
| `pcf-field` | PCF field control (property-type aware: text/number/boolean/date) | v8 |
|
|
43
|
-
| `pcf-dataset` | PCF dataset/grid control (
|
|
43
|
+
| `pcf-dataset` | PCF dataset/grid control — grid-kit `<DataGrid>` (sort/filter/columns/search), **model-driven, React 18** | v8 |
|
|
44
44
|
| `grid-customizer` | Editable-grid cell-renderer customizer | v9 |
|
|
45
45
|
| `web-resource` | React web resource (webpack bundle) | **v8 or v9** |
|
|
46
46
|
| `dialog-form` | Single React form host (opened as a dialog) | **v8 or v9** |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAGlB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAiJpB;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,kBAAkB,EAmTzC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAEtE;AAED,wBAAgB,kBAAkB,IAAI,kBAAkB,EAAE,CAEzD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAI1E,CAAC"}
|
|
@@ -55,6 +55,10 @@ function surfaceKitDeps() {
|
|
|
55
55
|
{
|
|
56
56
|
when: () => true,
|
|
57
57
|
dependencies: {
|
|
58
|
+
// The canonical design-token source — surface-kit re-exports it, and a
|
|
59
|
+
// scaffolded page can `import { colors } from '@dataverse-kit/design-tokens'`
|
|
60
|
+
// directly (the go-forward token policy for new projects).
|
|
61
|
+
'@dataverse-kit/design-tokens': '^0.1.0',
|
|
58
62
|
'@dataverse-kit/surface-kit': '^0.1.0',
|
|
59
63
|
'@fluentui/react': '^8.110.10',
|
|
60
64
|
},
|
|
@@ -317,15 +321,15 @@ export const ARTIFACTS = [
|
|
|
317
321
|
},
|
|
318
322
|
{
|
|
319
323
|
id: 'pcf-dataset',
|
|
320
|
-
label: '🗂️ PCF Dataset Control — grid/dataset PCF control (
|
|
321
|
-
description: 'PCF dataset control: binds a grid/view, renders records with a
|
|
324
|
+
label: '🗂️ PCF Dataset Control — grid/dataset PCF control (grid-kit, model-driven)',
|
|
325
|
+
description: 'PCF dataset control (model-driven, React 18): binds a grid/view, renders records with a grid-kit <DataGrid> (sort, filter, column chooser, search).',
|
|
322
326
|
templateDir: 'pcf-dataset',
|
|
323
327
|
supportsLibraryChoice: false,
|
|
324
328
|
devTools: [],
|
|
325
329
|
prompts: PCF_NAMING_PROMPTS,
|
|
326
330
|
derive: derivePcfNaming,
|
|
327
331
|
exportTarget: 'pcf',
|
|
328
|
-
templateVersion: '2.
|
|
332
|
+
templateVersion: '2.3.0',
|
|
329
333
|
available: true,
|
|
330
334
|
},
|
|
331
335
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/artifacts/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@khester/create-dynamics-app",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.6.0",
|
|
4
4
|
"description": "Unified CLI to scaffold Dynamics 365 / Power Platform artifacts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"clean": "rimraf dist tsconfig.tsbuildinfo"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@dataverse-kit/export-engine": "^1.
|
|
28
|
+
"@dataverse-kit/export-engine": "^1.23.0",
|
|
29
29
|
"@khester/dynamics-ui-components": "^1.0.0",
|
|
30
30
|
"chalk": "^5.3.0",
|
|
31
31
|
"commander": "^11.1.0",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useMemo, useState } from "react";
|
|
2
|
+
import { colors } from "@dataverse-kit/design-tokens";
|
|
2
3
|
import {
|
|
3
4
|
Panel,
|
|
4
5
|
PanelType,
|
|
@@ -64,7 +65,7 @@ const fabStyle: React.CSSProperties = {
|
|
|
64
65
|
width: 48,
|
|
65
66
|
height: 48,
|
|
66
67
|
borderRadius: "50%",
|
|
67
|
-
backgroundColor:
|
|
68
|
+
backgroundColor: colors.brand,
|
|
68
69
|
color: "#ffffff",
|
|
69
70
|
boxShadow: "0 2px 8px rgba(0, 0, 0, 0.26)",
|
|
70
71
|
display: "flex",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="utf-8" ?>
|
|
2
2
|
<manifest>
|
|
3
|
-
<control namespace="{{namespace}}" constructor="{{componentName}}" version="1.0.0" display-name-key="{{namespace}}_{{componentName}}" description-key="{{namespace}}_{{componentName}}_Desc" control-type="
|
|
3
|
+
<control namespace="{{namespace}}" constructor="{{componentName}}" version="1.0.0" display-name-key="{{namespace}}_{{componentName}}" description-key="{{namespace}}_{{componentName}}_Desc" control-type="virtual">
|
|
4
4
|
<data-set name="dataset" display-name-key="Dataset_Display_Key">
|
|
5
5
|
</data-set>
|
|
6
6
|
<resources>
|
|
7
7
|
<code path="index.ts" order="1"/>
|
|
8
|
-
<platform-library name="React" version="
|
|
9
|
-
<platform-library name="Fluent" version="8.
|
|
8
|
+
<platform-library name="React" version="18.2.0" />
|
|
9
|
+
<platform-library name="Fluent" version="8.115.6" />
|
|
10
10
|
<resx path="strings/{{componentName}}.1033.resx" version="1.0.0" />
|
|
11
11
|
</resources>
|
|
12
12
|
<feature-usage>
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# {{componentName}} (PCF dataset control)
|
|
2
2
|
|
|
3
3
|
A PowerApps Component Framework **dataset** control — binds to a grid/view and renders the records
|
|
4
|
-
with a Fluent UI v8
|
|
4
|
+
with `@dataverse-kit/grid-kit`'s `<DataGrid>`: a Fluent UI v8 grid with sorting, client-side
|
|
5
|
+
filtering, a column chooser, and search.
|
|
6
|
+
|
|
7
|
+
> **Model-driven apps only.** This control declares a **React 18** platform library (grid-kit's
|
|
8
|
+
> peer floor), so it targets model-driven apps — it is **not** Canvas-app compatible (Canvas is
|
|
9
|
+
> React-16-locked). For a Canvas-compatible field control, use the `pcf-field` template.
|
|
5
10
|
|
|
6
11
|
## Develop
|
|
7
12
|
|
|
@@ -13,7 +18,9 @@ npm run refreshTypes # regenerate generated/ManifestTypes after manifest edits
|
|
|
13
18
|
```
|
|
14
19
|
|
|
15
20
|
Bind it to a dataset (subgrid/view) on a form. Customize columns/rendering in
|
|
16
|
-
`{{componentName}}Component.tsx`.
|
|
21
|
+
`{{componentName}}Component.tsx`. Every column renders as text (the formatted value), so client
|
|
22
|
+
sort/filter is lexical on the displayed string; map `dataset.columns[].dataType` to a grid-kit
|
|
23
|
+
`rendererType` (currency / date / optionset / …) for type-aware cells and correct ordering.
|
|
17
24
|
|
|
18
25
|
## Namespace / constructor
|
|
19
26
|
|
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
import { IInputs, IOutputs } from "./generated/ManifestTypes";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import * as ReactDOM from "react-dom";
|
|
4
3
|
import { {{componentName}}Component } from "./{{componentName}}Component";
|
|
5
4
|
|
|
6
|
-
export class {{componentName}} implements ComponentFramework.
|
|
7
|
-
private _container: HTMLDivElement;
|
|
8
|
-
private _context: ComponentFramework.Context<IInputs>;
|
|
9
|
-
|
|
5
|
+
export class {{componentName}} implements ComponentFramework.ReactControl<IInputs, IOutputs> {
|
|
10
6
|
constructor() {}
|
|
11
7
|
|
|
12
8
|
public init(
|
|
13
9
|
context: ComponentFramework.Context<IInputs>,
|
|
14
10
|
notifyOutputChanged: () => void,
|
|
15
|
-
state: ComponentFramework.Dictionary
|
|
16
|
-
container: HTMLDivElement
|
|
11
|
+
state: ComponentFramework.Dictionary
|
|
17
12
|
): void {
|
|
18
|
-
|
|
19
|
-
this._container = container;
|
|
13
|
+
// Virtual control: the platform owns the React root — nothing to render here.
|
|
20
14
|
}
|
|
21
15
|
|
|
22
|
-
public updateView(context: ComponentFramework.Context<IInputs>):
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
dataset: context.parameters.dataset
|
|
27
|
-
}),
|
|
28
|
-
this._container
|
|
29
|
-
);
|
|
16
|
+
public updateView(context: ComponentFramework.Context<IInputs>): React.ReactElement {
|
|
17
|
+
return React.createElement({{componentName}}Component, {
|
|
18
|
+
dataset: context.parameters.dataset,
|
|
19
|
+
});
|
|
30
20
|
}
|
|
31
21
|
|
|
32
22
|
public getOutputs(): IOutputs {
|
|
@@ -34,6 +24,6 @@ export class {{componentName}} implements ComponentFramework.StandardControl<IIn
|
|
|
34
24
|
}
|
|
35
25
|
|
|
36
26
|
public destroy(): void {
|
|
37
|
-
|
|
27
|
+
// Cleanup handled by the platform.
|
|
38
28
|
}
|
|
39
29
|
}
|
|
@@ -10,16 +10,19 @@
|
|
|
10
10
|
"refreshTypes": "pcf-scripts refreshTypes"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
+
"@dataverse-kit/grid-kit": "^0.6.0",
|
|
13
14
|
"@fluentui/react": "^8.120.0",
|
|
15
|
+
"@khester/dynamics-cell-renderers": "^1.1.0",
|
|
16
|
+
"@khester/dynamics-utils": "^1.2.0",
|
|
14
17
|
"@types/powerapps-component-framework": "^1.3.18",
|
|
15
|
-
"react": "^
|
|
16
|
-
"react-dom": "^
|
|
18
|
+
"react": "^18.2.0",
|
|
19
|
+
"react-dom": "^18.2.0"
|
|
17
20
|
},
|
|
18
21
|
"devDependencies": {
|
|
19
22
|
"@microsoft/eslint-config-spfx": "^1.18.2",
|
|
20
23
|
"@types/node": "^18.16.9",
|
|
21
|
-
"@types/react": "^
|
|
22
|
-
"@types/react-dom": "^
|
|
24
|
+
"@types/react": "^18.2.0",
|
|
25
|
+
"@types/react-dom": "^18.2.0",
|
|
23
26
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
24
27
|
"pcf-scripts": "^1",
|
|
25
28
|
"pcf-start": "^1",
|
|
@@ -20,28 +20,8 @@
|
|
|
20
20
|
<value>{{componentName}} control built with Dynamics UI Kit</value>
|
|
21
21
|
<comment>Description of the control</comment>
|
|
22
22
|
</data>
|
|
23
|
-
<data name="
|
|
24
|
-
<value>
|
|
25
|
-
<comment>
|
|
23
|
+
<data name="Dataset_Display_Key" xml:space="preserve">
|
|
24
|
+
<value>Records</value>
|
|
25
|
+
<comment>Display name for the bound dataset</comment>
|
|
26
26
|
</data>
|
|
27
|
-
|
|
28
|
-
<value>The value of the control</value>
|
|
29
|
-
<comment>Description of the Value property</comment>
|
|
30
|
-
</data>
|
|
31
|
-
<data name="Placeholder" xml:space="preserve">
|
|
32
|
-
<value>Placeholder</value>
|
|
33
|
-
<comment>Placeholder property</comment>
|
|
34
|
-
</data>
|
|
35
|
-
<data name="Placeholder_Desc" xml:space="preserve">
|
|
36
|
-
<value>Placeholder text for the control</value>
|
|
37
|
-
<comment>Description of the Placeholder property</comment>
|
|
38
|
-
</data>
|
|
39
|
-
<data name="Disabled" xml:space="preserve">
|
|
40
|
-
<value>Disabled</value>
|
|
41
|
-
<comment>Disabled property</comment>
|
|
42
|
-
</data>
|
|
43
|
-
<data name="Disabled_Desc" xml:space="preserve">
|
|
44
|
-
<value>Whether the control is disabled</value>
|
|
45
|
-
<comment>Description of the Disabled property</comment>
|
|
46
|
-
</data>
|
|
47
|
-
</root>
|
|
27
|
+
</root>
|
|
@@ -1,39 +1,89 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { DetailsList, IColumn, SelectionMode } from '@fluentui/react/lib/DetailsList';
|
|
3
2
|
import { initializeIcons } from '@fluentui/react/lib/Icons';
|
|
3
|
+
import { ReadOnlyGrid, createCellRegistry } from '@dataverse-kit/grid-kit';
|
|
4
|
+
import type { ColumnDef, GridSortState } from '@dataverse-kit/grid-kit';
|
|
4
5
|
|
|
5
|
-
// Initialize Fluent UI icons
|
|
6
|
+
// Initialize Fluent UI icons — the grid toolbar / column-chooser / filter use them.
|
|
6
7
|
initializeIcons();
|
|
7
8
|
|
|
8
9
|
export interface I{{componentName}}ComponentProps {
|
|
9
10
|
dataset: ComponentFramework.PropertyTypes.DataSet;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
interface Row extends Record<string, unknown> {
|
|
14
|
+
key: string;
|
|
15
|
+
}
|
|
13
16
|
|
|
14
17
|
export const {{componentName}}Component: React.FC<I{{componentName}}ComponentProps> = ({ dataset }) => {
|
|
15
|
-
const
|
|
18
|
+
const registry = React.useMemo(() => createCellRegistry(), []);
|
|
19
|
+
const [search, setSearch] = React.useState('');
|
|
20
|
+
const [sort, setSort] = React.useState<GridSortState | undefined>(undefined);
|
|
21
|
+
|
|
22
|
+
// Map the bound dataset's columns → grid-kit ColumnDef[]. Every column renders as
|
|
23
|
+
// `text` (the formatted Dataverse value), so client sort/filter is lexical on the
|
|
24
|
+
// displayed string. For type-aware cells + correct numeric/date ordering, map each
|
|
25
|
+
// `dataset.columns[].dataType` to a rendererType (currency / date / optionset / …)
|
|
26
|
+
// and feed the raw `record.getValue(col.name)` alongside the formatted value.
|
|
27
|
+
// (`.filter()` returns a fresh array, so `.sort()` never mutates dataset.columns.)
|
|
28
|
+
const columns: ColumnDef<Row>[] = dataset.columns
|
|
16
29
|
.filter((c) => !c.isHidden)
|
|
17
30
|
.sort((a, b) => a.order - b.order)
|
|
18
31
|
.map((c) => ({
|
|
19
32
|
key: c.name,
|
|
20
|
-
name: c.displayName,
|
|
21
33
|
fieldName: c.name,
|
|
34
|
+
name: c.displayName,
|
|
35
|
+
rendererType: 'text',
|
|
22
36
|
minWidth: 100,
|
|
23
37
|
maxWidth: 240,
|
|
24
38
|
isResizable: true,
|
|
39
|
+
isSortable: true,
|
|
40
|
+
isFilterable: true,
|
|
25
41
|
}));
|
|
26
42
|
|
|
43
|
+
// Rows are rebuilt every render: the dataset is the change signal, and PCF can
|
|
44
|
+
// mutate `records`/`sortedRecordIds` in place on refresh, so a reference-keyed memo
|
|
45
|
+
// could go stale. The map is cheap for a page-scoped subgrid. `key` is written LAST
|
|
46
|
+
// so a column whose logical name is "key" can't clobber the record id used by getKey.
|
|
27
47
|
const items: Row[] = dataset.sortedRecordIds.map((id) => {
|
|
28
48
|
const record = dataset.records[id];
|
|
29
49
|
const row: Row = { key: id };
|
|
30
50
|
for (const col of dataset.columns) {
|
|
31
51
|
row[col.name] = record.getFormattedValue(col.name);
|
|
32
52
|
}
|
|
53
|
+
row.key = id;
|
|
33
54
|
return row;
|
|
34
55
|
});
|
|
35
56
|
|
|
57
|
+
// grid-kit's toolbar `onSearch` only reports the term — the host owns filtering.
|
|
58
|
+
// Substring-match across every column's formatted value.
|
|
59
|
+
const q = search.trim().toLowerCase();
|
|
60
|
+
const filtered = q
|
|
61
|
+
? items.filter((row) =>
|
|
62
|
+
columns.some((c) => String(row[c.fieldName] ?? '').toLowerCase().includes(q)),
|
|
63
|
+
)
|
|
64
|
+
: items;
|
|
65
|
+
|
|
66
|
+
// grid-kit sort is controlled — `onSortChange` reports the header click; the host
|
|
67
|
+
// reorders nothing. Sort the (filtered) rows by the formatted string.
|
|
68
|
+
const sorted = sort
|
|
69
|
+
? [...filtered].sort(
|
|
70
|
+
(a, b) =>
|
|
71
|
+
String(a[sort.fieldName] ?? '').localeCompare(String(b[sort.fieldName] ?? '')) *
|
|
72
|
+
(sort.direction === 'desc' ? -1 : 1),
|
|
73
|
+
)
|
|
74
|
+
: filtered;
|
|
75
|
+
|
|
36
76
|
return (
|
|
37
|
-
<
|
|
77
|
+
<ReadOnlyGrid<Row>
|
|
78
|
+
items={sorted}
|
|
79
|
+
columns={columns}
|
|
80
|
+
registry={registry}
|
|
81
|
+
getKey={(r) => r.key}
|
|
82
|
+
sort={sort}
|
|
83
|
+
onSortChange={(fieldName, direction) => setSort({ fieldName, direction })}
|
|
84
|
+
columnChooser
|
|
85
|
+
filterBuilder
|
|
86
|
+
toolbar={{ showSearch: true, searchPlaceholder: 'Search', onSearch: setSearch }}
|
|
87
|
+
/>
|
|
38
88
|
);
|
|
39
89
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React, { useCallback, useMemo, useState } from "react";
|
|
2
|
+
import { colors } from "@dataverse-kit/design-tokens";
|
|
2
3
|
import {
|
|
3
4
|
Panel,
|
|
4
5
|
PanelType,
|
|
@@ -63,7 +64,7 @@ const fabStyle: React.CSSProperties = {
|
|
|
63
64
|
width: 48,
|
|
64
65
|
height: 48,
|
|
65
66
|
borderRadius: "50%",
|
|
66
|
-
backgroundColor:
|
|
67
|
+
backgroundColor: colors.brand,
|
|
67
68
|
color: "#ffffff",
|
|
68
69
|
boxShadow: "0 2px 8px rgba(0, 0, 0, 0.26)",
|
|
69
70
|
display: "flex",
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { ThemeProvider } from '@fluentui/react/lib/Theme';
|
|
2
|
+
import { ThemeProvider, createTheme } from '@fluentui/react/lib/Theme';
|
|
3
3
|
import { Stack } from '@fluentui/react/lib/Stack';
|
|
4
4
|
import { TextField } from '@fluentui/react/lib/TextField';
|
|
5
5
|
import { PrimaryButton, DefaultButton } from '@fluentui/react/lib/Button';
|
|
6
6
|
import { FormSurface, Section, FieldRow } from '@dataverse-kit/surface-kit';
|
|
7
|
+
import { colors } from '@dataverse-kit/design-tokens';
|
|
7
8
|
import { createRecord } from './services/dataverse';
|
|
8
9
|
|
|
10
|
+
// Fluent v8 theme sourced from the canonical @dataverse-kit/design-tokens palette —
|
|
11
|
+
// the page's brand/primary color flows from the token package, not a hardcoded hex.
|
|
12
|
+
const appTheme = createTheme({
|
|
13
|
+
palette: { themePrimary: colors.brand, themeDarkAlt: colors.brandHover, themeDark: colors.brandDark },
|
|
14
|
+
});
|
|
15
|
+
|
|
9
16
|
/**
|
|
10
17
|
* Starter page — `form` surface. A surface-kit `FormSurface` hosts a `Section` of
|
|
11
18
|
* `FieldRow`s; the layout stacks to one column on narrow widths (surface-kit owns
|
|
@@ -34,7 +41,7 @@ export const App: React.FC = () => {
|
|
|
34
41
|
};
|
|
35
42
|
|
|
36
43
|
return (
|
|
37
|
-
<ThemeProvider>
|
|
44
|
+
<ThemeProvider theme={appTheme}>
|
|
38
45
|
<FormSurface maxWidth={960}>
|
|
39
46
|
<Section title="{{projectName}}" columnSpan={12}>
|
|
40
47
|
<FieldRow label="Full name" required>
|