create-nextjs-cms 0.9.4 → 0.9.6

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.
Files changed (187) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +71 -71
  3. package/dist/helpers/utils.js +16 -16
  4. package/dist/lib/section-creators.js +166 -166
  5. package/package.json +3 -3
  6. package/templates/default/.eslintrc.json +5 -5
  7. package/templates/default/.prettierignore +7 -7
  8. package/templates/default/.prettierrc.json +27 -27
  9. package/templates/default/CHANGELOG.md +140 -140
  10. package/templates/default/_gitignore +57 -57
  11. package/templates/default/app/(auth)/auth/login/LoginPage.tsx +192 -192
  12. package/templates/default/app/(auth)/auth/login/page.tsx +11 -11
  13. package/templates/default/app/(auth)/layout.tsx +81 -81
  14. package/templates/default/app/(rootLayout)/(plugins)/[...slug]/page.tsx +40 -40
  15. package/templates/default/app/(rootLayout)/(plugins)/[...slug]/plugin-server-registry.ts +16 -16
  16. package/templates/default/app/(rootLayout)/admins/page.tsx +10 -10
  17. package/templates/default/app/(rootLayout)/browse/[section]/[page]/page.tsx +22 -22
  18. package/templates/default/app/(rootLayout)/categorized/[section]/page.tsx +15 -15
  19. package/templates/default/app/(rootLayout)/dashboard/page.tsx +63 -63
  20. package/templates/default/app/(rootLayout)/edit/[section]/[itemId]/page.tsx +20 -20
  21. package/templates/default/app/(rootLayout)/layout.tsx +81 -81
  22. package/templates/default/app/(rootLayout)/loading.tsx +10 -10
  23. package/templates/default/app/(rootLayout)/log/page.tsx +7 -7
  24. package/templates/default/app/(rootLayout)/new/[section]/page.tsx +15 -15
  25. package/templates/default/app/(rootLayout)/section/[section]/page.tsx +19 -19
  26. package/templates/default/app/(rootLayout)/settings/page.tsx +13 -13
  27. package/templates/default/app/_trpc/client.ts +3 -3
  28. package/templates/default/app/api/auth/csrf/route.ts +25 -25
  29. package/templates/default/app/api/auth/refresh/route.ts +10 -10
  30. package/templates/default/app/api/auth/route.ts +49 -49
  31. package/templates/default/app/api/auth/session/route.ts +20 -20
  32. package/templates/default/app/api/document/route.ts +165 -165
  33. package/templates/default/app/api/editor/photo/route.ts +49 -49
  34. package/templates/default/app/api/photo/route.ts +27 -27
  35. package/templates/default/app/api/submit/section/item/[slug]/route.ts +95 -95
  36. package/templates/default/app/api/submit/section/item/route.ts +56 -56
  37. package/templates/default/app/api/submit/section/simple/route.ts +86 -86
  38. package/templates/default/app/api/trpc/[trpc]/route.ts +33 -33
  39. package/templates/default/app/api/video/route.ts +174 -174
  40. package/templates/default/app/globals.css +228 -228
  41. package/templates/default/app/providers.tsx +152 -152
  42. package/templates/default/cms.config.ts +58 -57
  43. package/templates/default/components/AdminCard.tsx +166 -166
  44. package/templates/default/components/AdminEditPage.tsx +124 -124
  45. package/templates/default/components/AdminPrivilegeCard.tsx +185 -185
  46. package/templates/default/components/AdminsPage.tsx +43 -43
  47. package/templates/default/components/AnalyticsPage.tsx +144 -128
  48. package/templates/default/components/BarChartBox.tsx +42 -42
  49. package/templates/default/components/BrowsePage.tsx +106 -106
  50. package/templates/default/components/CategorizedSectionPage.tsx +31 -31
  51. package/templates/default/components/CategoryDeleteConfirmPage.tsx +130 -130
  52. package/templates/default/components/CategorySectionSelectInput.tsx +140 -140
  53. package/templates/default/components/ConditionalFields.tsx +49 -49
  54. package/templates/default/components/ContainerBox.tsx +24 -24
  55. package/templates/default/components/DashboardPageAlt.tsx +45 -45
  56. package/templates/default/components/DefaultNavItems.tsx +3 -3
  57. package/templates/default/components/Dropzone.tsx +154 -154
  58. package/templates/default/components/ErrorComponent.tsx +16 -16
  59. package/templates/default/components/GalleryPhoto.tsx +93 -93
  60. package/templates/default/components/InfoCard.tsx +93 -93
  61. package/templates/default/components/ItemEditPage.tsx +294 -294
  62. package/templates/default/components/Layout.tsx +84 -84
  63. package/templates/default/components/LoadingSpinners.tsx +67 -67
  64. package/templates/default/components/LocaleSwitcher.tsx +89 -89
  65. package/templates/default/components/LogPage.tsx +107 -107
  66. package/templates/default/components/Modal.tsx +166 -166
  67. package/templates/default/components/Navbar.tsx +258 -258
  68. package/templates/default/components/NewAdminForm.tsx +173 -173
  69. package/templates/default/components/NewPage.tsx +206 -206
  70. package/templates/default/components/NewVariantComponent.tsx +229 -229
  71. package/templates/default/components/PhotoGallery.tsx +35 -35
  72. package/templates/default/components/PieChartBox.tsx +101 -101
  73. package/templates/default/components/ProgressBar.tsx +48 -48
  74. package/templates/default/components/ProtectedDocument.tsx +44 -44
  75. package/templates/default/components/ProtectedImage.tsx +143 -143
  76. package/templates/default/components/ProtectedVideo.tsx +76 -76
  77. package/templates/default/components/SectionIcon.tsx +8 -8
  78. package/templates/default/components/SectionItemCard.tsx +144 -144
  79. package/templates/default/components/SectionItemStatusBadge.tsx +17 -17
  80. package/templates/default/components/SectionPage.tsx +205 -205
  81. package/templates/default/components/SelectBox.tsx +98 -98
  82. package/templates/default/components/SelectInputButtons.tsx +125 -125
  83. package/templates/default/components/SettingsPage.tsx +232 -232
  84. package/templates/default/components/Sidebar.tsx +204 -204
  85. package/templates/default/components/SidebarDropdownItem.tsx +83 -83
  86. package/templates/default/components/SidebarItem.tsx +24 -24
  87. package/templates/default/components/ThemeProvider.tsx +8 -8
  88. package/templates/default/components/TooltipComponent.tsx +27 -27
  89. package/templates/default/components/VariantCard.tsx +124 -124
  90. package/templates/default/components/VariantEditPage.tsx +230 -230
  91. package/templates/default/components/analytics/BounceRate.tsx +70 -70
  92. package/templates/default/components/analytics/LivePageViews.tsx +55 -55
  93. package/templates/default/components/analytics/LiveUsersCount.tsx +33 -33
  94. package/templates/default/components/analytics/MonthlyPageViews.tsx +42 -42
  95. package/templates/default/components/analytics/TopCountries.tsx +52 -52
  96. package/templates/default/components/analytics/TopDevices.tsx +46 -46
  97. package/templates/default/components/analytics/TopMediums.tsx +58 -58
  98. package/templates/default/components/analytics/TopSources.tsx +45 -45
  99. package/templates/default/components/analytics/TotalPageViews.tsx +41 -41
  100. package/templates/default/components/analytics/TotalSessions.tsx +41 -41
  101. package/templates/default/components/analytics/TotalUniqueUsers.tsx +41 -41
  102. package/templates/default/components/custom/RightHomeRoomVariantCard.tsx +138 -138
  103. package/templates/default/components/dndKit/Draggable.tsx +21 -21
  104. package/templates/default/components/dndKit/Droppable.tsx +20 -20
  105. package/templates/default/components/dndKit/SortableItem.tsx +18 -18
  106. package/templates/default/components/form/Form.tsx +370 -360
  107. package/templates/default/components/form/FormInputElement.tsx +70 -70
  108. package/templates/default/components/form/FormInputs.tsx +120 -111
  109. package/templates/default/components/form/helpers/_section-hot-reload.js +1 -1
  110. package/templates/default/components/form/helpers/util.ts +17 -17
  111. package/templates/default/components/form/inputs/CheckboxFormInput.tsx +46 -46
  112. package/templates/default/components/form/inputs/ColorFormInput.tsx +44 -44
  113. package/templates/default/components/form/inputs/DateFormInput.tsx +156 -156
  114. package/templates/default/components/form/inputs/DateRangeFormInput.tsx +153 -0
  115. package/templates/default/components/form/inputs/DocumentFormInput.tsx +222 -222
  116. package/templates/default/components/form/inputs/MapFormInput.tsx +140 -140
  117. package/templates/default/components/form/inputs/MultipleSelectFormInput.tsx +85 -85
  118. package/templates/default/components/form/inputs/NumberFormInput.tsx +43 -43
  119. package/templates/default/components/form/inputs/PasswordFormInput.tsx +47 -47
  120. package/templates/default/components/form/inputs/PhotoFormInput.tsx +275 -275
  121. package/templates/default/components/form/inputs/RichTextFormInput.tsx +138 -138
  122. package/templates/default/components/form/inputs/SelectFormInput.tsx +175 -175
  123. package/templates/default/components/form/inputs/SlugFormInput.tsx +131 -131
  124. package/templates/default/components/form/inputs/TagsFormInput.tsx +261 -260
  125. package/templates/default/components/form/inputs/TextFormInput.tsx +51 -51
  126. package/templates/default/components/form/inputs/TextareaFormInput.tsx +50 -50
  127. package/templates/default/components/form/inputs/VideoFormInput.tsx +118 -118
  128. package/templates/default/components/multi-select.tsx +1146 -1146
  129. package/templates/default/components/pagination/Pagination.tsx +36 -36
  130. package/templates/default/components/pagination/PaginationButtons.tsx +147 -147
  131. package/templates/default/components/theme-toggle.tsx +39 -39
  132. package/templates/default/components/ui/accordion.tsx +53 -53
  133. package/templates/default/components/ui/alert-dialog.tsx +157 -157
  134. package/templates/default/components/ui/alert.tsx +47 -47
  135. package/templates/default/components/ui/badge.tsx +38 -38
  136. package/templates/default/components/ui/button.tsx +62 -62
  137. package/templates/default/components/ui/calendar.tsx +166 -166
  138. package/templates/default/components/ui/card.tsx +43 -43
  139. package/templates/default/components/ui/checkbox.tsx +29 -29
  140. package/templates/default/components/ui/command.tsx +137 -137
  141. package/templates/default/components/ui/custom-alert-dialog.tsx +113 -113
  142. package/templates/default/components/ui/custom-dialog.tsx +123 -123
  143. package/templates/default/components/ui/dialog.tsx +123 -123
  144. package/templates/default/components/ui/direction.tsx +22 -22
  145. package/templates/default/components/ui/dropdown-menu.tsx +182 -182
  146. package/templates/default/components/ui/input-group.tsx +54 -54
  147. package/templates/default/components/ui/input.tsx +22 -22
  148. package/templates/default/components/ui/label.tsx +19 -19
  149. package/templates/default/components/ui/popover.tsx +42 -42
  150. package/templates/default/components/ui/progress.tsx +31 -31
  151. package/templates/default/components/ui/scroll-area.tsx +42 -42
  152. package/templates/default/components/ui/select.tsx +165 -165
  153. package/templates/default/components/ui/separator.tsx +28 -28
  154. package/templates/default/components/ui/sheet.tsx +103 -103
  155. package/templates/default/components/ui/spinner.tsx +16 -16
  156. package/templates/default/components/ui/switch.tsx +29 -29
  157. package/templates/default/components/ui/table.tsx +83 -83
  158. package/templates/default/components/ui/tabs.tsx +55 -55
  159. package/templates/default/components/ui/toast.tsx +113 -113
  160. package/templates/default/components/ui/toaster.tsx +35 -35
  161. package/templates/default/components/ui/tooltip.tsx +30 -30
  162. package/templates/default/components/ui/use-toast.ts +188 -188
  163. package/templates/default/components.json +21 -21
  164. package/templates/default/context/ModalProvider.tsx +53 -53
  165. package/templates/default/drizzle.config.ts +4 -4
  166. package/templates/default/env/env.js +130 -130
  167. package/templates/default/envConfig.ts +4 -4
  168. package/templates/default/hooks/useModal.ts +8 -8
  169. package/templates/default/lib/apiHelpers.ts +92 -92
  170. package/templates/default/lib/postinstall.js +14 -14
  171. package/templates/default/lib/utils.ts +6 -6
  172. package/templates/default/next-env.d.ts +6 -6
  173. package/templates/default/next.config.ts +23 -23
  174. package/templates/default/package.json +3 -3
  175. package/templates/default/postcss.config.mjs +6 -6
  176. package/templates/default/proxy.ts +32 -32
  177. package/templates/default/tsconfig.json +48 -48
  178. package/templates/default/app/(rootLayout)/dashboard-new/page.tsx +0 -7
  179. package/templates/default/components/DashboardNewPage.tsx +0 -253
  180. package/templates/default/components/DashboardPage.tsx +0 -188
  181. package/templates/default/components/EmailCard.tsx +0 -138
  182. package/templates/default/components/EmailPasswordForm.tsx +0 -85
  183. package/templates/default/components/EmailQuotaForm.tsx +0 -73
  184. package/templates/default/components/EmailsPage.tsx +0 -49
  185. package/templates/default/components/NewEmailForm.tsx +0 -132
  186. package/templates/default/components/form/DateRangeFormInput.tsx +0 -57
  187. package/templates/default/dynamic-schemas/schema.ts +0 -475
