convex-cms 0.0.9-alpha.6 → 0.0.9-alpha.7

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 (68) hide show
  1. package/admin/src/contexts/SettingsConfigContext.tsx +67 -11
  2. package/admin/src/pages/SettingsPage.tsx +124 -80
  3. package/admin/src/routes/__root.tsx +4 -1
  4. package/admin-dist/nitro.json +1 -1
  5. package/admin-dist/public/assets/{CmsEmptyState-la_kLGHv.js → CmsEmptyState-gxhf-b6F.js} +1 -1
  6. package/admin-dist/public/assets/{CmsPageHeader-Cf0SafVG.js → CmsPageHeader-equV7Sd9.js} +1 -1
  7. package/admin-dist/public/assets/{CmsStatusBadge-BovugIHH.js → CmsStatusBadge-DQAslyW4.js} +1 -1
  8. package/admin-dist/public/assets/{CmsSurface-Dp1TegU4.js → CmsSurface-DdC_aGB5.js} +1 -1
  9. package/admin-dist/public/assets/{CmsToolbar-B1zdfMu0.js → CmsToolbar-Crleacii.js} +1 -1
  10. package/admin-dist/public/assets/{ContentEntryEditor-CB--8SC3.js → ContentEntryEditor-RmtIo3lE.js} +1 -1
  11. package/admin-dist/public/assets/{TaxonomyFilter-fmZxxbdA.js → TaxonomyFilter-BsoK90hw.js} +1 -1
  12. package/admin-dist/public/assets/{_contentTypeId-vT09P77i.js → _contentTypeId-Bn2ItET5.js} +1 -1
  13. package/admin-dist/public/assets/{_entryId-Dhq6ybYt.js → _entryId-CkZWLvOZ.js} +1 -1
  14. package/admin-dist/public/assets/{alert-DfdkD-ZZ.js → alert-C7q0k4u0.js} +1 -1
  15. package/admin-dist/public/assets/{badge-Cmc3T9vs.js → badge-DiaAY1It.js} +1 -1
  16. package/admin-dist/public/assets/{circle-check-big-B8AJAcBi.js → circle-check-big-Bl0y10am.js} +1 -1
  17. package/admin-dist/public/assets/{command-BsmkQ6_j.js → command-QyTDg7pa.js} +1 -1
  18. package/admin-dist/public/assets/{content-DdQ1u7T4.js → content-D868GT7T.js} +1 -1
  19. package/admin-dist/public/assets/{content-types-QYcwm0Sy.js → content-types-DD7fJA5i.js} +1 -1
  20. package/admin-dist/public/assets/{index-kxLB3e43.js → index-CMnzrG_D.js} +1 -1
  21. package/admin-dist/public/assets/{main-BrFRroF1.js → main-DWSY6jZL.js} +19 -19
  22. package/admin-dist/public/assets/{media-Cx9IyZvU.js → media-aqxopgtw.js} +1 -1
  23. package/admin-dist/public/assets/{new._contentTypeId-2HsDwzy_.js → new._contentTypeId-9ji3Hibs.js} +1 -1
  24. package/admin-dist/public/assets/{pencil-PaJhpDeC.js → pencil-D8GqMaV3.js} +1 -1
  25. package/admin-dist/public/assets/{refresh-cw-D_KNzBUN.js → refresh-cw-JipRPLLT.js} +1 -1
  26. package/admin-dist/public/assets/{rotate-ccw-I3wzW1RQ.js → rotate-ccw-CK11hP79.js} +1 -1
  27. package/admin-dist/public/assets/{scroll-area-t72-FBB4.js → scroll-area-CJS1P20j.js} +1 -1
  28. package/admin-dist/public/assets/{search-BsuImjd-.js → search-BT8HTHxb.js} +1 -1
  29. package/admin-dist/public/assets/settings-DCY0s2hR.js +1 -0
  30. package/admin-dist/public/assets/{switch-DWN_fx2n.js → switch-Cb-ecsrJ.js} +1 -1
  31. package/admin-dist/public/assets/{tabs-BG0vukFH.js → tabs-CFEXN2p7.js} +1 -1
  32. package/admin-dist/public/assets/{tanstack-adapter-DHsy8Fjs.js → tanstack-adapter-CGxC-fmP.js} +1 -1
  33. package/admin-dist/public/assets/{taxonomies-WG8YV2pR.js → taxonomies-C21Z8CBa.js} +1 -1
  34. package/admin-dist/public/assets/{trash-C3Lt5m9d.js → trash-CMRJlzc0.js} +1 -1
  35. package/admin-dist/public/assets/{useBreadcrumbLabel-BC8wl3jQ.js → useBreadcrumbLabel-ZZFYdqzi.js} +1 -1
  36. package/admin-dist/public/assets/{usePermissions-BM1Vv1YJ.js → usePermissions-C2FRye75.js} +1 -1
  37. package/admin-dist/server/_ssr/{CmsEmptyState-NKmyUWD9.mjs → CmsEmptyState-DWqt3y_O.mjs} +1 -1
  38. package/admin-dist/server/_ssr/{CmsPageHeader-CngxPIOg.mjs → CmsPageHeader-BuN0dOPA.mjs} +1 -1
  39. package/admin-dist/server/_ssr/{CmsStatusBadge-D4fiHjJD.mjs → CmsStatusBadge-CV35-X_8.mjs} +2 -2
  40. package/admin-dist/server/_ssr/{CmsSurface-DN9I2iuX.mjs → CmsSurface-DEcWf_aJ.mjs} +1 -1
  41. package/admin-dist/server/_ssr/{CmsToolbar-ux-veU96.mjs → CmsToolbar-BMBEZVgb.mjs} +1 -1
  42. package/admin-dist/server/_ssr/{ContentEntryEditor-BiY9bJr9.mjs → ContentEntryEditor-Db9Sy_0y.mjs} +8 -8
  43. package/admin-dist/server/_ssr/{TaxonomyFilter-BdtKJie2.mjs → TaxonomyFilter-D_xDfC8t.mjs} +3 -3
  44. package/admin-dist/server/_ssr/{_contentTypeId-CRo5WQVu.mjs → _contentTypeId-HZlfcQi-.mjs} +10 -10
  45. package/admin-dist/server/_ssr/{_entryId-FnG3uc_Y.mjs → _entryId-Cc_Ry7AV.mjs} +11 -11
  46. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-DhspKP9e.mjs +4 -0
  47. package/admin-dist/server/_ssr/{badge-D3SGS0Jp.mjs → badge-CmG74mbX.mjs} +1 -1
  48. package/admin-dist/server/_ssr/{command-2t7uTBKt.mjs → command-DWXiOsOb.mjs} +1 -1
  49. package/admin-dist/server/_ssr/{content-CCsSzXeb.mjs → content-CAgFQzx-.mjs} +8 -8
  50. package/admin-dist/server/_ssr/{content-types-CuVG3uSt.mjs → content-types-CqKvAZ8P.mjs} +6 -6
  51. package/admin-dist/server/_ssr/{index-CLwCLoco.mjs → index--qYdIqvh.mjs} +3 -3
  52. package/admin-dist/server/_ssr/index.mjs +2 -2
  53. package/admin-dist/server/_ssr/{media-D3duVWkk.mjs → media-AXePwPAK.mjs} +9 -9
  54. package/admin-dist/server/_ssr/{new._contentTypeId-6uKYdgGO.mjs → new._contentTypeId-DNWIl-Ha.mjs} +10 -10
  55. package/admin-dist/server/_ssr/{router-D9Zk56-q.mjs → router-B_gIkxi2.mjs} +59 -16
  56. package/admin-dist/server/_ssr/{scroll-area-vbjKsfFu.mjs → scroll-area-Cz-9ry0J.mjs} +1 -1
  57. package/admin-dist/server/_ssr/{settings-D7-vwjqD.mjs → settings-BjSxo5d6.mjs} +95 -80
  58. package/admin-dist/server/_ssr/{switch-CbKuV4Qh.mjs → switch-IsC1gdb1.mjs} +1 -1
  59. package/admin-dist/server/_ssr/{tabs-C_IfqLiu.mjs → tabs-BdgLwrYe.mjs} +1 -1
  60. package/admin-dist/server/_ssr/{tanstack-adapter-yhyAcBi-.mjs → tanstack-adapter-CFwjrqRl.mjs} +1 -1
  61. package/admin-dist/server/_ssr/{taxonomies-C15s_nvM.mjs → taxonomies-D5Di9EgA.mjs} +7 -7
  62. package/admin-dist/server/_ssr/{trash-BPIjmAUh.mjs → trash-DokZl1yA.mjs} +7 -7
  63. package/admin-dist/server/_ssr/{useBreadcrumbLabel-BC7plG0L.mjs → useBreadcrumbLabel-C4TsA5z0.mjs} +1 -1
  64. package/admin-dist/server/_ssr/{usePermissions-DJ8a7bZU.mjs → usePermissions-COsRlMp-.mjs} +1 -1
  65. package/admin-dist/server/index.mjs +153 -153
  66. package/package.json +1 -1
  67. package/admin-dist/public/assets/settings-DB6TvceQ.js +0 -1
  68. package/admin-dist/server/_ssr/_tanstack-start-manifest_v-BbSNqRIw.mjs +0 -4
