@aphexcms/cms-core 0.1.13 → 0.1.14
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/cli/index.js +1 -1
- package/dist/components/AdminApp.svelte +43 -11
- package/dist/components/AdminApp.svelte.d.ts +5 -3
- package/dist/components/AdminApp.svelte.d.ts.map +1 -1
- package/dist/components/admin/fields/ImageField.svelte +22 -13
- package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
- package/dist/types/schemas.d.ts +5 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import pc from 'picocolors';
|
|
|
9
9
|
import { generateTypesFromConfig } from './generate-types.js';
|
|
10
10
|
const cli = cac('aphex');
|
|
11
11
|
// Version from package.json
|
|
12
|
-
const version = '0.1.
|
|
12
|
+
const version = '0.1.14';
|
|
13
13
|
// ASCII Art Banner
|
|
14
14
|
function printBanner() {
|
|
15
15
|
console.log(pc.cyan(`${pc.bold('⚡ Aphex CMS')}\n${pc.dim('A modern headless CMS')}`));
|
|
@@ -13,12 +13,13 @@
|
|
|
13
13
|
import DocumentEditor from './admin/DocumentEditor.svelte';
|
|
14
14
|
import type { DocumentType } from '../types/index';
|
|
15
15
|
import { documents } from '../api/index';
|
|
16
|
+
import { FileText } from 'lucide-svelte';
|
|
16
17
|
|
|
17
|
-
type InitDocumentType = Pick<DocumentType, 'name' | 'title' | 'description'>;
|
|
18
|
+
type InitDocumentType = Pick<DocumentType, 'name' | 'title' | 'description' | 'icon'>;
|
|
18
19
|
|
|
19
20
|
interface Props {
|
|
20
21
|
schemas: SchemaType[];
|
|
21
|
-
documentTypes:
|
|
22
|
+
documentTypes: Array<{ name: string; title: string; description?: string }>;
|
|
22
23
|
schemaError?: { message: string } | null;
|
|
23
24
|
title?: string;
|
|
24
25
|
graphqlSettings?: { endpoint: string; enableGraphiQL: boolean } | null;
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
|
|
30
31
|
let {
|
|
31
32
|
schemas,
|
|
32
|
-
documentTypes,
|
|
33
|
+
documentTypes: documentTypesFromServer,
|
|
33
34
|
schemaError = null,
|
|
34
35
|
title = 'Aphex CMS',
|
|
35
36
|
graphqlSettings = null,
|
|
@@ -38,7 +39,16 @@
|
|
|
38
39
|
handleTabChange = () => {}
|
|
39
40
|
}: Props = $props();
|
|
40
41
|
|
|
41
|
-
//
|
|
42
|
+
// Merge document types with schema icons (schemas have icons, server data doesn't)
|
|
43
|
+
const documentTypes = $derived(
|
|
44
|
+
documentTypesFromServer.map((docType) => {
|
|
45
|
+
const schema = schemas.find((s) => s.name === docType.name);
|
|
46
|
+
return {
|
|
47
|
+
...docType,
|
|
48
|
+
icon: schema?.icon
|
|
49
|
+
};
|
|
50
|
+
})
|
|
51
|
+
);
|
|
42
52
|
|
|
43
53
|
const hasDocumentTypes = $derived(documentTypes.length > 0);
|
|
44
54
|
|
|
@@ -733,7 +743,12 @@
|
|
|
733
743
|
>
|
|
734
744
|
<div class="flex items-center gap-3">
|
|
735
745
|
<div class="flex h-6 w-6 items-center justify-center">
|
|
736
|
-
|
|
746
|
+
{#if docType.icon}
|
|
747
|
+
{@const Icon = docType.icon}
|
|
748
|
+
<Icon class="text-muted-foreground h-4 w-4" />
|
|
749
|
+
{:else}
|
|
750
|
+
<FileText class="text-muted-foreground h-4 w-4" />
|
|
751
|
+
{/if}
|
|
737
752
|
</div>
|
|
738
753
|
<div>
|
|
739
754
|
<h3 class="text-sm font-medium">{docType.title}s</h3>
|
|
@@ -766,7 +781,7 @@
|
|
|
766
781
|
<div
|
|
767
782
|
class="bg-muted/50 mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full"
|
|
768
783
|
>
|
|
769
|
-
<
|
|
784
|
+
<FileText class="text-muted-foreground h-8 w-8" />
|
|
770
785
|
</div>
|
|
771
786
|
<h3 class="mb-2 font-medium">No content types found</h3>
|
|
772
787
|
<p class="text-muted-foreground mb-4 text-sm">
|
|
@@ -809,19 +824,26 @@
|
|
|
809
824
|
</div>
|
|
810
825
|
</button>
|
|
811
826
|
{:else}
|
|
827
|
+
{@const currentDocType = documentTypes.find(
|
|
828
|
+
(t) => t.name === selectedDocumentType
|
|
829
|
+
)}
|
|
812
830
|
<div class="border-border bg-muted/20 border-b p-3">
|
|
813
831
|
<div class="flex items-center justify-between">
|
|
814
832
|
<div class="flex items-center gap-3">
|
|
815
833
|
{#if windowWidth > 620}
|
|
816
834
|
<!-- Desktop: Icon -->
|
|
817
835
|
<div class="flex h-6 w-6 items-center justify-center">
|
|
818
|
-
|
|
836
|
+
{#if currentDocType?.icon}
|
|
837
|
+
{@const Icon = currentDocType.icon}
|
|
838
|
+
<Icon class="text-muted-foreground h-4 w-4" />
|
|
839
|
+
{:else}
|
|
840
|
+
<FileText class="text-muted-foreground h-4 w-4" />
|
|
841
|
+
{/if}
|
|
819
842
|
</div>
|
|
820
843
|
{/if}
|
|
821
844
|
<div>
|
|
822
845
|
<h3 class="text-sm font-medium">
|
|
823
|
-
{(
|
|
824
|
-
selectedDocumentType) + 's'}
|
|
846
|
+
{(currentDocType?.title || selectedDocumentType) + 's'}
|
|
825
847
|
</h3>
|
|
826
848
|
<p class="text-muted-foreground text-xs">
|
|
827
849
|
{documentsList.length} document{documentsList.length !== 1 ? 's' : ''}
|
|
@@ -873,7 +895,12 @@
|
|
|
873
895
|
>
|
|
874
896
|
<div class="flex min-w-0 flex-1 items-center gap-3">
|
|
875
897
|
<div class="flex h-6 w-6 items-center justify-center">
|
|
876
|
-
|
|
898
|
+
{#if currentDocType?.icon}
|
|
899
|
+
{@const Icon = currentDocType.icon}
|
|
900
|
+
<Icon class="text-muted-foreground h-4 w-4" />
|
|
901
|
+
{:else}
|
|
902
|
+
<FileText class="text-muted-foreground h-4 w-4" />
|
|
903
|
+
{/if}
|
|
877
904
|
</div>
|
|
878
905
|
<div class="min-w-0 flex-1">
|
|
879
906
|
<h3 class="truncate text-sm font-medium">{doc.title}</h3>
|
|
@@ -898,7 +925,12 @@
|
|
|
898
925
|
<div
|
|
899
926
|
class="bg-muted/50 mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full"
|
|
900
927
|
>
|
|
901
|
-
|
|
928
|
+
{#if currentDocType?.icon}
|
|
929
|
+
{@const Icon = currentDocType.icon}
|
|
930
|
+
<Icon class="text-muted-foreground h-8 w-8" />
|
|
931
|
+
{:else}
|
|
932
|
+
<FileText class="text-muted-foreground h-8 w-8" />
|
|
933
|
+
{/if}
|
|
902
934
|
</div>
|
|
903
935
|
<h3 class="mb-2 font-medium">No documents found</h3>
|
|
904
936
|
<p class="text-muted-foreground text-sm">
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { SchemaType } from '../types/index.js';
|
|
2
|
-
import type { DocumentType } from '../types/index.js';
|
|
3
|
-
type InitDocumentType = Pick<DocumentType, 'name' | 'title' | 'description'>;
|
|
4
2
|
interface Props {
|
|
5
3
|
schemas: SchemaType[];
|
|
6
|
-
documentTypes:
|
|
4
|
+
documentTypes: Array<{
|
|
5
|
+
name: string;
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}>;
|
|
7
9
|
schemaError?: {
|
|
8
10
|
message: string;
|
|
9
11
|
} | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminApp.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/AdminApp.svelte.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"AdminApp.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/AdminApp.svelte.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAShD,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,CAAA;KAAE,CAAC;IAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAm8BF,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
|
|
@@ -131,28 +131,37 @@
|
|
|
131
131
|
// Asset data state
|
|
132
132
|
let assetData = $state<any>(null);
|
|
133
133
|
let loadingAsset = $state(false);
|
|
134
|
+
let lastAssetId = $state<string | null>(null);
|
|
134
135
|
|
|
135
136
|
// Fetch asset details when asset reference changes
|
|
136
137
|
$effect(() => {
|
|
137
138
|
async function loadAsset() {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
139
|
+
const assetId = value?.asset?._ref || null;
|
|
140
|
+
|
|
141
|
+
// Only fetch if asset ID has actually changed
|
|
142
|
+
if (assetId !== lastAssetId) {
|
|
143
|
+
lastAssetId = assetId;
|
|
144
|
+
|
|
145
|
+
if (assetId) {
|
|
146
|
+
loadingAsset = true;
|
|
147
|
+
try {
|
|
148
|
+
const result = await assets.getById(assetId);
|
|
149
|
+
if (result.success) {
|
|
150
|
+
assetData = result.data;
|
|
151
|
+
} else {
|
|
152
|
+
console.error('Failed to fetch asset details');
|
|
153
|
+
assetData = null;
|
|
154
|
+
}
|
|
155
|
+
} catch (error) {
|
|
156
|
+
console.error('Error fetching asset:', error);
|
|
146
157
|
assetData = null;
|
|
158
|
+
} finally {
|
|
159
|
+
loadingAsset = false;
|
|
147
160
|
}
|
|
148
|
-
}
|
|
149
|
-
console.error('Error fetching asset:', error);
|
|
161
|
+
} else {
|
|
150
162
|
assetData = null;
|
|
151
|
-
} finally {
|
|
152
163
|
loadingAsset = false;
|
|
153
164
|
}
|
|
154
|
-
} else {
|
|
155
|
-
assetData = null;
|
|
156
165
|
}
|
|
157
166
|
}
|
|
158
167
|
loadAsset();
|
|
@@ -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;AAY1E,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;CACnB;
|
|
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;AAY1E,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;CACnB;AAyQF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
|
package/dist/types/schemas.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Rule } from '../field-validation/rule.js';
|
|
2
|
+
import type { Icon as LucideIcon } from 'lucide-svelte';
|
|
2
3
|
export type FieldType = 'string' | 'text' | 'number' | 'boolean' | 'slug' | 'image' | 'array' | 'object' | 'reference';
|
|
3
4
|
export interface BaseField {
|
|
4
5
|
name: string;
|
|
@@ -73,6 +74,7 @@ export interface DocumentType {
|
|
|
73
74
|
name: string;
|
|
74
75
|
title: string;
|
|
75
76
|
description?: string;
|
|
77
|
+
icon?: typeof LucideIcon;
|
|
76
78
|
fields: Field[];
|
|
77
79
|
preview?: PreviewConfig;
|
|
78
80
|
createdAt: Date | null;
|
|
@@ -83,6 +85,7 @@ export interface ObjectType {
|
|
|
83
85
|
name: string;
|
|
84
86
|
title: string;
|
|
85
87
|
description?: string;
|
|
88
|
+
icon?: typeof LucideIcon;
|
|
86
89
|
fields: Field[];
|
|
87
90
|
preview?: PreviewConfig;
|
|
88
91
|
}
|
|
@@ -95,6 +98,7 @@ export interface SchemaType {
|
|
|
95
98
|
name: string;
|
|
96
99
|
title: string;
|
|
97
100
|
description?: string;
|
|
101
|
+
icon?: typeof LucideIcon;
|
|
98
102
|
fields: Field[];
|
|
99
103
|
preview?: PreviewConfig;
|
|
100
104
|
createdAt?: Date | null;
|
|
@@ -106,6 +110,7 @@ export interface NewSchemaType {
|
|
|
106
110
|
name: string;
|
|
107
111
|
title: string;
|
|
108
112
|
description?: string;
|
|
113
|
+
icon?: typeof LucideIcon;
|
|
109
114
|
fields: Field[];
|
|
110
115
|
preview?: PreviewConfig;
|
|
111
116
|
createdAt?: Date | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/lib/types/schemas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/lib/types/schemas.ts"],"names":[],"mappings":"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"}
|