@@ -1,70 +1,70 @@
1
- import React from 'react'
2
- import classNames from 'classnames'
3
- import { Badge } from '@/components/ui/badge'
4
- import { FieldError } from 'react-hook-form'
5
- import { useI18n } from 'nextjs-cms/translations/client'
6
-
7
- export default function FormInputElement({
8
- label,
9
- required = false,
10
- readonly = false,
11
- classes = '',
12
- direction = 'row',
13
- value,
14
- children,
15
- validationError,
16
- }: {
17
- label: string
18
- required: boolean | string
19
- readonly?: boolean
20
- classes?: string
21
- direction?: 'row' | 'col'
22
- value?: any
23
- children: React.ReactNode
24
- validationError: FieldError | undefined
25
- }) {
26
- const t = useI18n()
27
- return (
28
- <div
29
- className={classNames({
30
- 'items-center py-2': true,
31
- 'flex flex-col': direction === 'col',
32
- 'items-center px-3 md-sidebar:grid md-sidebar:grid-cols-10': direction === 'row',
33
- classes: classes,
34
- })}
35
- >
36
- <label
37
- className={classNames({
38
- 'block pe-3 font-bold text-foreground': true,
39
- 'w-full text-start': direction === 'col',
40
- 'col-span-10 pb-1 md-sidebar:col-span-2 md-sidebar:pb-0 md-sidebar:text-end': direction === 'row',
41
- })}
42
- >
43
- {label} {['true', 1, true].includes(required) ? '*' : null}
44
- {readonly ? (
45
- <>
46
- {' '}
47
- <Badge variant={'primary'}>{t('readonly')}</Badge>
48
- </>
49
- ) : null}
50
- </label>
51
- <div
52
- className={classNames({
53
- 'col-span-8': direction === 'row',
54
- 'w-full': direction === 'col',
55
- })}
56
- >
57
- {readonly ? (
58
- <div className='w-full rounded bg-input p-3 text-foreground shadow-xs outline-0'>{value}</div>
59
- ) : (
60
- <>
61
- {children}
62
- {validationError ? (
63
- <div className='mt-1 text-sm text-red-500'>{validationError.message}</div>
64
- ) : null}
65
- </>
66
- )}
67
- </div>
68
- </div>
69
- )
70
- }
1
+ import React from 'react'
2
+ import classNames from 'classnames'
3
+ import { Badge } from '@/components/ui/badge'
4
+ import { FieldError } from 'react-hook-form'
5
+ import { useI18n } from 'nextjs-cms/translations/client'
6
+
7
+ export default function FormInputElement({
8
+ label,
9
+ required = false,
10
+ readonly = false,
11
+ classes = '',
12
+ direction = 'row',
13
+ value,
14
+ children,
15
+ validationError,
16
+ }: {
17
+ label: string
18
+ required: boolean | string
19
+ readonly?: boolean
20
+ classes?: string
21
+ direction?: 'row' | 'col'
22
+ value?: any
23
+ children: React.ReactNode
24
+ validationError: FieldError | undefined
25
+ }) {
26
+ const t = useI18n()
27
+ return (
28
+ <div
29
+ className={classNames({
30
+ 'items-center py-2': true,
31
+ 'flex flex-col': direction === 'col',
32
+ 'items-center px-3 md-sidebar:grid md-sidebar:grid-cols-10': direction === 'row',
33
+ classes: classes,
34
+ })}
35
+ >
36
+ <label
37
+ className={classNames({
38
+ 'block pe-3 font-bold text-foreground': true,
39
+ 'w-full text-start': direction === 'col',
40
+ 'col-span-10 pb-1 md-sidebar:col-span-2 md-sidebar:pb-0 md-sidebar:text-end': direction === 'row',
41
+ })}
42
+ >
43
+ {label} {['true', 1, true].includes(required) ? '*' : null}
44
+ {readonly ? (
45
+ <>
46
+ {' '}
47
+ <Badge variant={'primary'}>{t('readonly')}</Badge>
48
+ </>
49
+ ) : null}
50
+ </label>
51
+ <div
52
+ className={classNames({
53
+ 'col-span-8': direction === 'row',
54
+ 'w-full': direction === 'col',
55
+ })}
56
+ >
57
+ {readonly ? (
58
+ <div className='w-full rounded bg-input p-3 text-foreground shadow-xs outline-0'>{value}</div>
59
+ ) : (
60
+ <>
61
+ {children}
62
+ {validationError ? (
63
+ <div className='mt-1 text-sm text-red-500'>{validationError.message}</div>
64
+ ) : null}
65
+ </>
66
+ )}
67
+ </div>
68
+ </div>
69
+ )
70
+ }
@@ -1,40 +1,42 @@
1
1
  import React from 'react'