@@ -5396,14 +5396,15 @@ function useAdminConfig() {
5396
5396
  }
5397
5397
  return config;
5398
5398
  }
5399
- const SettingsConfigContext = reactExports.createContext(null);
5400
- function SettingsConfigProvider({
5399
+ const SettingsConfigContext = reactExports.createContext(
5400
+ null
5401
+ );
5402
+ function SettingsConfigProviderWithQuery({
5401
5403
  baseConfig,
5402
5404
  children,
5403
5405
  api: api2
5404
5406
  }) {
5405
- const queryArg = api2 ? api2.getSettings : "skip";
5406
- const settings = useQuery(queryArg);
5407
+ const settings = useQuery(api2.getSettings, {}) ?? void 0;
5407
5408
  const mergedConfig = reactExports.useMemo(() => {
5408
5409
  if (!settings) return baseConfig;
5409
5410
  return {
@@ -5420,10 +5421,45 @@ function SettingsConfigProvider({
5420
5421
  );
5421
5422
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsConfigContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntimeExports.jsx(AdminConfigProvider, { config: mergedConfig, children }) });
5422
5423
  }
5424
+ function SettingsConfigProviderWithoutQuery({
5425
+ baseConfig,
5426
+ children
5427
+ }) {
5428
+ const contextValue = reactExports.useMemo(
5429
+ () => ({ baseConfig, settings: void 0 }),
5430
+ [baseConfig]
5431
+ );
5432
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsConfigContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntimeExports.jsx(AdminConfigProvider, { config: baseConfig, children }) });
5433
+ }
5434
+ function SettingsConfigProvider({
5435
+ baseConfig,
5436
+ children,
5437
+ api: api2
5438
+ }) {
5439
+ if (api2) {
5440
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
5441
+ SettingsConfigProviderWithQuery,
5442
+ {
5443
+ baseConfig,
5444
+ api: api2,
5445
+ children
5446
+ }
5447
+ );
5448
+ }
5449
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
5450
+ SettingsConfigProviderWithoutQuery,
5451
+ {
5452
+ baseConfig,
5453
+ children
5454
+ }
5455
+ );
5456
+ }
5423
5457
  function useSettingsConfig() {
5424
5458
  const ctx = reactExports.useContext(SettingsConfigContext);
5425
5459
  if (!ctx) {
5426
- throw new Error("useSettingsConfig must be used within SettingsConfigProvider");
5460
+ throw new Error(
5461
+ "useSettingsConfig must be used within SettingsConfigProvider"
5462
+ );
5427
5463
  }
5428
5464
  return ctx;
5429
5465
  }
