opacacms 0.1.0 → 0.1.2

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 (247) hide show
  1. package/dist/admin/index.js +49 -0
  2. package/dist/{chunk-2zm8cy1w.js → admin/webcomponent.js} +116 -168
  3. package/dist/{chunk-6dhs73zq.js → chunk-2yz1nsxs.js} +1 -1
  4. package/dist/chunk-fa5mg0hr.js +96 -0
  5. package/dist/{chunk-kwp83w8b.js → chunk-m09hahe2.js} +7 -7
  6. package/dist/{chunk-hmhcense.js → chunk-ry15hke8.js} +253 -4
  7. package/dist/chunk-vtvqfhgy.js +2442 -0
  8. package/dist/{chunk-f3nvxn63.js → chunk-y8hc6nm4.js} +1 -1
  9. package/dist/{src/cli → cli}/index.js +10 -10
  10. package/dist/{src/client.js → client.js} +2 -2
  11. package/dist/{src/db → db}/bun-sqlite.js +10 -10
  12. package/dist/{src/db → db}/d1.js +8 -8
  13. package/dist/db/index.d.ts +2 -0
  14. package/dist/db/index.js +7 -0
  15. package/dist/db/migration.d.ts +39 -0
  16. package/dist/{src/db → db}/postgres.js +10 -10
  17. package/dist/{src/db → db}/sqlite.js +8 -8
  18. package/dist/index.d.ts +0 -2
  19. package/dist/index.js +13 -0
  20. package/dist/{src/runtimes → runtimes}/bun.js +5 -6
  21. package/dist/{src/runtimes → runtimes}/cloudflare-workers.js +5 -6
  22. package/dist/{src/runtimes → runtimes}/next.js +5 -6
  23. package/dist/{src/runtimes → runtimes}/node.js +5 -6
  24. package/dist/{src/server.js → server.js} +7 -8
  25. package/dist/storage/index.d.ts +0 -3
  26. package/dist/storage/index.js +35 -0
  27. package/dist/types.d.ts +5 -2
  28. package/package.json +161 -39
  29. package/bun.lock +0 -34
  30. package/dist/api.d.ts +0 -6
  31. package/dist/chunk-8gkhn1d4.js +0 -309
  32. package/dist/chunk-dy5t83hr.js +0 -261
  33. package/dist/src/admin/index.js +0 -176
  34. package/dist/src/admin/webcomponent.js +0 -19
  35. package/dist/src/api.js +0 -27
  36. package/dist/src/index.js +0 -20
  37. package/dist/src/storage/index.js +0 -355
  38. package/global.d.ts +0 -11
  39. package/src/admin/api-client.ts +0 -63
  40. package/src/admin/auth-client.ts +0 -40
  41. package/src/admin/custom-field.ts +0 -179
  42. package/src/admin/index.ts +0 -15
  43. package/src/admin/react.tsx +0 -72
  44. package/src/admin/router.ts +0 -9
  45. package/src/admin/stores/admin-queries.ts +0 -121
  46. package/src/admin/stores/auth.ts +0 -61
  47. package/src/admin/stores/column-visibility.ts +0 -67
  48. package/src/admin/stores/config.ts +0 -15
  49. package/src/admin/stores/media.ts +0 -95
  50. package/src/admin/stores/query.ts +0 -13
  51. package/src/admin/stores/ui.ts +0 -29
  52. package/src/admin/ui/admin-client.tsx +0 -283
  53. package/src/admin/ui/admin-layout.tsx +0 -276
  54. package/src/admin/ui/components/ColumnVisibilityToggle.tsx +0 -141
  55. package/src/admin/ui/components/DataDetailSheet.tsx +0 -141
  56. package/src/admin/ui/components/DataDetailView.tsx +0 -175
  57. package/src/admin/ui/components/Table.tsx +0 -67
  58. package/src/admin/ui/components/fields/ArrayField.tsx +0 -166
  59. package/src/admin/ui/components/fields/BlocksField.tsx +0 -202
  60. package/src/admin/ui/components/fields/BooleanField.tsx +0 -50
  61. package/src/admin/ui/components/fields/CollapsibleField.tsx +0 -75
  62. package/src/admin/ui/components/fields/DateField.tsx +0 -45
  63. package/src/admin/ui/components/fields/FileField.tsx +0 -322
  64. package/src/admin/ui/components/fields/GroupField.tsx +0 -50
  65. package/src/admin/ui/components/fields/JoinField.tsx +0 -23
  66. package/src/admin/ui/components/fields/NumberField.tsx +0 -46
  67. package/src/admin/ui/components/fields/RadioField.tsx +0 -62
  68. package/src/admin/ui/components/fields/RelationshipField.tsx +0 -278
  69. package/src/admin/ui/components/fields/RowField.tsx +0 -40
  70. package/src/admin/ui/components/fields/SelectField.tsx +0 -59
  71. package/src/admin/ui/components/fields/TabsField.tsx +0 -101
  72. package/src/admin/ui/components/fields/TextAreaField.tsx +0 -54
  73. package/src/admin/ui/components/fields/TextField.tsx +0 -49
  74. package/src/admin/ui/components/fields/VirtualField.tsx +0 -53
  75. package/src/admin/ui/components/fields/index.tsx +0 -371
  76. package/src/admin/ui/components/fields/richtext-editor/index.tsx +0 -211
  77. package/src/admin/ui/components/fields/richtext-editor/nodes/ImageComponent.tsx +0 -142
  78. package/src/admin/ui/components/fields/richtext-editor/nodes/ImageNode.tsx +0 -95
  79. package/src/admin/ui/components/fields/richtext-editor/plugins/ComponentPickerPlugin.tsx +0 -226
  80. package/src/admin/ui/components/fields/richtext-editor/plugins/EditableSyncPlugin.tsx +0 -16
  81. package/src/admin/ui/components/fields/richtext-editor/plugins/NotionToolbarPlugin.tsx +0 -184
  82. package/src/admin/ui/components/fields/richtext-editor/plugins/SimpleToolbarPlugin.tsx +0 -240
  83. package/src/admin/ui/components/fields/richtext-editor/plugins/ValueSyncPlugin.tsx +0 -40
  84. package/src/admin/ui/components/fields/utils.ts +0 -1
  85. package/src/admin/ui/components/link.tsx +0 -41
  86. package/src/admin/ui/components/media/AssetManagerModal.tsx +0 -334
  87. package/src/admin/ui/components/toast.tsx +0 -72
  88. package/src/admin/ui/components/ui/accordion.tsx +0 -51
  89. package/src/admin/ui/components/ui/alert-dialog.tsx +0 -98
  90. package/src/admin/ui/components/ui/blocks.tsx +0 -32
  91. package/src/admin/ui/components/ui/breadcrumbs.tsx +0 -59
  92. package/src/admin/ui/components/ui/button.tsx +0 -26
  93. package/src/admin/ui/components/ui/collapsible.tsx +0 -124
  94. package/src/admin/ui/components/ui/dialog.tsx +0 -79
  95. package/src/admin/ui/components/ui/group.tsx +0 -20
  96. package/src/admin/ui/components/ui/index.ts +0 -17
  97. package/src/admin/ui/components/ui/input.tsx +0 -12
  98. package/src/admin/ui/components/ui/join.tsx +0 -53
  99. package/src/admin/ui/components/ui/label.tsx +0 -11
  100. package/src/admin/ui/components/ui/radio-group.tsx +0 -75
  101. package/src/admin/ui/components/ui/relationship-detail-sheet.tsx +0 -122
  102. package/src/admin/ui/components/ui/relationship.tsx +0 -58
  103. package/src/admin/ui/components/ui/scroll-area.tsx +0 -19
  104. package/src/admin/ui/components/ui/select.tsx +0 -187
  105. package/src/admin/ui/components/ui/separator.tsx +0 -21
  106. package/src/admin/ui/components/ui/sheet.tsx +0 -106
  107. package/src/admin/ui/components/ui/tabs.tsx +0 -116
  108. package/src/admin/ui/components/ui/utils.ts +0 -3
  109. package/src/admin/ui/hooks/use-debounce.ts +0 -15
  110. package/src/admin/ui/styles/_locale-switcher.scss +0 -33
  111. package/src/admin/ui/styles/accordion.scss +0 -60
  112. package/src/admin/ui/styles/animations.scss +0 -41
  113. package/src/admin/ui/styles/asset-manager.scss +0 -547
  114. package/src/admin/ui/styles/badge.scss +0 -13
  115. package/src/admin/ui/styles/base.scss +0 -22
  116. package/src/admin/ui/styles/button.scss +0 -161
  117. package/src/admin/ui/styles/card.scss +0 -13
  118. package/src/admin/ui/styles/collapsible.scss +0 -75
  119. package/src/admin/ui/styles/data-detail.scss +0 -92
  120. package/src/admin/ui/styles/dialog.scss +0 -102
  121. package/src/admin/ui/styles/empty-state.scss +0 -22
  122. package/src/admin/ui/styles/group.scss +0 -19
  123. package/src/admin/ui/styles/index.scss +0 -33
  124. package/src/admin/ui/styles/input.scss +0 -80
  125. package/src/admin/ui/styles/label.scss +0 -12
  126. package/src/admin/ui/styles/layout.scss +0 -56
  127. package/src/admin/ui/styles/lexical.scss +0 -469
  128. package/src/admin/ui/styles/loading.scss +0 -102
  129. package/src/admin/ui/styles/media-registry.scss +0 -597
  130. package/src/admin/ui/styles/pagination.scss +0 -20
  131. package/src/admin/ui/styles/radio-group.scss +0 -66
  132. package/src/admin/ui/styles/row.scss +0 -17
  133. package/src/admin/ui/styles/scrollbar.scss +0 -36
  134. package/src/admin/ui/styles/select.scss +0 -121
  135. package/src/admin/ui/styles/separator.scss +0 -14
  136. package/src/admin/ui/styles/sheet.scss +0 -152
  137. package/src/admin/ui/styles/sidebar.scss +0 -148
  138. package/src/admin/ui/styles/switch.scss +0 -59
  139. package/src/admin/ui/styles/table.scss +0 -207
  140. package/src/admin/ui/styles/tabs.scss +0 -62
  141. package/src/admin/ui/styles/toast.scss +0 -45
  142. package/src/admin/ui/styles/variables.scss +0 -24
  143. package/src/admin/ui/views/collection-list-view.tsx +0 -720
  144. package/src/admin/ui/views/dashboard-view.tsx +0 -263
  145. package/src/admin/ui/views/document-edit-view.tsx +0 -384
  146. package/src/admin/ui/views/global-edit-view.tsx +0 -226
  147. package/src/admin/ui/views/init-view.tsx +0 -182
  148. package/src/admin/ui/views/login-view.tsx +0 -123
  149. package/src/admin/ui/views/media-registry-view.tsx +0 -1104
  150. package/src/admin/ui/views/settings-view.tsx +0 -729
  151. package/src/admin/webcomponent.tsx +0 -15
  152. package/src/api.ts +0 -9
  153. package/src/auth/index.ts +0 -194
  154. package/src/auth/migrations.ts +0 -87
  155. package/src/auth/premissions.ts +0 -46
  156. package/src/cli/commands/generate-types.ts +0 -116
  157. package/src/cli/commands/init.ts +0 -95
  158. package/src/cli/commands/migrate-commands.ts +0 -160
  159. package/src/cli/commands/seed-command.ts +0 -11
  160. package/src/cli/d1-mock.ts +0 -101
  161. package/src/cli/index.test.ts +0 -84
  162. package/src/cli/index.ts +0 -183
  163. package/src/cli/r2-mock.ts +0 -217
  164. package/src/cli/seeding.ts +0 -405
  165. package/src/client.ts +0 -181
  166. package/src/config-utils.ts +0 -102
  167. package/src/config.ts +0 -49
  168. package/src/db/adapter.ts +0 -53
  169. package/src/db/better-sqlite.ts +0 -630
  170. package/src/db/bun-sqlite.ts +0 -646
  171. package/src/db/d1.ts +0 -711
  172. package/src/db/kysely/data-mapper.ts +0 -142
  173. package/src/db/kysely/field-mapper.ts +0 -148
  174. package/src/db/kysely/migration-generator.ts +0 -223
  175. package/src/db/kysely/query-builder.ts +0 -92
  176. package/src/db/kysely/schema-builder.ts +0 -439
  177. package/src/db/kysely/sql-utils.ts +0 -13
  178. package/src/db/postgres.ts +0 -621
  179. package/src/db/sqlite.ts +0 -658
  180. package/src/db/system-schema.ts +0 -121
  181. package/src/index.ts +0 -13
  182. package/src/runtimes/README.md +0 -59
  183. package/src/runtimes/bun.ts +0 -49
  184. package/src/runtimes/cloudflare-workers.ts +0 -38
  185. package/src/runtimes/next.ts +0 -26
  186. package/src/runtimes/node.ts +0 -52
  187. package/src/schema/collection.ts +0 -184
  188. package/src/schema/fields/base.ts +0 -164
  189. package/src/schema/fields/index.ts +0 -427
  190. package/src/schema/global.ts +0 -145
  191. package/src/schema/index.ts +0 -4
  192. package/src/schema/infer.ts +0 -72
  193. package/src/server/admin-router.ts +0 -20
  194. package/src/server/admin.ts +0 -142
  195. package/src/server/assets.ts +0 -306
  196. package/src/server/collection-router.ts +0 -55
  197. package/src/server/handlers.ts +0 -722
  198. package/src/server/middlewares/admin.ts +0 -27
  199. package/src/server/middlewares/auth.ts +0 -89
  200. package/src/server/middlewares/context.ts +0 -17
  201. package/src/server/middlewares/cors.ts +0 -24
  202. package/src/server/middlewares/database-init.ts +0 -74
  203. package/src/server/middlewares/rate-limit.ts +0 -71
  204. package/src/server/router.ts +0 -47
  205. package/src/server/setup-middlewares.ts +0 -58
  206. package/src/server/system-router.ts +0 -35
  207. package/src/server.ts +0 -9
  208. package/src/storage/adapters/cloudflare-r2.ts +0 -136
  209. package/src/storage/adapters/local.ts +0 -146
  210. package/src/storage/adapters/s3.ts +0 -186
  211. package/src/storage/errors.ts +0 -46
  212. package/src/storage/index.ts +0 -5
  213. package/src/storage/types.ts +0 -39
  214. package/src/types.ts +0 -577
  215. package/src/utils/lexical.ts +0 -37
  216. package/src/utils/logger.ts +0 -73
  217. package/src/validation.ts +0 -429
  218. package/src/validator.ts +0 -179
  219. package/test/admin-custom-field.test.ts +0 -162
  220. package/test/admin-react-field.test.tsx +0 -134
  221. package/test/api-features.test.ts +0 -78
  222. package/test/api.test.ts +0 -178
  223. package/test/auth.test.ts +0 -62
  224. package/test/cli-integration.test.ts +0 -146
  225. package/test/cli.test.ts +0 -25
  226. package/test/db/postgres.test.ts +0 -95
  227. package/test/db/sqlite-filter.test.ts +0 -53
  228. package/test/db/sqlite.test.ts +0 -82
  229. package/test/engine-features.test.ts +0 -79
  230. package/test/globals.test.ts +0 -74
  231. package/test/integration-tmp/db-app/opacacms.config.ts +0 -15
  232. package/test/integration-tmp/my-sqlite-app/opacacms.config.ts +0 -25
  233. package/test/integration-tmp/my-test-app/index.ts +0 -8
  234. package/test/integration-tmp/my-test-app/opacacms.config.ts +0 -16
  235. package/test/integration-tmp/my-test-app/package.json +0 -12
  236. package/test/populate.test.ts +0 -79
  237. package/test/runtimes.test.ts +0 -43
  238. package/test/schema-builder.test.ts +0 -107
  239. package/test/schema-features.test.ts +0 -63
  240. package/test/seeding.test.ts +0 -68
  241. package/test/storage/local.test.ts +0 -72
  242. package/test/storage/s3.test.ts +0 -60
  243. package/test/structural-data.test.ts +0 -100
  244. package/test/test-setup.ts +0 -11
  245. package/test/validation.test.ts +0 -162
  246. package/tsconfig.json +0 -42
  247. /package/dist/{src/admin/index.css → admin/webcomponent.css} +0 -0
