@aphexcms/cms-core 2.0.10 → 2.1.0
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/api/api-keys.d.ts +4 -0
- package/dist/api/api-keys.d.ts.map +1 -1
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -0
- package/dist/api/roles.d.ts +22 -0
- package/dist/api/roles.d.ts.map +1 -0
- package/dist/api/roles.js +26 -0
- package/dist/api/schemas/api-keys.d.ts +50 -4
- package/dist/api/schemas/api-keys.d.ts.map +1 -1
- package/dist/api/schemas/api-keys.js +22 -3
- package/dist/api/schemas/organizations.d.ts +4 -22
- package/dist/api/schemas/organizations.d.ts.map +1 -1
- package/dist/api/schemas/organizations.js +13 -2
- package/dist/api/schemas/roles.d.ts +77 -0
- package/dist/api/schemas/roles.d.ts.map +1 -0
- package/dist/api/schemas/roles.js +42 -0
- package/dist/app-augment.d.ts +32 -0
- package/dist/app-augment.d.ts.map +1 -0
- package/dist/app-augment.js +18 -0
- package/dist/auth/auth-hooks.d.ts +2 -1
- package/dist/auth/auth-hooks.d.ts.map +1 -1
- package/dist/auth/auth-hooks.js +22 -2
- package/dist/client/index.d.ts +4 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -2
- package/dist/components/AdminApp.svelte +300 -140
- package/dist/components/AdminApp.svelte.d.ts +8 -0
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentEditor.svelte +633 -350
- package/dist/components/admin/DocumentEditor.svelte.d.ts +2 -0
- package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
- package/dist/components/admin/DocumentVersionPanel.svelte +46 -20
- package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
- package/dist/components/admin/MediaBrowser.svelte +70 -30
- package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
- package/dist/components/admin/ObjectModal.svelte +70 -95
- package/dist/components/admin/ObjectModal.svelte.d.ts +1 -2
- package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
- package/dist/components/admin/PermissionsDebug.svelte +119 -0
- package/dist/components/admin/PermissionsDebug.svelte.d.ts +4 -0
- package/dist/components/admin/PermissionsDebug.svelte.d.ts.map +1 -0
- package/dist/components/admin/SchemaField.svelte +3 -1
- package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
- package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte +8 -10
- package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ArrayField.svelte +104 -108
- package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/FileField.svelte +22 -17
- package/dist/components/admin/fields/FileField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ImageField.svelte +21 -15
- package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ReferenceField.svelte +142 -112
- package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/TextareaField.svelte +4 -3
- package/dist/components/admin/fields/TextareaField.svelte.d.ts +2 -2
- package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -1
- package/dist/components/layout/Sidebar.svelte +21 -11
- package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
- package/dist/components/layout/sidebar/NavMain.svelte +1 -0
- package/dist/db/interfaces/document.d.ts.map +1 -1
- package/dist/db/interfaces/index.d.ts +3 -1
- package/dist/db/interfaces/index.d.ts.map +1 -1
- package/dist/db/interfaces/organization.d.ts +1 -1
- package/dist/db/interfaces/organization.d.ts.map +1 -1
- package/dist/db/interfaces/role.d.ts +25 -0
- package/dist/db/interfaces/role.d.ts.map +1 -0
- package/dist/db/interfaces/role.js +1 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +5 -0
- package/dist/field-access.d.ts +30 -0
- package/dist/field-access.d.ts.map +1 -0
- package/dist/field-access.js +79 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +19 -13
- package/dist/lib/api/api-keys.d.ts +4 -0
- package/dist/lib/api/api-keys.d.ts.map +1 -1
- package/dist/lib/api/api-keys.js.map +1 -1
- package/dist/lib/api/assets.d.ts.map +1 -1
- package/dist/lib/api/assets.js.map +1 -1
- package/dist/lib/api/index.d.ts +1 -0
- package/dist/lib/api/index.d.ts.map +1 -1
- package/dist/lib/api/index.js +1 -0
- package/dist/lib/api/index.js.map +1 -1
- package/dist/lib/api/roles.d.ts +22 -0
- package/dist/lib/api/roles.d.ts.map +1 -0
- package/dist/lib/api/roles.js +27 -0
- package/dist/lib/api/roles.js.map +1 -0
- package/dist/lib/api/schemas/api-keys.d.ts +50 -4
- package/dist/lib/api/schemas/api-keys.d.ts.map +1 -1
- package/dist/lib/api/schemas/api-keys.js +22 -3
- package/dist/lib/api/schemas/api-keys.js.map +1 -1
- package/dist/lib/api/schemas/organizations.d.ts +4 -22
- package/dist/lib/api/schemas/organizations.d.ts.map +1 -1
- package/dist/lib/api/schemas/organizations.js +13 -2
- package/dist/lib/api/schemas/organizations.js.map +1 -1
- package/dist/lib/api/schemas/roles.d.ts +77 -0
- package/dist/lib/api/schemas/roles.d.ts.map +1 -0
- package/dist/lib/api/schemas/roles.js +43 -0
- package/dist/lib/api/schemas/roles.js.map +1 -0
- package/dist/lib/app-augment.d.ts +32 -0
- package/dist/lib/app-augment.d.ts.map +1 -0
- package/dist/lib/app-augment.js +19 -0
- package/dist/lib/app-augment.js.map +1 -0
- package/dist/lib/auth/auth-hooks.d.ts +2 -1
- package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
- package/dist/lib/auth/auth-hooks.js +22 -2
- package/dist/lib/auth/auth-hooks.js.map +1 -1
- package/dist/lib/client/index.d.ts +4 -2
- package/dist/lib/client/index.d.ts.map +1 -1
- package/dist/lib/client/index.js +6 -2
- package/dist/lib/client/index.js.map +1 -1
- package/dist/lib/db/interfaces/document.d.ts.map +1 -1
- package/dist/lib/db/interfaces/index.d.ts +3 -1
- package/dist/lib/db/interfaces/index.d.ts.map +1 -1
- package/dist/lib/db/interfaces/organization.d.ts +1 -1
- package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
- package/dist/lib/db/interfaces/role.d.ts +25 -0
- package/dist/lib/db/interfaces/role.d.ts.map +1 -0
- package/dist/lib/db/interfaces/role.js +2 -0
- package/dist/lib/db/interfaces/role.js.map +1 -0
- package/dist/lib/engine.d.ts.map +1 -1
- package/dist/lib/engine.js +5 -0
- package/dist/lib/engine.js.map +1 -1
- package/dist/lib/field-access.d.ts +30 -0
- package/dist/lib/field-access.d.ts.map +1 -0
- package/dist/lib/field-access.js +80 -0
- package/dist/lib/field-access.js.map +1 -0
- package/dist/lib/hooks.d.ts +2 -0
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/hooks.js +19 -13
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/local-api/collection-api.d.ts +2 -0
- package/dist/lib/local-api/collection-api.d.ts.map +1 -1
- package/dist/lib/local-api/collection-api.js +98 -30
- package/dist/lib/local-api/collection-api.js.map +1 -1
- package/dist/lib/local-api/index.d.ts.map +1 -1
- package/dist/lib/local-api/index.js.map +1 -1
- package/dist/lib/local-api/permissions.d.ts +26 -26
- package/dist/lib/local-api/permissions.d.ts.map +1 -1
- package/dist/lib/local-api/permissions.js +122 -80
- package/dist/lib/local-api/permissions.js.map +1 -1
- package/dist/lib/permissions-context.svelte.d.ts +44 -0
- package/dist/lib/permissions-context.svelte.d.ts.map +1 -0
- package/dist/lib/permissions-context.svelte.js +80 -0
- package/dist/lib/permissions-context.svelte.js.map +1 -0
- package/dist/lib/routes/assets.d.ts.map +1 -1
- package/dist/lib/routes/assets.js.map +1 -1
- package/dist/lib/routes/document-versions.d.ts.map +1 -1
- package/dist/lib/routes/document-versions.js.map +1 -1
- package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
- package/dist/lib/routes/organizations-by-id.js +6 -3
- package/dist/lib/routes/organizations-by-id.js.map +1 -1
- package/dist/lib/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/lib/routes/organizations-invitations.js +17 -7
- package/dist/lib/routes/organizations-invitations.js.map +1 -1
- package/dist/lib/routes/organizations-members.d.ts.map +1 -1
- package/dist/lib/routes/organizations-members.js +15 -7
- package/dist/lib/routes/organizations-members.js.map +1 -1
- package/dist/lib/routes/organizations.d.ts.map +1 -1
- package/dist/lib/routes/organizations.js +3 -0
- package/dist/lib/routes/organizations.js.map +1 -1
- package/dist/lib/routes/roles-by-name.d.ts +4 -0
- package/dist/lib/routes/roles-by-name.d.ts.map +1 -0
- package/dist/lib/routes/roles-by-name.js +112 -0
- package/dist/lib/routes/roles-by-name.js.map +1 -0
- package/dist/lib/routes/roles.d.ts +4 -0
- package/dist/lib/routes/roles.d.ts.map +1 -0
- package/dist/lib/routes/roles.js +91 -0
- package/dist/lib/routes/roles.js.map +1 -0
- package/dist/lib/routes-exports.d.ts +2 -0
- package/dist/lib/routes-exports.d.ts.map +1 -1
- package/dist/lib/routes-exports.js +3 -0
- package/dist/lib/routes-exports.js.map +1 -1
- package/dist/lib/save-state-context.svelte.d.ts +8 -0
- package/dist/lib/save-state-context.svelte.d.ts.map +1 -0
- package/dist/lib/save-state-context.svelte.js +9 -0
- package/dist/lib/save-state-context.svelte.js.map +1 -0
- package/dist/lib/schema-utils/validator.d.ts.map +1 -1
- package/dist/lib/schema-utils/validator.js +14 -0
- package/dist/lib/schema-utils/validator.js.map +1 -1
- package/dist/lib/server/index.d.ts +1 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +1 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/services/index.d.ts +1 -0
- package/dist/lib/services/index.d.ts.map +1 -1
- package/dist/lib/services/index.js +1 -0
- package/dist/lib/services/index.js.map +1 -1
- package/dist/lib/services/roles-service.d.ts +35 -0
- package/dist/lib/services/roles-service.d.ts.map +1 -0
- package/dist/lib/services/roles-service.js +91 -0
- package/dist/lib/services/roles-service.js.map +1 -0
- package/dist/lib/services/version-service.d.ts.map +1 -1
- package/dist/lib/services/version-service.js.map +1 -1
- package/dist/lib/types/auth.d.ts +43 -9
- package/dist/lib/types/auth.d.ts.map +1 -1
- package/dist/lib/types/auth.js +31 -26
- package/dist/lib/types/auth.js.map +1 -1
- package/dist/lib/types/capabilities.d.ts +104 -0
- package/dist/lib/types/capabilities.d.ts.map +1 -0
- package/dist/lib/types/capabilities.js +217 -0
- package/dist/lib/types/capabilities.js.map +1 -0
- package/dist/lib/types/index.d.ts +1 -0
- package/dist/lib/types/index.d.ts.map +1 -1
- package/dist/lib/types/index.js +1 -0
- package/dist/lib/types/index.js.map +1 -1
- package/dist/lib/types/organization.d.ts +13 -4
- package/dist/lib/types/organization.d.ts.map +1 -1
- package/dist/lib/types/schemas.d.ts +71 -0
- package/dist/lib/types/schemas.d.ts.map +1 -1
- package/dist/lib/types/sidebar.d.ts +1 -1
- package/dist/lib/types/sidebar.d.ts.map +1 -1
- package/dist/lib/utils/mime-detect.d.ts.map +1 -1
- package/dist/lib/utils/mime-detect.js +28 -6
- package/dist/lib/utils/mime-detect.js.map +1 -1
- package/dist/local-api/collection-api.d.ts +2 -0
- package/dist/local-api/collection-api.d.ts.map +1 -1
- package/dist/local-api/collection-api.js +98 -30
- package/dist/local-api/index.d.ts.map +1 -1
- package/dist/local-api/permissions.d.ts +26 -26
- package/dist/local-api/permissions.d.ts.map +1 -1
- package/dist/local-api/permissions.js +122 -80
- package/dist/permissions-context.svelte.d.ts +44 -0
- package/dist/permissions-context.svelte.d.ts.map +1 -0
- package/dist/permissions-context.svelte.js +79 -0
- package/dist/plugins/README.md +20 -20
- package/dist/routes/assets.d.ts.map +1 -1
- package/dist/routes/document-versions.d.ts.map +1 -1
- package/dist/routes/organizations-by-id.d.ts.map +1 -1
- package/dist/routes/organizations-by-id.js +6 -3
- package/dist/routes/organizations-invitations.d.ts.map +1 -1
- package/dist/routes/organizations-invitations.js +17 -7
- package/dist/routes/organizations-members.d.ts.map +1 -1
- package/dist/routes/organizations-members.js +15 -7
- package/dist/routes/organizations.d.ts.map +1 -1
- package/dist/routes/organizations.js +3 -0
- package/dist/routes/roles-by-name.d.ts +4 -0
- package/dist/routes/roles-by-name.d.ts.map +1 -0
- package/dist/routes/roles-by-name.js +111 -0
- package/dist/routes/roles.d.ts +4 -0
- package/dist/routes/roles.d.ts.map +1 -0
- package/dist/routes/roles.js +90 -0
- package/dist/routes-exports.d.ts +2 -0
- package/dist/routes-exports.d.ts.map +1 -1
- package/dist/routes-exports.js +3 -0
- package/dist/save-state-context.svelte.d.ts +8 -0
- package/dist/save-state-context.svelte.d.ts.map +1 -0
- package/dist/save-state-context.svelte.js +8 -0
- package/dist/schema-utils/validator.d.ts.map +1 -1
- package/dist/schema-utils/validator.js +14 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/roles-service.d.ts +35 -0
- package/dist/services/roles-service.d.ts.map +1 -0
- package/dist/services/roles-service.js +90 -0
- package/dist/services/version-service.d.ts.map +1 -1
- package/dist/types/auth.d.ts +43 -9
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/auth.js +31 -26
- package/dist/types/capabilities.d.ts +104 -0
- package/dist/types/capabilities.d.ts.map +1 -0
- package/dist/types/capabilities.js +216 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/organization.d.ts +13 -4
- package/dist/types/organization.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +71 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/sidebar.d.ts +1 -1
- package/dist/types/sidebar.d.ts.map +1 -1
- package/dist/utils/mime-detect.d.ts.map +1 -1
- package/dist/utils/mime-detect.js +28 -6
- package/package.json +6 -2
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import { copyUrlToClipboard, downloadFile } from '../../../utils/asset-actions';
|
|
19
19
|
import AssetBrowserModal from '../AssetBrowserModal.svelte';
|
|
20
20
|
import { Input } from '@aphexcms/ui/shadcn/input';
|
|
21
|
+
import { usePermissions } from '../../../permissions-context.svelte';
|
|
21
22
|
|
|
22
23
|
interface Props {
|
|
23
24
|
field: ImageFieldType;
|
|
@@ -45,6 +46,11 @@
|
|
|
45
46
|
organizationId
|
|
46
47
|
}: Props = $props();
|
|
47
48
|
|
|
49
|
+
// Treat the field as read-only when the explicit prop is set OR the user
|
|
50
|
+
// lacks asset.upload — both paths land the user at the same UX.
|
|
51
|
+
const perms = usePermissions();
|
|
52
|
+
const isReadOnly = $derived(readonly || !perms.can('asset.upload'));
|
|
53
|
+
|
|
48
54
|
// Component state
|
|
49
55
|
let isDragging = $state(false);
|
|
50
56
|
let isUploading = $state(false);
|
|
@@ -95,7 +101,7 @@
|
|
|
95
101
|
|
|
96
102
|
// Handle file selection
|
|
97
103
|
async function handleFileSelect(files: FileList | null) {
|
|
98
|
-
if (
|
|
104
|
+
if (isReadOnly || !files || files.length === 0) return;
|
|
99
105
|
|
|
100
106
|
const file = files[0]!;
|
|
101
107
|
|
|
@@ -107,19 +113,19 @@
|
|
|
107
113
|
|
|
108
114
|
// Drag and drop handlers
|
|
109
115
|
function handleDragOver(event: DragEvent) {
|
|
110
|
-
if (
|
|
116
|
+
if (isReadOnly) return;
|
|
111
117
|
event.preventDefault();
|
|
112
118
|
isDragging = true;
|
|
113
119
|
}
|
|
114
120
|
|
|
115
121
|
function handleDragLeave(event: DragEvent) {
|
|
116
|
-
if (
|
|
122
|
+
if (isReadOnly) return;
|
|
117
123
|
event.preventDefault();
|
|
118
124
|
isDragging = false;
|
|
119
125
|
}
|
|
120
126
|
|
|
121
127
|
function handleDrop(event: DragEvent) {
|
|
122
|
-
if (
|
|
128
|
+
if (isReadOnly) return;
|
|
123
129
|
event.preventDefault();
|
|
124
130
|
isDragging = false;
|
|
125
131
|
handleFileSelect(event.dataTransfer?.files || null);
|
|
@@ -127,19 +133,19 @@
|
|
|
127
133
|
|
|
128
134
|
// File input handlers
|
|
129
135
|
function handleFileInputChange(event: Event) {
|
|
130
|
-
if (
|
|
136
|
+
if (isReadOnly) return;
|
|
131
137
|
const target = event.target as HTMLInputElement;
|
|
132
138
|
handleFileSelect(target.files);
|
|
133
139
|
}
|
|
134
140
|
|
|
135
141
|
function openFileDialog() {
|
|
136
|
-
if (
|
|
142
|
+
if (isReadOnly) return;
|
|
137
143
|
fileInputRef?.click();
|
|
138
144
|
}
|
|
139
145
|
|
|
140
146
|
// Remove image
|
|
141
147
|
function removeImage() {
|
|
142
|
-
if (
|
|
148
|
+
if (isReadOnly) return;
|
|
143
149
|
onUpdate(null);
|
|
144
150
|
uploadError = null;
|
|
145
151
|
}
|
|
@@ -299,7 +305,7 @@
|
|
|
299
305
|
</div>
|
|
300
306
|
|
|
301
307
|
<!-- Options menu -->
|
|
302
|
-
{#if !
|
|
308
|
+
{#if !isReadOnly}
|
|
303
309
|
<DropdownMenu>
|
|
304
310
|
<DropdownMenuTrigger>
|
|
305
311
|
<Button variant="ghost" size="sm" class="h-8 w-8 p-0">
|
|
@@ -341,7 +347,7 @@
|
|
|
341
347
|
variant="outline"
|
|
342
348
|
class="w-full justify-start"
|
|
343
349
|
onclick={openFileDialog}
|
|
344
|
-
disabled={isUploading ||
|
|
350
|
+
disabled={isUploading || isReadOnly}
|
|
345
351
|
type="button"
|
|
346
352
|
>
|
|
347
353
|
{#if isUploading}
|
|
@@ -383,7 +389,7 @@
|
|
|
383
389
|
</div>
|
|
384
390
|
|
|
385
391
|
<!-- Overlay controls (hidden for read-only) -->
|
|
386
|
-
{#if !
|
|
392
|
+
{#if !isReadOnly}
|
|
387
393
|
<div class="absolute inset-2 flex items-start justify-end gap-2">
|
|
388
394
|
<DropdownMenu>
|
|
389
395
|
<DropdownMenuTrigger>
|
|
@@ -443,14 +449,14 @@
|
|
|
443
449
|
placeholder="Describe this image..."
|
|
444
450
|
value={altText}
|
|
445
451
|
oninput={(e) => updateAltText(e.currentTarget.value)}
|
|
446
|
-
disabled={
|
|
452
|
+
disabled={isReadOnly}
|
|
447
453
|
/>
|
|
448
454
|
</div>
|
|
449
455
|
</div>
|
|
450
456
|
{:else}
|
|
451
457
|
<!-- Sanity-style upload bar -->
|
|
452
458
|
<div
|
|
453
|
-
class="border-border flex h-10 items-center overflow-hidden rounded-md border transition-colors {validationClasses} {
|
|
459
|
+
class="border-border flex h-10 items-center overflow-hidden rounded-md border transition-colors {validationClasses} {isReadOnly
|
|
454
460
|
? ''
|
|
455
461
|
: isDragging
|
|
456
462
|
? 'bg-primary/5'
|
|
@@ -473,7 +479,7 @@
|
|
|
473
479
|
{:else}
|
|
474
480
|
<FileImage size={16} class="text-muted-foreground" />
|
|
475
481
|
<span class="text-muted-foreground text-sm">
|
|
476
|
-
{
|
|
482
|
+
{isReadOnly ? 'No image' : isDragging ? 'Drop image here' : 'Drag or paste image here'}
|
|
477
483
|
</span>
|
|
478
484
|
{/if}
|
|
479
485
|
</div>
|
|
@@ -482,7 +488,7 @@
|
|
|
482
488
|
<div class="flex items-center gap-1 pr-2">
|
|
483
489
|
<button
|
|
484
490
|
onclick={openFileDialog}
|
|
485
|
-
disabled={isUploading ||
|
|
491
|
+
disabled={isUploading || isReadOnly}
|
|
486
492
|
type="button"
|
|
487
493
|
class="text-muted-foreground hover:text-foreground flex items-center gap-1 px-2 py-1 text-sm transition-colors disabled:opacity-50"
|
|
488
494
|
>
|
|
@@ -490,7 +496,7 @@
|
|
|
490
496
|
Upload
|
|
491
497
|
</button>
|
|
492
498
|
<button
|
|
493
|
-
disabled={isUploading ||
|
|
499
|
+
disabled={isUploading || isReadOnly}
|
|
494
500
|
type="button"
|
|
495
501
|
onclick={() => {
|
|
496
502
|
showAssetBrowser = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ImageField.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ImageField.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAmB1E,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AA6bF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import CheckIcon from '@lucide/svelte/icons/check';
|
|
3
|
-
import ChevronsUpDownIcon from '@lucide/svelte/icons/chevrons-up-down';
|
|
4
3
|
import PlusIcon from '@lucide/svelte/icons/plus';
|
|
5
|
-
import XIcon from '@lucide/svelte/icons/x';
|
|
6
4
|
import { tick } from 'svelte';
|
|
7
5
|
import * as Command from '@aphexcms/ui/shadcn/command';
|
|
8
6
|
import * as Popover from '@aphexcms/ui/shadcn/popover';
|
|
7
|
+
import * as DropdownMenu from '@aphexcms/ui/shadcn/dropdown-menu';
|
|
9
8
|
import { Button } from '@aphexcms/ui/shadcn/button';
|
|
10
9
|
import { cn } from '@aphexcms/ui/utils';
|
|
10
|
+
import { ExternalLink, Ellipsis, Trash2, FileText } from '@lucide/svelte';
|
|
11
11
|
import type { Field, ReferenceField as ReferenceFieldType } from '../../../types/schemas';
|
|
12
12
|
import { documents } from '../../../api/documents';
|
|
13
|
+
import { getSchemaContext } from '../../../schema-context.svelte';
|
|
14
|
+
import { getSchemaByName } from '../../../schema-utils/utils';
|
|
13
15
|
import { toast } from 'svelte-sonner';
|
|
14
16
|
import { cmsLogger } from '../../../utils/logger';
|
|
15
17
|
import { pluralize } from '../../../utils/pluralize';
|
|
@@ -28,6 +30,10 @@
|
|
|
28
30
|
const referenceField = field as ReferenceFieldType;
|
|
29
31
|
const targetType = referenceField.to?.[0]?.type;
|
|
30
32
|
|
|
33
|
+
const schemas = getSchemaContext();
|
|
34
|
+
const targetSchema = $derived(targetType ? getSchemaByName(schemas, targetType) : null);
|
|
35
|
+
const TargetIcon = $derived(targetSchema?.icon ?? null);
|
|
36
|
+
|
|
31
37
|
// State
|
|
32
38
|
let open = $state(false);
|
|
33
39
|
let searchResults = $state<any[]>([]);
|
|
@@ -143,123 +149,147 @@
|
|
|
143
149
|
</script>
|
|
144
150
|
|
|
145
151
|
{#if selectedDocument}
|
|
146
|
-
<!-- Selected document
|
|
147
|
-
<div
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
152
|
+
<!-- Selected document — row styled like an ArrayField item -->
|
|
153
|
+
<div
|
|
154
|
+
class="border-border/50 bg-background hover:bg-muted/50 flex h-10 items-center gap-1 rounded border px-1 transition-colors"
|
|
155
|
+
>
|
|
156
|
+
<!-- Type icon -->
|
|
157
|
+
<div class="text-muted-foreground flex h-8 w-8 shrink-0 items-center justify-center">
|
|
158
|
+
{#if TargetIcon}
|
|
159
|
+
<TargetIcon class="h-4 w-4" />
|
|
160
|
+
{:else}
|
|
161
|
+
<FileText class="h-4 w-4" />
|
|
162
|
+
{/if}
|
|
154
163
|
</div>
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
164
|
+
|
|
165
|
+
<!-- Title + status dot (clickable to open referenced document) -->
|
|
166
|
+
<button
|
|
167
|
+
class="flex min-w-0 flex-1 cursor-pointer items-center gap-2 text-left"
|
|
158
168
|
onclick={openReference}
|
|
159
|
-
|
|
160
|
-
title="Edit referenced document"
|
|
169
|
+
title="Open referenced document"
|
|
161
170
|
>
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
class="text-muted-foreground hover:text-destructive h-8 w-8 p-0"
|
|
177
|
-
title="Clear selection"
|
|
178
|
-
>
|
|
179
|
-
<XIcon class="h-4 w-4" />
|
|
180
|
-
</Button>
|
|
181
|
-
{/if}
|
|
182
|
-
</div>
|
|
183
|
-
{:else}
|
|
184
|
-
<!-- Search/select interface -->
|
|
185
|
-
{#if readonly}
|
|
186
|
-
<!-- Read-only state: show placeholder -->
|
|
187
|
-
<div
|
|
188
|
-
class="border-input bg-muted/50 flex h-10 w-full items-center justify-between rounded-md border px-3 py-2 text-sm"
|
|
189
|
-
>
|
|
190
|
-
<span class="text-muted-foreground">No reference selected</span>
|
|
191
|
-
</div>
|
|
192
|
-
{:else}
|
|
193
|
-
<Popover.Root bind:open>
|
|
194
|
-
<Popover.Trigger bind:ref={triggerRef}>
|
|
171
|
+
<span class="truncate text-sm">{getDocumentTitle(selectedDocument)}</span>
|
|
172
|
+
{#if selectedDocument.status === 'published'}
|
|
173
|
+
<span class="h-1.5 w-1.5 shrink-0 rounded-full bg-green-500" title="Published"></span>
|
|
174
|
+
{:else if selectedDocument.status === 'unpublished'}
|
|
175
|
+
<span class="bg-muted-foreground/60 h-1.5 w-1.5 shrink-0 rounded-full" title="Unpublished"
|
|
176
|
+
></span>
|
|
177
|
+
{:else}
|
|
178
|
+
<span class="h-1.5 w-1.5 shrink-0 rounded-full bg-amber-500" title="Draft"></span>
|
|
179
|
+
{/if}
|
|
180
|
+
</button>
|
|
181
|
+
|
|
182
|
+
<!-- Context menu -->
|
|
183
|
+
<DropdownMenu.Root>
|
|
184
|
+
<DropdownMenu.Trigger>
|
|
195
185
|
{#snippet child({ props })}
|
|
196
|
-
<
|
|
186
|
+
<button
|
|
197
187
|
{...props}
|
|
198
|
-
|
|
199
|
-
class="w-full justify-between"
|
|
200
|
-
role="combobox"
|
|
201
|
-
aria-expanded={open}
|
|
188
|
+
class="text-muted-foreground hover:text-foreground flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded transition-colors"
|
|
202
189
|
>
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
</Button>
|
|
190
|
+
<Ellipsis class="h-4 w-4" />
|
|
191
|
+
</button>
|
|
206
192
|
{/snippet}
|
|
207
|
-
</
|
|
208
|
-
<
|
|
209
|
-
<
|
|
210
|
-
<
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
193
|
+
</DropdownMenu.Trigger>
|
|
194
|
+
<DropdownMenu.Content align="end">
|
|
195
|
+
<DropdownMenu.Item onclick={openReference}>
|
|
196
|
+
<ExternalLink class="mr-2 h-4 w-4" />
|
|
197
|
+
Open
|
|
198
|
+
</DropdownMenu.Item>
|
|
199
|
+
{#if !readonly}
|
|
200
|
+
<DropdownMenu.Separator />
|
|
201
|
+
<DropdownMenu.Item
|
|
202
|
+
class="text-destructive focus:text-destructive"
|
|
203
|
+
onclick={clearSelection}
|
|
204
|
+
>
|
|
205
|
+
<Trash2 class="mr-2 h-4 w-4" />
|
|
206
|
+
Remove
|
|
207
|
+
</DropdownMenu.Item>
|
|
208
|
+
{/if}
|
|
209
|
+
</DropdownMenu.Content>
|
|
210
|
+
</DropdownMenu.Root>
|
|
211
|
+
</div>
|
|
212
|
+
{:else if readonly}
|
|
213
|
+
<!-- Read-only empty state -->
|
|
214
|
+
<div
|
|
215
|
+
class="border-border/50 bg-muted/30 flex items-center justify-center rounded border border-dashed p-6"
|
|
216
|
+
>
|
|
217
|
+
<p class="text-muted-foreground text-sm">No reference selected</p>
|
|
218
|
+
</div>
|
|
219
|
+
{:else}
|
|
220
|
+
<!-- Empty state: dashed "Add reference" button that opens a search popover -->
|
|
221
|
+
<Popover.Root bind:open>
|
|
222
|
+
<Popover.Trigger bind:ref={triggerRef}>
|
|
223
|
+
{#snippet child({ props })}
|
|
224
|
+
<button
|
|
225
|
+
{...props}
|
|
226
|
+
class="border-border/50 text-muted-foreground hover:text-foreground hover:bg-muted/50 flex h-10 w-full cursor-pointer items-center justify-center gap-2 rounded border border-dashed text-sm transition-colors"
|
|
227
|
+
role="combobox"
|
|
228
|
+
aria-expanded={open}
|
|
229
|
+
>
|
|
230
|
+
<PlusIcon class="h-4 w-4" />
|
|
231
|
+
Add {targetType || 'reference'}...
|
|
232
|
+
</button>
|
|
233
|
+
{/snippet}
|
|
234
|
+
</Popover.Trigger>
|
|
235
|
+
<Popover.Content class="!z-[9999] w-[400px] p-0">
|
|
236
|
+
<Command.Root>
|
|
237
|
+
<Command.List>
|
|
238
|
+
{#if loading}
|
|
239
|
+
<Command.Loading>Loading...</Command.Loading>
|
|
240
|
+
{:else if searchResults.length === 0}
|
|
241
|
+
<Command.Empty>
|
|
242
|
+
<div class="flex flex-col items-center gap-2 py-4">
|
|
243
|
+
<p class="text-muted-foreground text-sm">
|
|
244
|
+
No {pluralize(targetType || '')} found
|
|
245
|
+
</p>
|
|
246
|
+
<Button size="sm" onclick={createNewDocument} disabled={creating} class="gap-1">
|
|
247
|
+
<PlusIcon class="h-3 w-3" />
|
|
248
|
+
{creating ? 'Creating...' : `Create new ${targetType}`}
|
|
249
|
+
</Button>
|
|
250
|
+
</div>
|
|
251
|
+
</Command.Empty>
|
|
252
|
+
{:else}
|
|
253
|
+
<Command.Group>
|
|
254
|
+
{#each searchResults as doc (doc.id)}
|
|
255
|
+
<Command.Item
|
|
256
|
+
value={doc.id}
|
|
257
|
+
onSelect={() => selectDocument(doc)}
|
|
258
|
+
class="flex items-center justify-between"
|
|
259
|
+
>
|
|
260
|
+
<div class="flex min-w-0 flex-1 items-center gap-2">
|
|
261
|
+
<CheckIcon
|
|
262
|
+
class={cn('h-4 w-4 shrink-0', value !== doc.id && 'text-transparent')}
|
|
263
|
+
/>
|
|
264
|
+
<span class="truncate text-sm">{getDocumentTitle(doc)}</span>
|
|
252
265
|
</div>
|
|
266
|
+
{#if doc.status === 'published'}
|
|
267
|
+
<span class="h-1.5 w-1.5 shrink-0 rounded-full bg-green-500" title="Published"
|
|
268
|
+
></span>
|
|
269
|
+
{:else if doc.status === 'unpublished'}
|
|
270
|
+
<span
|
|
271
|
+
class="bg-muted-foreground/60 h-1.5 w-1.5 shrink-0 rounded-full"
|
|
272
|
+
title="Unpublished"
|
|
273
|
+
></span>
|
|
274
|
+
{:else}
|
|
275
|
+
<span class="h-1.5 w-1.5 shrink-0 rounded-full bg-amber-500" title="Draft"
|
|
276
|
+
></span>
|
|
277
|
+
{/if}
|
|
253
278
|
</Command.Item>
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
279
|
+
{/each}
|
|
280
|
+
</Command.Group>
|
|
281
|
+
<Command.Separator />
|
|
282
|
+
<Command.Group>
|
|
283
|
+
<Command.Item onSelect={createNewDocument} class="justify-center">
|
|
284
|
+
<div class="flex items-center gap-1">
|
|
285
|
+
<PlusIcon class="h-3 w-3" />
|
|
286
|
+
{creating ? 'Creating...' : `Create new ${targetType}`}
|
|
287
|
+
</div>
|
|
288
|
+
</Command.Item>
|
|
289
|
+
</Command.Group>
|
|
290
|
+
{/if}
|
|
291
|
+
</Command.List>
|
|
292
|
+
</Command.Root>
|
|
293
|
+
</Popover.Content>
|
|
294
|
+
</Popover.Root>
|
|
265
295
|
{/if}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReferenceField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ReferenceField.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAwC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ReferenceField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ReferenceField.svelte.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,KAAK,EAAwC,MAAM,wBAAwB,CAAC;AASzF,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAqQF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { Textarea } from '@aphexcms/ui/shadcn/textarea';
|
|
3
|
-
import type {
|
|
3
|
+
import type { TextField } from '../../../types/schemas';
|
|
4
4
|
|
|
5
5
|
interface Props {
|
|
6
|
-
field:
|
|
6
|
+
field: TextField;
|
|
7
7
|
value: any;
|
|
8
8
|
onUpdate: (value: any) => void;
|
|
9
9
|
validationClasses?: string;
|
|
@@ -32,9 +32,10 @@
|
|
|
32
32
|
id={field.name}
|
|
33
33
|
value={value || ''}
|
|
34
34
|
placeholder={field.title}
|
|
35
|
+
rows={field.rows}
|
|
35
36
|
oninput={handleInputChange}
|
|
36
37
|
onblur={onBlur}
|
|
37
38
|
onfocus={onFocus}
|
|
38
|
-
class="min-h-[100px] {validationClasses}"
|
|
39
|
+
class="{field.rows ? 'field-sizing-fixed' : 'min-h-[100px]'} {validationClasses}"
|
|
39
40
|
disabled={readonly}
|
|
40
41
|
/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextareaField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/TextareaField.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"TextareaField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/TextareaField.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGvD,UAAU,KAAK;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA0BF,QAAA,MAAM,aAAa,2CAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import { page } from '$app/state';
|
|
10
10
|
import type { SidebarData } from '../../types/sidebar';
|
|
11
11
|
import AppSidebar from './sidebar/AppSidebar.svelte';
|
|
12
|
+
import { usePermissions } from '../../permissions-context.svelte';
|
|
12
13
|
|
|
13
14
|
type Props = {
|
|
14
15
|
data: SidebarData;
|
|
@@ -38,15 +39,22 @@
|
|
|
38
39
|
|
|
39
40
|
// Only show tabs on the main /admin page
|
|
40
41
|
const showTabs = $derived(page.url.pathname === '/admin');
|
|
42
|
+
|
|
43
|
+
// Tab-level capability gates. Structure is always visible (it's the
|
|
44
|
+
// document list — a user without `document.read` won't be on /admin at
|
|
45
|
+
// all). Media needs asset.read; Vision is dev-only so we leave it to
|
|
46
|
+
// `enableGraphiQL` alone.
|
|
47
|
+
const perms = usePermissions();
|
|
48
|
+
const canSeeMedia = $derived(perms.can('asset.read'));
|
|
41
49
|
</script>
|
|
42
50
|
|
|
43
51
|
<ModeWatcher />
|
|
44
52
|
<Toaster />
|
|
45
53
|
<SidebarProvider class="h-screen">
|
|
46
54
|
<AppSidebar {data} {onSignOut} />
|
|
47
|
-
<SidebarInset class="flex h-full flex-col">
|
|
55
|
+
<SidebarInset class="flex h-full min-w-0 flex-col">
|
|
48
56
|
<header
|
|
49
|
-
class="flex h-16 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12"
|
|
57
|
+
class="border-rule flex h-16 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12"
|
|
50
58
|
>
|
|
51
59
|
<div class="flex w-full items-center px-4" class:justify-between={showTabs}>
|
|
52
60
|
<!-- Left: Trigger and Separator -->
|
|
@@ -78,20 +86,22 @@
|
|
|
78
86
|
Vision
|
|
79
87
|
</button>
|
|
80
88
|
{/if}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
+
{#if canSeeMedia}
|
|
90
|
+
<button
|
|
91
|
+
onclick={() => switchTab('media')}
|
|
92
|
+
class="{activeTab.value === 'media'
|
|
93
|
+
? 'bg-background text-foreground shadow'
|
|
94
|
+
: 'text-muted-foreground'} ring-offset-background focus-visible:ring-ring inline-flex items-center justify-center rounded-md px-3 py-1 text-sm font-medium whitespace-nowrap transition-all focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50"
|
|
95
|
+
>
|
|
96
|
+
Media
|
|
97
|
+
</button>
|
|
98
|
+
{/if}
|
|
89
99
|
</div>
|
|
90
100
|
{/if}
|
|
91
101
|
|
|
92
102
|
<!-- Right: Theme Toggle -->
|
|
93
103
|
<div class:ml-auto={!showTabs}>
|
|
94
|
-
<Button onclick={toggleMode} variant="outline" size="icon">
|
|
104
|
+
<Button onclick={toggleMode} variant="outline" size="icon" class="cursor-pointer">
|
|
95
105
|
<Sun
|
|
96
106
|
class="h-[1.2rem] w-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"
|
|
97
107
|
/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/Sidebar.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"Sidebar.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/layout/Sidebar.svelte.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKtD,KAAK,KAAK,GAAG;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,EAAE,GAAG,CAAC;IACd,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC;IACxD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,CAAC;AAmGH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/document.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/document.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,19 @@ import type { UserProfileAdapter } from './user.js';
|
|
|
4
4
|
import type { SchemaAdapter } from './schema.js';
|
|
5
5
|
import type { OrganizationAdapter } from './organization.js';
|
|
6
6
|
import type { InstanceAdapter } from './instance.js';
|
|
7
|
+
import type { RolesAdapter } from './role.js';
|
|
7
8
|
export type { DocumentAdapter, DocumentFilters, CreateDocumentData, UpdateDocumentData } from './document.js';
|
|
8
9
|
export type { AssetAdapter, CreateAssetData, UpdateAssetData } from './asset.js';
|
|
9
10
|
export type { UserProfileAdapter, NewUserProfileData } from './user.js';
|
|
10
11
|
export type { SchemaAdapter } from './schema.js';
|
|
11
12
|
export type { OrganizationAdapter } from './organization.js';
|
|
12
13
|
export type { InstanceAdapter, InstanceSettings } from './instance.js';
|
|
14
|
+
export type { RolesAdapter } from './role.js';
|
|
13
15
|
/**
|
|
14
16
|
* Combined database adapter interface
|
|
15
17
|
* Extends all entity-specific adapters for full database functionality
|
|
16
18
|
*/
|
|
17
|
-
export interface DatabaseAdapter extends DocumentAdapter, AssetAdapter, UserProfileAdapter, SchemaAdapter, OrganizationAdapter, InstanceAdapter {
|
|
19
|
+
export interface DatabaseAdapter extends DocumentAdapter, AssetAdapter, UserProfileAdapter, SchemaAdapter, OrganizationAdapter, InstanceAdapter, RolesAdapter {
|
|
18
20
|
connect?(): Promise<void>;
|
|
19
21
|
disconnect?(): Promise<void>;
|
|
20
22
|
isHealthy(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/db/interfaces/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export interface OrganizationAdapter {
|
|
|
9
9
|
addMember(data: NewOrganizationMember): Promise<OrganizationMember>;
|
|
10
10
|
removeMember(organizationId: string, userId: string): Promise<boolean>;
|
|
11
11
|
removeAllMembers(organizationId: string): Promise<boolean>;
|
|
12
|
-
updateMemberRole(organizationId: string, userId: string, role:
|
|
12
|
+
updateMemberRole(organizationId: string, userId: string, role: string): Promise<OrganizationMember | null>;
|
|
13
13
|
findUserMembership(userId: string, organizationId: string): Promise<OrganizationMember | null>;
|
|
14
14
|
findUserOrganizations(userId: string): Promise<OrganizationMembership[]>;
|
|
15
15
|
findOrganizationMembers(organizationId: string): Promise<OrganizationMember[]>;
|