2
- import ColorFormInput from '@/components/form/inputs/ColorFormInput'
3
- import NumberFormInput from '@/components/form/inputs/NumberFormInput'
4
- import TextFormInput from '@/components/form/inputs/TextFormInput'
5
- import DateFormInput from '@/components/form/inputs/DateFormInput'
6
- import RichTextFormInput from '@/components/form/inputs/RichTextFormInput'
7
- import SelectFormInput from '@/components/form/inputs/SelectFormInput'
8
- import MultipleSelectFormInput from '@/components/form/inputs/MultipleSelectFormInput'
9
- import PhotoFormInput from '@/components/form/inputs/PhotoFormInput'
10
- import DocumentFormInput from '@/components/form/inputs/DocumentFormInput'
11
- import TagsFormInput from '@/components/form/inputs/TagsFormInput'
12
- import CheckboxFormInput from '@/components/form/inputs/CheckboxFormInput'
13
- import MapFormInput from '@/components/form/inputs/MapFormInput'
14
- import PasswordFormInput from '@/components/form/inputs/PasswordFormInput'
15
- import TextareaFormInput from '@/components/form/inputs/TextareaFormInput'
16
- import VideoFormInput from '@/components/form/inputs/VideoFormInput'
17
- import SlugFormInput from '@/components/form/inputs/SlugFormInput'
18
- import type { FieldClientConfig } from 'nextjs-cms/core/fields'
19
- import {
20
- CheckboxFieldClientConfig,
21
- ColorFieldClientConfig,
22
- DateFieldClientConfig,
23
- DocumentFieldClientConfig,
24
- MapFieldClientConfig,
25
- NumberFieldClientConfig,
26
- PasswordFieldClientConfig,
27
- PhotoFieldClientConfig,
28
- RichTextFieldClientConfig,
29
- SelectFieldClientConfig,
30
- SelectMultipleFieldClientConfig,
31
- TagsFieldClientConfig,
32
- TextAreaFieldClientConfig,
33
- TextFieldClientConfig,
34
- VideoFieldClientConfig,
35
- SlugFieldClientConfig,
36
- } from 'nextjs-cms/core/fields'
37
-
2
+ import ColorFormInput from '@/components/form/inputs/ColorFormInput'
3
+ import NumberFormInput from '@/components/form/inputs/NumberFormInput'
4
+ import TextFormInput from '@/components/form/inputs/TextFormInput'
5
+ import DateFormInput from '@/components/form/inputs/DateFormInput'
6
+ import DateRangeFormInput from '@/components/form/inputs/DateRangeFormInput'
7
+ import RichTextFormInput from '@/components/form/inputs/RichTextFormInput'
8
+ import SelectFormInput from '@/components/form/inputs/SelectFormInput'
9
+ import MultipleSelectFormInput from '@/components/form/inputs/MultipleSelectFormInput'
10
+ import PhotoFormInput from '@/components/form/inputs/PhotoFormInput'
11
+ import DocumentFormInput from '@/components/form/inputs/DocumentFormInput'
12
+ import TagsFormInput from '@/components/form/inputs/TagsFormInput'
13
+ import CheckboxFormInput from '@/components/form/inputs/CheckboxFormInput'
14
+ import MapFormInput from '@/components/form/inputs/MapFormInput'
15
+ import PasswordFormInput from '@/components/form/inputs/PasswordFormInput'
16
+ import TextareaFormInput from '@/components/form/inputs/TextareaFormInput'
17
+ import VideoFormInput from '@/components/form/inputs/VideoFormInput'
18
+ import SlugFormInput from '@/components/form/inputs/SlugFormInput'
19
+ import type { FieldClientConfig } from 'nextjs-cms/core/fields'
20
+ import {
21
+ CheckboxFieldClientConfig,
22
+ ColorFieldClientConfig,
23
+ DateFieldClientConfig,
24
+ DateRangeFieldClientConfig,
25
+ DocumentFieldClientConfig,
26
+ MapFieldClientConfig,
27
+ NumberFieldClientConfig,
28
+ PasswordFieldClientConfig,
29
+ PhotoFieldClientConfig,
30
+ RichTextFieldClientConfig,
31
+ SelectFieldClientConfig,
32
+ SelectMultipleFieldClientConfig,
33
+ TagsFieldClientConfig,
34
+ TextAreaFieldClientConfig,
35
+ TextFieldClientConfig,
36
+ VideoFieldClientConfig,
37
+ SlugFieldClientConfig,
38
+ } from 'nextjs-cms/core/fields'
39
+
38
40
  export default function FormInputs({
39
41
  inputs,
40
42
  sectionName,
@@ -44,84 +46,91 @@ export default function FormInputs({
44
46
  sectionName: string
45
47
  submitSuccessCount?: number
46
48
  }) {
47
- return (
48
- <>
49
- {inputs?.length > 0 &&
50
- inputs?.map((input) => {
51
- switch (input.type) {
52
- case 'color':
53
- return <ColorFormInput input={input as ColorFieldClientConfig} key={input.name} />
54
- case 'number':
55
- return <NumberFormInput input={input as NumberFieldClientConfig} key={input.name} />
56
- case 'text':
57
- return <TextFormInput input={input as TextFieldClientConfig} key={input.name} />
58
- case 'date':
59
- return <DateFormInput input={input as DateFieldClientConfig} key={input.name} />
60
- case 'rich_text':
61
- return <RichTextFormInput input={input as RichTextFieldClientConfig} key={input.name} />
62
- case 'textarea':
63
- return <TextareaFormInput input={input as TextAreaFieldClientConfig} key={input.name} />
64
- case 'select':
65
- return (
66
- <SelectFormInput
67
- sectionName={sectionName}
68
- input={input as SelectFieldClientConfig}
69
- key={input.name}
70
- />
71
- )
72
- case 'select_multiple':
73
- return (
74
- <MultipleSelectFormInput
75
- input={input as SelectMultipleFieldClientConfig}
76
- key={input.name}
77
- />
78
- )
79
- case 'photo':
80
- return (
49
+ return (
50
+ <>
51
+ {inputs?.length > 0 &&
52
+ inputs?.map((input) => {
53
+ switch (input.type) {
54
+ case 'color':
55
+ return <ColorFormInput input={input as ColorFieldClientConfig} key={input.name} />
56
+ case 'number':
57
+ return <NumberFormInput input={input as NumberFieldClientConfig} key={input.name} />
58
+ case 'text':
59
+ return <TextFormInput input={input as TextFieldClientConfig} key={input.name} />
60
+ case 'date':
61
+ return <DateFormInput input={input as DateFieldClientConfig} key={input.name} />
62
+ case 'date_range':
63
+ return (
64
+ <DateRangeFormInput
65
+ input={input as DateRangeFieldClientConfig}
66
+ key={(input as DateRangeFieldClientConfig).startName}
67
+ />
68
+ )
69
+ case 'rich_text':
70
+ return <RichTextFormInput input={input as RichTextFieldClientConfig} key={input.name} />
71
+ case 'textarea':
72
+ return <TextareaFormInput input={input as TextAreaFieldClientConfig} key={input.name} />
73
+ case 'select':
74
+ return (
75
+ <SelectFormInput
76
+ sectionName={sectionName}
77
+ input={input as SelectFieldClientConfig}
78
+ key={input.name}
79
+ />
80
+ )
81
+ case 'select_multiple':
82
+ return (
83
+ <MultipleSelectFormInput
84
+ input={input as SelectMultipleFieldClientConfig}
85
+ key={input.name}
86
+ />
87
+ )
88
+ case 'photo':
89
+ return (
81
90
  <PhotoFormInput
82
91
  sectionName={sectionName}
83
92
  input={input as PhotoFieldClientConfig}
84
93
  submitSuccessCount={submitSuccessCount}
85
94
  key={input.name}
86
95
  />
87
- )
88
- case 'video':
89
- return (
90
- <VideoFormInput
91
- sectionName={sectionName}
92
- input={input as VideoFieldClientConfig}
93
- key={input.name}
94
- />
95
- )
96
- case 'document':
97
- return (
98
- <DocumentFormInput
99
- sectionName={sectionName}
100
- input={input as DocumentFieldClientConfig}
101
- key={input.name}
102
- />
103
- )
104
- case 'password':
105
- return <PasswordFormInput input={input as PasswordFieldClientConfig} key={input.name} />
106
- case 'tags':
107
- return (
108
- <TagsFormInput
109
- input={input as TagsFieldClientConfig}
110
- sectionName={sectionName}
111
- key={input.name}
112
- />
113
- )
114
- case 'map':
115
- return <MapFormInput input={input as MapFieldClientConfig} key={input.name} />
116
- case 'checkbox':
117
- // case 'permission':
118
- return <CheckboxFormInput input={input as CheckboxFieldClientConfig} key={input.name} />
119
- case 'slug':
120
- return <SlugFormInput input={input as SlugFieldClientConfig} key={input.name} />
121
- default:
122
- return null
123
- }
124
- })}
125
- </>
126
- )
127
- }
96
+ )
97
+ case 'video':
98
+ return (
99
+ <VideoFormInput
100
+ sectionName={sectionName}
101
+ input={input as VideoFieldClientConfig}
102
+ key={input.name}
103
+ />
104
+ )
105
+ case 'document':
106
+ return (
107
+ <DocumentFormInput
108
+ sectionName={sectionName}
109
+ input={input as DocumentFieldClientConfig}
110
+ key={input.name}
111
+ />
112
+ )
113
+ case 'password':
114
+ return <PasswordFormInput input={input as PasswordFieldClientConfig} key={input.name} />
115
+ case 'tags':
116
+ return (
117
+ <TagsFormInput
118
+ input={input as TagsFieldClientConfig}
119
+ sectionName={sectionName}
120
+ key={input.name}
121
+ />
122
+ )
123
+ case 'map':
124
+ return <MapFormInput input={input as MapFieldClientConfig} key={input.name} />
125
+ case 'checkbox':
126
+ // case 'permission':
127
+ return <CheckboxFormInput input={input as CheckboxFieldClientConfig} key={input.name} />
128
+ case 'slug':
129
+ return <SlugFormInput input={input as SlugFieldClientConfig} key={input.name} />
130
+ default:
131
+ return null
132
+ }
133
+ })}
134
+ </>
135
+ )
136
+ }
@@ -8,4 +8,4 @@ export const revalidate = 0
8
8
 
9
9
  // @refresh reset
10
10
 
11
- export const configLastUpdated = 1775405374274
11
+ export const configLastUpdated = 1771768058991
@@ -1,17 +1,17 @@
1
- let configLastUpdated: number = 0
2
-
3
- // Use new Function to bypass next.js dynamic import restriction
4
- const loadHotReloadFile = async () => {
5
- try {
6
- // This approach completely bypasses next.js dynamic import restriction
7
- const importFn = new Function('path', 'return import(path)')
8
- const sectionInfo = await importFn('./_section-hot-reload.js')
9
- configLastUpdated = sectionInfo?.configLastUpdated ?? 0
10
- } catch {
11
- configLastUpdated = 0
12
- }
13
- }
14
-
15
- loadHotReloadFile()
16
-
17
- export { configLastUpdated }
1
+ let configLastUpdated: number = 0
2
+
3
+ // Use new Function to bypass next.js dynamic import restriction
4
+ const loadHotReloadFile = async () => {
5
+ try {
6
+ // This approach completely bypasses next.js dynamic import restriction
7
+ const importFn = new Function('path', 'return import(path)')
8
+ const sectionInfo = await importFn('./_section-hot-reload.js')
9
+ configLastUpdated = sectionInfo?.configLastUpdated ?? 0
10
+ } catch {
11
+ configLastUpdated = 0
12
+ }
13
+ }
14
+
15
+ loadHotReloadFile()
16
+
17
+ export { configLastUpdated }
@@ -1,46 +1,46 @@
1
- import React from 'react'
2
- import FormInputElement from '@/components/form/FormInputElement'
3
- import { CheckboxFieldClientConfig } from 'nextjs-cms/core/fields'
4
- import { useController, useFormContext } from 'react-hook-form'
5
- import { Switch } from '@/components/ui/switch'
6
-
7
- function toChecked(value: unknown): boolean {
8
- if (value === true) return true
9
- if (value === 1) return true
10
- if (value === '1') return true
11
- if (value === 'true') return true
12
- if (value === 'on') return true
13
- return false
14
- }
15
-
16
- export default function CheckboxFormInput({ input }: { input: CheckboxFieldClientConfig }) {
17
- const { control } = useFormContext()
18
- const initialValue =
19
- input.value !== undefined && input.value !== null ? toChecked(input.value) : toChecked(input.defaultValue)
20
-
21
- const {
22
- field,
23
- fieldState: { error },
24
- } = useController({
25
- name: input.name,
26
- control,
27
- defaultValue: initialValue,
28
- })
29
- return (
30
- <FormInputElement
31
- validationError={error}
32
- value={initialValue}
33
- readonly={input.readonly}
34
- label={input.label}
35
- required={input.required}
36
- >
37
- <Switch
38
- ref={field.ref}
39
- onCheckedChange={field.onChange}
40
- checked={toChecked(field.value)}
41
- name={field.name}
42
- disabled={input.readonly}
43
- />
44
- </FormInputElement>
45
- )
46
- }
1
+ import React from 'react'
2
+ import FormInputElement from '@/components/form/FormInputElement'
3
+ import { CheckboxFieldClientConfig } from 'nextjs-cms/core/fields'
4
+ import { useController, useFormContext } from 'react-hook-form'
5
+ import { Switch } from '@/components/ui/switch'
6
+
7
+ function toChecked(value: unknown): boolean {
8
+ if (value === true) return true
9
+ if (value === 1) return true
10
+ if (value === '1') return true
11
+ if (value === 'true') return true
12
+ if (value === 'on') return true
13
+ return false
14
+ }
15
+
16
+ export default function CheckboxFormInput({ input }: { input: CheckboxFieldClientConfig }) {
17
+ const { control } = useFormContext()
18
+ const initialValue =
19
+ input.value !== undefined && input.value !== null ? toChecked(input.value) : toChecked(input.defaultValue)
20
+
21
+ const {
22
+ field,
23
+ fieldState: { error },
24
+ } = useController({
25
+ name: input.name,
26
+ control,
27
+ defaultValue: initialValue,
28
+ })
29
+ return (
30
+ <FormInputElement
31
+ validationError={error}
32
+ value={initialValue}
33
+ readonly={input.readonly}
34
+ label={input.label}
35
+ required={input.required}
36
+ >
37
+ <Switch
38
+ ref={field.ref}
39
+ onCheckedChange={field.onChange}
40
+ checked={toChecked(field.value)}
41
+ name={field.name}
42
+ disabled={input.readonly}
43
+ />
44
+ </FormInputElement>
45
+ )
46
+ }
@@ -1,44 +1,44 @@
1
- import React from 'react'
2
- import FormInputElement from '@/components/form/FormInputElement'
3
- import { ColorFieldClientConfig } from 'nextjs-cms/core/fields'
4
- import { useController, useFormContext } from 'react-hook-form'
5
-
6
- export default function ColorFormInput({ input }: { input: ColorFieldClientConfig }) {
7
- const { control } = useFormContext()
8
- const {
9
- field,
10
- fieldState: { invalid, isTouched, isDirty, error },
11
- } = useController({
12
- name: input.name,
13
- control,
14
- defaultValue: input.value ?? '#000000',
15
- disabled: input.readonly,
16
- })
17
-
18
- const colorSpan = (
19
- <>
20
- <span style={{ padding: '2px 40px', backgroundColor: input.value }}></span>
21
- </>
22
- )
23
- return (
24
- <FormInputElement
25
- validationError={error}
26
- value={colorSpan}
27
- readonly={input.readonly}
28
- label={input.label}
29
- required={input.required}
30
- >
31
- <input
32
- type='color'
33
- readOnly={input.readonly}
34
- disabled={field.disabled}
35
- name={field.name}
36
- onChange={field.onChange}
37
- onBlur={field.onBlur}
38
- value={field.value}
39
- ref={field.ref}
40
- className='h-10 w-full rounded bg-input p-1 text-foreground shadow-xs outline-0 ring-2 ring-blue-300 focus:ring-blue-500'
41
- />
42
- </FormInputElement>
43
- )
44
- }
1
+ import React from 'react'
2
+ import FormInputElement from '@/components/form/FormInputElement'
3
+ import { ColorFieldClientConfig } from 'nextjs-cms/core/fields'
4
+ import { useController, useFormContext } from 'react-hook-form'
5
+
6
+ export default function ColorFormInput({ input }: { input: ColorFieldClientConfig }) {
7
+ const { control } = useFormContext()
8
+ const {
9
+ field,
10
+ fieldState: { invalid, isTouched, isDirty, error },
11
+ } = useController({
12
+ name: input.name,
13
+ control,
14
+ defaultValue: input.value ?? '#000000',
15
+ disabled: input.readonly,
16
+ })
17
+
18
+ const colorSpan = (
19
+ <>
20
+ <span style={{ padding: '2px 40px', backgroundColor: input.value }}></span>
21
+ </>
22
+ )
23
+ return (
24
+ <FormInputElement
25
+ validationError={error}
26
+ value={colorSpan}
27
+ readonly={input.readonly}
28
+ label={input.label}
29
+ required={input.required}
30
+ >
31
+ <input
32
+ type='color'
33
+ readOnly={input.readonly}
34
+ disabled={field.disabled}
35
+ name={field.name}
36
+ onChange={field.onChange}
37
+ onBlur={field.onBlur}
38
+ value={field.value}
39
+ ref={field.ref}
40
+ className='h-10 w-full rounded bg-input p-1 text-foreground shadow-xs outline-0 ring-2 ring-blue-300 focus:ring-blue-500'
41
+ />
42
+ </FormInputElement>
43
+ )
44
+ }