convex-cms 0.0.5-alpha.4 → 0.0.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 (145) hide show
  1. package/README.md +3 -3
  2. package/admin/src/components/Sidebar.tsx +150 -58
  3. package/admin/src/components/ui/collapsible.tsx +7 -0
  4. package/admin/src/embed/components/EmbedSidebar.tsx +163 -68
  5. package/admin-dist/nitro.json +1 -1
  6. package/admin-dist/public/assets/{CmsEmptyState-CkqBIab3.js → CmsEmptyState-Do_erIgn.js} +1 -1
  7. package/admin-dist/public/assets/{CmsPageHeader-CUtl5MMG.js → CmsPageHeader-qDwPGi48.js} +1 -1
  8. package/admin-dist/public/assets/{CmsStatusBadge-CUYFgEe-.js → CmsStatusBadge-Dd9uToHE.js} +1 -1
  9. package/admin-dist/public/assets/{CmsSurface-CsJfAVa3.js → CmsSurface-DBy5Lumx.js} +1 -1
  10. package/admin-dist/public/assets/{CmsToolbar-CnfbcxeP.js → CmsToolbar-D1-Y-7SK.js} +1 -1
  11. package/admin-dist/public/assets/ContentEntryEditor-CWBiIx52.js +4 -0
  12. package/admin-dist/public/assets/{TaxonomyFilter-CWCxC5HZ.js → TaxonomyFilter-CdYQawxb.js} +1 -1
  13. package/admin-dist/public/assets/_contentTypeId-D9VMP6Gs.js +1 -0
  14. package/admin-dist/public/assets/_entryId-2FlCfqE7.js +1 -0
  15. package/admin-dist/public/assets/{alert-CF1BSzGR.js → alert-GxZx0y5c.js} +1 -1
  16. package/admin-dist/public/assets/{badge-CmuOIVKp.js → badge-BAlGIjop.js} +1 -1
  17. package/admin-dist/public/assets/{circle-check-big-BKDVG6DU.js → circle-check-big-CpLxAvEj.js} +1 -1
  18. package/admin-dist/public/assets/{command-XJxnF2Sd.js → command-di7XCqcv.js} +1 -1
  19. package/admin-dist/public/assets/content-D8zELsDG.js +1 -0
  20. package/admin-dist/public/assets/{content-types-CrNEm8Hf.js → content-types-BmzD0krT.js} +2 -2
  21. package/admin-dist/public/assets/globals-BvFfH-v9.css +1 -0
  22. package/admin-dist/public/assets/{index-C7xOwudI.js → index-zqfj4T_v.js} +1 -1
  23. package/admin-dist/public/assets/{label-CHCnXeBk.js → label-B6PPtKR5.js} +1 -1
  24. package/admin-dist/public/assets/{link-2-Bb34judH.js → link-2-W2fVnVOf.js} +1 -1
  25. package/admin-dist/public/assets/{list-9Pzt48ld.js → list-F8O0lZXC.js} +1 -1
  26. package/admin-dist/public/assets/main-dZT72bAG.js +97 -0
  27. package/admin-dist/public/assets/media-CETueFbV.js +1 -0
  28. package/admin-dist/public/assets/new._contentTypeId-BV2-TyyR.js +1 -0
  29. package/admin-dist/public/assets/{plus-Ceef7DHk.js → plus-AABQIF0N.js} +1 -1
  30. package/admin-dist/public/assets/{rotate-ccw-7k7-4VUq.js → rotate-ccw-BZpZtw0N.js} +1 -1
  31. package/admin-dist/public/assets/{scroll-area-CC6wujnp.js → scroll-area-CDfk-zrz.js} +1 -1
  32. package/admin-dist/public/assets/{search-DwoUV2pv.js → search-BvgYr-c9.js} +1 -1
  33. package/admin-dist/public/assets/{select-hOZTp8aC.js → select-BuiHcMzS.js} +1 -1
  34. package/admin-dist/public/assets/settings-DBxbYDvn.js +1 -0
  35. package/admin-dist/public/assets/{switch-jX2pDaNU.js → switch-DiJvolcs.js} +1 -1
  36. package/admin-dist/public/assets/tabs-Cgz6G_Xy.js +1 -0
  37. package/admin-dist/public/assets/{tanstack-adapter-B-Glm4kH.js → tanstack-adapter-BknsSgra.js} +1 -1
  38. package/admin-dist/public/assets/taxonomies-DOErsLl5.js +1 -0
  39. package/admin-dist/public/assets/{textarea-B6SfBmr0.js → textarea-CgggMxUX.js} +1 -1
  40. package/admin-dist/public/assets/{trash-BOCnIznD.js → trash-BU4ANuaW.js} +1 -1
  41. package/admin-dist/public/assets/{triangle-alert-CXFIO_Gu.js → triangle-alert-lvCbwp0s.js} +1 -1
  42. package/admin-dist/public/assets/{useBreadcrumbLabel-_6qBagc3.js → useBreadcrumbLabel-D00rvqjw.js} +1 -1
  43. package/admin-dist/public/assets/{usePermissions-M1ijZ7a6.js → usePermissions-D7tQowaF.js} +1 -1
  44. package/admin-dist/server/_chunks/_libs/@radix-ui/react-collapsible.mjs +144 -0
  45. package/admin-dist/server/_chunks/_libs/@radix-ui/react-slot.mjs +21 -21
  46. package/admin-dist/server/_libs/lucide-react.mjs +131 -124
  47. package/admin-dist/server/_ssr/{CmsButton-DOiTVKQq.mjs → CmsButton-DbzfJru_.mjs} +1 -1
  48. package/admin-dist/server/_ssr/{CmsEmptyState-fbnGt3LD.mjs → CmsEmptyState-CuvcXr3Z.mjs} +3 -3
  49. package/admin-dist/server/_ssr/{CmsPageHeader-DHRrdOZa.mjs → CmsPageHeader-ClNPU7Up.mjs} +1 -1
  50. package/admin-dist/server/_ssr/{CmsStatusBadge-s7obWbKZ.mjs → CmsStatusBadge-CojMbrY7.mjs} +2 -2
  51. package/admin-dist/server/_ssr/{CmsSurface-rFoYjb62.mjs → CmsSurface-Dcv440rp.mjs} +1 -1
  52. package/admin-dist/server/_ssr/{CmsToolbar-zTE45z2q.mjs → CmsToolbar-BKv1nL6u.mjs} +2 -2
  53. package/admin-dist/server/_ssr/{ContentEntryEditor-BLoEjT_m.mjs → ContentEntryEditor-weiXSBdZ.mjs} +35 -51
  54. package/admin-dist/server/_ssr/{TaxonomyFilter-XAtaJC2z.mjs → TaxonomyFilter-BPQ57Mwk.mjs} +7 -7
  55. package/admin-dist/server/_ssr/{_contentTypeId-Csl4822C.mjs → _contentTypeId-DyyauLOs.mjs} +24 -23
  56. package/admin-dist/server/_ssr/{_entryId-D8alLFBx.mjs → _entryId-9Cafwxmw.mjs} +22 -21
  57. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-Dk-FIYPN.mjs +4 -0
  58. package/admin-dist/server/_ssr/{command-C0Di14--.mjs → command-CEf8YBxY.mjs} +1 -1
  59. package/admin-dist/server/_ssr/{content-CT-FPsmV.mjs → content-ZFWVzO25.mjs} +20 -19
  60. package/admin-dist/server/_ssr/{content-types-C8cBFdzE.mjs → content-types-D25lUE-j.mjs} +18 -17
  61. package/admin-dist/server/_ssr/{index-BJtcrEc-.mjs → index-BlSIlH4Z.mjs} +10 -9
  62. package/admin-dist/server/_ssr/index.mjs +2 -2
  63. package/admin-dist/server/_ssr/{label-qn2Afwl4.mjs → label-PblVvdRv.mjs} +1 -1
  64. package/admin-dist/server/_ssr/{media-qv5IAsMZ.mjs → media-CD2_NUMw.mjs} +683 -314
  65. package/admin-dist/server/_ssr/{new._contentTypeId-DdGyrhqs.mjs → new._contentTypeId-dmZy6PBX.mjs} +20 -19
  66. package/admin-dist/server/_ssr/{router-nSVkxb6Y.mjs → router-x6Ab8T4s.mjs} +109 -43
  67. package/admin-dist/server/_ssr/{scroll-area-BCinP455.mjs → scroll-area-BH_1K-WT.mjs} +1 -1
  68. package/admin-dist/server/_ssr/{select-BKQlQScw.mjs → select-CrfEkFJw.mjs} +2 -2
  69. package/admin-dist/server/_ssr/{settings-BCr2KQlk.mjs → settings-DVdsoWoh.mjs} +158 -105
  70. package/admin-dist/server/_ssr/{switch-BaOi42fE.mjs → switch-DX_X8vZl.mjs} +1 -1
  71. package/admin-dist/server/_ssr/{tabs-DYXEi9kq.mjs → tabs-4FWM0sn8.mjs} +3 -3
  72. package/admin-dist/server/_ssr/{tanstack-adapter-Bsz8kha-.mjs → tanstack-adapter-D3ZcKtbY.mjs} +1 -1
  73. package/admin-dist/server/_ssr/{taxonomies-CueMHTbE.mjs → taxonomies-BHFfO9Yr.mjs} +21 -20
  74. package/admin-dist/server/_ssr/{textarea-CI0Jqx2x.mjs → textarea-CZVaroMc.mjs} +1 -1
  75. package/admin-dist/server/_ssr/{trash-DE6W8GoX.mjs → trash-9tUB2KwI.mjs} +14 -13
  76. package/admin-dist/server/_ssr/{useBreadcrumbLabel-B5Yi72lM.mjs → useBreadcrumbLabel-DVme3DSb.mjs} +1 -1
  77. package/admin-dist/server/_ssr/{usePermissions-C3nZ-Izm.mjs → usePermissions-zAQj-ruE.mjs} +1 -1
  78. package/admin-dist/server/index.mjs +188 -188
  79. package/dist/cli/commands/init.d.ts +12 -2
  80. package/dist/cli/commands/init.d.ts.map +1 -1
  81. package/dist/cli/commands/init.js +136 -138
  82. package/dist/cli/commands/init.js.map +1 -1
  83. package/dist/cli/index.js +2 -1
  84. package/dist/cli/index.js.map +1 -1
  85. package/dist/cli/templates/admin.d.ts +10 -0
  86. package/dist/cli/templates/admin.d.ts.map +1 -0
  87. package/dist/cli/templates/admin.js +212 -0
  88. package/dist/cli/templates/admin.js.map +1 -0
  89. package/dist/cli/templates/cmsClient.d.ts +7 -0
  90. package/dist/cli/templates/cmsClient.d.ts.map +1 -0
  91. package/dist/cli/templates/cmsClient.js +36 -0
  92. package/dist/cli/templates/cmsClient.js.map +1 -0
  93. package/dist/cli/templates/cmsConfig.d.ts +7 -0
  94. package/dist/cli/templates/cmsConfig.d.ts.map +1 -0
  95. package/dist/cli/templates/cmsConfig.js +86 -0
  96. package/dist/cli/templates/cmsConfig.js.map +1 -0
  97. package/dist/cli/templates/index.d.ts +10 -0
  98. package/dist/cli/templates/index.d.ts.map +1 -0
  99. package/dist/cli/templates/index.js +10 -0
  100. package/dist/cli/templates/index.js.map +1 -0
  101. package/dist/cli/templates/schemas/blog.d.ts +8 -0
  102. package/dist/cli/templates/schemas/blog.d.ts.map +1 -0
  103. package/dist/cli/templates/schemas/blog.js +103 -0
  104. package/dist/cli/templates/schemas/blog.js.map +1 -0
  105. package/dist/cli/templates/schemas/docs.d.ts +8 -0
  106. package/dist/cli/templates/schemas/docs.d.ts.map +1 -0
  107. package/dist/cli/templates/schemas/docs.js +110 -0
  108. package/dist/cli/templates/schemas/docs.js.map +1 -0
  109. package/dist/cli/templates/schemas/index.d.ts +11 -0
  110. package/dist/cli/templates/schemas/index.d.ts.map +1 -0
  111. package/dist/cli/templates/schemas/index.js +13 -0
  112. package/dist/cli/templates/schemas/index.js.map +1 -0
  113. package/dist/cli/templates/schemas/landing.d.ts +8 -0
  114. package/dist/cli/templates/schemas/landing.d.ts.map +1 -0
  115. package/dist/cli/templates/schemas/landing.js +135 -0
  116. package/dist/cli/templates/schemas/landing.js.map +1 -0
  117. package/dist/cli/utils/fileUtils.d.ts +21 -0
  118. package/dist/cli/utils/fileUtils.d.ts.map +1 -0
  119. package/dist/cli/utils/fileUtils.js +95 -0
  120. package/dist/cli/utils/fileUtils.js.map +1 -0
  121. package/dist/cli/utils/prompts.d.ts +25 -0
  122. package/dist/cli/utils/prompts.d.ts.map +1 -0
  123. package/dist/cli/utils/prompts.js +87 -0
  124. package/dist/cli/utils/prompts.js.map +1 -0
  125. package/dist/client/agentTools.d.ts +1 -1427
  126. package/dist/client/agentTools.d.ts.map +1 -1
  127. package/dist/component/contentTypeMutations.d.ts +1 -1
  128. package/dist/test.d.ts +5 -0
  129. package/dist/test.d.ts.map +1 -1
  130. package/dist/test.js +0 -1
  131. package/dist/test.js.map +1 -1
  132. package/package.json +28 -28
  133. package/admin/README.md +0 -99
  134. package/admin-dist/public/assets/ContentEntryEditor-BU220CCy.js +0 -4
  135. package/admin-dist/public/assets/_contentTypeId-DK8cskRt.js +0 -1
  136. package/admin-dist/public/assets/_entryId-CuVMExbb.js +0 -1
  137. package/admin-dist/public/assets/content-QBUxdxbS.js +0 -1
  138. package/admin-dist/public/assets/globals-B7Wsfh_v.css +0 -1
  139. package/admin-dist/public/assets/main-CjQ2VI9L.js +0 -97
  140. package/admin-dist/public/assets/media-Dc5PWt2Q.js +0 -1
  141. package/admin-dist/public/assets/new._contentTypeId-C_I4YxIa.js +0 -1
  142. package/admin-dist/public/assets/settings-t2PbCZh4.js +0 -1
  143. package/admin-dist/public/assets/tabs-q4EbZk7c.js +0 -1
  144. package/admin-dist/public/assets/taxonomies-kyk5P4ZW.js +0 -1
  145. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-BffZedId.mjs +0 -4