@@ -7805,7 +7841,14 @@ function ConvexProviderWrapper({
7805
7841
  ] })
7806
7842
  ] }) });
7807
7843
  }
7808
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ConvexProvider, { client: convex, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ApiProvider, { api: api.admin, children: /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsConfigProvider, { baseConfig: adminConfig, children }) }) });
7844
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(ConvexProvider, { client: convex, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ApiProvider, { api: api.admin, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
7845
+ SettingsConfigProvider,
7846
+ {
7847
+ baseConfig: adminConfig,
7848
+ api: { getSettings: api.admin.getSettings },
7849
+ children
7850
+ }
7851
+ ) }) });
7809
7852
  }
7810
7853
  function RootDocument({ children }) {
7811
7854
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("html", { lang: "en", children: [
@@ -7816,43 +7859,43 @@ function RootDocument({ children }) {
7816
7859
  ] })
7817
7860
  ] });
7818
7861
  }
7819
- const $$splitComponentImporter$9 = () => import("./trash-BPIjmAUh.mjs");
7862
+ const $$splitComponentImporter$9 = () => import("./trash-DokZl1yA.mjs");
7820
7863
  const Route$9 = createFileRoute("/trash")({
7821
7864
  component: lazyRouteComponent($$splitComponentImporter$9, "component")
7822
7865
  });