@@ -6,108 +6,49 @@ import {
6
6
  login,
7
7
  logout,
8
8
  syncSession
9
- } from "./chunk-16vgcf3k.js";
9
+ } from "../chunk-16vgcf3k.js";
10
+ import {
11
+ $config,
12
+ $needsInit,
13
+ $router,
14
+ api,
15
+ configureAPI,
16
+ createFetcherStore,
17
+ createMutatorStore,
18
+ getCurrentBaseURL,
19
+ setConfig,
20
+ setNeedsInit
21
+ } from "../chunk-fa5mg0hr.js";
10
22
  import {
11
23
  $isSidebarCollapsed,
12
24
  $toasts,
13
25
  clearToast,
14
26
  notify,
15
27
  toggleSidebar
16
- } from "./chunk-j4d50hrx.js";
17
- import {
18
- __require
19
- } from "./chunk-8sqjbsgt.js";
28
+ } from "../chunk-j4d50hrx.js";
29
+ import"../chunk-8sqjbsgt.js";
20
30
 
21
- // src/admin/router.ts
22
- import { createRouter } from "@nanostores/router";
23
- var $router = createRouter({
24
- dashboard: "/admin",
25
- collections: "/admin/collections/:slug",
26
- document: "/admin/collections/:slug/:id",
27
- globals: "/admin/globals/:slug",
28
- settings: "/admin/settings"
29
- });
31
+ // src/admin/webcomponent.tsx
32
+ import r2wc from "@r2wc/react-to-web-component";
30
33
 