@@ -1,15 +1,15 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { a as api, u as useSettingsConfig, R as RouteGuard, b as useTheme, c as cn } from "./router-nSVkxb6Y.mjs";
3
- import { B as Badge, C as CmsButton } from "./CmsButton-DOiTVKQq.mjs";
4
- import { L as Label } from "./label-qn2Afwl4.mjs";
5
- import { S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem } from "./select-BKQlQScw.mjs";
6
- import { u as usePermissions } from "./usePermissions-C3nZ-Izm.mjs";
7
- import { C as CmsPageHeader } from "./CmsPageHeader-DHRrdOZa.mjs";
8
- import { C as CmsSurface } from "./CmsSurface-rFoYjb62.mjs";
9
- import { S as Switch } from "./switch-BaOi42fE.mjs";
10
- import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-Bsz8kha-.mjs";
2
+ import { a as api, u as useAdminConfig, R as RouteGuard, b as useTheme, c as cn } from "./router-x6Ab8T4s.mjs";
3
+ import { B as Badge, C as CmsButton } from "./CmsButton-DbzfJru_.mjs";
4
+ import { L as Label } from "./label-PblVvdRv.mjs";
5
+ import { S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem } from "./select-CrfEkFJw.mjs";
6
+ import { u as usePermissions } from "./usePermissions-zAQj-ruE.mjs";
7
+ import { C as CmsPageHeader } from "./CmsPageHeader-ClNPU7Up.mjs";
8
+ import { C as CmsSurface } from "./CmsSurface-Dcv440rp.mjs";
9
+ import { S as Switch } from "./switch-DX_X8vZl.mjs";
10
+ import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-D3ZcKtbY.mjs";
11
11
  import { u as useQuery, d as useMutation } from "../_libs/convex.mjs";