7823
- const $$splitComponentImporter$8 = () => import("./taxonomies-C15s_nvM.mjs");
7866
+ const $$splitComponentImporter$8 = () => import("./taxonomies-D5Di9EgA.mjs");
7824
7867
  const Route$8 = createFileRoute("/taxonomies")({
7825
7868
  component: lazyRouteComponent($$splitComponentImporter$8, "component")
7826
7869
  });
7827
- const $$splitComponentImporter$7 = () => import("./settings-D7-vwjqD.mjs");
7870
+ const $$splitComponentImporter$7 = () => import("./settings-BjSxo5d6.mjs");
7828
7871
  const Route$7 = createFileRoute("/settings")({
7829
7872
  component: lazyRouteComponent($$splitComponentImporter$7, "component")
7830
7873
  });
7831
- const $$splitComponentImporter$6 = () => import("./media-D3duVWkk.mjs");
7874
+ const $$splitComponentImporter$6 = () => import("./media-AXePwPAK.mjs");
7832
7875
  const Route$6 = createFileRoute("/media")({
7833
7876
  component: lazyRouteComponent($$splitComponentImporter$6, "component")
7834
7877
  });
7835
- const $$splitComponentImporter$5 = () => import("./content-types-CuVG3uSt.mjs");
7878
+ const $$splitComponentImporter$5 = () => import("./content-types-CqKvAZ8P.mjs");
7836
7879
  const Route$5 = createFileRoute("/content-types")({
7837
7880
  component: lazyRouteComponent($$splitComponentImporter$5, "component")
7838
7881
  });
7839
- const $$splitComponentImporter$4 = () => import("./content-CCsSzXeb.mjs");
7882
+ const $$splitComponentImporter$4 = () => import("./content-CAgFQzx-.mjs");
7840
7883
  const Route$4 = createFileRoute("/content")({
7841
7884
  component: lazyRouteComponent($$splitComponentImporter$4, "component")
7842
7885
  });
7843
- const $$splitComponentImporter$3 = () => import("./index-CLwCLoco.mjs");
7886
+ const $$splitComponentImporter$3 = () => import("./index--qYdIqvh.mjs");
7844
7887
  const Route$3 = createFileRoute("/")({
7845
7888
  component: lazyRouteComponent($$splitComponentImporter$3, "component")
7846
7889
  });
7847
- const $$splitComponentImporter$2 = () => import("./_entryId-FnG3uc_Y.mjs");
7890
+ const $$splitComponentImporter$2 = () => import("./_entryId-Cc_Ry7AV.mjs");
7848
7891
  const Route$2 = createFileRoute("/entries/$entryId")({
7849
7892
  component: lazyRouteComponent($$splitComponentImporter$2, "component")
7850
7893
  });