31
- // src/admin/stores/config.ts
32
- import { atom } from "nanostores";
33
- var $config = atom(null);
34
- var $needsInit = atom(false);
35
- var $isFetchingConfig = atom(false);
36
- var $hasMetadataError = atom(false);
37
- function setConfig(config) {
38
- $config.set(config);
39
- }
40
- function setNeedsInit(needs) {
41
- $needsInit.set(needs);
42
- }
43
-
44
- // src/admin/stores/query.ts
45
- import { nanoquery } from "@nanostores/query";
46
-
47
- // src/admin/api-client.ts
48
- import ky from "ky";
49
- var client = null;
50
- var currentBaseURL = null;
51
- var configureAPI = (serverUrl) => {
52
- if (!serverUrl || !serverUrl.startsWith("http"))
53
- return;
54
- const url = serverUrl;
55
- const baseURL = url.replace(/\/$/, "");
56
- if (client && currentBaseURL === baseURL)
57
- return;
58
- currentBaseURL = baseURL;
59
- client = ky.create({
60
- prefixUrl: baseURL,
61
- credentials: "include",
62
- retry: 0,
63
- hooks: {
64
- afterResponse: [
65
- async (_request, _options, response) => {
66
- if (response.status === 401 || response.status === 403) {
67
- try {
68
- const { $session: $session2 } = await import("./chunk-xa7rjsn2.js");
69
- const { notify: notify2 } = await import("./chunk-jwjk85ze.js");
70
- $session2.set(null);
71
- notify2("Session expired. Please log in again.", "error");
72
- } catch (e) {}
73
- }
74
- }
75
- ]
76
- }
77
- });
78
- };
79
- var getCurrentBaseURL = () => {
80
- if (!currentBaseURL) {
81
- throw new Error("API client not configured. Did you provide a valid serverUrl?");
82
- }
83
- return currentBaseURL;
84
- };
85
- var api = new Proxy({}, {
86
- get(_, prop) {
87
- if (!client) {
88
- throw new Error("API client not configured. Did you provide a valid serverUrl?");
89
- }
90
- if (!client)
91
- throw new Error("API client not configured");
92
- const c = client;
93
- if (c) {
94
- return c[prop];
95
- }
96
- return;
97
- }
98
- });
34
+ // src/admin/ui/admin-client.tsx
35
+ import { useStore as useStore10 } from "@nanostores/react";
36
+ import { Loader2 as Loader211 } from "lucide-react";
37
+ import { useCallback as useCallback10, useEffect as useEffect19, useState as useState26 } from "react";
99
38
 