12
- import { O as TriangleAlert, Z as Check, X, _ as Sun, $ as Moon, a0 as Monitor } from "../_libs/lucide-react.mjs";
12
+ import { Z as Info, v as Lock, _ as Check, X, $ as Sun, a0 as Moon, a1 as Monitor } from "../_libs/lucide-react.mjs";
13
13
  import "../_chunks/_libs/@tanstack/react-router.mjs";
14
14
  import "../_libs/tiny-warning.mjs";
15
15
  import "../_chunks/_libs/@tanstack/router-core.mjs";
@@ -31,14 +31,17 @@ import "../_chunks/_libs/@tanstack/react-store.mjs";
31
31
  import "../_libs/use-sync-external-store.mjs";
32
32
  import "../_libs/clsx.mjs";
33
33
  import "../_libs/tailwind-merge.mjs";
34
- import "../_chunks/_libs/@radix-ui/react-slot.mjs";
35
- import "../_chunks/_libs/@radix-ui/react-compose-refs.mjs";
36
- import "../_chunks/_libs/@radix-ui/react-dropdown-menu.mjs";
34
+ import "../_chunks/_libs/@radix-ui/react-collapsible.mjs";
37
35
  import "../_chunks/_libs/@radix-ui/primitive.mjs";
38
36
  import "../_chunks/_libs/@radix-ui/react-context.mjs";
39
37
  import "../_chunks/_libs/@radix-ui/react-use-controllable-state.mjs";
40
38
  import "../_chunks/_libs/@radix-ui/react-use-layout-effect.mjs";
39
+ import "../_chunks/_libs/@radix-ui/react-compose-refs.mjs";
41
40
  import "../_chunks/_libs/@radix-ui/react-primitive.mjs";
41
+ import "../_chunks/_libs/@radix-ui/react-slot.mjs";
42
+ import "../_chunks/_libs/@radix-ui/react-presence.mjs";
43
+ import "../_chunks/_libs/@radix-ui/react-id.mjs";
44
+ import "../_chunks/_libs/@radix-ui/react-dropdown-menu.mjs";
42
45
  import "../_chunks/_libs/@radix-ui/react-menu.mjs";
