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.
- package/dist/admin/index.js +49 -0
- package/dist/{chunk-2zm8cy1w.js → admin/webcomponent.js} +116 -168
- package/dist/{chunk-6dhs73zq.js → chunk-2yz1nsxs.js} +1 -1
- package/dist/chunk-fa5mg0hr.js +96 -0
- package/dist/{chunk-kwp83w8b.js → chunk-m09hahe2.js} +7 -7
- package/dist/{chunk-hmhcense.js → chunk-ry15hke8.js} +253 -4
- package/dist/chunk-vtvqfhgy.js +2442 -0
- package/dist/{chunk-f3nvxn63.js → chunk-y8hc6nm4.js} +1 -1
- package/dist/{src/cli → cli}/index.js +10 -10
- package/dist/{src/client.js → client.js} +2 -2
- package/dist/{src/db → db}/bun-sqlite.js +10 -10
- package/dist/{src/db → db}/d1.js +8 -8
- package/dist/db/index.d.ts +2 -0
- package/dist/db/index.js +7 -0
- package/dist/db/migration.d.ts +39 -0
- package/dist/{src/db → db}/postgres.js +10 -10
- package/dist/{src/db → db}/sqlite.js +8 -8
- package/dist/index.d.ts +0 -2
- package/dist/index.js +13 -0
- package/dist/{src/runtimes → runtimes}/bun.js +5 -6
- package/dist/{src/runtimes → runtimes}/cloudflare-workers.js +5 -6
- package/dist/{src/runtimes → runtimes}/next.js +5 -6
- package/dist/{src/runtimes → runtimes}/node.js +5 -6
- package/dist/{src/server.js → server.js} +7 -8
- package/dist/storage/index.d.ts +0 -3
- package/dist/storage/index.js +35 -0
- package/dist/types.d.ts +5 -2
- package/package.json +161 -39
- package/bun.lock +0 -34
- package/dist/api.d.ts +0 -6
- package/dist/chunk-8gkhn1d4.js +0 -309
- package/dist/chunk-dy5t83hr.js +0 -261
- package/dist/src/admin/index.js +0 -176
- package/dist/src/admin/webcomponent.js +0 -19
- package/dist/src/api.js +0 -27
- package/dist/src/index.js +0 -20
- package/dist/src/storage/index.js +0 -355
- package/global.d.ts +0 -11
- package/src/admin/api-client.ts +0 -63
- package/src/admin/auth-client.ts +0 -40
- package/src/admin/custom-field.ts +0 -179
- package/src/admin/index.ts +0 -15
- package/src/admin/react.tsx +0 -72
- package/src/admin/router.ts +0 -9
- package/src/admin/stores/admin-queries.ts +0 -121
- package/src/admin/stores/auth.ts +0 -61
- package/src/admin/stores/column-visibility.ts +0 -67
- package/src/admin/stores/config.ts +0 -15
- package/src/admin/stores/media.ts +0 -95
- package/src/admin/stores/query.ts +0 -13
- package/src/admin/stores/ui.ts +0 -29
- package/src/admin/ui/admin-client.tsx +0 -283
- package/src/admin/ui/admin-layout.tsx +0 -276
- package/src/admin/ui/components/ColumnVisibilityToggle.tsx +0 -141
- package/src/admin/ui/components/DataDetailSheet.tsx +0 -141
- package/src/admin/ui/components/DataDetailView.tsx +0 -175
- package/src/admin/ui/components/Table.tsx +0 -67
- package/src/admin/ui/components/fields/ArrayField.tsx +0 -166
- package/src/admin/ui/components/fields/BlocksField.tsx +0 -202
- package/src/admin/ui/components/fields/BooleanField.tsx +0 -50
- package/src/admin/ui/components/fields/CollapsibleField.tsx +0 -75
- package/src/admin/ui/components/fields/DateField.tsx +0 -45
- package/src/admin/ui/components/fields/FileField.tsx +0 -322
- package/src/admin/ui/components/fields/GroupField.tsx +0 -50
- package/src/admin/ui/components/fields/JoinField.tsx +0 -23
- package/src/admin/ui/components/fields/NumberField.tsx +0 -46
- package/src/admin/ui/components/fields/RadioField.tsx +0 -62
- package/src/admin/ui/components/fields/RelationshipField.tsx +0 -278
- package/src/admin/ui/components/fields/RowField.tsx +0 -40
- package/src/admin/ui/components/fields/SelectField.tsx +0 -59
- package/src/admin/ui/components/fields/TabsField.tsx +0 -101
- package/src/admin/ui/components/fields/TextAreaField.tsx +0 -54
- package/src/admin/ui/components/fields/TextField.tsx +0 -49
- package/src/admin/ui/components/fields/VirtualField.tsx +0 -53
- package/src/admin/ui/components/fields/index.tsx +0 -371
- package/src/admin/ui/components/fields/richtext-editor/index.tsx +0 -211
- package/src/admin/ui/components/fields/richtext-editor/nodes/ImageComponent.tsx +0 -142
- package/src/admin/ui/components/fields/richtext-editor/nodes/ImageNode.tsx +0 -95
- package/src/admin/ui/components/fields/richtext-editor/plugins/ComponentPickerPlugin.tsx +0 -226
- package/src/admin/ui/components/fields/richtext-editor/plugins/EditableSyncPlugin.tsx +0 -16
- package/src/admin/ui/components/fields/richtext-editor/plugins/NotionToolbarPlugin.tsx +0 -184
- package/src/admin/ui/components/fields/richtext-editor/plugins/SimpleToolbarPlugin.tsx +0 -240
- package/src/admin/ui/components/fields/richtext-editor/plugins/ValueSyncPlugin.tsx +0 -40
- package/src/admin/ui/components/fields/utils.ts +0 -1
- package/src/admin/ui/components/link.tsx +0 -41
- package/src/admin/ui/components/media/AssetManagerModal.tsx +0 -334
- package/src/admin/ui/components/toast.tsx +0 -72
- package/src/admin/ui/components/ui/accordion.tsx +0 -51
- package/src/admin/ui/components/ui/alert-dialog.tsx +0 -98
- package/src/admin/ui/components/ui/blocks.tsx +0 -32
- package/src/admin/ui/components/ui/breadcrumbs.tsx +0 -59
- package/src/admin/ui/components/ui/button.tsx +0 -26
- package/src/admin/ui/components/ui/collapsible.tsx +0 -124
- package/src/admin/ui/components/ui/dialog.tsx +0 -79
- package/src/admin/ui/components/ui/group.tsx +0 -20
- package/src/admin/ui/components/ui/index.ts +0 -17
- package/src/admin/ui/components/ui/input.tsx +0 -12
- package/src/admin/ui/components/ui/join.tsx +0 -53
- package/src/admin/ui/components/ui/label.tsx +0 -11
- package/src/admin/ui/components/ui/radio-group.tsx +0 -75
- package/src/admin/ui/components/ui/relationship-detail-sheet.tsx +0 -122
- package/src/admin/ui/components/ui/relationship.tsx +0 -58
- package/src/admin/ui/components/ui/scroll-area.tsx +0 -19
- package/src/admin/ui/components/ui/select.tsx +0 -187
- package/src/admin/ui/components/ui/separator.tsx +0 -21
- package/src/admin/ui/components/ui/sheet.tsx +0 -106
- package/src/admin/ui/components/ui/tabs.tsx +0 -116
- package/src/admin/ui/components/ui/utils.ts +0 -3
- package/src/admin/ui/hooks/use-debounce.ts +0 -15
- package/src/admin/ui/styles/_locale-switcher.scss +0 -33
- package/src/admin/ui/styles/accordion.scss +0 -60
- package/src/admin/ui/styles/animations.scss +0 -41
- package/src/admin/ui/styles/asset-manager.scss +0 -547
- package/src/admin/ui/styles/badge.scss +0 -13
- package/src/admin/ui/styles/base.scss +0 -22
- package/src/admin/ui/styles/button.scss +0 -161
- package/src/admin/ui/styles/card.scss +0 -13
- package/src/admin/ui/styles/collapsible.scss +0 -75
- package/src/admin/ui/styles/data-detail.scss +0 -92
- package/src/admin/ui/styles/dialog.scss +0 -102
- package/src/admin/ui/styles/empty-state.scss +0 -22
- package/src/admin/ui/styles/group.scss +0 -19
- package/src/admin/ui/styles/index.scss +0 -33
- package/src/admin/ui/styles/input.scss +0 -80
- package/src/admin/ui/styles/label.scss +0 -12
- package/src/admin/ui/styles/layout.scss +0 -56
- package/src/admin/ui/styles/lexical.scss +0 -469
- package/src/admin/ui/styles/loading.scss +0 -102
- package/src/admin/ui/styles/media-registry.scss +0 -597
- package/src/admin/ui/styles/pagination.scss +0 -20
- package/src/admin/ui/styles/radio-group.scss +0 -66
- package/src/admin/ui/styles/row.scss +0 -17
- package/src/admin/ui/styles/scrollbar.scss +0 -36
- package/src/admin/ui/styles/select.scss +0 -121
- package/src/admin/ui/styles/separator.scss +0 -14
- package/src/admin/ui/styles/sheet.scss +0 -152
- package/src/admin/ui/styles/sidebar.scss +0 -148
- package/src/admin/ui/styles/switch.scss +0 -59
- package/src/admin/ui/styles/table.scss +0 -207
- package/src/admin/ui/styles/tabs.scss +0 -62
- package/src/admin/ui/styles/toast.scss +0 -45
- package/src/admin/ui/styles/variables.scss +0 -24
- package/src/admin/ui/views/collection-list-view.tsx +0 -720
- package/src/admin/ui/views/dashboard-view.tsx +0 -263
- package/src/admin/ui/views/document-edit-view.tsx +0 -384
- package/src/admin/ui/views/global-edit-view.tsx +0 -226
- package/src/admin/ui/views/init-view.tsx +0 -182
- package/src/admin/ui/views/login-view.tsx +0 -123
- package/src/admin/ui/views/media-registry-view.tsx +0 -1104
- package/src/admin/ui/views/settings-view.tsx +0 -729
- package/src/admin/webcomponent.tsx +0 -15
- package/src/api.ts +0 -9
- package/src/auth/index.ts +0 -194
- package/src/auth/migrations.ts +0 -87
- package/src/auth/premissions.ts +0 -46
- package/src/cli/commands/generate-types.ts +0 -116
- package/src/cli/commands/init.ts +0 -95
- package/src/cli/commands/migrate-commands.ts +0 -160
- package/src/cli/commands/seed-command.ts +0 -11
- package/src/cli/d1-mock.ts +0 -101
- package/src/cli/index.test.ts +0 -84
- package/src/cli/index.ts +0 -183
- package/src/cli/r2-mock.ts +0 -217
- package/src/cli/seeding.ts +0 -405
- package/src/client.ts +0 -181
- package/src/config-utils.ts +0 -102
- package/src/config.ts +0 -49
- package/src/db/adapter.ts +0 -53
- package/src/db/better-sqlite.ts +0 -630
- package/src/db/bun-sqlite.ts +0 -646
- package/src/db/d1.ts +0 -711
- package/src/db/kysely/data-mapper.ts +0 -142
- package/src/db/kysely/field-mapper.ts +0 -148
- package/src/db/kysely/migration-generator.ts +0 -223
- package/src/db/kysely/query-builder.ts +0 -92
- package/src/db/kysely/schema-builder.ts +0 -439
- package/src/db/kysely/sql-utils.ts +0 -13
- package/src/db/postgres.ts +0 -621
- package/src/db/sqlite.ts +0 -658
- package/src/db/system-schema.ts +0 -121
- package/src/index.ts +0 -13
- package/src/runtimes/README.md +0 -59
- package/src/runtimes/bun.ts +0 -49
- package/src/runtimes/cloudflare-workers.ts +0 -38
- package/src/runtimes/next.ts +0 -26
- package/src/runtimes/node.ts +0 -52
- package/src/schema/collection.ts +0 -184
- package/src/schema/fields/base.ts +0 -164
- package/src/schema/fields/index.ts +0 -427
- package/src/schema/global.ts +0 -145
- package/src/schema/index.ts +0 -4
- package/src/schema/infer.ts +0 -72
- package/src/server/admin-router.ts +0 -20
- package/src/server/admin.ts +0 -142
- package/src/server/assets.ts +0 -306
- package/src/server/collection-router.ts +0 -55
- package/src/server/handlers.ts +0 -722
- package/src/server/middlewares/admin.ts +0 -27
- package/src/server/middlewares/auth.ts +0 -89
- package/src/server/middlewares/context.ts +0 -17
- package/src/server/middlewares/cors.ts +0 -24
- package/src/server/middlewares/database-init.ts +0 -74
- package/src/server/middlewares/rate-limit.ts +0 -71
- package/src/server/router.ts +0 -47
- package/src/server/setup-middlewares.ts +0 -58
- package/src/server/system-router.ts +0 -35
- package/src/server.ts +0 -9
- package/src/storage/adapters/cloudflare-r2.ts +0 -136
- package/src/storage/adapters/local.ts +0 -146
- package/src/storage/adapters/s3.ts +0 -186
- package/src/storage/errors.ts +0 -46
- package/src/storage/index.ts +0 -5
- package/src/storage/types.ts +0 -39
- package/src/types.ts +0 -577
- package/src/utils/lexical.ts +0 -37
- package/src/utils/logger.ts +0 -73
- package/src/validation.ts +0 -429
- package/src/validator.ts +0 -179
- package/test/admin-custom-field.test.ts +0 -162
- package/test/admin-react-field.test.tsx +0 -134
- package/test/api-features.test.ts +0 -78
- package/test/api.test.ts +0 -178
- package/test/auth.test.ts +0 -62
- package/test/cli-integration.test.ts +0 -146
- package/test/cli.test.ts +0 -25
- package/test/db/postgres.test.ts +0 -95
- package/test/db/sqlite-filter.test.ts +0 -53
- package/test/db/sqlite.test.ts +0 -82
- package/test/engine-features.test.ts +0 -79
- package/test/globals.test.ts +0 -74
- package/test/integration-tmp/db-app/opacacms.config.ts +0 -15
- package/test/integration-tmp/my-sqlite-app/opacacms.config.ts +0 -25
- package/test/integration-tmp/my-test-app/index.ts +0 -8
- package/test/integration-tmp/my-test-app/opacacms.config.ts +0 -16
- package/test/integration-tmp/my-test-app/package.json +0 -12
- package/test/populate.test.ts +0 -79
- package/test/runtimes.test.ts +0 -43
- package/test/schema-builder.test.ts +0 -107
- package/test/schema-features.test.ts +0 -63
- package/test/seeding.test.ts +0 -68
- package/test/storage/local.test.ts +0 -72
- package/test/storage/s3.test.ts +0 -60
- package/test/structural-data.test.ts +0 -100
- package/test/test-setup.ts +0 -11
- package/test/validation.test.ts +0 -162
- package/tsconfig.json +0 -42
- /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 "
|
|
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 "
|
|
17
|
-
import
|
|
18
|
-
__require
|
|
19
|
-
} from "./chunk-8sqjbsgt.js";
|
|
28
|
+
} from "../chunk-j4d50hrx.js";
|
|
29
|
+
import"../chunk-8sqjbsgt.js";
|
|
20
30
|
|
|
21
|
-
// src/admin/
|
|
22
|
-
import
|
|
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/
|
|
32
|
-
import {
|
|
33
|
-
|
|
34
|
-
|
|
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/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
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:
|
|
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:
|
|
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
|
|
1379
|
-
var $collectionQuery =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
1869
|
-
var $mediaSearch =
|
|
1870
|
-
var $mediaPage =
|
|
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
|
|
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
|
|
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:
|
|
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
|
|
4486
|
-
blocks
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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 ||
|
|
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
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 ${
|
|
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
|
|
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
|
-
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 ${
|
|
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
|
|
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(
|
|
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 (!
|
|
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:
|
|
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:
|
|
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
|
|
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
|
-
|
|
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 ${
|
|
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
|
|
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
|
-
|
|
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 ${
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
}
|