100
- // src/admin/stores/query.ts
101
- var [
102
- createFetcherStore,
103
- createMutatorStore,
104
- { invalidateKeys, revalidateKeys, mutateCache }
105
- ] = nanoquery({
106
- fetcher: (...keys) => {
107
- const url = keys.join("");
108
- return api.get(url).json();
109
- }
110
- });
39
+ // src/admin/ui/admin-layout.tsx
40
+ import { useStore } from "@nanostores/react";
41
+ import * as LucideIcons from "lucide-react";
42
+ import {
43
+ ChevronLeft,
44
+ ChevronRight,
45
+ Database,
46
+ Globe,
47
+ Image,
48
+ LayoutDashboard,
49
+ LogOut,
50
+ Settings
51
+ } from "lucide-react";
111
52
 
112
53
  // src/admin/ui/components/link.tsx
113
54
  import { jsxDEV } from "react/jsx-dev-runtime";
@@ -132,20 +73,6 @@ function Link({ href, params, search, children, onClick, ...props }) {
132
73
  }, undefined, false, undefined, this);
133
74
  }
134
75
 
135
- // src/admin/ui/admin-layout.tsx
136
- import { useStore } from "@nanostores/react";
137
- import * as LucideIcons from "lucide-react";
138
- import {
139
- ChevronLeft,
140
- ChevronRight,
141
- Database,
142
- Globe,
143
- Image,
144
- LayoutDashboard,
145
- LogOut,
146
- Settings
147
- } from "lucide-react";
148
-
149
76
  // src/admin/ui/components/ui/accordion.tsx
150
77
  import * as React from "react";
151
78
 
@@ -209,6 +136,7 @@ var Accordion = ({
209
136
  ]
210
137
  }, undefined, true, undefined, this);
211
138
  };
139
+
212
140
  // src/admin/ui/components/ui/blocks.tsx
213
141
  import * as React2 from "react";
214
142
  import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
@@ -237,6 +165,7 @@ var Blocks = React2.forwardRef(({ className, label, children, ...props }, ref) =
237
165
  }, undefined, true, undefined, this);
238
166
  });
239
167
  Blocks.displayName = "Blocks";
168
+
240
169
  // src/admin/ui/components/ui/button.tsx
241
170
  import * as React3 from "react";
242
171
  import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
@@ -248,6 +177,7 @@ var Button = React3.forwardRef(({ className, variant = "default", size = "defaul
248
177
  }, undefined, false, undefined, this);
249
178
  });
250
179
  Button.displayName = "Button";
180
+
251
181
  // src/admin/ui/components/ui/collapsible.tsx
252
182
  import * as React4 from "react";
253
183
  import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
@@ -325,6 +255,7 @@ var CollapsibleContent = React4.forwardRef(({ className, children, ...props }, r
325
255
  }, undefined, false, undefined, this);
326
256
  });
327
257
  CollapsibleContent.displayName = "CollapsibleContent";
258
+
328
259
  // src/admin/ui/components/ui/dialog.tsx
329
260
  import { createPortal } from "react-dom";
330
261
  import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
@@ -397,6 +328,7 @@ function DialogFooter({
397
328
  children
398
329
  }, undefined, false, undefined, this);
399
330
  }
331
+
400
332
  // src/admin/ui/components/ui/group.tsx
401
333
  import * as React5 from "react";
402
334
  import { jsxDEV as jsxDEV7 } from "react/jsx-dev-runtime";
@@ -415,6 +347,7 @@ var Group = React5.forwardRef(({ className, label, children, ...props }, ref) =>
415
347
  }, undefined, true, undefined, this);
416
348
  });
417
349
  Group.displayName = "Group";
350
+
418
351
  // src/admin/ui/components/ui/input.tsx
419
352
  import * as React6 from "react";
420
353
  import { jsxDEV as jsxDEV8 } from "react/jsx-dev-runtime";
@@ -427,6 +360,7 @@ var Input = React6.forwardRef(({ className, type, ...props }, ref) => {
427
360
  }, undefined, false, undefined, this);
428
361
  });
429
362
  Input.displayName = "Input";
363
+
430
364
  // src/admin/ui/components/ui/join.tsx
431
365
  import * as React7 from "react";
432
366
  import { jsxDEV as jsxDEV9 } from "react/jsx-dev-runtime";
@@ -482,6 +416,7 @@ var Join = React7.forwardRef(({ className, label, collection, children, ...props
482
416
  }, undefined, true, undefined, this);
483
417
  });
484
418
  Join.displayName = "Join";
419
+
485
420
  // src/admin/ui/components/ui/label.tsx
486
421
  import * as React8 from "react";
487
422
  import { jsxDEV as jsxDEV10 } from "react/jsx-dev-runtime";
@@ -491,6 +426,7 @@ var Label = React8.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
491
426
  ...props
492
427
  }, undefined, false, undefined, this));
493
428
  Label.displayName = "Label";
429
+
494
430
  // src/admin/ui/components/ui/radio-group.tsx
495
431
  import * as React9 from "react";
496
432
  import { jsxDEV as jsxDEV11 } from "react/jsx-dev-runtime";
@@ -535,6 +471,7 @@ var RadioGroupItem = React9.forwardRef(({ className, value, disabled, id, ...pro
535
471
  }, undefined, false, undefined, this);
536
472
  });
537
473
  RadioGroupItem.displayName = "RadioGroupItem";
474
+
538
475
  // src/admin/ui/components/ui/relationship.tsx
539
476
  import * as React10 from "react";
540
477
  import { jsxDEV as jsxDEV12 } from "react/jsx-dev-runtime";
@@ -588,6 +525,7 @@ var Relationship = React10.forwardRef(({ className, label, relationTo, children,
588
525
  }, undefined, true, undefined, this);
589
526
  });
590
527
  Relationship.displayName = "Relationship";
528
+
591
529
  // src/admin/ui/components/ui/scroll-area.tsx
592
530
  import { jsxDEV as jsxDEV13 } from "react/jsx-dev-runtime";
593
531
  function ScrollArea({ children, className, maxHeight, ...props }) {
@@ -598,6 +536,7 @@ function ScrollArea({ children, className, maxHeight, ...props }) {
598
536
  children
599
537
  }, undefined, false, undefined, this);
600
538
  }