43
46
  import "../_chunks/_libs/@radix-ui/react-collection.mjs";
44
47
  import "../_chunks/_libs/@radix-ui/react-direction.mjs";
@@ -55,9 +58,7 @@ import "../_chunks/_libs/@floating-ui/utils.mjs";
55
58
  import "../_chunks/_libs/@radix-ui/react-arrow.mjs";
56
59
  import "../_chunks/_libs/@radix-ui/react-use-size.mjs";
57
60
  import "../_chunks/_libs/@radix-ui/react-portal.mjs";
58
- import "../_chunks/_libs/@radix-ui/react-presence.mjs";
59
61
  import "../_chunks/_libs/@radix-ui/react-roving-focus.mjs";
60
- import "../_chunks/_libs/@radix-ui/react-id.mjs";
61
62
  import "../_libs/aria-hidden.mjs";
62
63
  import "../_libs/react-remove-scroll.mjs";
63
64
  import "../_libs/tslib.mjs";
@@ -85,6 +86,18 @@ import "../_chunks/_libs/@radix-ui/number.mjs";
85
86
  import "../_chunks/_libs/@radix-ui/react-use-previous.mjs";
86
87
  import "../_chunks/_libs/@radix-ui/react-visually-hidden.mjs";
87
88
  import "../_chunks/_libs/@radix-ui/react-switch.mjs";
89
+ const DEFAULT_FEATURES = {
90
+ versioning: true,
91
+ scheduling: true,
92
+ localization: false,
93
+ mediaManagement: true
94
+ };
95
+ const DEFAULT_SETTINGS = {
96
+ _id: null,
97
+ defaultLocale: "en",
98
+ availableLocales: ["en", "es", "fr", "de"],
99
+ features: DEFAULT_FEATURES
100
+ };
88
101
  const LOCALE_OPTIONS = [
89
102
  { value: "en", label: "English (en)" },
90
103
  { value: "es", label: "Spanish (es)" },
@@ -134,24 +147,50 @@ function SettingsPage({
134
147
  }) {
135
148
  const { canManageSettings } = usePermissions();
136
149
  const canEdit = canManageSettings();
137
- const { baseConfig } = useSettingsConfig();
138
- const settings = useQuery(api2.getSettings, {});
139
- const updateSettings = useMutation(api2.updateSettings);
140
- const resetSettings = useMutation(api2.resetSettings);
150
+ const adminConfig = useAdminConfig();
151
+ const isConfigured = reactExports.useMemo(() => {
152
+ return typeof api2.getSettings === "function";
153
+ }, [api2]);
154
+ const settings = useQuery(
155
+ isConfigured ? api2.getSettings : "skip",
156
+ isConfigured ? {} : "skip"
157
+ );
158
+ const updateSettingsMutation = useMutation(
159
+ api2.updateSettings ?? (() => {
160
+ })
161
+ );
162
+ const resetSettingsMutation = useMutation(
163
+ api2.resetSettings ?? (() => {
164
+ })
165
+ );
141
166
  const [formData, setFormData] = reactExports.useState(null);
142
167
  const [isDirty, setIsDirty] = reactExports.useState(false);
143
168
  const [feedbackStatus, setFeedbackStatus] = reactExports.useState("idle");
144
169
  const [errorMessage, setErrorMessage] = reactExports.useState(null);
170
+ const normalizedSettings = reactExports.useMemo(() => {
171
+ if (!settings) return null;
172
+ return {
173
+ _id: settings._id ?? null,
174
+ defaultLocale: settings.defaultLocale ?? DEFAULT_SETTINGS.defaultLocale,
175
+ availableLocales: settings.availableLocales ?? DEFAULT_SETTINGS.availableLocales,
176
+ features: {
177
+ ...DEFAULT_FEATURES,
178
+ ...settings.features ?? {}
179
+ },
180
+ updatedBy: settings.updatedBy,
181
+ _creationTime: settings._creationTime
182
+ };
183
+ }, [settings]);
145
184
  reactExports.useEffect(() => {
146
- if (settings && !formData) {
147
- setFormData(settings);
185
+ if (normalizedSettings && !formData) {
186
+ setFormData(normalizedSettings);
148
187
  }
149
- }, [settings, formData]);
188
+ }, [normalizedSettings, formData]);
150
189
  reactExports.useEffect(() => {
151
- if (settings && !isDirty) {
152
- setFormData(settings);
190
+ if (normalizedSettings && !isDirty) {
191
+ setFormData(normalizedSettings);
153
192
  }
154
- }, [settings, isDirty]);
193
+ }, [normalizedSettings, isDirty]);
155
194
  const handleLocaleChange = reactExports.useCallback(
156
195
  (value) => {
157
196
  if (!formData) return;
@@ -164,29 +203,13 @@ function SettingsPage({
164
203
  },
165
204
  [formData]
166
205
  );
167
- const handleFeatureChange = reactExports.useCallback(
168
- (feature) => {
169
- if (!formData) return;
170
- setFormData({
171
- ...formData,
172
- features: {
173
- ...formData.features,
174
- [feature]: !formData.features[feature]
175
- }
176
- });
177
- setIsDirty(true);
178
- setFeedbackStatus("idle");
179
- },
180
- [formData]
181
- );
182
206
  const handleSave = reactExports.useCallback(async () => {
183
- if (!formData || !isDirty) return;
207
+ if (!formData || !isDirty || !isConfigured || !api2.updateSettings) return;
184
208
  setFeedbackStatus("saving");
185
209
  setErrorMessage(null);
186
210
  try {
187
- await updateSettings({
188
- defaultLocale: formData.defaultLocale,
189
- features: formData.features
211
+ await updateSettingsMutation({
212
+ defaultLocale: formData.defaultLocale
190
213
  });
191
214
  setFeedbackStatus("saved");
192
215
  setIsDirty(false);
@@ -199,8 +222,9 @@ function SettingsPage({
199
222
  error instanceof Error ? error.message : "Failed to save settings"
200
223
  );
201
224
  }
202
- }, [formData, isDirty, updateSettings]);
225
+ }, [formData, isDirty, isConfigured, api2.updateSettings, updateSettingsMutation]);
203
226
  const handleReset = reactExports.useCallback(async () => {
227
+ if (!isConfigured || !api2.resetSettings) return;
204
228
  const confirmed = window.confirm(
205
229
  "Are you sure you want to reset all settings to their defaults? This action cannot be undone."
206
230
  );
@@ -208,8 +232,17 @@ function SettingsPage({
208
232
  setFeedbackStatus("saving");
209
233
  setErrorMessage(null);
210
234
  try {
211
- const newSettings = await resetSettings({});
212
- setFormData(newSettings);
235
+ const newSettings = await resetSettingsMutation({});
236
+ setFormData({
237
+ ...DEFAULT_SETTINGS,
238
+ _id: newSettings?._id ?? null,
239
+ defaultLocale: newSettings?.defaultLocale ?? DEFAULT_SETTINGS.defaultLocale,
240
+ availableLocales: newSettings?.availableLocales ?? DEFAULT_SETTINGS.availableLocales,
241
+ features: {
242
+ ...DEFAULT_FEATURES,
243
+ ...newSettings?.features ?? {}
244
+ }
245
+ });
213
246
  setFeedbackStatus("saved");
214
247
  setIsDirty(false);
215
248
  setTimeout(() => {
@@ -221,16 +254,16 @@ function SettingsPage({
221
254
  error instanceof Error ? error.message : "Failed to reset settings"
222
255
  );
223
256
  }
224
- }, [resetSettings]);
257
+ }, [isConfigured, api2.resetSettings, resetSettingsMutation]);
225
258
  const handleDiscard = reactExports.useCallback(() => {
226
- if (settings) {
227
- setFormData(settings);
259
+ if (normalizedSettings) {
260
+ setFormData(normalizedSettings);
228
261
  setIsDirty(false);
229
262
  setFeedbackStatus("idle");
230
263
  setErrorMessage(null);
231
264
  }
232
- }, [settings]);
233
- if (settings === void 0) {
265
+ }, [normalizedSettings]);
266
+ if (!isConfigured) {
234
267
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
235
268
  RouteGuard,
236
269
  {
@@ -243,15 +276,54 @@ function SettingsPage({
243
276
  description: "Configure your CMS settings and preferences."
244
277
  }
245
278
  ),
246
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center justify-center py-12", children: [
247
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "size-8 animate-spin rounded-full border-2 border-muted border-t-primary" }),
248
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: "Loading settings..." })
279
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
280
+ /* @__PURE__ */ jsxRuntimeExports.jsx(AppearanceSection, {}),
281
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Alert, { children: [
282
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Info, { className: "size-4" }),
283
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(AlertDescription, { children: [
284
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Settings not configured." }),
285
+ " To enable CMS settings, export",
286
+ " ",
287
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "getSettings" }),
288
+ ",",
289
+ " ",
290
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "updateSettings" }),
291
+ ", and",
292
+ " ",
293
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "resetSettings" }),
294
+ " from your",
295
+ " ",
296
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "convex/admin.ts" }),
297
+ " file."
298
+ ] })
299
+ ] }),
300
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
301
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4 flex items-center gap-2", children: [
302
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Features" }),
303
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Badge, { variant: "secondary", className: "gap-1", children: [
304
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Lock, { className: "size-3" }),
305
+ "Default values"
306
+ ] })
307
+ ] }),
308
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-4 text-sm text-muted-foreground", children: "Showing default feature flags. Configure settings in your admin API to customize." }),
309
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: ["versioning", "scheduling", "localization", "mediaManagement"].map((feature) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between opacity-75", children: [
310
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium capitalize", children: feature }) }),
311
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: DEFAULT_FEATURES[feature], disabled: true })
312
+ ] }, feature)) })
313
+ ] }),
314
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
315
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "API" }),
316
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
317
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Convex Deployment URL" }),
318
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "mt-1 block rounded-md bg-muted px-3 py-2 text-sm", children: "https://majestic-beagle-49.convex.cloud" })
319
+ ] }) })
320
+ ] })
249
321
  ] })