7851
- const $$splitComponentImporter$1 = () => import("./_contentTypeId-CRo5WQVu.mjs");
7894
+ const $$splitComponentImporter$1 = () => import("./_contentTypeId-HZlfcQi-.mjs");
7852
7895
  const Route$1 = createFileRoute("/entries/type/$contentTypeId")({
7853
7896
  component: lazyRouteComponent($$splitComponentImporter$1, "component")
7854
7897
  });
7855
- const $$splitComponentImporter = () => import("./new._contentTypeId-6uKYdgGO.mjs");
7898
+ const $$splitComponentImporter = () => import("./new._contentTypeId-DNWIl-Ha.mjs");
7856
7899
  const Route = createFileRoute("/entries/new/$contentTypeId")({
7857
7900
  component: lazyRouteComponent($$splitComponentImporter, "component")
7858
7901
  });
@@ -1,6 +1,6 @@
1
1
  import { j as jsxRuntimeExports } from "../_chunks/_libs/react.mjs";
2
2
  import { R as Root, V as Viewport, C as Corner, S as ScrollAreaScrollbar, a as ScrollAreaThumb } from "../_chunks/_libs/@radix-ui/react-scroll-area.mjs";
3
- import { f as cn } from "./router-D9Zk56-q.mjs";
3
+ import { f as cn } from "./router-B_gIkxi2.mjs";
4
4
  function ScrollArea({
5
5
  className,
6
6
  children,
@@ -1,13 +1,13 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { h as api, j as useAdminConfig, R as RouteGuard, L as Label, C as CmsButton, S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem, k as useTheme, f as cn } from "./router-D9Zk56-q.mjs";
3
- import { B as Badge } from "./badge-D3SGS0Jp.mjs";
4
- import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-yhyAcBi-.mjs";
5
- import { u as usePermissions } from "./usePermissions-DJ8a7bZU.mjs";
6
- import { C as CmsPageHeader } from "./CmsPageHeader-CngxPIOg.mjs";
7
- import { C as CmsSurface } from "./CmsSurface-DN9I2iuX.mjs";
8
- import { S as Switch } from "./switch-CbKuV4Qh.mjs";
2
+ import { h as api, j as useAdminConfig, R as RouteGuard, C as CmsButton, L as Label, S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem, k as useTheme, f as cn } from "./router-B_gIkxi2.mjs";
3
+ import { B as Badge } from "./badge-CmG74mbX.mjs";
4
+ import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-CFwjrqRl.mjs";
5
+ import { u as usePermissions } from "./usePermissions-COsRlMp-.mjs";
6
+ import { C as CmsPageHeader } from "./CmsPageHeader-BuN0dOPA.mjs";
7
+ import { C as CmsSurface } from "./CmsSurface-DEcWf_aJ.mjs";
8
+ import { S as Switch } from "./switch-IsC1gdb1.mjs";
9
9
  import { u as useQuery, f as useMutation } from "../_libs/convex.mjs";
10
- import { a5 as Info, z as Lock, i as Check, X, a6 as Sun, a7 as Moon, a8 as Monitor } from "../_libs/lucide-react.mjs";
10
+ import { i as Check, X, z as Lock, a5 as Info, a6 as Sun, a7 as Moon, a8 as Monitor } from "../_libs/lucide-react.mjs";
11
11
  import "../_chunks/_libs/@tanstack/react-router.mjs";
12
12
  import "../_libs/tiny-warning.mjs";
13
13
  import "../_chunks/_libs/@tanstack/router-core.mjs";
@@ -131,20 +131,81 @@ function AppearanceSection() {
131
131
  ] }) })
132
132
  ] });
133
133
  }
