betterstart-cli 0.0.103 → 0.0.104
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/dist/assets/adapters/next/templates/renderers/commands/init/banner-art.ts +7 -0
- package/dist/assets/adapters/next/templates/renderers/commands/init/verify-database-reachable.ts +30 -0
- package/dist/assets/adapters/next/templates/renderers/commands/seed/build-seed-script.ts +171 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/build-authorship-alias-block.ts +4 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/build-authorship-data-fields.ts +4 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/build-format-action-date-source.ts +18 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/build-read-select-option-type.ts +6 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/build-relationship-data-types.ts +25 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/build-result-mapping.ts +62 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/action-helpers/generate-populate-list-rels-function.ts +50 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/build-restore-many-to-many-statements.ts +27 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/build-select-option-types.ts +37 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-bulk-sort-order-content.ts +93 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-create-content.ts +157 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-create-select-option-content.ts +134 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-delete-bulk-content.ts +85 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-delete-content.ts +66 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-distinct-files.ts +45 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-get-by-id-content.ts +55 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-get-by-slug-content.ts +55 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-get-plural-content.ts +106 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-get-select-options-content.ts +55 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-get-versions-content.ts +19 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-m2m-files.ts +151 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-restore-content.ts +123 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/gen-update-content.ts +187 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/generate-resolve-media-function.ts +40 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/generate-slug-helpers.ts +73 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/entity-file-contents/generate-version-snapshot-helpers.ts +104 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/lifecycle-hook-emissions/lifecycle-context.ts +22 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/lifecycle-hook-emissions/lifecycle-hook-import.ts +4 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/markdown-renderer.ts +411 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/select-fields-resolver.ts +99 -0
- package/dist/assets/adapters/next/templates/renderers/generators/actions/single-actions/generate-single-actions.ts +292 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-authorship-value.ts +8 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-column-def.ts +297 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-first-column-def.ts +483 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-image-cell-media.ts +38 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-image-element.ts +22 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-relationship-label.ts +26 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/column-defs/generate-select-label.ts +17 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/custom-cell.ts +24 -0
- package/dist/assets/adapters/next/templates/renderers/generators/columns/generate-columns.ts +55 -0
- package/dist/assets/adapters/next/templates/renderers/generators/create-page.ts +16 -0
- package/dist/assets/adapters/next/templates/renderers/generators/database/generate-database.ts +5 -0
- package/dist/assets/adapters/next/templates/renderers/generators/database/generate-junction-table.ts +27 -0
- package/dist/assets/adapters/next/templates/renderers/generators/database/generate-select-options-table.ts +35 -0
- package/dist/assets/adapters/next/templates/renderers/generators/database/generate-table-definition.ts +25 -0
- package/dist/assets/adapters/next/templates/renderers/generators/dev-mode-integration/build-entity-dev-mode-snippets.ts +180 -0
- package/dist/assets/adapters/next/templates/renderers/generators/dev-mode-integration/build-form-dev-mode-snippets.ts +97 -0
- package/dist/assets/adapters/next/templates/renderers/generators/dev-mode-integration/build-single-dev-mode-snippets.ts +60 -0
- package/dist/assets/adapters/next/templates/renderers/generators/dev-mode-integration/create-dev-mode-integration-artifact.ts +89 -0
- package/dist/assets/adapters/next/templates/renderers/generators/dev-mode-integration/lifecycle-hook-code.ts +55 -0
- package/dist/assets/adapters/next/templates/renderers/generators/edit-page.ts +33 -0
- package/dist/assets/adapters/next/templates/renderers/generators/email-template/generate-email-template.ts +248 -0
- package/dist/assets/adapters/next/templates/renderers/generators/email-template/generate-field-value.ts +31 -0
- package/dist/assets/adapters/next/templates/renderers/generators/emitted-helpers.ts +16 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/generate-icon-postfix.ts +27 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-boolean-field.ts +47 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-creatable-select-field.ts +122 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-date-field.ts +47 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-default-field.ts +53 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-gallery-field.ts +46 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-group-field.ts +16 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-icon-field.ts +31 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-markdown-field.ts +50 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-media-field.ts +47 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-multi-relationship-field.ts +91 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-multi-select-field.ts +219 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-number-field.ts +48 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-richtext-field.ts +50 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-select-field.ts +61 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-separator-field.ts +16 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-single-relationship-field.ts +93 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-textarea-field.ts +53 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx-nested/render-list-field.ts +163 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx-nested/render-nested-field.ts +164 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx-nested/render-nested-object-list-field.ts +59 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx-nested/render-text-input-field.ts +27 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-entity/generate-form.ts +822 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/build-default-value-from-sync-functions.ts +41 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/build-ui-imports.ts +58 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/generate-default-value.ts +67 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/generate-nested-list-default-value.ts +13 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/label-with-description.ts +14 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/render-tabs-trigger.ts +18 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-shared/select-read-values-expression.ts +21 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-single/build-group-creatable-select-handlers.ts +67 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-single/build-group-creatable-select-state.ts +29 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-single/build-group-field-array-hooks.ts +13 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-single/build-group-fields-jsx.ts +30 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-single/generate-card-component.ts +129 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form/form-single/generate-single-form.ts +66 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-admin/admin-columns/generate-column-def.ts +72 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-admin/admin-columns/generate-columns.ts +89 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-admin/admin-page/generate-page.ts +23 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-admin/admin-page-content.ts +246 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-admin/admin-submission-drawer.ts +216 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-admin/admin-table.ts +273 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-actions/exclusive-date-upper-bound-helper.ts +11 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-actions/generate-form-actions.ts +505 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-multistep/build-component-source.ts +197 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/build-field-error-helper.ts +16 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/error-message-line.ts +13 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/generate-field-jsx.ts +226 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/generate-file-upload-field-jsx.ts +41 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/generate-list-field-jsx.ts +160 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/generate-multiselect-field-jsx.ts +40 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/generate-number-field-jsx.ts +41 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/generate-text-field-jsx.ts +39 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-shared/label-with-description-line.ts +14 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-component-single/build-single-step-form-component-source.ts +100 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-database.ts +29 -0
- package/dist/assets/adapters/next/templates/renderers/generators/form-pipeline/form-hook.ts +142 -0
- package/dist/assets/adapters/next/templates/renderers/generators/hook/generate-hook.ts +169 -0
- package/dist/assets/adapters/next/templates/renderers/generators/hook/generate-single-hook.ts +30 -0
- package/dist/assets/adapters/next/templates/renderers/generators/navigation-extract.ts +19 -0
- package/dist/assets/adapters/next/templates/renderers/generators/page-content/generate-page-content.ts +419 -0
- package/dist/assets/adapters/next/templates/renderers/generators/page.ts +24 -0
- package/dist/assets/adapters/next/templates/renderers/generators/row-actions-emitters/build-delete-dialog-source.ts +108 -0
- package/dist/assets/adapters/next/templates/renderers/generators/row-actions-emitters/build-row-actions-source.ts +61 -0
- package/dist/assets/adapters/next/templates/renderers/generators/single-page.ts +59 -0
- package/dist/assets/adapters/next/templates/renderers/generators/sortable-header/build-sort-label-expr.ts +9 -0
- package/dist/assets/adapters/next/templates/renderers/generators/sortable-header/build-sortable-header-button-jsx.ts +20 -0
- package/dist/assets/adapters/next/templates/renderers/generators/sortable-header/build-sortable-header-def.ts +14 -0
- package/dist/assets/adapters/next/templates/renderers/generators/table.ts +284 -0
- package/dist/assets/adapters/next/templates/renderers/generators/thankyou-email-template.ts +110 -0
- package/dist/assets/adapters/next/templates/renderers/generators/webhook-events/render-extract.ts +14 -0
- package/dist/assets/adapters/next/templates/renderers/init/scaffolders/next-config/create-next-config-template.ts +48 -0
- package/dist/assets/adapters/next/templates/renderers/init/scaffolders/tailwind/admin-shadow-input-utility.ts +9 -0
- package/dist/assets/adapters/next/templates/renderers/init/scaffolders/tailwind/admin-theme-block.ts +42 -0
- package/dist/assets/adapters/next/templates/renderers/init/templates/app/admin.ts +12 -0
- package/dist/assets/adapters/next/templates/renderers/integration-runtime/render-core-email-provider.ts +27 -0
- package/dist/assets/adapters/next/templates/renderers/integration-runtime/render-core-storage-provider.ts +27 -0
- package/dist/assets/adapters/next/templates/renderers/snapshots/barrels/render-db-barrel.ts +8 -0
- package/dist/assets/adapters/next/templates/renderers/snapshots/barrels/render-navigation-barrel.ts +63 -0
- package/dist/assets/adapters/next/templates/renderers/snapshots/barrels/render-webhook-events-barrel.ts +16 -0
- package/dist/{chunk-TIJEHWRF.js → chunk-OYU73Q2W.js} +1 -50
- package/dist/chunk-OYU73Q2W.js.map +1 -0
- package/dist/cli.js +8864 -4010
- package/dist/cli.js.map +1 -1
- package/dist/{read-namespaced-template-UXU7OCY3.js → read-namespaced-template-EIH2NPDJ.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-TIJEHWRF.js.map +0 -1
- /package/dist/{read-namespaced-template-UXU7OCY3.js.map → read-namespaced-template-EIH2NPDJ.js.map} +0 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
export function renderEmailTemplateContentTemplate({
|
|
2
|
+
fLabel,
|
|
3
|
+
generateFieldValue
|
|
4
|
+
}: {
|
|
5
|
+
fLabel: string
|
|
6
|
+
generateFieldValue: string
|
|
7
|
+
}): string {
|
|
8
|
+
return ` <Row style={fieldRow}>
|
|
9
|
+
<Text style={label}>${fLabel}</Text>
|
|
10
|
+
<Text style={value}>${generateFieldValue}</Text>
|
|
11
|
+
</Row>`
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function renderEmailTemplateContentDetailsTemplate(): string {
|
|
15
|
+
return `
|
|
16
|
+
|
|
17
|
+
{customFields && Object.keys(customFields).length > 0 && (
|
|
18
|
+
<>
|
|
19
|
+
<Row style={dividerRow}>
|
|
20
|
+
<Text style={sectionTitle}>Additional Information</Text>
|
|
21
|
+
</Row>
|
|
22
|
+
{Object.entries(customFields).map(([fieldKey, fieldValue]) => (
|
|
23
|
+
<Row key={fieldKey} style={fieldRow}>
|
|
24
|
+
<Text style={label}>{fieldKey.replace(/([A-Z])/g, ' $1').trim()}</Text>
|
|
25
|
+
<Text style={value}>{fieldValue !== null && fieldValue !== undefined ? String(fieldValue) : 'N/A'}</Text>
|
|
26
|
+
</Row>
|
|
27
|
+
))}
|
|
28
|
+
</>
|
|
29
|
+
)}`
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function renderEmailTemplateLinkTemplate(): string {
|
|
33
|
+
return `
|
|
34
|
+
const link = {
|
|
35
|
+
color: colors.primary,
|
|
36
|
+
fontWeight: '500' as const,
|
|
37
|
+
textDecoration: 'none',
|
|
38
|
+
}
|
|
39
|
+
`
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function renderEmailTemplateListItemTemplate(): string {
|
|
43
|
+
return `
|
|
44
|
+
const listItem = {
|
|
45
|
+
backgroundColor: colors.borderLight,
|
|
46
|
+
borderRadius: '6px',
|
|
47
|
+
color: colors.text,
|
|
48
|
+
fontSize: '14px',
|
|
49
|
+
lineHeight: '20px',
|
|
50
|
+
marginBottom: '6px',
|
|
51
|
+
padding: '8px 12px',
|
|
52
|
+
}
|
|
53
|
+
`
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function renderEmailTemplateDividerRowTemplate(): string {
|
|
57
|
+
return `
|
|
58
|
+
const dividerRow = {
|
|
59
|
+
borderTop: \`2px solid \${colors.border}\`,
|
|
60
|
+
marginTop: '8px',
|
|
61
|
+
paddingTop: '24px',
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const sectionTitle = {
|
|
65
|
+
color: colors.text,
|
|
66
|
+
fontSize: '14px',
|
|
67
|
+
fontWeight: '600' as const,
|
|
68
|
+
margin: '0 0 8px',
|
|
69
|
+
}
|
|
70
|
+
`
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function renderEmailTemplateComponentTemplate({
|
|
74
|
+
needsLinkLink,
|
|
75
|
+
pascal,
|
|
76
|
+
propsFields,
|
|
77
|
+
customFieldsProp,
|
|
78
|
+
propsDestructured,
|
|
79
|
+
schemaLabel,
|
|
80
|
+
fieldSections,
|
|
81
|
+
customFieldsSection,
|
|
82
|
+
linkStyle,
|
|
83
|
+
listItemStyle,
|
|
84
|
+
dynamicStyles
|
|
85
|
+
}: {
|
|
86
|
+
needsLinkLink: string
|
|
87
|
+
pascal: string
|
|
88
|
+
propsFields: string
|
|
89
|
+
customFieldsProp: string
|
|
90
|
+
propsDestructured: string
|
|
91
|
+
schemaLabel: string
|
|
92
|
+
fieldSections: string
|
|
93
|
+
customFieldsSection: string
|
|
94
|
+
linkStyle: string
|
|
95
|
+
listItemStyle: string
|
|
96
|
+
dynamicStyles: string
|
|
97
|
+
}): string {
|
|
98
|
+
return `import { Body, Container, Head, Heading, Html${needsLinkLink}, Preview, Row, Section, Text } from '@react-email/components'
|
|
99
|
+
|
|
100
|
+
interface ${pascal}SubmissionEmailProps {
|
|
101
|
+
${propsFields}${customFieldsProp}
|
|
102
|
+
submittedAt: string
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function ${pascal}SubmissionEmail({
|
|
106
|
+
${propsDestructured}
|
|
107
|
+
}: ${pascal}SubmissionEmailProps) {
|
|
108
|
+
return (
|
|
109
|
+
<Html>
|
|
110
|
+
<Head />
|
|
111
|
+
<Preview>New ${schemaLabel} Submission</Preview>
|
|
112
|
+
<Body style={main}>
|
|
113
|
+
<Container style={container}>
|
|
114
|
+
<Section style={header}>
|
|
115
|
+
<Text style={logoText}>BetterStart</Text>
|
|
116
|
+
</Section>
|
|
117
|
+
|
|
118
|
+
<Section style={titleSection}>
|
|
119
|
+
<Heading style={h1}>New ${schemaLabel} Submission</Heading>
|
|
120
|
+
<Text style={subtitle}>
|
|
121
|
+
You received a new submission on {new Date(submittedAt).toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}
|
|
122
|
+
</Text>
|
|
123
|
+
</Section>
|
|
124
|
+
|
|
125
|
+
<Section style={card}>
|
|
126
|
+
${fieldSections}${customFieldsSection}
|
|
127
|
+
</Section>
|
|
128
|
+
|
|
129
|
+
<Section style={footer}>
|
|
130
|
+
<Text style={footerText}>
|
|
131
|
+
Submitted at {new Date(submittedAt).toLocaleString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true, timeZoneName: 'short' })}
|
|
132
|
+
</Text>
|
|
133
|
+
<Text style={footerBrand}>BetterStart</Text>
|
|
134
|
+
</Section>
|
|
135
|
+
</Container>
|
|
136
|
+
</Body>
|
|
137
|
+
</Html>
|
|
138
|
+
)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const colors = {
|
|
142
|
+
primary: '#7c3aed',
|
|
143
|
+
background: '#f8fafc',
|
|
144
|
+
cardBg: '#ffffff',
|
|
145
|
+
text: '#1e293b',
|
|
146
|
+
textMuted: '#64748b',
|
|
147
|
+
textLight: '#94a3b8',
|
|
148
|
+
border: '#e2e8f0',
|
|
149
|
+
borderLight: '#f1f5f9',
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const main = {
|
|
153
|
+
backgroundColor: colors.background,
|
|
154
|
+
fontFamily: 'Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
|
|
155
|
+
padding: '40px 20px',
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const container = {
|
|
159
|
+
margin: '0 auto',
|
|
160
|
+
maxWidth: '600px',
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const header = {
|
|
164
|
+
backgroundColor: colors.primary,
|
|
165
|
+
borderRadius: '12px 12px 0 0',
|
|
166
|
+
padding: '24px 32px',
|
|
167
|
+
textAlign: 'center' as const,
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const logoText = {
|
|
171
|
+
color: '#ffffff',
|
|
172
|
+
fontSize: '24px',
|
|
173
|
+
fontWeight: '700' as const,
|
|
174
|
+
letterSpacing: '-0.02em',
|
|
175
|
+
margin: '0',
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const titleSection = {
|
|
179
|
+
backgroundColor: colors.cardBg,
|
|
180
|
+
padding: '32px 32px 24px',
|
|
181
|
+
textAlign: 'center' as const,
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const h1 = {
|
|
185
|
+
color: colors.text,
|
|
186
|
+
fontSize: '24px',
|
|
187
|
+
fontWeight: '700' as const,
|
|
188
|
+
lineHeight: '32px',
|
|
189
|
+
margin: '0 0 8px',
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
const subtitle = {
|
|
193
|
+
color: colors.textMuted,
|
|
194
|
+
fontSize: '14px',
|
|
195
|
+
lineHeight: '20px',
|
|
196
|
+
margin: '0',
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const card = {
|
|
200
|
+
backgroundColor: colors.cardBg,
|
|
201
|
+
padding: '0 32px 32px',
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const fieldRow = {
|
|
205
|
+
borderBottom: \`1px solid \${colors.borderLight}\`,
|
|
206
|
+
padding: '16px 0',
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const label = {
|
|
210
|
+
color: colors.textMuted,
|
|
211
|
+
fontSize: '12px',
|
|
212
|
+
fontWeight: '600' as const,
|
|
213
|
+
letterSpacing: '0.025em',
|
|
214
|
+
lineHeight: '16px',
|
|
215
|
+
margin: '0 0 6px',
|
|
216
|
+
textTransform: 'uppercase' as const,
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const value = {
|
|
220
|
+
color: colors.text,
|
|
221
|
+
fontSize: '16px',
|
|
222
|
+
lineHeight: '24px',
|
|
223
|
+
margin: '0',
|
|
224
|
+
wordBreak: 'break-word' as const,
|
|
225
|
+
}
|
|
226
|
+
${linkStyle}${listItemStyle}${dynamicStyles}const footer = {
|
|
227
|
+
backgroundColor: colors.cardBg,
|
|
228
|
+
borderRadius: '0 0 12px 12px',
|
|
229
|
+
borderTop: \`1px solid \${colors.border}\`,
|
|
230
|
+
padding: '24px 32px',
|
|
231
|
+
textAlign: 'center' as const,
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
const footerText = {
|
|
235
|
+
color: colors.textLight,
|
|
236
|
+
fontSize: '12px',
|
|
237
|
+
lineHeight: '16px',
|
|
238
|
+
margin: '0 0 8px',
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const footerBrand = {
|
|
242
|
+
color: colors.textMuted,
|
|
243
|
+
fontSize: '14px',
|
|
244
|
+
fontWeight: '600' as const,
|
|
245
|
+
margin: '0',
|
|
246
|
+
}
|
|
247
|
+
`
|
|
248
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function renderFieldValueContentTemplate({ name }: { name: string }): string {
|
|
2
|
+
return `{${name} ? (
|
|
3
|
+
<Link href={${name}} style={link}>Download File</Link>
|
|
4
|
+
) : 'No file uploaded'}`
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function renderFieldValueContentDetailsTemplate({ name }: { name: string }): string {
|
|
8
|
+
return `{${name} ? (
|
|
9
|
+
<Link href={\`mailto:\${${name}}\`} style={link}>{${name}}</Link>
|
|
10
|
+
) : 'N/A'}`
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function renderFieldValueContentDetailsBranchTemplate({ name }: { name: string }): string {
|
|
14
|
+
return `{${name} ? (
|
|
15
|
+
<Link href={${name}} style={link}>{${name}}</Link>
|
|
16
|
+
) : 'N/A'}`
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function renderFieldValueContentDetailsBranchBodyTemplate({
|
|
20
|
+
name
|
|
21
|
+
}: {
|
|
22
|
+
name: string
|
|
23
|
+
}): string {
|
|
24
|
+
return `{${name} && Array.isArray(${name}) && ${name}.length > 0 ? (
|
|
25
|
+
${name}.map((item, idx) => (
|
|
26
|
+
<Text key={idx} style={listItem}>
|
|
27
|
+
{Object.entries(item).map(([k, v]) => \`\${k}: \${v}\`).join(', ')}
|
|
28
|
+
</Text>
|
|
29
|
+
))
|
|
30
|
+
) : 'N/A'}`
|
|
31
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function renderBuildLoadingSkeletonSourceGeneratedFunctionTemplate({
|
|
2
|
+
componentName,
|
|
3
|
+
escapeJsx
|
|
4
|
+
}: {
|
|
5
|
+
componentName: string
|
|
6
|
+
escapeJsx: string
|
|
7
|
+
}): string {
|
|
8
|
+
return `export function ${componentName}() {
|
|
9
|
+
return (
|
|
10
|
+
<div className="flex items-center justify-center h-48">
|
|
11
|
+
<div className="text-muted-foreground">Loading ${escapeJsx}…</div>
|
|
12
|
+
</div>
|
|
13
|
+
)
|
|
14
|
+
}
|
|
15
|
+
`
|
|
16
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export function renderIconPostfixFormFieldTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
fieldName,
|
|
4
|
+
formLabel
|
|
5
|
+
}: {
|
|
6
|
+
indent: string
|
|
7
|
+
fieldName: string
|
|
8
|
+
formLabel: string
|
|
9
|
+
}): string {
|
|
10
|
+
return `${indent}<FormField
|
|
11
|
+
${indent} control={form.control}
|
|
12
|
+
${indent} name="${fieldName}Icon"
|
|
13
|
+
${indent} render={({ field: formField }) => (
|
|
14
|
+
${indent} <FormItem>
|
|
15
|
+
${indent} ${formLabel}
|
|
16
|
+
${indent} <FormControl>
|
|
17
|
+
${indent} <IconPicker
|
|
18
|
+
${indent} value={formField.value}
|
|
19
|
+
${indent} onValueChange={formField.onChange}
|
|
20
|
+
${indent} triggerPlaceholder="Select icon"
|
|
21
|
+
${indent} />
|
|
22
|
+
${indent} </FormControl>
|
|
23
|
+
${indent} <FormMessage />
|
|
24
|
+
${indent} </FormItem>
|
|
25
|
+
${indent} )}
|
|
26
|
+
${indent}/>`
|
|
27
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function renderBooleanFieldChangeHandlerTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
defaultValueFromHandler
|
|
4
|
+
}: {
|
|
5
|
+
indent: string
|
|
6
|
+
defaultValueFromHandler: string
|
|
7
|
+
}): string {
|
|
8
|
+
return `(checked) => {
|
|
9
|
+
${indent} ${defaultValueFromHandler}(checked)
|
|
10
|
+
${indent} formField.onChange(checked)
|
|
11
|
+
${indent} }`
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function renderBooleanFieldFormFieldTemplate({
|
|
15
|
+
indent,
|
|
16
|
+
fieldName,
|
|
17
|
+
formItemProps,
|
|
18
|
+
onCheckedChange,
|
|
19
|
+
label,
|
|
20
|
+
hintJsxContent
|
|
21
|
+
}: {
|
|
22
|
+
indent: string
|
|
23
|
+
fieldName: string
|
|
24
|
+
formItemProps: string
|
|
25
|
+
onCheckedChange: string
|
|
26
|
+
label: string
|
|
27
|
+
hintJsxContent: string
|
|
28
|
+
}): string {
|
|
29
|
+
return `${indent}<FormField
|
|
30
|
+
${indent} control={form.control}
|
|
31
|
+
${indent} name="${fieldName}"
|
|
32
|
+
${indent} render={({ field: formField }) => (
|
|
33
|
+
${indent} <FormItem${formItemProps}>
|
|
34
|
+
${indent} <FormControl>
|
|
35
|
+
${indent} <Checkbox
|
|
36
|
+
${indent} checked={formField.value}
|
|
37
|
+
${indent} onCheckedChange={${onCheckedChange}}
|
|
38
|
+
${indent} disabled={isPending}
|
|
39
|
+
${indent} />
|
|
40
|
+
${indent} </FormControl>
|
|
41
|
+
${indent} <div className="flex flex-col gap-1">
|
|
42
|
+
${indent} <FormLabel>${label}</FormLabel>${hintJsxContent}
|
|
43
|
+
${indent} </div>
|
|
44
|
+
${indent} </FormItem>
|
|
45
|
+
${indent} )}
|
|
46
|
+
${indent}/>`
|
|
47
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
export function renderCreatableSelectFieldActionButtonsTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
fieldName,
|
|
4
|
+
optionsVar,
|
|
5
|
+
searchVar,
|
|
6
|
+
formItemProps,
|
|
7
|
+
labelWithDescription,
|
|
8
|
+
openVar,
|
|
9
|
+
setOpenVar,
|
|
10
|
+
stringify,
|
|
11
|
+
lowerLabel,
|
|
12
|
+
setSearchVar,
|
|
13
|
+
defaultValueFromHandlerContent,
|
|
14
|
+
pendingVar,
|
|
15
|
+
createHandler
|
|
16
|
+
}: {
|
|
17
|
+
indent: string
|
|
18
|
+
fieldName: string
|
|
19
|
+
optionsVar: string
|
|
20
|
+
searchVar: string
|
|
21
|
+
formItemProps: string
|
|
22
|
+
labelWithDescription: string
|
|
23
|
+
openVar: string
|
|
24
|
+
setOpenVar: string
|
|
25
|
+
stringify: string
|
|
26
|
+
lowerLabel: string
|
|
27
|
+
setSearchVar: string
|
|
28
|
+
defaultValueFromHandlerContent: string
|
|
29
|
+
pendingVar: string
|
|
30
|
+
createHandler: string
|
|
31
|
+
}): string {
|
|
32
|
+
return `${indent}<FormField
|
|
33
|
+
${indent} control={form.control}
|
|
34
|
+
${indent} name="${fieldName}"
|
|
35
|
+
${indent} render={({ field: formField }) => {
|
|
36
|
+
${indent} const selectedOption = ${optionsVar}.find((option) => option.value === formField.value)
|
|
37
|
+
${indent} const createLabel = ${searchVar}.trim()
|
|
38
|
+
${indent} const canCreateOption =
|
|
39
|
+
${indent} createLabel.length > 0 &&
|
|
40
|
+
${indent} !${optionsVar}.some(
|
|
41
|
+
${indent} (option) =>
|
|
42
|
+
${indent} option.label.toLowerCase() === createLabel.toLowerCase() ||
|
|
43
|
+
${indent} option.value.toLowerCase() === createLabel.toLowerCase()
|
|
44
|
+
${indent} )
|
|
45
|
+
|
|
46
|
+
${indent} return (
|
|
47
|
+
${indent} <FormItem${formItemProps}>
|
|
48
|
+
${indent} ${labelWithDescription}
|
|
49
|
+
${indent} <Popover open={${openVar}} onOpenChange={${setOpenVar}}>
|
|
50
|
+
${indent} <PopoverTrigger asChild>
|
|
51
|
+
${indent} <FormControl>
|
|
52
|
+
${indent} <Button
|
|
53
|
+
${indent} type="button"
|
|
54
|
+
${indent} variant="outline"
|
|
55
|
+
${indent} role="combobox"
|
|
56
|
+
${indent} aria-expanded={${openVar}}
|
|
57
|
+
${indent} className={cn("w-full justify-between", {
|
|
58
|
+
${indent} "text-muted-foreground": !selectedOption
|
|
59
|
+
${indent} })}
|
|
60
|
+
${indent} disabled={isPending}
|
|
61
|
+
${indent} >
|
|
62
|
+
${indent} <span className="truncate">{selectedOption?.label ?? ${stringify}}</span>
|
|
63
|
+
${indent} <ChevronsUpDown className="ml-2 size-4 shrink-0 opacity-50" />
|
|
64
|
+
${indent} </Button>
|
|
65
|
+
${indent} </FormControl>
|
|
66
|
+
${indent} </PopoverTrigger>
|
|
67
|
+
${indent} <PopoverContent className="w-(--radix-popover-trigger-width) p-0" align="start">
|
|
68
|
+
${indent} <Command>
|
|
69
|
+
${indent} <CommandInput
|
|
70
|
+
${indent} placeholder="Search ${lowerLabel}..."
|
|
71
|
+
${indent} value={${searchVar}}
|
|
72
|
+
${indent} onValueChange={${setSearchVar}}
|
|
73
|
+
${indent} />
|
|
74
|
+
${indent} <CommandList>
|
|
75
|
+
${indent} <CommandEmpty>No ${lowerLabel} found.</CommandEmpty>
|
|
76
|
+
${indent} <CommandGroup>
|
|
77
|
+
${indent} {${optionsVar}.map((option) => (
|
|
78
|
+
${indent} <CommandItem
|
|
79
|
+
${indent} key={option.value}
|
|
80
|
+
${indent} value={\`\${option.label} \${option.value}\`}
|
|
81
|
+
${indent} onSelect={() => {
|
|
82
|
+
${defaultValueFromHandlerContent}${indent} formField.onChange(option.value)
|
|
83
|
+
${indent} ${setSearchVar}('')
|
|
84
|
+
${indent} ${setOpenVar}(false)
|
|
85
|
+
${indent} }}
|
|
86
|
+
${indent} >
|
|
87
|
+
${indent} <Check className={cn("size-4", {
|
|
88
|
+
${indent} "opacity-100": formField.value === option.value,
|
|
89
|
+
${indent} "opacity-0": formField.value !== option.value
|
|
90
|
+
${indent} })} />
|
|
91
|
+
${indent} <span className="truncate">{option.label}</span>
|
|
92
|
+
${indent} </CommandItem>
|
|
93
|
+
${indent} ))}
|
|
94
|
+
${indent} </CommandGroup>
|
|
95
|
+
${indent} </CommandList>
|
|
96
|
+
${indent} {canCreateOption ? (
|
|
97
|
+
${indent} <>
|
|
98
|
+
${indent} <CommandSeparator />
|
|
99
|
+
${indent} <div className="p-1">
|
|
100
|
+
${indent} <Button
|
|
101
|
+
${indent} type="button"
|
|
102
|
+
${indent} variant="ghost"
|
|
103
|
+
${indent} className="w-full justify-start"
|
|
104
|
+
${indent} disabled={${pendingVar}}
|
|
105
|
+
${indent} aria-busy={${pendingVar}}
|
|
106
|
+
${indent} onClick={() => ${createHandler}(createLabel)}
|
|
107
|
+
${indent} >
|
|
108
|
+
${indent} <Plus className="size-4" />
|
|
109
|
+
${indent} {${pendingVar} ? 'Creating…' : \`Create "\${createLabel}"\`}
|
|
110
|
+
${indent} </Button>
|
|
111
|
+
${indent} </div>
|
|
112
|
+
${indent} </>
|
|
113
|
+
${indent} ) : null}
|
|
114
|
+
${indent} </Command>
|
|
115
|
+
${indent} </PopoverContent>
|
|
116
|
+
${indent} </Popover>
|
|
117
|
+
${indent} <FormMessage />
|
|
118
|
+
${indent} </FormItem>
|
|
119
|
+
${indent} )
|
|
120
|
+
${indent} }}
|
|
121
|
+
${indent}/>`
|
|
122
|
+
}
|
package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-date-field.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function renderDateFieldChangeHandlerTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
defaultValueFromHandler
|
|
4
|
+
}: {
|
|
5
|
+
indent: string
|
|
6
|
+
defaultValueFromHandler: string
|
|
7
|
+
}): string {
|
|
8
|
+
return `(value) => {
|
|
9
|
+
${indent} ${defaultValueFromHandler}(value)
|
|
10
|
+
${indent} formField.onChange(value)
|
|
11
|
+
${indent} }`
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function renderDateFieldFormFieldTemplate({
|
|
15
|
+
indent,
|
|
16
|
+
fieldName,
|
|
17
|
+
formItemProps,
|
|
18
|
+
labelWithDescription,
|
|
19
|
+
onChange,
|
|
20
|
+
toLowerCase
|
|
21
|
+
}: {
|
|
22
|
+
indent: string
|
|
23
|
+
fieldName: string
|
|
24
|
+
formItemProps: string
|
|
25
|
+
labelWithDescription: string
|
|
26
|
+
onChange: string
|
|
27
|
+
toLowerCase: string
|
|
28
|
+
}): string {
|
|
29
|
+
return `${indent}<FormField
|
|
30
|
+
${indent} control={form.control}
|
|
31
|
+
${indent} name="${fieldName}"
|
|
32
|
+
${indent} render={({ field: formField }) => (
|
|
33
|
+
${indent} <FormItem${formItemProps}>
|
|
34
|
+
${indent} ${labelWithDescription}
|
|
35
|
+
${indent} <FormControl>
|
|
36
|
+
${indent} <DatePicker
|
|
37
|
+
${indent} value={formField.value}
|
|
38
|
+
${indent} onChange={${onChange}}
|
|
39
|
+
${indent} disabled={isPending}
|
|
40
|
+
${indent} placeholder="Select ${toLowerCase}"
|
|
41
|
+
${indent} />
|
|
42
|
+
${indent} </FormControl>
|
|
43
|
+
${indent} <FormMessage />
|
|
44
|
+
${indent} </FormItem>
|
|
45
|
+
${indent} )}
|
|
46
|
+
${indent}/>`
|
|
47
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function renderDefaultFieldChangeHandlerTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
defaultValueFromHandler
|
|
4
|
+
}: {
|
|
5
|
+
indent: string
|
|
6
|
+
defaultValueFromHandler: string
|
|
7
|
+
}): string {
|
|
8
|
+
return `value={formField.value ?? ''}
|
|
9
|
+
${indent} onChange={(event) => {
|
|
10
|
+
${indent} ${defaultValueFromHandler}(event.target.value)
|
|
11
|
+
${indent} formField.onChange(event)
|
|
12
|
+
${indent} }}
|
|
13
|
+
${indent} onBlur={formField.onBlur}
|
|
14
|
+
${indent} name={formField.name}
|
|
15
|
+
${indent} ref={formField.ref}`
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function renderDefaultFieldFormFieldTemplate({
|
|
19
|
+
indent,
|
|
20
|
+
fieldName,
|
|
21
|
+
formItemProps,
|
|
22
|
+
labelWithDescription,
|
|
23
|
+
fieldType,
|
|
24
|
+
toLowerCase,
|
|
25
|
+
fieldProps
|
|
26
|
+
}: {
|
|
27
|
+
indent: string
|
|
28
|
+
fieldName: string
|
|
29
|
+
formItemProps: string
|
|
30
|
+
labelWithDescription: string
|
|
31
|
+
fieldType: string
|
|
32
|
+
toLowerCase: string
|
|
33
|
+
fieldProps: string
|
|
34
|
+
}): string {
|
|
35
|
+
return `${indent}<FormField
|
|
36
|
+
${indent} control={form.control}
|
|
37
|
+
${indent} name="${fieldName}"
|
|
38
|
+
${indent} render={({ field: formField }) => (
|
|
39
|
+
${indent} <FormItem${formItemProps}>
|
|
40
|
+
${indent} ${labelWithDescription}
|
|
41
|
+
${indent} <FormControl>
|
|
42
|
+
${indent} <Input
|
|
43
|
+
${indent} type="${fieldType}"
|
|
44
|
+
${indent} placeholder="Enter ${toLowerCase}"
|
|
45
|
+
${indent} disabled={isPending}
|
|
46
|
+
${indent} ${fieldProps}
|
|
47
|
+
${indent} />
|
|
48
|
+
${indent} </FormControl>
|
|
49
|
+
${indent} <FormMessage />
|
|
50
|
+
${indent} </FormItem>
|
|
51
|
+
${indent} )}
|
|
52
|
+
${indent}/>`
|
|
53
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export function renderGalleryFieldChangeHandlerTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
defaultValueFromHandler
|
|
4
|
+
}: {
|
|
5
|
+
indent: string
|
|
6
|
+
defaultValueFromHandler: string
|
|
7
|
+
}): string {
|
|
8
|
+
return `(value) => {
|
|
9
|
+
${indent} ${defaultValueFromHandler}(value)
|
|
10
|
+
${indent} formField.onChange(value)
|
|
11
|
+
${indent} }`
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function renderGalleryFieldFormFieldTemplate({
|
|
15
|
+
indent,
|
|
16
|
+
fieldName,
|
|
17
|
+
formItemProps,
|
|
18
|
+
labelWithDescription,
|
|
19
|
+
onChange,
|
|
20
|
+
maxItemsProp
|
|
21
|
+
}: {
|
|
22
|
+
indent: string
|
|
23
|
+
fieldName: string
|
|
24
|
+
formItemProps: string
|
|
25
|
+
labelWithDescription: string
|
|
26
|
+
onChange: string
|
|
27
|
+
maxItemsProp: string
|
|
28
|
+
}): string {
|
|
29
|
+
return `${indent}<FormField
|
|
30
|
+
${indent} control={form.control}
|
|
31
|
+
${indent} name="${fieldName}"
|
|
32
|
+
${indent} render={({ field: formField }) => (
|
|
33
|
+
${indent} <FormItem${formItemProps}>
|
|
34
|
+
${indent} ${labelWithDescription}
|
|
35
|
+
${indent} <FormControl>
|
|
36
|
+
${indent} <GalleryField
|
|
37
|
+
${indent} value={formField.value}
|
|
38
|
+
${indent} onChange={${onChange}}
|
|
39
|
+
${indent} disabled={isPending}${maxItemsProp}
|
|
40
|
+
${indent} />
|
|
41
|
+
${indent} </FormControl>
|
|
42
|
+
${indent} <FormMessage />
|
|
43
|
+
${indent} </FormItem>
|
|
44
|
+
${indent} )}
|
|
45
|
+
${indent}/>`
|
|
46
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function renderGroupFieldLayoutTemplate({
|
|
2
|
+
heading,
|
|
3
|
+
indent,
|
|
4
|
+
columnsGrid,
|
|
5
|
+
groupFields
|
|
6
|
+
}: {
|
|
7
|
+
heading: string
|
|
8
|
+
indent: string
|
|
9
|
+
columnsGrid: string
|
|
10
|
+
groupFields: string
|
|
11
|
+
}): string {
|
|
12
|
+
return `
|
|
13
|
+
${heading}${indent} <div className="grid ${columnsGrid} gap-5">
|
|
14
|
+
${groupFields}
|
|
15
|
+
${indent}</div>`
|
|
16
|
+
}
|
package/dist/assets/adapters/next/templates/renderers/generators/form/field-jsx/render-icon-field.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function renderIconFieldFormFieldTemplate({
|
|
2
|
+
indent,
|
|
3
|
+
fieldName,
|
|
4
|
+
formItemProps,
|
|
5
|
+
labelWithDescription,
|
|
6
|
+
toLowerCase
|
|
7
|
+
}: {
|
|
8
|
+
indent: string
|
|
9
|
+
fieldName: string
|
|
10
|
+
formItemProps: string
|
|
11
|
+
labelWithDescription: string
|
|
12
|
+
toLowerCase: string
|
|
13
|
+
}): string {
|
|
14
|
+
return `${indent}<FormField
|
|
15
|
+
${indent} control={form.control}
|
|
16
|
+
${indent} name="${fieldName}"
|
|
17
|
+
${indent} render={({ field: formField }) => (
|
|
18
|
+
${indent} <FormItem${formItemProps}>
|
|
19
|
+
${indent} ${labelWithDescription}
|
|
20
|
+
${indent} <FormControl>
|
|
21
|
+
${indent} <IconPicker
|
|
22
|
+
${indent} value={formField.value}
|
|
23
|
+
${indent} onValueChange={formField.onChange}
|
|
24
|
+
${indent} triggerPlaceholder="Select ${toLowerCase}"
|
|
25
|
+
${indent} />
|
|
26
|
+
${indent} </FormControl>
|
|
27
|
+
${indent} <FormMessage />
|
|
28
|
+
${indent} </FormItem>
|
|
29
|
+
${indent} )}
|
|
30
|
+
${indent}/>`
|
|
31
|
+
}
|