250
322
  ] })
251
323
  }
252
324
  );
253
325
  }
254
- if (settings === null && !formData) {
326
+ if (settings === void 0) {
255
327
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
256
328
  RouteGuard,
257
329
  {
@@ -264,14 +336,16 @@ function SettingsPage({
264
336
  description: "Configure your CMS settings and preferences."
265
337
  }
266
338
  ),
267
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Alert, { variant: "destructive", children: [
268
- /* @__PURE__ */ jsxRuntimeExports.jsx(TriangleAlert, { className: "size-4" }),
269
- /* @__PURE__ */ jsxRuntimeExports.jsx(AlertDescription, { children: "Failed to load settings. Please try refreshing the page." })
339
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center justify-center py-12", children: [
340
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "size-8 animate-spin rounded-full border-2 border-muted border-t-primary" }),
341
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-sm text-muted-foreground", children: "Loading settings..." })
270
342
  ] })
271
343
  ] })
272
344
  }
273
345
  );
274
346
  }
347
+ const displayData = formData ?? normalizedSettings ?? DEFAULT_SETTINGS;
348
+ const features = displayData.features ?? DEFAULT_FEATURES;
275
349
  return /* @__PURE__ */ jsxRuntimeExports.jsx(RouteGuard, { requiredPermission: { resource: "settings", action: "manage" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6 p-6", children: [
276
350
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between", children: [
277
351
  /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -281,7 +355,7 @@ function SettingsPage({
281
355
  description: "Configure your CMS settings and preferences."
282
356
  }
283
357
  ),
284
- canEdit && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
358
+ canEdit && api2.updateSettings && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
285
359
  feedbackStatus === "saved" && /* @__PURE__ */ jsxRuntimeExports.jsxs(
286
360
  Badge,
287
361
  {
@@ -319,7 +393,7 @@ function SettingsPage({
319
393
  ] }),
320
394
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
321
395
  /* @__PURE__ */ jsxRuntimeExports.jsx(AppearanceSection, {}),
322
- formData?.features.localization && /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
396
+ features.localization && /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
323
397
  /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "General" }),
324
398
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
325
399
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
@@ -329,9 +403,9 @@ function SettingsPage({
329
403
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
330
404
  Select,
331
405
  {
332
- value: formData?.defaultLocale || "en",
406
+ value: displayData.defaultLocale,
333
407
  onValueChange: handleLocaleChange,
334
- disabled: !canEdit || feedbackStatus === "saving",
408
+ disabled: !canEdit || feedbackStatus === "saving" || !api2.updateSettings,
335
409
  children: [
336
410
  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { className: "w-48", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, {}) }),
337
411
  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: LOCALE_OPTIONS.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: option.value, children: option.label }, option.value)) })
