convex-cms 0.0.11-alpha.3 → 0.0.15

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 (246) hide show
  1. package/README.md +10 -2
  2. package/admin/README.md +99 -0
  3. package/admin/src/components/ContentTypeFormModal.tsx +1 -1
  4. package/admin/src/contexts/AuthContext.tsx +1 -1
  5. package/admin/src/hooks/usePermissions.ts +1 -1
  6. package/admin/src/lib/adminApi.ts +13 -0
  7. package/admin/src/lib/cmsExports.ts +16 -6
  8. package/admin/src/standalone/App.tsx +156 -0
  9. package/admin/src/standalone/config.ts +24 -0
  10. package/admin/src/standalone/main.tsx +10 -0
  11. package/admin/src/standalone/router.tsx +901 -0
  12. package/admin-dist/{public/assets/index-D-4wFfgU.css → assets/index-BrbXSzjb.css} +1 -1
  13. package/admin-dist/assets/index-CdHu1-Ex.js +96 -0
  14. package/admin-dist/index.html +15 -0
  15. package/dist/cli/commands/admin.d.ts +0 -7
  16. package/dist/cli/commands/admin.d.ts.map +1 -1
  17. package/dist/cli/commands/admin.js +60 -49
  18. package/dist/cli/commands/admin.js.map +1 -1
  19. package/dist/cli/commands/init.d.ts.map +1 -1
  20. package/dist/cli/commands/init.js +6 -3
  21. package/dist/cli/commands/init.js.map +1 -1
  22. package/dist/cli/index.js +0 -0
  23. package/dist/cli/templates/admin.d.ts.map +1 -1
  24. package/dist/cli/templates/admin.js +6 -2
  25. package/dist/cli/templates/admin.js.map +1 -1
  26. package/dist/cli/templates/cmsClient.d.ts +1 -1
  27. package/dist/cli/templates/cmsClient.d.ts.map +1 -1
  28. package/dist/cli/templates/cmsClient.js +2 -0
  29. package/dist/cli/templates/cmsClient.js.map +1 -1
  30. package/dist/cli/templates/content.d.ts.map +1 -1
  31. package/dist/cli/templates/content.js +378 -22
  32. package/dist/cli/templates/content.js.map +1 -1
  33. package/dist/cli/templates/schemas/blog.d.ts +1 -1
  34. package/dist/cli/templates/schemas/blog.d.ts.map +1 -1
  35. package/dist/cli/templates/schemas/blog.js +54 -36
  36. package/dist/cli/templates/schemas/blog.js.map +1 -1
  37. package/dist/cli/templates/schemas/docs.d.ts +1 -1
  38. package/dist/cli/templates/schemas/docs.d.ts.map +1 -1
  39. package/dist/cli/templates/schemas/docs.js +38 -30
  40. package/dist/cli/templates/schemas/docs.js.map +1 -1
  41. package/dist/cli/templates/schemas/ecommerce.d.ts +9 -0
  42. package/dist/cli/templates/schemas/ecommerce.d.ts.map +1 -0
  43. package/dist/cli/templates/schemas/ecommerce.js +166 -0
  44. package/dist/cli/templates/schemas/ecommerce.js.map +1 -0
  45. package/dist/cli/templates/schemas/index.d.ts +2 -1
  46. package/dist/cli/templates/schemas/index.d.ts.map +1 -1
  47. package/dist/cli/templates/schemas/index.js +4 -2
  48. package/dist/cli/templates/schemas/index.js.map +1 -1
  49. package/dist/cli/templates/schemas/landing.d.ts +3 -3
  50. package/dist/cli/templates/schemas/landing.d.ts.map +1 -1
  51. package/dist/cli/templates/schemas/landing.js +99 -45
  52. package/dist/cli/templates/schemas/landing.js.map +1 -1
  53. package/dist/cli/utils/prompts.d.ts +2 -1
  54. package/dist/cli/utils/prompts.d.ts.map +1 -1
  55. package/dist/cli/utils/prompts.js +7 -2
  56. package/dist/cli/utils/prompts.js.map +1 -1
  57. package/dist/client/schema/types.d.ts +1 -1
  58. package/dist/client/schema/types.d.ts.map +1 -1
  59. package/dist/client/schema/types.js.map +1 -1
  60. package/package.json +31 -26
  61. package/admin/src/lib/config.server.ts +0 -56
  62. package/admin/src/lib/convex.ts +0 -26
  63. package/admin/src/routeTree.gen.ts +0 -262
  64. package/admin/src/router.tsx +0 -22
  65. package/admin/src/routes/__root.tsx +0 -257
  66. package/admin/src/routes/content-types.tsx +0 -20
  67. package/admin/src/routes/content.tsx +0 -20
  68. package/admin/src/routes/entries/$entryId.tsx +0 -107
  69. package/admin/src/routes/entries/new.$contentTypeId.tsx +0 -69
  70. package/admin/src/routes/entries/type/$contentTypeId.tsx +0 -503
  71. package/admin/src/routes/index.tsx +0 -20
  72. package/admin/src/routes/media.tsx +0 -24
  73. package/admin/src/routes/settings.tsx +0 -20
  74. package/admin/src/routes/taxonomies.tsx +0 -20
  75. package/admin/src/routes/trash.tsx +0 -20
  76. package/admin-dist/nitro.json +0 -15
  77. package/admin-dist/public/assets/CmsEmptyState-BKeL4DBB.js +0 -1
  78. package/admin-dist/public/assets/CmsFilterBar-CEpMHd_c.js +0 -1
  79. package/admin-dist/public/assets/CmsPageHeader-CIEkTbyH.js +0 -1
  80. package/admin-dist/public/assets/CmsStatusBadge-BFMOsfMW.js +0 -1
  81. package/admin-dist/public/assets/CmsSurface-kqqaFKUI.js +0 -1
  82. package/admin-dist/public/assets/CmsTable-Db53Exq0.js +0 -1
  83. package/admin-dist/public/assets/ContentEntryEditor-Ct7cHayy.js +0 -4
  84. package/admin-dist/public/assets/TaxonomyFilter-Bm1DI1A7.js +0 -1
  85. package/admin-dist/public/assets/_contentTypeId-BekeCblX.js +0 -1
  86. package/admin-dist/public/assets/_entryId-CoZDE0l0.js +0 -1
  87. package/admin-dist/public/assets/alert-CpLdsTGU.js +0 -1
  88. package/admin-dist/public/assets/badge-BQAotc5B.js +0 -1
  89. package/admin-dist/public/assets/circle-check-big-BF3Y5nES.js +0 -1
  90. package/admin-dist/public/assets/command-lEq6f_Ee.js +0 -1
  91. package/admin-dist/public/assets/content-DH6k0dN6.js +0 -1
  92. package/admin-dist/public/assets/content-types-DHr9tc2V.js +0 -1
  93. package/admin-dist/public/assets/index-Cf0lbl0G.js +0 -1
  94. package/admin-dist/public/assets/main-B-6700eG.js +0 -137
  95. package/admin-dist/public/assets/media-DY5zD52L.js +0 -1
  96. package/admin-dist/public/assets/new._contentTypeId-Dq_NqTQV.js +0 -1
  97. package/admin-dist/public/assets/pencil-CI_KfxSx.js +0 -1
  98. package/admin-dist/public/assets/refresh-cw-BrXg9a2r.js +0 -1
  99. package/admin-dist/public/assets/rotate-ccw-PwzxdPxd.js +0 -1
  100. package/admin-dist/public/assets/scroll-area-DX_nZYp8.js +0 -1
  101. package/admin-dist/public/assets/search-DlwBH4C5.js +0 -1
  102. package/admin-dist/public/assets/settings-2mx3_ORG.js +0 -1
  103. package/admin-dist/public/assets/switch-CjPi4DKH.js +0 -1
  104. package/admin-dist/public/assets/tabs-B5X37GEM.js +0 -1
  105. package/admin-dist/public/assets/tanstack-adapter-KSm-nO5L.js +0 -1
  106. package/admin-dist/public/assets/taxonomies-CHjJKNlR.js +0 -1
  107. package/admin-dist/public/assets/trash-Cle-tcqq.js +0 -1
  108. package/admin-dist/public/assets/useBreadcrumbLabel-yZQG_N_3.js +0 -1
  109. package/admin-dist/public/assets/usePermissions-D6vsoaJf.js +0 -1
  110. package/admin-dist/server/_chunks/_libs/@date-fns/tz.mjs +0 -217
  111. package/admin-dist/server/_chunks/_libs/@floating-ui/core.mjs +0 -725
  112. package/admin-dist/server/_chunks/_libs/@floating-ui/dom.mjs +0 -622
  113. package/admin-dist/server/_chunks/_libs/@floating-ui/react-dom.mjs +0 -292
  114. package/admin-dist/server/_chunks/_libs/@floating-ui/utils.mjs +0 -320
  115. package/admin-dist/server/_chunks/_libs/@radix-ui/number.mjs +0 -6
  116. package/admin-dist/server/_chunks/_libs/@radix-ui/primitive.mjs +0 -11
  117. package/admin-dist/server/_chunks/_libs/@radix-ui/react-arrow.mjs +0 -23
  118. package/admin-dist/server/_chunks/_libs/@radix-ui/react-avatar.mjs +0 -119
  119. package/admin-dist/server/_chunks/_libs/@radix-ui/react-checkbox.mjs +0 -270
  120. package/admin-dist/server/_chunks/_libs/@radix-ui/react-collapsible.mjs +0 -144
  121. package/admin-dist/server/_chunks/_libs/@radix-ui/react-collection.mjs +0 -69
  122. package/admin-dist/server/_chunks/_libs/@radix-ui/react-compose-refs.mjs +0 -39
  123. package/admin-dist/server/_chunks/_libs/@radix-ui/react-context.mjs +0 -137
  124. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dialog.mjs +0 -325
  125. package/admin-dist/server/_chunks/_libs/@radix-ui/react-direction.mjs +0 -9
  126. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dismissable-layer.mjs +0 -210
  127. package/admin-dist/server/_chunks/_libs/@radix-ui/react-dropdown-menu.mjs +0 -253
  128. package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-guards.mjs +0 -29
  129. package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-scope.mjs +0 -206
  130. package/admin-dist/server/_chunks/_libs/@radix-ui/react-id.mjs +0 -14
  131. package/admin-dist/server/_chunks/_libs/@radix-ui/react-label.mjs +0 -23
  132. package/admin-dist/server/_chunks/_libs/@radix-ui/react-menu.mjs +0 -812
  133. package/admin-dist/server/_chunks/_libs/@radix-ui/react-popover.mjs +0 -300
  134. package/admin-dist/server/_chunks/_libs/@radix-ui/react-popper.mjs +0 -286
  135. package/admin-dist/server/_chunks/_libs/@radix-ui/react-portal.mjs +0 -16
  136. package/admin-dist/server/_chunks/_libs/@radix-ui/react-presence.mjs +0 -128
  137. package/admin-dist/server/_chunks/_libs/@radix-ui/react-primitive.mjs +0 -75
  138. package/admin-dist/server/_chunks/_libs/@radix-ui/react-roving-focus.mjs +0 -224
  139. package/admin-dist/server/_chunks/_libs/@radix-ui/react-scroll-area.mjs +0 -721
  140. package/admin-dist/server/_chunks/_libs/@radix-ui/react-select.mjs +0 -1163
  141. package/admin-dist/server/_chunks/_libs/@radix-ui/react-separator.mjs +0 -28
  142. package/admin-dist/server/_chunks/_libs/@radix-ui/react-slot.mjs +0 -186
  143. package/admin-dist/server/_chunks/_libs/@radix-ui/react-switch.mjs +0 -152
  144. package/admin-dist/server/_chunks/_libs/@radix-ui/react-tabs.mjs +0 -189
  145. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-callback-ref.mjs +0 -11
  146. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-controllable-state.mjs +0 -69
  147. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-effect-event.mjs +0 -1
  148. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-escape-keydown.mjs +0 -17
  149. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-is-hydrated.mjs +0 -15
  150. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-layout-effect.mjs +0 -6
  151. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-previous.mjs +0 -14
  152. package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-size.mjs +0 -39
  153. package/admin-dist/server/_chunks/_libs/@radix-ui/react-visually-hidden.mjs +0 -60
  154. package/admin-dist/server/_chunks/_libs/@tanstack/history.mjs +0 -33
  155. package/admin-dist/server/_chunks/_libs/@tanstack/react-router.mjs +0 -1485
  156. package/admin-dist/server/_chunks/_libs/@tanstack/react-store.mjs +0 -1
  157. package/admin-dist/server/_chunks/_libs/@tanstack/router-core.mjs +0 -4101
  158. package/admin-dist/server/_chunks/_libs/@tanstack/store.mjs +0 -1
  159. package/admin-dist/server/_chunks/_libs/react-dom.mjs +0 -10781
  160. package/admin-dist/server/_chunks/_libs/react.mjs +0 -513
  161. package/admin-dist/server/_libs/aria-hidden.mjs +0 -122
  162. package/admin-dist/server/_libs/class-variance-authority.mjs +0 -44
  163. package/admin-dist/server/_libs/clsx.mjs +0 -16
  164. package/admin-dist/server/_libs/cmdk.mjs +0 -315
  165. package/admin-dist/server/_libs/convex-helpers.mjs +0 -1112
  166. package/admin-dist/server/_libs/convex.mjs +0 -6239
  167. package/admin-dist/server/_libs/cookie-es.mjs +0 -1
  168. package/admin-dist/server/_libs/croner.mjs +0 -1
  169. package/admin-dist/server/_libs/crossws.mjs +0 -1
  170. package/admin-dist/server/_libs/date-fns.mjs +0 -1716
  171. package/admin-dist/server/_libs/detect-node-es.mjs +0 -1
  172. package/admin-dist/server/_libs/get-nonce.mjs +0 -9
  173. package/admin-dist/server/_libs/h3.mjs +0 -401
  174. package/admin-dist/server/_libs/hookable.mjs +0 -1
  175. package/admin-dist/server/_libs/isbot.mjs +0 -20
  176. package/admin-dist/server/_libs/lucide-react.mjs +0 -877
  177. package/admin-dist/server/_libs/ohash.mjs +0 -1
  178. package/admin-dist/server/_libs/react-day-picker.mjs +0 -2201
  179. package/admin-dist/server/_libs/react-remove-scroll-bar.mjs +0 -82
  180. package/admin-dist/server/_libs/react-remove-scroll.mjs +0 -328
  181. package/admin-dist/server/_libs/react-style-singleton.mjs +0 -69
  182. package/admin-dist/server/_libs/rou3.mjs +0 -8
  183. package/admin-dist/server/_libs/seroval-plugins.mjs +0 -1
  184. package/admin-dist/server/_libs/seroval.mjs +0 -1
  185. package/admin-dist/server/_libs/srvx.mjs +0 -719
  186. package/admin-dist/server/_libs/tailwind-merge.mjs +0 -3010
  187. package/admin-dist/server/_libs/tiny-invariant.mjs +0 -12
  188. package/admin-dist/server/_libs/tiny-warning.mjs +0 -5
  189. package/admin-dist/server/_libs/tslib.mjs +0 -39
  190. package/admin-dist/server/_libs/ufo.mjs +0 -54
  191. package/admin-dist/server/_libs/unctx.mjs +0 -1
  192. package/admin-dist/server/_libs/unstorage.mjs +0 -1
  193. package/admin-dist/server/_libs/use-callback-ref.mjs +0 -66
  194. package/admin-dist/server/_libs/use-sidecar.mjs +0 -106
  195. package/admin-dist/server/_libs/use-sync-external-store.mjs +0 -64
  196. package/admin-dist/server/_libs/zod.mjs +0 -4223
  197. package/admin-dist/server/_ssr/CmsEmptyState-DzzuQG0S.mjs +0 -38
  198. package/admin-dist/server/_ssr/CmsFilterBar-C5XADS12.mjs +0 -81
  199. package/admin-dist/server/_ssr/CmsPageHeader-DZ6h7smh.mjs +0 -24
  200. package/admin-dist/server/_ssr/CmsStatusBadge-D-YFSAa1.mjs +0 -127
  201. package/admin-dist/server/_ssr/CmsSurface-Cv51NBLZ.mjs +0 -44
  202. package/admin-dist/server/_ssr/CmsTable-DG88C5nO.mjs +0 -189
  203. package/admin-dist/server/_ssr/ContentEntryEditor-CRjwXB17.mjs +0 -3708
  204. package/admin-dist/server/_ssr/TaxonomyFilter-xGwcgtjr.mjs +0 -188
  205. package/admin-dist/server/_ssr/_contentTypeId-DRCfeKkm.mjs +0 -411
  206. package/admin-dist/server/_ssr/_entryId-DULm2TDy.mjs +0 -149
  207. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-iX3K33p1.mjs +0 -4
  208. package/admin-dist/server/_ssr/badge-CbjIvhb6.mjs +0 -39
  209. package/admin-dist/server/_ssr/command-xB2uiYps.mjs +0 -128
  210. package/admin-dist/server/_ssr/config.server-BOr7Jxr4.mjs +0 -105
  211. package/admin-dist/server/_ssr/content-BfLBaJCZ.mjs +0 -575
  212. package/admin-dist/server/_ssr/content-types-DZbF6O2q.mjs +0 -469
  213. package/admin-dist/server/_ssr/index-Cfe8sZv5.mjs +0 -374
  214. package/admin-dist/server/_ssr/index.mjs +0 -4673
  215. package/admin-dist/server/_ssr/media-Bds2AnPC.mjs +0 -2172
  216. package/admin-dist/server/_ssr/new._contentTypeId-DGvz_tlW.mjs +0 -132
  217. package/admin-dist/server/_ssr/router-DxF7GBcO.mjs +0 -11831
  218. package/admin-dist/server/_ssr/scroll-area-DLDlXI07.mjs +0 -59
  219. package/admin-dist/server/_ssr/settings-BbaiS6z9.mjs +0 -506
  220. package/admin-dist/server/_ssr/start-HYkvq4Ni.mjs +0 -4
  221. package/admin-dist/server/_ssr/switch-Bl89Pfxu.mjs +0 -31
  222. package/admin-dist/server/_ssr/tabs-QkbR0iir.mjs +0 -629
  223. package/admin-dist/server/_ssr/tanstack-adapter-CKknPtcU.mjs +0 -151
  224. package/admin-dist/server/_ssr/taxonomies-S_Ontd0z.mjs +0 -1020
  225. package/admin-dist/server/_ssr/trash-BzAIsbbN.mjs +0 -382
  226. package/admin-dist/server/_ssr/useBreadcrumbLabel-BjiR1fM_.mjs +0 -16
  227. package/admin-dist/server/_ssr/usePermissions-CDHN95Nz.mjs +0 -68
  228. package/admin-dist/server/favicon.ico +0 -0
  229. package/admin-dist/server/index.mjs +0 -718
  230. /package/admin-dist/{public/assets → assets}/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  231. /package/admin-dist/{public/assets → assets}/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  232. /package/admin-dist/{public/assets → assets}/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  233. /package/admin-dist/{public/assets → assets}/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  234. /package/admin-dist/{public/assets → assets}/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  235. /package/admin-dist/{public/assets → assets}/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  236. /package/admin-dist/{public/assets → assets}/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  237. /package/admin-dist/{public/assets → assets}/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2 +0 -0
  238. /package/admin-dist/{public/assets → assets}/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff +0 -0
  239. /package/admin-dist/{public/assets → assets}/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff +0 -0
  240. /package/admin-dist/{public/assets → assets}/jetbrains-mono-greek-400-normal-C190GLew.woff2 +0 -0
  241. /package/admin-dist/{public/assets → assets}/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  242. /package/admin-dist/{public/assets → assets}/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  243. /package/admin-dist/{public/assets → assets}/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2 +0 -0
  244. /package/admin-dist/{public/assets → assets}/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff +0 -0
  245. /package/admin-dist/{public/assets → assets}/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff +0 -0
  246. /package/admin-dist/{public/favicon.ico → favicon.ico} +0 -0
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![npm version](https://badge.fury.io/js/convex-cms.svg)](https://www.npmjs.com/package/convex-cms)
4
4
  [![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
5
5
 
6
- > **Alpha (v0.0.10)** Actively developed. APIs & docs may change. [Report issues](https://github.com/obkaro/convex-cms/issues).
6
+ > **Alpha** Actively developed. APIs & docs may change. [Report issues](https://github.com/obkaro/convex-cms/issues).
7
7
 
8
8
  A headless CMS built as a [Convex Component](https://docs.convex.dev/components). Content management that runs inside your Convex app.
9
9
 
@@ -34,7 +34,15 @@ export default app;
34
34
 
35
35
  ### 3. Initialize
36
36
 
37
- **For Admin UI:** Run `pnpm convex-cms init` then `pnpm convex-cms admin`
37
+ ```bash
38
+ pnpm convex-cms init --template blog
39
+ ```
40
+
41
+ This generates 3 files (`convex/cms.ts`, `convex/admin.ts`, `convex/content.ts`) and updates `convex/convex.config.ts`.
42
+
43
+ **Available templates:** `blog`, `docs`, `landing`, `ecommerce`, `blank`
44
+
45
+ **For Admin UI:** Run `pnpm convex-cms admin` after init
38
46
  → [Full Admin UI Setup](./docs/guides/admin-ui-setup.md)
39
47
 
40
48
  **For Custom Functions:** Create a CMS client and use it in your functions
@@ -0,0 +1,99 @@
1
+ # Convex CMS Admin UI
2
+
3
+ The Admin UI for Convex CMS, built with TanStack Start and React.
4
+
5
+ ## Getting Started
6
+
7
+ ### Prerequisites
8
+
9
+ - Node.js 18+
10
+ - A Convex account and project
11
+
12
+ ### Installation
13
+
14
+ ```bash
15
+ cd admin
16
+ pnpm install
17
+ ```
18
+
19
+ ### Development
20
+
21
+ 1. Start the Convex development server:
22
+
23
+ ```bash
24
+ pnpm convex dev
25
+ ```
26
+
27
+ This will generate the Convex API types and provide a `VITE_CONVEX_URL`.
28
+
29
+ 2. Create a `.env` file with your Convex URL:
30
+
31
+ ```bash
32
+ cp .env.example .env
33
+ # Edit .env with your VITE_CONVEX_URL from step 1
34
+ ```
35
+
36
+ 3. Start the development server:
37
+
38
+ ```bash
39
+ pnpm dev:vite
40
+ ```
41
+
42
+ Or run both Convex and Vite together:
43
+
44
+ ```bash
45
+ pnpm dev
46
+ ```
47
+
48
+ 4. Open [http://localhost:3000](http://localhost:3000) in your browser.
49
+
50
+ ## Project Structure
51
+
52
+ ```
53
+ admin/
54
+ ├── convex/ # Convex configuration
55
+ │ └── convex.config.ts # CMS component integration
56
+ ├── src/
57
+ │ ├── routes/ # TanStack Router routes
58
+ │ │ ├── __root.tsx # Root layout with Convex provider
59
+ │ │ ├── index.tsx # Dashboard page
60
+ │ │ ├── content.tsx # Content entries list
61
+ │ │ ├── media.tsx # Media library
62
+ │ │ ├── content-types.tsx # Content type management
63
+ │ │ └── settings.tsx # CMS settings
64
+ │ ├── components/ # Reusable React components
65
+ │ ├── lib/ # Utilities and helpers
66
+ │ │ └── convex.ts # Convex client utilities
67
+ │ ├── styles/ # CSS styles
68
+ │ │ └── app.css # Main stylesheet
69
+ │ └── router.tsx # Router configuration
70
+ ├── public/ # Static assets
71
+ ├── vite.config.ts # Vite + TanStack Start configuration
72
+ ├── tsconfig.json # TypeScript configuration
73
+ └── package.json # Dependencies and scripts
74
+ ```
75
+
76
+ ## Available Scripts
77
+
78
+ - `pnpm dev` - Start Convex and Vite development servers
79
+ - `pnpm dev:vite` - Start only the Vite development server
80
+ - `pnpm dev:convex` - Start only the Convex development server
81
+ - `pnpm build` - Build for production
82
+ - `pnpm preview` - Preview production build
83
+ - `pnpm typecheck` - Run TypeScript type checking
84
+
85
+ ## Features
86
+
87
+ - **Dashboard** - Overview of CMS status and quick navigation
88
+ - **Content Management** - Browse and manage content entries
89
+ - **Media Library** - Upload and organize media assets
90
+ - **Content Types** - Define content schemas with custom fields
91
+ - **Settings** - Configure CMS features and preferences
92
+
93
+ ## Technology Stack
94
+
95
+ - [TanStack Start](https://tanstack.com/start) - Full-stack React framework
96
+ - [TanStack Router](https://tanstack.com/router) - Type-safe routing
97
+ - [Convex](https://convex.dev) - Real-time backend platform
98
+ - [React 19](https://react.dev) - UI library
99
+ - [Vite 7](https://vitejs.dev) - Build tool
@@ -1,7 +1,7 @@
1
1
  import { useState, useCallback, useMemo, useEffect } from "react";
2
2
  import { useMutation } from "convex/react";
3
3
  import { useApi } from "~/embed/contexts/ApiContext";
4
- import type { FieldType, ContentType } from "convex-cms/types";
4
+ import type { FieldType, ContentType } from "~/lib/cmsExports";
5
5
  import { CmsDialog } from "~/components/cmsds/CmsDialog";
6
6
  import { CmsButton } from "~/components/cmsds/CmsButton";
7
7
  import { Input } from "~/components/ui/input";
@@ -39,7 +39,7 @@ import {
39
39
  type Resource,
40
40
  type Action,
41
41
  type OwnershipScope,
42
- } from '../../../src/component/index';
42
+ } from '../../../src/component/roles';
43
43
 
44
44
  // =============================================================================
45
45
  // Types
@@ -30,7 +30,7 @@ import {
30
30
  type Action,
31
31
  type OwnershipScope,
32
32
  type Permission,
33
- } from '../../../src/component/index';
33
+ } from '../../../src/component/roles';
34
34
 
35
35
  // =============================================================================
36
36
  // Types
@@ -0,0 +1,13 @@
1
+ import type { CmsAdminApi } from "~/embed/contexts/ApiContext";
2
+
3
+ const fnSymbol = Symbol.for("functionName");
4
+
5
+ function createApiProxy(prefix: string): CmsAdminApi {
6
+ return new Proxy({} as CmsAdminApi, {
7
+ get(_, prop: string) {
8
+ return { [fnSymbol]: `${prefix}:${prop}` };
9
+ },
10
+ });
11
+ }
12
+
13
+ export const adminApi = createApiProxy("admin");
@@ -1,6 +1,16 @@
1
- // Re-export CMS utilities that admin components need
2
- // Using relative imports to avoid circular dependency with convex-cms package
3
- export { getRole, getRolePermissions } from '../../../src/client/index';
4
- export type { RoleName, BaseAdminAPI } from '../../../src/client/index';
5
- export { useMediaUploadQueue } from '../../../src/react/index';
6
- export type { UploadQueueFile, UploadQueueFileStatus } from '../../../src/react/index';
1
+ // Re-export CMS utilities that admin components need.
2
+ // Uses published sub-path exports (not relative source paths) so this works both
3
+ // in the monorepo (via workspace:* link) and in user projects (via npm install).
4
+ //
5
+ // IMPORTANT: Do NOT import from the main 'convex-cms' barrel export here.
6
+ // It re-exports convex/server code (via admin functions) which contaminates
7
+ // the browser bundle. Use specific sub-paths that are browser-safe:
8
+ // - convex-cms/roles: only depends on convex/values
9
+ // - convex-cms/types: type-only re-exports from component modules
10
+ // - convex-cms/react: React hooks (browser-safe)
11
+ export { getRole, getRolePermissions } from 'convex-cms/roles';
12
+ export type { RoleName } from 'convex-cms/roles';
13
+ export type { BaseAdminAPI } from 'convex-cms';
14
+ export type { FieldType, ContentType } from 'convex-cms/types';
15
+ export { useMediaUploadQueue } from 'convex-cms/react';
16
+ export type { UploadQueueFile, UploadQueueFileStatus } from 'convex-cms/react';
@@ -0,0 +1,156 @@
1
+ import { ConvexProvider, ConvexReactClient } from "convex/react";
2
+ import { useMemo, type ReactNode } from "react";
3
+ import { RouterProvider } from "@tanstack/react-router";
4
+ import { RouteGuard } from "~/components";
5
+ import {
6
+ AuthProvider,
7
+ BreadcrumbProvider,
8
+ SettingsConfigProvider,
9
+ ThemeProvider,
10
+ type GetUserHook,
11
+ type GetUserRoleHook,
12
+ type LogoutHook,
13
+ } from "~/contexts";
14
+ import { ApiProvider } from "~/embed/contexts/ApiContext";
15
+ import type { AdminConfig } from "~/lib/admin-config";
16
+ import { resolveAdminConfig } from "~/lib/admin-config";
17
+ import { adminApi } from "~/lib/adminApi";
18
+ import { getCmsConfig } from "./config";
19
+ import { router } from "./router";
20
+
21
+ const mockGetUser: GetUserHook = () => ({
22
+ id: "mock_user_123",
23
+ name: "Demo Admin",
24
+ email: "admin@example.com",
25
+ });
26
+
27
+ const mockGetUserRole: GetUserRoleHook = () => "admin";
28
+ const mockLogout: LogoutHook = () => {
29
+ console.log("Logout called (mock mode)");
30
+ };
31
+
32
+ const noAuthGetUser: GetUserHook = () => null;
33
+ const noAuthGetUserRole: GetUserRoleHook = () => null;
34
+ const noAuthLogout: LogoutHook = () => {};
35
+
36
+ function getAuthConfig(authMode: string): {
37
+ getUser: GetUserHook;
38
+ getUserRole: GetUserRoleHook;
39
+ onLogout: LogoutHook;
40
+ } {
41
+ switch (authMode) {
42
+ case "mock":
43
+ case "demo":
44
+ return {
45
+ getUser: mockGetUser,
46
+ getUserRole: mockGetUserRole,
47
+ onLogout: mockLogout,
48
+ };
49
+ case "none":
50
+ case "disabled":
51
+ return {
52
+ getUser: noAuthGetUser,
53
+ getUserRole: noAuthGetUserRole,
54
+ onLogout: noAuthLogout,
55
+ };
56
+ default:
57
+ return {
58
+ getUser: mockGetUser,
59
+ getUserRole: mockGetUserRole,
60
+ onLogout: mockLogout,
61
+ };
62
+ }
63
+ }
64
+
65
+ export function App() {
66
+ const config = getCmsConfig();
67
+ const authConfig = useMemo(
68
+ () => getAuthConfig(config.authMode),
69
+ [config.authMode],
70
+ );
71
+ const adminConfig = useMemo(
72
+ () => resolveAdminConfig(config.adminConfig),
73
+ [config.adminConfig],
74
+ );
75
+
76
+ return (
77
+ <ThemeProvider>
78
+ <BreadcrumbProvider>
79
+ <ConvexProviderWrapper
80
+ convexUrl={config.convexUrl}
81
+ adminConfig={adminConfig}
82
+ >
83
+ <AuthProvider
84
+ getUser={authConfig.getUser}
85
+ getUserRole={authConfig.getUserRole}
86
+ onLogout={authConfig.onLogout}
87
+ >
88
+ <RouteGuard>
89
+ <RouterProvider router={router} />
90
+ </RouteGuard>
91
+ </AuthProvider>
92
+ </ConvexProviderWrapper>
93
+ </BreadcrumbProvider>
94
+ </ThemeProvider>
95
+ );
96
+ }
97
+
98
+ function ConvexProviderWrapper({
99
+ children,
100
+ convexUrl,
101
+ adminConfig,
102
+ }: {
103
+ children: ReactNode;
104
+ convexUrl: string;
105
+ adminConfig: AdminConfig;
106
+ }) {
107
+ const convex = useMemo(() => {
108
+ if (!convexUrl) return null;
109
+ return new ConvexReactClient(convexUrl);
110
+ }, [convexUrl]);
111
+
112
+ if (!convex) {
113
+ return (
114
+ <div className="flex min-h-screen items-center justify-center bg-background p-6">
115
+ <div className="diff-modified max-w-lg space-y-4 rounded-lg border p-6 text-center">
116
+ <h2 className="text-xl font-semibold text-diff-modified">
117
+ Convex Configuration Required
118
+ </h2>
119
+ <p className="text-sm text-diff-modified-foreground">
120
+ Please provide a Convex deployment URL to connect to your backend.
121
+ </p>
122
+ <div className="space-y-2 text-left text-sm text-diff-modified-foreground">
123
+ <p className="font-medium">Options:</p>
124
+ <ul className="list-inside list-disc space-y-1">
125
+ <li>
126
+ Run with URL:{" "}
127
+ <code className="rounded bg-diff-modified-bg/50 px-1">
128
+ npx convex-cms admin --url YOUR_URL
129
+ </code>
130
+ </li>
131
+ <li>
132
+ Set environment variable:{" "}
133
+ <code className="rounded bg-diff-modified-bg/50 px-1">
134
+ CONVEX_URL=YOUR_URL
135
+ </code>
136
+ </li>
137
+ </ul>
138
+ </div>
139
+ </div>
140
+ </div>
141
+ );
142
+ }
143
+
144
+ return (
145
+ <ConvexProvider client={convex}>
146
+ <ApiProvider api={adminApi}>
147
+ <SettingsConfigProvider
148
+ baseConfig={adminConfig}
149
+ api={{ getSettings: adminApi.getSettings }}
150
+ >
151
+ {children}
152
+ </SettingsConfigProvider>
153
+ </ApiProvider>
154
+ </ConvexProvider>
155
+ );
156
+ }
@@ -0,0 +1,24 @@
1
+ import type { AdminConfig } from "~/lib/admin-config";
2
+
3
+ interface CmsConfig {
4
+ convexUrl: string;
5
+ authMode: string;
6
+ adminConfig?: Partial<AdminConfig>;
7
+ }
8
+
9
+ declare global {
10
+ interface Window {
11
+ __CMS_CONFIG__?: CmsConfig;
12
+ }
13
+ }
14
+
15
+ export function getCmsConfig(): CmsConfig {
16
+ if (window.__CMS_CONFIG__) {
17
+ return window.__CMS_CONFIG__;
18
+ }
19
+
20
+ return {
21
+ convexUrl: import.meta.env.VITE_CONVEX_URL ?? "",
22
+ authMode: import.meta.env.VITE_AUTH_MODE ?? "demo",
23
+ };
24
+ }
@@ -0,0 +1,10 @@
1
+ import { StrictMode } from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import { App } from "./App";
4
+ import "~/index.css";
5
+
6
+ createRoot(document.getElementById("root")!).render(
7
+ <StrictMode>
8
+ <App />
9
+ </StrictMode>,
10
+ );