134
- function SettingsPage({
135
- api: api2,
136
- navigation: _navigation
134
+ function SettingsPageUnconfigured() {
135
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(RouteGuard, { requiredPermission: { resource: "settings", action: "manage" }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6 p-6", children: [
136
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
137
+ CmsPageHeader,
138
+ {
139
+ title: "Settings",
140
+ description: "Configure your CMS settings and preferences."
141
+ }
142
+ ),
143
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
144
+ /* @__PURE__ */ jsxRuntimeExports.jsx(AppearanceSection, {}),
145
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Alert, { children: [
146
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Info, { className: "size-4" }),
147
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(AlertDescription, { children: [
148
+ /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Settings not configured." }),
149
+ " To enable CMS settings, export",
150
+ " ",
151
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "getSettings" }),
152
+ ",",
153
+ " ",
154
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "updateSettings" }),
155
+ ", and",
156
+ " ",
157
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "resetSettings" }),
158
+ " ",
159
+ "from your",
160
+ " ",
161
+ /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "convex/admin.ts" }),
162
+ " ",
163
+ "file."
164
+ ] })
165
+ ] }),
166
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
167
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4 flex items-center gap-2", children: [
168
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Features" }),
169
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(Badge, { variant: "secondary", className: "gap-1", children: [
170
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Lock, { className: "size-3" }),
171
+ "Default values"
172
+ ] })
173
+ ] }),
174
+ /* @__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." }),
175
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: [
176
+ "versioning",
177
+ "scheduling",
178
+ "localization",
179
+ "mediaManagement"
180
+ ].map((feature) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
181
+ "div",
182
+ {
183
+ className: "flex items-center justify-between opacity-75",
184
+ children: [
185
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium capitalize", children: feature }) }),
186
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: DEFAULT_FEATURES[feature], disabled: true })
187
+ ]
188
+ },
189
+ feature
190
+ )) })
191
+ ] }),
192
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
193
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "API" }),
194
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
195
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Convex Deployment URL" }),
196
+ /* @__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" })
197
+ ] }) })
198
+ ] })
199
+ ] })
200
+ ] }) });
201
+ }
202
+ function SettingsPageConfigured({
203
+ api: api2
137
204
  }) {
138
205
  const { canManageSettings } = usePermissions();
139
206
  const canEdit = canManageSettings();
140
207
  const adminConfig = useAdminConfig();
141
- const isConfigured = reactExports.useMemo(() => {
142
- return api2.getSettings != null;
143
- }, [api2]);
144
- const settings = useQuery(
145
- isConfigured ? api2.getSettings : "skip",
146
- isConfigured ? {} : "skip"
147
- );
208
+ const settings = useQuery(api2.getSettings, {});
148
209
  const updateSettingsMutation = useMutation(
149
210
  api2.updateSettings ?? (() => {
150
211
  })
@@ -194,7 +255,7 @@ function SettingsPage({
194
255
  [formData]
195
256
  );
196
257
  const handleSave = reactExports.useCallback(async () => {
197
- if (!formData || !isDirty || !isConfigured || !api2.updateSettings) return;
258
+ if (!formData || !isDirty || !api2.updateSettings) return;
198
259
  setFeedbackStatus("saving");
199
260
  setErrorMessage(null);
200
261
  try {
@@ -244,7 +305,7 @@ function SettingsPage({
244
305
  error instanceof Error ? error.message : "Failed to reset settings"
245
306
  );
246
307
  }
247
- }, [isConfigured, api2.resetSettings, resetSettingsMutation]);
308
+ }, [api2.resetSettings, resetSettingsMutation]);
248
309
  const handleDiscard = reactExports.useCallback(() => {
249
310
  if (normalizedSettings) {
250
311
  setFormData(normalizedSettings);
@@ -253,66 +314,6 @@ function SettingsPage({
253
314
  setErrorMessage(null);
254
315
  }
255
316
  }, [normalizedSettings]);
256
- if (!isConfigured) {
257
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
258
- RouteGuard,
259
- {
260
- requiredPermission: { resource: "settings", action: "manage" },
261
- children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6 p-6", children: [
262
- /* @__PURE__ */ jsxRuntimeExports.jsx(
263
- CmsPageHeader,
264
- {
265
- title: "Settings",
266
- description: "Configure your CMS settings and preferences."
267
- }
268
- ),
269
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
270
- /* @__PURE__ */ jsxRuntimeExports.jsx(AppearanceSection, {}),
271
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Alert, { children: [
272
- /* @__PURE__ */ jsxRuntimeExports.jsx(Info, { className: "size-4" }),
273
- /* @__PURE__ */ jsxRuntimeExports.jsxs(AlertDescription, { children: [
274
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Settings not configured." }),
275
- " To enable CMS settings, export",
276
- " ",
277
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "getSettings" }),
278
- ",",
279
- " ",
280
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "updateSettings" }),
281
- ", and",
282
- " ",
283
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "resetSettings" }),
284
- " from your",
285
- " ",
286
- /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "rounded bg-muted px-1 py-0.5 text-xs", children: "convex/admin.ts" }),
287
- " file."
288
- ] })
289
- ] }),
290
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
291
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4 flex items-center gap-2", children: [
292
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Features" }),
293
- /* @__PURE__ */ jsxRuntimeExports.jsxs(Badge, { variant: "secondary", className: "gap-1", children: [
294
- /* @__PURE__ */ jsxRuntimeExports.jsx(Lock, { className: "size-3" }),
295
- "Default values"
296
- ] })
297
- ] }),
298
- /* @__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." }),
299
- /* @__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: [
300
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium capitalize", children: feature }) }),
301
- /* @__PURE__ */ jsxRuntimeExports.jsx(Switch, { checked: DEFAULT_FEATURES[feature], disabled: true })
302
- ] }, feature)) })
303
- ] }),
304
- /* @__PURE__ */ jsxRuntimeExports.jsxs(CmsSurface, { elevation: "base", className: "p-6", children: [
305
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-lg font-semibold text-foreground", children: "API" }),
306
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
307
- /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-medium", children: "Convex Deployment URL" }),
308
- /* @__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" })
309
- ] }) })
310
- ] })
311
- ] })
312
- ] })
313
- }
314
- );
315
- }
316
317
  if (settings === void 0) {
317
318
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
318
319
  RouteGuard,
@@ -479,6 +480,20 @@ function SettingsPage({
479
480
  ] })
480
481
  ] }) });
481
482
  }
483
+ function SettingsPage({
484
+ api: api2,
485
+ navigation: _navigation
486
+ }) {
487
+ if (api2.getSettings) {
488
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(
489
+ SettingsPageConfigured,
490
+ {
491
+ api: api2
492
+ }
493
+ );
494
+ }
495
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsPageUnconfigured, {});
496
+ }
482
497
  function SettingsRoute() {
483
498
  const navigation = useTanStackNavigation();
484
499
  return /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsPage, { api: api.admin, navigation });
@@ -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 { f as cn } from "./router-D9Zk56-q.mjs";
3
+ import { f as cn } from "./router-B_gIkxi2.mjs";
4
4
  function Switch({
5
5
  className,
6
6
  ...props
@@ -1,5 +1,5 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { f as cn, C as CmsButton } from "./router-D9Zk56-q.mjs";
2
+ import { f as cn, C as CmsButton } from "./router-B_gIkxi2.mjs";
3
3
  import { R as Root2, L as List, T as Trigger, C as Content } from "../_chunks/_libs/@radix-ui/react-tabs.mjs";
4
4
  import { j as CircleAlert, ab as Upload, X, ao as RefreshCw, i as Check } from "../_libs/lucide-react.mjs";
5
5
  import { f as useMutation } from "../_libs/convex.mjs";
@@ -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 { f as cn } from "./router-D9Zk56-q.mjs";
3
+ import { f as cn } from "./router-B_gIkxi2.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,11 +1,11 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { h as api, C as CmsButton, f as cn, g as CmsConfirmDialog, u as useApi, i as CmsDialog, L as Label, I as Input, T as Textarea, e as Checkbox } from "./router-D9Zk56-q.mjs";
3
- import { B as Badge } from "./badge-D3SGS0Jp.mjs";
4
- import { u as useTanStackNavigation } from "./tanstack-adapter-yhyAcBi-.mjs";
5
- import { C as CmsEmptyState } from "./CmsEmptyState-NKmyUWD9.mjs";
6
- import { C as CmsPageHeader } from "./CmsPageHeader-CngxPIOg.mjs";
7
- import { C as CmsSurface } from "./CmsSurface-DN9I2iuX.mjs";
8
- import { S as ScrollArea } from "./scroll-area-vbjKsfFu.mjs";
2
+ import { h as api, C as CmsButton, f as cn, g as CmsConfirmDialog, u as useApi, i as CmsDialog, L as Label, I as Input, T as Textarea, e as Checkbox } from "./router-B_gIkxi2.mjs";
3
+ import { B as Badge } from "./badge-CmG74mbX.mjs";
4
+ import { u as useTanStackNavigation } from "./tanstack-adapter-CFwjrqRl.mjs";
5
+ import { C as CmsEmptyState } from "./CmsEmptyState-DWqt3y_O.mjs";
6
+ import { C as CmsPageHeader } from "./CmsPageHeader-BuN0dOPA.mjs";
7
+ import { C as CmsSurface } from "./CmsSurface-DEcWf_aJ.mjs";
8
+ import { S as ScrollArea } from "./scroll-area-Cz-9ry0J.mjs";
9
9
  import { u as useQuery, f as useMutation } from "../_libs/convex.mjs";
10
10
  import { P as Plus, W as Tag, a3 as Pencil, I as Trash2, a4 as FolderTree, N as Tags, d as ChevronDown, h as ChevronRight } from "../_libs/lucide-react.mjs";
11
11
  import "../_chunks/_libs/@tanstack/react-router.mjs";
@@ -1,11 +1,11 @@
1
1
  import { j as jsxRuntimeExports, r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { h as api, C as CmsButton, I as Input, S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem, e as Checkbox, f as cn, g as CmsConfirmDialog } from "./router-D9Zk56-q.mjs";
3
- import { B as Badge } from "./badge-D3SGS0Jp.mjs";
4
- import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-yhyAcBi-.mjs";
5
- import { C as CmsPageHeader } from "./CmsPageHeader-CngxPIOg.mjs";
6
- import { C as CmsToolbar } from "./CmsToolbar-ux-veU96.mjs";
7
- import { C as CmsEmptyState } from "./CmsEmptyState-NKmyUWD9.mjs";
8
- import { C as CmsSurface } from "./CmsSurface-DN9I2iuX.mjs";
2
+ import { h as api, C as CmsButton, I as Input, S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem, e as Checkbox, f as cn, g as CmsConfirmDialog } from "./router-B_gIkxi2.mjs";
3
+ import { B as Badge } from "./badge-CmG74mbX.mjs";
4
+ import { u as useTanStackNavigation, A as Alert, a as AlertDescription } from "./tanstack-adapter-CFwjrqRl.mjs";
5
+ import { C as CmsPageHeader } from "./CmsPageHeader-BuN0dOPA.mjs";
6
+ import { C as CmsToolbar } from "./CmsToolbar-BMBEZVgb.mjs";
7
+ import { C as CmsEmptyState } from "./CmsEmptyState-DWqt3y_O.mjs";
8
+ import { C as CmsSurface } from "./CmsSurface-DEcWf_aJ.mjs";
9
9
  import { u as useQuery, f as useMutation } from "../_libs/convex.mjs";
10
10
  import { I as Trash2, a1 as Search, a0 as TriangleAlert, X, a2 as RotateCcw } from "../_libs/lucide-react.mjs";
11
11
  import "../_chunks/_libs/@tanstack/react-router.mjs";
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports } from "../_chunks/_libs/react.mjs";
2
- import { M as useBreadcrumbContext } from "./router-D9Zk56-q.mjs";
2
+ import { M as useBreadcrumbContext } from "./router-B_gIkxi2.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 { E as useAuth, F as getResourcePermissions, G as canAccessResource, H as hasPermission } from "./router-D9Zk56-q.mjs";
2
+ import { E as useAuth, F as getResourcePermissions, G as canAccessResource, H as hasPermission } from "./router-B_gIkxi2.mjs";
3
3
  function usePermissions() {
4
4
  const { role } = useAuth();
5
5
  return reactExports.useMemo(() => {