@@ -341,63 +415,42 @@ function SettingsPage({
341
415
  ] }) })
342
416
  ] }),
343
417
  /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
344
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "Features" }),
418
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4 flex items-center gap-2", children: [
419
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Features" }),
420
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Badge, { variant: "secondary", className: "gap-1", children: [
421
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Lock, { className: "size-3" }),
422
+ "Configured in code"
423
+ ] })
424
+ ] }),
425
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-4 text-sm text-muted-foreground", children: "Feature flags are defined in your Convex configuration and cannot be changed from the UI." }),
345
426
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
346
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
427
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between opacity-75", children: [
347
428
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
348
- /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Enable Versioning" }),
429
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Versioning" }),
349
430
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Track content history and enable rollback to previous versions" })
350
431
  ] }),
351
- /* @__PURE__ */ jsxRuntimeExports.jsx(
352
- Switch,
353
- {
354
- checked: formData?.features.versioning ?? true,
355
- onCheckedChange: () => handleFeatureChange("versioning"),
356
- disabled: !canEdit || feedbackStatus === "saving"
357
- }
358
- )
432
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: features.versioning, disabled: true })
359
433
  ] }),
360
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
434
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between opacity-75", children: [
361
435
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
362
- /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Enable Scheduling" }),
436
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Scheduling" }),
363
437
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Schedule content to publish at a future date and time" })
364
438
  ] }),
365
- /* @__PURE__ */ jsxRuntimeExports.jsx(
366
- Switch,
367
- {
368
- checked: formData?.features.scheduling ?? true,
369
- onCheckedChange: () => handleFeatureChange("scheduling"),
370
- disabled: !canEdit || feedbackStatus === "saving"
371
- }
372
- )
439
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: features.scheduling, disabled: true })
373
440
  ] }),
374
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
441
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between opacity-75", children: [
375
442
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
376
- /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Enable Localization" }),
443
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Localization" }),
377
444
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Support multiple languages for content entries" })
378
445
  ] }),
379
- /* @__PURE__ */ jsxRuntimeExports.jsx(
380
- Switch,
381
- {
382
- checked: formData?.features.localization ?? false,
383
- onCheckedChange: () => handleFeatureChange("localization"),
384
- disabled: !canEdit || feedbackStatus === "saving"
385
- }
386
- )
446
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: features.localization, disabled: true })
387
447
  ] }),
388
- baseConfig.navigation.showMedia && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
448
+ adminConfig.navigation.showMedia && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between opacity-75", children: [
389
449
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
390
- /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Enable Media Management" }),
450
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Media Management" }),
391
451
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Use the built-in media library for image and file uploads" })
392
452
  ] }),
393
- /* @__PURE__ */ jsxRuntimeExports.jsx(
394
- Switch,
395
- {
396
- checked: formData?.features.mediaManagement ?? true,
397
- onCheckedChange: () => handleFeatureChange("mediaManagement"),
398
- disabled: !canEdit || feedbackStatus === "saving"
399
- }
400
- )
453
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: features.mediaManagement, disabled: true })
401
454
  ] })
402
455
  ] })
403
456
  ] }),
@@ -408,7 +461,7 @@ function SettingsPage({
408
461
  /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "mt-1 block rounded-md bg-muted px-3 py-2 text-sm", children: "https://majestic-beagle-49.convex.cloud" })
409
462
  ] }) })
410
463
  ] }),