539
+
601
540
  // src/admin/ui/components/ui/select.tsx
602
541
  import { ChevronDown } from "lucide-react";
603
542
  import * as React11 from "react";
@@ -752,6 +691,7 @@ function SelectSeparator() {
752
691
  className: "opaca-ui-select-separator"
753
692
  }, undefined, false, undefined, this);
754
693
  }
694
+
755
695
  // src/admin/ui/components/ui/separator.tsx
756
696
  import { jsxDEV as jsxDEV15 } from "react/jsx-dev-runtime";
757
697
  var Separator = ({
@@ -765,6 +705,7 @@ var Separator = ({
765
705
  role: "none"
766
706
  }, undefined, false, undefined, this);
767
707
  };
708
+
768
709
  // src/admin/ui/components/ui/sheet.tsx
769
710
  import { createPortal as createPortal3 } from "react-dom";
770
711
  import { jsxDEV as jsxDEV16 } from "react/jsx-dev-runtime";
@@ -878,6 +819,7 @@ function SheetFooter({
878
819
  children
879
820
  }, undefined, false, undefined, this);
880
821
  }
822
+
881
823
  // src/admin/ui/components/ui/tabs.tsx
882
824
  import * as React12 from "react";
883
825
  import { jsxDEV as jsxDEV17 } from "react/jsx-dev-runtime";
@@ -948,6 +890,7 @@ var TabsContent = React12.forwardRef(({ className, value, ...props }, ref) => {
948
890
  }, undefined, false, undefined, this);
949
891
  });
950
892
  TabsContent.displayName = "TabsContent";
893
+
951
894
  // src/admin/ui/admin-layout.tsx
952
895
  import { jsxDEV as jsxDEV18 } from "react/jsx-dev-runtime";