411
- canEdit && /* @__PURE__ */ jsxRuntimeExports.jsxs(
464
+ canEdit && api2.resetSettings && /* @__PURE__ */ jsxRuntimeExports.jsxs(
412
465
  CmsSurface,
413
466
  {
414
467
  elevation: "base",
@@ -1,6 +1,6 @@
1
1
  import { j as jsxRuntimeExports } from "../_chunks/_libs/react.mjs";
2
2
  import { R as Root, T as Thumb } from "../_chunks/_libs/@radix-ui/react-switch.mjs";
3
- import { c as cn } from "./router-nSVkxb6Y.mjs";
3
+ import { c as cn } from "./router-x6Ab8T4s.mjs";
4
4
  function Switch({
5
5
  className,
6
6
  ...props
@@ -1,8 +1,8 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { C as CmsButton } from "./CmsButton-DOiTVKQq.mjs";
3
- import { c as cn } from "./router-nSVkxb6Y.mjs";
2
+ import { C as CmsButton } from "./CmsButton-DbzfJru_.mjs";
3
+ import { c as cn } from "./router-x6Ab8T4s.mjs";
4
4
  import { R as Root2, L as List, T as Trigger, C as Content } from "../_chunks/_libs/@radix-ui/react-tabs.mjs";
5
- import { g as CircleAlert, a3 as Upload, X, am as RefreshCw, Z as Check } from "../_libs/lucide-react.mjs";
5
+ import { g as CircleAlert, a4 as Upload, X, an as RefreshCw, _ as Check } from "../_libs/lucide-react.mjs";
6
6
  import { d as useMutation } from "../_libs/convex.mjs";
7
7
  function generateUploadId() {
8
8
  return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
@@ -1,6 +1,6 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports } from "../_chunks/_libs/react.mjs";
2
2
  import { c as cva } from "../_libs/class-variance-authority.mjs";
3
- import { c as cn } from "./router-nSVkxb6Y.mjs";
3
+ import { c as cn } from "./router-x6Ab8T4s.mjs";
4
4
  import { d as useNavigate, e as useLocation, f as useParams } from "../_chunks/_libs/@tanstack/react-router.mjs";
5
5
  const alertVariants = cva(
6
6
  "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
@@ -1,13 +1,13 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { a as api, c as cn } from "./router-nSVkxb6Y.mjs";
3
- import { C as CmsButton, B as Badge } from "./CmsButton-DOiTVKQq.mjs";
4
- import { u as useTanStackNavigation } from "./tanstack-adapter-Bsz8kha-.mjs";
5
- import { C as CmsEmptyState, b as CmsConfirmDialog, c as CmsDialog, I as Input, a as Checkbox } from "./CmsEmptyState-fbnGt3LD.mjs";
6
- import { L as Label } from "./label-qn2Afwl4.mjs";
7
- import { T as Textarea } from "./textarea-CI0Jqx2x.mjs";
8
- import { C as CmsPageHeader } from "./CmsPageHeader-DHRrdOZa.mjs";
9
- import { C as CmsSurface } from "./CmsSurface-rFoYjb62.mjs";
10
- import { S as ScrollArea } from "./scroll-area-BCinP455.mjs";
2
+ import { a as api, c as cn } from "./router-x6Ab8T4s.mjs";
3
+ import { C as CmsButton, B as Badge } from "./CmsButton-DbzfJru_.mjs";
4
+ import { u as useTanStackNavigation } from "./tanstack-adapter-D3ZcKtbY.mjs";
5
+ import { C as CmsEmptyState, b as CmsConfirmDialog, c as CmsDialog, I as Input, a as Checkbox } from "./CmsEmptyState-CuvcXr3Z.mjs";
6
+ import { L as Label } from "./label-PblVvdRv.mjs";
7
+ import { T as Textarea } from "./textarea-CZVaroMc.mjs";
8
+ import { C as CmsPageHeader } from "./CmsPageHeader-ClNPU7Up.mjs";
9
+ import { C as CmsSurface } from "./CmsSurface-Dcv440rp.mjs";
10
+ import { S as ScrollArea } from "./scroll-area-BH_1K-WT.mjs";
11
11
  import { u as useQuery, d as useMutation } from "../_libs/convex.mjs";
12
12
  import { Q as Plus, V as Tag, W as Pencil, w as Trash2, Y as FolderTree, z as Tags, d as ChevronDown, f as ChevronRight } from "../_libs/lucide-react.mjs";
13
13
  import "../_chunks/_libs/@tanstack/react-router.mjs";
@@ -31,14 +31,17 @@ import "../_chunks/_libs/@tanstack/react-store.mjs";
31
31
  import "../_libs/use-sync-external-store.mjs";
32
32
  import "../_libs/clsx.mjs";
33
33
  import "../_libs/tailwind-merge.mjs";
34
- import "../_chunks/_libs/@radix-ui/react-slot.mjs";
35
- import "../_chunks/_libs/@radix-ui/react-compose-refs.mjs";
36
- import "../_chunks/_libs/@radix-ui/react-dropdown-menu.mjs";
34
+ import "../_chunks/_libs/@radix-ui/react-collapsible.mjs";
37
35
  import "../_chunks/_libs/@radix-ui/primitive.mjs";
38
36
  import "../_chunks/_libs/@radix-ui/react-context.mjs";
39
37
  import "../_chunks/_libs/@radix-ui/react-use-controllable-state.mjs";
40
38
  import "../_chunks/_libs/@radix-ui/react-use-layout-effect.mjs";
39
+ import "../_chunks/_libs/@radix-ui/react-compose-refs.mjs";
41
40
  import "../_chunks/_libs/@radix-ui/react-primitive.mjs";
41
+ import "../_chunks/_libs/@radix-ui/react-slot.mjs";
42
+ import "../_chunks/_libs/@radix-ui/react-presence.mjs";
43
+ import "../_chunks/_libs/@radix-ui/react-id.mjs";
44
+ import "../_chunks/_libs/@radix-ui/react-dropdown-menu.mjs";
42
45
  import "../_chunks/_libs/@radix-ui/react-menu.mjs";
43
46
  import "../_chunks/_libs/@radix-ui/react-collection.mjs";
44
47
  import "../_chunks/_libs/@radix-ui/react-direction.mjs";
@@ -55,9 +58,7 @@ import "../_chunks/_libs/@floating-ui/utils.mjs";
55
58
  import "../_chunks/_libs/@radix-ui/react-arrow.mjs";
56
59
  import "../_chunks/_libs/@radix-ui/react-use-size.mjs";
57
60
  import "../_chunks/_libs/@radix-ui/react-portal.mjs";
58
- import "../_chunks/_libs/@radix-ui/react-presence.mjs";
59
61
  import "../_chunks/_libs/@radix-ui/react-roving-focus.mjs";
60
- import "../_chunks/_libs/@radix-ui/react-id.mjs";
61
62
  import "../_libs/aria-hidden.mjs";
62
63
  import "../_libs/react-remove-scroll.mjs";
63
64
  import "../_libs/tslib.mjs";
@@ -105,8 +106,8 @@ function TaxonomyEditor({
105
106
  const [isSubmitting, setIsSubmitting] = reactExports.useState(false);
106
107
  const [submitError, setSubmitError] = reactExports.useState(null);
107
108
  const [slugManuallyEdited, setSlugManuallyEdited] = reactExports.useState(false);
108
- const createTaxonomy = useMutation(api.taxonomies.createTaxonomy);
109
- const updateTaxonomy = useMutation(api.taxonomies.updateTaxonomy);
109
+ const createTaxonomy = useMutation(api.admin.createTaxonomy);
110
+ const updateTaxonomy = useMutation(api.admin.updateTaxonomy);
110
111
  reactExports.useEffect(() => {
111
112
  if (taxonomy) {
112
113
  setFormData({
@@ -383,8 +384,8 @@ function TermTree({
383
384
  const [parentForNew, setParentForNew] = reactExports.useState();
384
385
  const [deleteConfirm, setDeleteConfirm] = reactExports.useState(null);
385
386
  const [error, setError] = reactExports.useState(null);
386
- const termsQuery = isHierarchical ? useQuery(api.taxonomies.getTermsHierarchy, { taxonomyId }) : useQuery(api.taxonomies.listTerms, { taxonomyId });
387
- const deleteTerm = useMutation(api.taxonomies.deleteTerm);
387
+ const termsQuery = isHierarchical ? useQuery(api.admin.getTermsHierarchy, { taxonomyId }) : useQuery(api.admin.listTerms, { taxonomyId });
388
+ const deleteTerm = useMutation(api.admin.deleteTerm);
388
389
  const terms = isHierarchical ? termsQuery : termsQuery?.page;
389
390
  const isLoading = terms === void 0;
390
391
  const toggleExpand = reactExports.useCallback((termId) => {
@@ -596,8 +597,8 @@ function TermEditModal({
596
597
  const [isSubmitting, setIsSubmitting] = reactExports.useState(false);
597
598
  const [submitError, setSubmitError] = reactExports.useState(null);
598
599
  const [slugManuallyEdited, setSlugManuallyEdited] = reactExports.useState(false);
599
- const createTerm = useMutation(api.taxonomies.createTerm);
600
- const updateTerm = useMutation(api.taxonomies.updateTerm);
600
+ const createTerm = useMutation(api.admin.createTerm);
601
+ const updateTerm = useMutation(api.admin.updateTerm);
601
602
  const handleChange = reactExports.useCallback(
602
603
  (field, value) => {
603
604
  setFormData((prev) => ({ ...prev, [field]: value }));
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports } from "../_chunks/_libs/react.mjs";
2
- import { c as cn } from "./router-nSVkxb6Y.mjs";
2
+ import { c as cn } from "./router-x6Ab8T4s.mjs";
3
3
  function Textarea({ className, ...props }) {
4
4
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
5
5
  "textarea",
@@ -1,12 +1,12 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { a as api, c as cn } from "./router-nSVkxb6Y.mjs";
3
- import { C as CmsButton, B as Badge } from "./CmsButton-DOiTVKQq.mjs";
4
- import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-Bsz8kha-.mjs";
5
- import { C as CmsPageHeader } from "./CmsPageHeader-DHRrdOZa.mjs";
6
- import { C as CmsToolbar } from "./CmsToolbar-zTE45z2q.mjs";
7
- import { I as Input, C as CmsEmptyState, a as Checkbox, b as CmsConfirmDialog } from "./CmsEmptyState-fbnGt3LD.mjs";
8
- import { C as CmsSurface } from "./CmsSurface-rFoYjb62.mjs";
9
- import { S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem } from "./select-BKQlQScw.mjs";
2
+ import { a as api, c as cn } from "./router-x6Ab8T4s.mjs";
3
+ import { C as CmsButton, B as Badge } from "./CmsButton-DbzfJru_.mjs";
4
+ import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-D3ZcKtbY.mjs";
5
+ import { C as CmsPageHeader } from "./CmsPageHeader-ClNPU7Up.mjs";
6
+ import { C as CmsToolbar } from "./CmsToolbar-BKv1nL6u.mjs";
7
+ import { I as Input, C as CmsEmptyState, a as Checkbox, b as CmsConfirmDialog } from "./CmsEmptyState-CuvcXr3Z.mjs";
8
+ import { C as CmsSurface } from "./CmsSurface-Dcv440rp.mjs";
9
+ import { S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem } from "./select-CrfEkFJw.mjs";
10
10
  import { u as useQuery, d as useMutation } from "../_libs/convex.mjs";
11
11
  import { w as Trash2, N as Search, O as TriangleAlert, X, R as RotateCcw } from "../_libs/lucide-react.mjs";
12
12
  import "../_chunks/_libs/@tanstack/react-router.mjs";
@@ -30,14 +30,17 @@ import "../_chunks/_libs/@tanstack/react-store.mjs";
30
30
  import "../_libs/use-sync-external-store.mjs";
31
31
  import "../_libs/clsx.mjs";
32
32
  import "../_libs/tailwind-merge.mjs";
33
- import "../_chunks/_libs/@radix-ui/react-slot.mjs";
34
- import "../_chunks/_libs/@radix-ui/react-compose-refs.mjs";
35
- import "../_chunks/_libs/@radix-ui/react-dropdown-menu.mjs";
33
+ import "../_chunks/_libs/@radix-ui/react-collapsible.mjs";
36
34
  import "../_chunks/_libs/@radix-ui/primitive.mjs";
37
35
  import "../_chunks/_libs/@radix-ui/react-context.mjs";
38
36
  import "../_chunks/_libs/@radix-ui/react-use-controllable-state.mjs";
39
37
  import "../_chunks/_libs/@radix-ui/react-use-layout-effect.mjs";
38
+ import "../_chunks/_libs/@radix-ui/react-compose-refs.mjs";
40
39
  import "../_chunks/_libs/@radix-ui/react-primitive.mjs";
40
+ import "../_chunks/_libs/@radix-ui/react-slot.mjs";
41
+ import "../_chunks/_libs/@radix-ui/react-presence.mjs";
42
+ import "../_chunks/_libs/@radix-ui/react-id.mjs";
43
+ import "../_chunks/_libs/@radix-ui/react-dropdown-menu.mjs";
41
44
  import "../_chunks/_libs/@radix-ui/react-menu.mjs";
42
45
  import "../_chunks/_libs/@radix-ui/react-collection.mjs";
43
46
  import "../_chunks/_libs/@radix-ui/react-direction.mjs";
@@ -54,9 +57,7 @@ import "../_chunks/_libs/@floating-ui/utils.mjs";
54
57
  import "../_chunks/_libs/@radix-ui/react-arrow.mjs";
55
58
  import "../_chunks/_libs/@radix-ui/react-use-size.mjs";
56
59
  import "../_chunks/_libs/@radix-ui/react-portal.mjs";
57
- import "../_chunks/_libs/@radix-ui/react-presence.mjs";
58
60
  import "../_chunks/_libs/@radix-ui/react-roving-focus.mjs";
59
- import "../_chunks/_libs/@radix-ui/react-id.mjs";
60
61
  import "../_libs/aria-hidden.mjs";
61
62
  import "../_libs/react-remove-scroll.mjs";
62
63
  import "../_libs/tslib.mjs";
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { r as useBreadcrumbContext } from "./router-nSVkxb6Y.mjs";
2
+ import { s as useBreadcrumbContext } from "./router-x6Ab8T4s.mjs";
3
3
  function useBreadcrumbLabel(path, label) {
4
4
  const { setOverride, clearOverride } = useBreadcrumbContext();
5
5
  reactExports.useEffect(() => {
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { l as useAuth, m as getResourcePermissions, n as canAccessResource, o as hasPermission } from "./router-nSVkxb6Y.mjs";
2
+ import { m as useAuth, n as getResourcePermissions, o as canAccessResource, p as hasPermission } from "./router-x6Ab8T4s.mjs";
3
3
  function usePermissions() {
4
4
  const { role } = useAuth();
5
5
  return reactExports.useMemo(() => {