953
896
  function AdminLayout({ children, config, user, onLogout }) {
@@ -1057,19 +1000,19 @@ function AdminLayout({ children, config, user, onLogout }) {
1057
1000
  isCollapsed,
1058
1001
  children: config.globals.map((g) => {
1059
1002
  const href = `/admin/globals/${g.slug}`;
1060
- const label2 = g.label || g.slug.charAt(0).toUpperCase() + g.slug.slice(1);
1003
+ const label = g.label || g.slug.charAt(0).toUpperCase() + g.slug.slice(1);
1061
1004
  const IconComponent = g.icon && g.icon in LucideIcons ? LucideIcons[g.icon] : Globe;
1062
1005
  return /* @__PURE__ */ jsxDEV18(Link, {
1063
1006
  href,
1064
1007
  className: `opaca-nav-item ${currentPath === href ? "active" : ""}`,
1065
- title: label2,
1008
+ title: label,
1066
1009
  children: [
1067
1010
  /* @__PURE__ */ jsxDEV18(IconComponent, {
1068
1011
  size: 16
1069
1012
  }, undefined, false, undefined, this),
1070
1013
  /* @__PURE__ */ jsxDEV18("span", {
1071
1014
  className: "opaca-nav-label",
1072
- children: label2
1015
+ children: label
1073
1016
  }, undefined, false, undefined, this)
1074
1017
  ]
1075
1018
  }, g.slug, true, undefined, this);
@@ -1322,11 +1265,6 @@ function ToastContainer({
1322
1265
  }, undefined, false, undefined, this);
1323
1266
  }
1324
1267
 
1325
- // src/admin/ui/admin-client.tsx
1326
- import { useStore as useStore10 } from "@nanostores/react";
1327
- import { Loader2 as Loader211 } from "lucide-react";
1328
- import { useCallback as useCallback10, useEffect as useEffect19, useState as useState26 } from "react";
1329
-
1330
1268
  // src/admin/ui/views/collection-list-view.tsx
1331
1269
  import { useStore as useStore5 } from "@nanostores/react";
1332
1270
  import {
@@ -1375,8 +1313,8 @@ function traverseNodes(children) {
1375
1313
  }
1376
1314
 
1377
1315
  // src/admin/stores/admin-queries.ts
1378
- import { atom as atom2, computed } from "nanostores";
1379
- var $collectionQuery = atom2(null);
1316
+ import { atom, computed } from "nanostores";
1317
+ var $collectionQuery = atom(null);
1380
1318
  var $collectionUrl = computed($collectionQuery, (params) => {
1381
1319
  if (!params)
1382
1320
  return null;
@@ -1412,7 +1350,7 @@ var $collectionUrl = computed($collectionQuery, (params) => {
1412
1350
  var $collectionData = createFetcherStore([
1413
1351
  $collectionUrl
1414
1352
  ]);
1415
- var $documentQuery = atom2(null);
1353
+ var $documentQuery = atom(null);
1416
1354
  var $documentUrl = computed($documentQuery, (params) => {
1417
1355
  if (!params)
1418
1356
  return null;
@@ -1428,7 +1366,7 @@ var $saveDocument = createMutatorStore(async ({ data, revalidate }) => {
1428
1366
  revalidate(`api/${slug}/${id}`);
1429
1367
  return res;
1430
1368
  });
1431
- var $globalQuery = atom2(null);
1369
+ var $globalQuery = atom(null);
1432
1370
  var $globalUrl = computed($globalQuery, (slug) => {
1433
1371
  if (!slug)
1434
1372
  return null;
@@ -1858,16 +1796,16 @@ import React14, { useMemo as useMemo4, useRef as useRef4, useState as useState8
1858
1796
 
1859
1797
  // src/admin/stores/media.ts
1860
1798
  import { persistentAtom as persistentAtom2 } from "@nanostores/persistent";
1861
- import { atom as atom3 } from "nanostores";
1799
+ import { atom as atom2 } from "nanostores";
1862
1800
  var $mediaViewMode = persistentAtom2("opaca-media-view-mode", "grid");
1863
1801
  var $mediaSelectedBucket = persistentAtom2("opaca-media-selected-bucket", "all");
1864
1802
  var $bucketColors = persistentAtom2("opaca-bucket-colors", {}, {
1865
1803
  encode: JSON.stringify,
1866
1804
  decode: JSON.parse
1867
1805
  });
1868
- var $mediaCurrentFolder = atom3("");
1869
- var $mediaSearch = atom3("");
1870
- var $mediaPage = atom3(1);
1806
+ var $mediaCurrentFolder = atom2("");
1807
+ var $mediaSearch = atom2("");
1808
+ var $mediaPage = atom2(1);
1871
1809
  var $assets = createFetcherStore(["api/__system/assets", $mediaSelectedBucket, $mediaCurrentFolder, $mediaSearch, $mediaPage], {
1872
1810
  fetcher: (base, bucket, folder, search, page) => {
1873
1811
  const params = new URLSearchParams({
@@ -3053,7 +2991,7 @@ function RichTextEditor({
3053
2991
  import { jsxDEV as jsxDEV29 } from "react/jsx-dev-runtime";
3054
2992
  var DataDetailView = ({
3055
2993
  data,
3056
- label: label2,
2994
+ label,
3057
2995
  depth = 0,
3058
2996
  isEditing,
3059
2997
  onChange
@@ -4334,7 +4272,7 @@ var capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
4334
4272
  import { jsxDEV as jsxDEV34 } from "react/jsx-dev-runtime";
4335
4273
  var ArrayField = ({
4336
4274
  name,
4337
- label: label2,
4275
+ label,
4338
4276
  fields = [],
4339
4277
  value = [],
4340
4278
  onChange,
@@ -4401,7 +4339,7 @@ var ArrayField = ({
4401
4339
  htmlFor: name,
4402
4340
  className: "opaca-label",
4403
4341
  style: { marginBottom: 0 },
4404
- children: label2 || capitalize(name)
4342
+ children: label || capitalize(name)
4405
4343
  }, undefined, false, undefined, this)
4406
4344
  }, undefined, false, undefined, this),
4407
4345
  /* @__PURE__ */ jsxDEV34("div", {
@@ -4482,8 +4420,8 @@ import { Plus as Plus3, Trash2 as Trash23 } from "lucide-react";
4482
4420
  import { jsxDEV as jsxDEV35 } from "react/jsx-dev-runtime";
4483
4421
  var BlocksField = ({
4484
4422
  name,
4485
- label: label2,
4486
- blocks: blocks2,
4423
+ label,
4424
+ blocks,
4487
4425
  value = [],
4488
4426
  onChange,
4489
4427
  disabled,
@@ -4492,7 +4430,7 @@ var BlocksField = ({
4492
4430
  }) => {
4493
4431
  const addBlock = (blockSlug) => {
4494
4432
  const currentValue = Array.isArray(value) ? value : [];
4495
- const blockDef = blocks2.find((b) => b.slug === blockSlug);
4433
+ const blockDef = blocks.find((b) => b.slug === blockSlug);
4496
4434
  const initialData = { blockType: blockSlug };
4497
4435
  if (blockDef) {
4498
4436
  blockDef.fields.forEach((f) => {
@@ -4531,13 +4469,13 @@ var BlocksField = ({
4531
4469
  onChange(newValue);
4532
4470
  };
4533
4471
  return /* @__PURE__ */ jsxDEV35(Blocks, {
4534
- label: label2 || name,
4472
+ label: label || name,
4535
4473
  className: "opaca-blocks-field",
4536
4474
  children: /* @__PURE__ */ jsxDEV35("div", {
4537
4475
  style: { display: "flex", flexDirection: "column", gap: "24px" },
4538
4476
  children: [
4539
4477
  (Array.isArray(value) ? value : []).map((item, index) => {
4540
- const blockDef = blocks2.find((b) => b.slug === item.blockType);
4478
+ const blockDef = blocks.find((b) => b.slug === item.blockType);
4541
4479
  if (!blockDef)
4542
4480
  return null;
4543
4481
  return /* @__PURE__ */ jsxDEV35("div", {
@@ -4632,7 +4570,7 @@ var BlocksField = ({
4632
4570
  gap: "0.75rem",
4633
4571
  justifyContent: "center"
4634
4572
  },
4635
- children: blocks2.map((block) => /* @__PURE__ */ jsxDEV35(Button, {
4573
+ children: blocks.map((block) => /* @__PURE__ */ jsxDEV35(Button, {
4636
4574
  type: "button",
4637
4575
  variant: "outline",
4638
4576
  size: "sm",
@@ -4657,7 +4595,7 @@ var BlocksField = ({
4657
4595
  import { jsxDEV as jsxDEV36 } from "react/jsx-dev-runtime";
4658
4596
  var BooleanField = ({
4659
4597
  name,
4660
- label: label2,
4598
+ label,
4661
4599
  value,
4662
4600
  onChange,
4663
4601
  disabled,
@@ -4672,7 +4610,7 @@ var BooleanField = ({
4672
4610
  /* @__PURE__ */ jsxDEV36("label", {
4673
4611
  className: "opaca-label",
4674
4612
  htmlFor: `field-${name}`,
4675
- children: label2 || name
4613
+ children: label || name
4676
4614
  }, undefined, false, undefined, this),
4677
4615
  /* @__PURE__ */ jsxDEV36("label", {
4678
4616
  className: "opaca-switch",
@@ -4708,7 +4646,7 @@ var BooleanField = ({
4708
4646
  // src/admin/ui/components/fields/CollapsibleField.tsx
4709
4647
  import { jsxDEV as jsxDEV37 } from "react/jsx-dev-runtime";
4710
4648
  var CollapsibleField = ({
4711
- label: label2,
4649
+ label,
4712
4650
  fields,
4713
4651
  parentData,
4714
4652
  disabled,
@@ -4736,7 +4674,7 @@ var CollapsibleField = ({
4736
4674
  children: [
4737
4675
  /* @__PURE__ */ jsxDEV37(CollapsibleTrigger, {
4738
4676
  className: "opaca-collapsible-field-trigger",
4739
- children: dynamicTitle || label2 || "Section"
4677
+ children: dynamicTitle || label || "Section"
4740
4678
  }, undefined, false, undefined, this),
4741
4679
  /* @__PURE__ */ jsxDEV37(CollapsibleContent, {
4742
4680
  children: /* @__PURE__ */ jsxDEV37("div", {
@@ -4760,7 +4698,7 @@ var CollapsibleField = ({
4760
4698
  import { jsxDEV as jsxDEV38 } from "react/jsx-dev-runtime";
4761
4699
  var DateField = ({
4762
4700
  name,
4763
- label: label2,
4701
+ label,
4764
4702
  value,
4765
4703
  onChange,
4766
4704
  required,
@@ -4776,7 +4714,7 @@ var DateField = ({
4776
4714
  className: "opaca-label",
4777
4715
  htmlFor: `field-${name}`,
4778
4716
  children: [
4779
- label2 || name,
4717
+ label || name,
4780
4718
  required && /* @__PURE__ */ jsxDEV38("span", {
4781
4719
  style: { color: "var(--opaca-error)", marginLeft: "4px" },
4782
4720
  children: "*"
@@ -4806,7 +4744,7 @@ import { useEffect as useEffect12, useState as useState16 } from "react";
4806
4744
  import { jsxDEV as jsxDEV39, Fragment as Fragment8 } from "react/jsx-dev-runtime";
4807
4745
  var FileField = ({
4808
4746
  name,
4809
- label: label2,
4747
+ label,
4810
4748
  value,
4811
4749
  onChange,
4812
4750
  options,
@@ -4909,7 +4847,7 @@ var FileField = ({
4909
4847
  className: "file-field-label-row",
4910
4848
  children: [
4911
4849
  /* @__PURE__ */ jsxDEV39("label", {
4912
- children: label2 || name
4850
+ children: label || name
4913
4851
  }, undefined, false, undefined, this),
4914
4852
  uploadError && /* @__PURE__ */ jsxDEV39("span", {
4915
4853
  className: "upload-error",
@@ -5103,7 +5041,7 @@ var FileField = ({
5103
5041
  import { jsxDEV as jsxDEV40 } from "react/jsx-dev-runtime";
5104
5042
  var GroupField = ({
5105
5043
  name,
5106
- label: label2,
5044
+ label,
5107
5045
  fields,
5108
5046
  value,
5109
5047
  onChange,
@@ -5118,7 +5056,7 @@ var GroupField = ({
5118
5056
  });
5119
5057
  };
5120
5058
  return /* @__PURE__ */ jsxDEV40(Group, {
5121
- label: label2 || name,
5059
+ label: label || name,
5122
5060
  className: "opaca-group-field",
5123
5061
  children: /* @__PURE__ */ jsxDEV40("div", {
5124
5062
  className: "opaca-group-fields-container",
@@ -5133,11 +5071,11 @@ var GroupField = ({
5133
5071
 
5134
5072
  // src/admin/ui/components/fields/JoinField.tsx
5135
5073
  import { jsxDEV as jsxDEV41 } from "react/jsx-dev-runtime";
5136
- var JoinField = ({ name, label: label2, collection, value, on }) => {
5074
+ var JoinField = ({ name, label, collection, value, on }) => {
5137
5075
  return /* @__PURE__ */ jsxDEV41("div", {
5138
5076
  className: "opaca-form-group",
5139
5077
  children: /* @__PURE__ */ jsxDEV41(Join, {
5140
- label: label2 || name,
5078
+ label: label || name,
5141
5079
  collection,
5142
5080
  on
5143
5081
  }, undefined, false, undefined, this)
@@ -5148,7 +5086,7 @@ var JoinField = ({ name, label: label2, collection, value, on }) => {
5148
5086
  import { jsxDEV as jsxDEV42 } from "react/jsx-dev-runtime";
5149
5087
  var NumberField = ({
5150
5088
  name,
5151
- label: label2,
5089
+ label,
5152
5090
  value,
5153
5091
  onChange,
5154
5092
  required,
@@ -5164,7 +5102,7 @@ var NumberField = ({
5164
5102
  className: "opaca-label",
5165
5103
  htmlFor: `field-${name}`,
5166
5104
  children: [
5167
- label2 || name,
5105
+ label || name,
5168
5106
  required && /* @__PURE__ */ jsxDEV42("span", {
5169
5107
  style: { color: "var(--opaca-error)", marginLeft: "4px" },
5170
5108
  children: "*"
@@ -5179,7 +5117,7 @@ var NumberField = ({
5179
5117
  readOnly,
5180
5118
  disabled,
5181
5119
  onChange: (e) => onChange(e.target.valueAsNumber || 0),
5182
- placeholder: placeholder || `Enter ${label2 || name}...`,
5120
+ placeholder: placeholder || `Enter ${label || name}...`,
5183
5121
  required
5184
5122
  }, undefined, false, undefined, this),
5185
5123
  error && /* @__PURE__ */ jsxDEV42("span", {
@@ -5194,7 +5132,7 @@ var NumberField = ({
5194
5132
  import { jsxDEV as jsxDEV43 } from "react/jsx-dev-runtime";
5195
5133
  var RadioField = ({
5196
5134
  name,
5197
- label: label2,
5135
+ label,
5198
5136
  value,
5199
5137
  onChange,
5200
5138
  choices,
@@ -5210,7 +5148,7 @@ var RadioField = ({
5210
5148
  /* @__PURE__ */ jsxDEV43("label", {
5211
5149
  className: "opaca-label",
5212
5150
  children: [
5213
- label2 || name,
5151
+ label || name,
5214
5152
  required && /* @__PURE__ */ jsxDEV43("span", {
5215
5153
  style: { color: "var(--opaca-error)", marginLeft: "4px" },
5216
5154
  children: "*"
@@ -5378,7 +5316,7 @@ var RelationshipDetailSheet = ({
5378
5316
  import { jsxDEV as jsxDEV45 } from "react/jsx-dev-runtime";
5379
5317
  var RelationshipField = ({
5380
5318
  name,
5381
- label: label2,
5319
+ label,
5382
5320
  relationTo,
5383
5321
  value,
5384
5322
  onChange,
@@ -5437,7 +5375,7 @@ var RelationshipField = ({
5437
5375
  className: "opaca-form-group",
5438
5376
  children: [
5439
5377
  /* @__PURE__ */ jsxDEV45(Relationship, {
5440
- label: label2 || name,
5378
+ label: label || name,
5441
5379
  relationTo,
5442
5380
  className: error ? "error" : "",
5443
5381
  onClick: () => !disabled && !readOnly && setIsOpen(true),
@@ -5659,7 +5597,7 @@ var RowField = ({
5659
5597
  import { jsxDEV as jsxDEV47 } from "react/jsx-dev-runtime";
5660
5598
  var SelectField = ({
5661
5599
  name,
5662
- label: label2,
5600
+ label,
5663
5601
  value,
5664
5602
  onChange,
5665
5603
  choices,
@@ -5676,7 +5614,7 @@ var SelectField = ({
5676
5614
  className: "opaca-label",
5677
5615
  htmlFor: `field-${name}`,
5678
5616
  children: [
5679
- label2 || name,
5617
+ label || name,
5680
5618
  required && /* @__PURE__ */ jsxDEV47("span", {
5681
5619
  style: { color: "var(--opaca-error)", marginLeft: "4px" },
5682
5620
  children: "*"
@@ -5687,7 +5625,7 @@ var SelectField = ({
5687
5625
  value,
5688
5626
  onValueChange: onChange,
5689
5627
  disabled: disabled || readOnly,
5690
- placeholder: placeholder || `Select ${label2 || name}...`,
5628
+ placeholder: placeholder || `Select ${label || name}...`,
5691
5629
  children: [
5692
5630
  /* @__PURE__ */ jsxDEV47(SelectTrigger, {
5693
5631
  className: error ? "error" : "",
@@ -5716,14 +5654,14 @@ var SelectField = ({
5716
5654
  import React16 from "react";
5717
5655
  import { jsxDEV as jsxDEV48 } from "react/jsx-dev-runtime";
5718
5656
  var TabsField = ({
5719
- tabs: tabs2,
5657
+ tabs,
5720
5658
  value,
5721
5659
  onChange,
5722
5660
  disabled,
5723
5661
  readOnly,
5724
5662
  renderField
5725
5663
  }) => {
5726
- const [activeTab, setActiveTab] = React16.useState(tabs2?.[0]?.label || "");
5664
+ const [activeTab, setActiveTab] = React16.useState(tabs?.[0]?.label || "");
5727
5665
  const handleFieldChange = (fieldName, fieldValue) => {
5728
5666
  if (value !== undefined) {
5729
5667
  onChange({
@@ -5734,7 +5672,7 @@ var TabsField = ({
5734
5672
  onChange(fieldName, fieldValue);
5735
5673
  }
5736
5674
  };
5737
- if (!tabs2 || tabs2.length === 0)
5675
+ if (!tabs || tabs.length === 0)
5738
5676
  return null;
5739
5677
  return /* @__PURE__ */ jsxDEV48("div", {
5740
5678
  className: "opaca-tabs-field",
@@ -5743,13 +5681,13 @@ var TabsField = ({
5743
5681
  onValueChange: setActiveTab,
5744
5682
  children: [
5745
5683
  /* @__PURE__ */ jsxDEV48(TabsList, {
5746
- children: tabs2.map((tab) => /* @__PURE__ */ jsxDEV48(TabsTrigger, {
5684
+ children: tabs.map((tab) => /* @__PURE__ */ jsxDEV48(TabsTrigger, {
5747
5685
  value: tab.label,
5748
5686
  children: tab.label
5749
5687
  }, tab.label, false, undefined, this))
5750
5688
  }, undefined, false, undefined, this),
5751
5689
  /* @__PURE__ */ jsxDEV48("div", {
5752
- children: tabs2.map((tab) => /* @__PURE__ */ jsxDEV48(TabsContent, {
5690
+ children: tabs.map((tab) => /* @__PURE__ */ jsxDEV48(TabsContent, {
5753
5691
  value: tab.label,
5754
5692
  children: /* @__PURE__ */ jsxDEV48("div", {
5755
5693
  style: {
@@ -5786,7 +5724,7 @@ var TabsField = ({
5786
5724
  import { jsxDEV as jsxDEV49 } from "react/jsx-dev-runtime";
5787
5725
  var TextAreaField = ({
5788
5726
  name,
5789
- label: label2,
5727
+ label,
5790
5728
  value,
5791
5729
  onChange,
5792
5730
  required,
@@ -5802,7 +5740,7 @@ var TextAreaField = ({
5802
5740
  className: "opaca-label",
5803
5741
  htmlFor: `field-${name}`,
5804
5742
  children: [
5805
- label2 || name,
5743
+ label || name,
5806
5744
  required && /* @__PURE__ */ jsxDEV49("span", {
5807
5745
  style: { color: "var(--opaca-error)", marginLeft: "4px" },
5808
5746
  children: "*"
@@ -5825,7 +5763,7 @@ var TextAreaField = ({
5825
5763
  const val = e.target.value;
5826
5764
  onChange(val === "" && !required ? null : val);
5827
5765
  },
5828
- placeholder: placeholder || `Enter ${label2 || name}...`,
5766
+ placeholder: placeholder || `Enter ${label || name}...`,
5829
5767
  required
5830
5768
  }, undefined, false, undefined, this),
5831
5769
  error && /* @__PURE__ */ jsxDEV49("span", {
@@ -5840,7 +5778,7 @@ var TextAreaField = ({
5840
5778
  import { jsxDEV as jsxDEV50 } from "react/jsx-dev-runtime";
5841
5779
  var TextField = ({
5842
5780
  name,
5843
- label: label2,
5781
+ label,
5844
5782
  value,
5845
5783
  onChange,
5846
5784
  required,
@@ -5856,7 +5794,7 @@ var TextField = ({
5856
5794
  className: "opaca-label",
5857
5795
  htmlFor: `field-${name}`,
5858
5796
  children: [
5859
- label2 || name,
5797
+ label || name,
5860
5798
  required && /* @__PURE__ */ jsxDEV50("span", {
5861
5799
  style: { color: "var(--opaca-error)", marginLeft: "4px" },
5862
5800
  children: "*"
@@ -5874,7 +5812,7 @@ var TextField = ({
5874
5812
  const val = e.target.value;
5875
5813
  onChange(val === "" && !required ? null : val);
5876
5814
  },
5877
- placeholder: placeholder || `Enter ${label2 || name}...`,
5815
+ placeholder: placeholder || `Enter ${label || name}...`,
5878
5816
  required
5879
5817
  }, undefined, false, undefined, this),
5880
5818
  error && /* @__PURE__ */ jsxDEV50("span", {
@@ -5887,7 +5825,7 @@ var TextField = ({
5887
5825
 
5888
5826
  // src/admin/ui/components/fields/VirtualField.tsx
5889
5827
  import { jsxDEV as jsxDEV51 } from "react/jsx-dev-runtime";
5890
- var VirtualField = ({ name, label: label2, value }) => {
5828
+ var VirtualField = ({ name, label, value }) => {
5891
5829
  const displayValue = value === null || value === undefined ? "" : typeof value === "object" ? JSON.stringify(value) : String(value);
5892
5830
  return /* @__PURE__ */ jsxDEV51("div", {
5893
5831
  className: "opaca-form-group",
@@ -5896,7 +5834,7 @@ var VirtualField = ({ name, label: label2, value }) => {
5896
5834
  className: "opaca-label",
5897
5835
  htmlFor: `field-${name}`,
5898
5836
  children: [
5899
- label2 || name,
5837
+ label || name,
5900
5838
  /* @__PURE__ */ jsxDEV51("span", {
5901
5839
  style: {
5902
5840
  color: "rgba(255, 255, 255, 0.4)",
@@ -9479,4 +9417,14 @@ function AdminClient({
9479
9417
  }, undefined, true, undefined, this);
9480
9418
  }
9481
9419
 
9482
- export { $router, $config, $needsInit, $isFetchingConfig, $hasMetadataError, setConfig, setNeedsInit, createFetcherStore, createMutatorStore, invalidateKeys, revalidateKeys, mutateCache, Link, AdminLayout, Breadcrumbs, Toast, ToastContainer, AdminClient };
9420
+ // src/admin/webcomponent.tsx
9421
+ var OpacaAdminWebComponent = r2wc(AdminClient, {
9422
+ props: {
9423
+ serverUrl: "string",
9424
+ config: "json",
9425
+ initialNeedsInit: "boolean"
9426
+ }
9427
+ });
9428
+ if (typeof window !== "undefined" && !customElements.get("opaca-admin")) {
9429
+ customElements.define("opaca-admin", OpacaAdminWebComponent);
9430
+ }