@aphexcms/cms-core 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/api/assets.d.ts +48 -0
  2. package/dist/api/assets.d.ts.map +1 -0
  3. package/dist/api/assets.js +52 -0
  4. package/dist/api/client.d.ts +37 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +125 -0
  7. package/dist/api/documents.d.ts +56 -0
  8. package/dist/api/documents.d.ts.map +1 -0
  9. package/dist/api/documents.js +77 -0
  10. package/dist/api/index.d.ts +7 -0
  11. package/dist/api/index.d.ts.map +1 -0
  12. package/dist/api/index.js +5 -0
  13. package/dist/api/organizations.d.ts +101 -0
  14. package/dist/api/organizations.d.ts.map +1 -0
  15. package/dist/api/organizations.js +92 -0
  16. package/dist/api/types.d.ts +23 -0
  17. package/dist/api/types.d.ts.map +1 -0
  18. package/dist/api/types.js +1 -0
  19. package/dist/app.d.ts +19 -0
  20. package/dist/auth/MULTI_TENANCY_PLAN.md +1183 -0
  21. package/dist/auth/auth-errors.d.ts +7 -0
  22. package/dist/auth/auth-errors.d.ts.map +1 -0
  23. package/dist/auth/auth-errors.js +13 -0
  24. package/dist/auth/auth-hooks.d.ts +6 -0
  25. package/dist/auth/auth-hooks.d.ts.map +1 -0
  26. package/dist/auth/auth-hooks.js +108 -0
  27. package/dist/auth/provider.d.ts +17 -0
  28. package/dist/auth/provider.d.ts.map +1 -0
  29. package/dist/auth/provider.js +1 -0
  30. package/dist/client/index.d.ts +24 -0
  31. package/dist/client/index.d.ts.map +1 -0
  32. package/dist/client/index.js +31 -0
  33. package/dist/components/AdminApp.svelte +1077 -0
  34. package/dist/components/AdminApp.svelte.d.ts +24 -0
  35. package/dist/components/AdminApp.svelte.d.ts.map +1 -0
  36. package/dist/components/admin/AdminLayout.svelte +115 -0
  37. package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
  38. package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
  39. package/dist/components/admin/DocumentEditor.svelte +795 -0
  40. package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
  41. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
  42. package/dist/components/admin/DocumentTypesList.svelte +97 -0
  43. package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
  44. package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
  45. package/dist/components/admin/ObjectModal.svelte +135 -0
  46. package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
  47. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
  48. package/dist/components/admin/SchemaField.svelte +171 -0
  49. package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
  50. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
  51. package/dist/components/admin/fields/ArrayField.svelte +266 -0
  52. package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
  53. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
  54. package/dist/components/admin/fields/BooleanField.svelte +35 -0
  55. package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
  56. package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
  57. package/dist/components/admin/fields/ImageField.svelte +284 -0
  58. package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
  59. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
  60. package/dist/components/admin/fields/NumberField.svelte +82 -0
  61. package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
  62. package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
  63. package/dist/components/admin/fields/ReferenceField.svelte +260 -0
  64. package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
  65. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
  66. package/dist/components/admin/fields/SlugField.svelte +74 -0
  67. package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
  68. package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
  69. package/dist/components/admin/fields/StringField.svelte +40 -0
  70. package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
  71. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
  72. package/dist/components/admin/fields/TextareaField.svelte +40 -0
  73. package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
  74. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
  75. package/dist/components/fields/index.d.ts +9 -0
  76. package/dist/components/fields/index.d.ts.map +1 -0
  77. package/dist/components/fields/index.js +9 -0
  78. package/dist/components/index.d.ts +7 -0
  79. package/dist/components/index.d.ts.map +1 -0
  80. package/dist/components/index.js +12 -0
  81. package/dist/components/layout/OrganizationSwitcher.svelte +218 -0
  82. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
  83. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
  84. package/dist/components/layout/Sidebar.svelte +88 -0
  85. package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
  86. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
  87. package/dist/components/layout/sidebar/AppSidebar.svelte +63 -0
  88. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +11 -0
  89. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
  90. package/dist/components/layout/sidebar/NavMain.svelte +95 -0
  91. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
  92. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
  93. package/dist/components/layout/sidebar/NavSecondary.svelte +69 -0
  94. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
  95. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
  96. package/dist/components/layout/sidebar/NavUser.svelte +85 -0
  97. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
  98. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
  99. package/dist/config.d.ts +3 -0
  100. package/dist/config.d.ts.map +1 -0
  101. package/dist/config.js +15 -0
  102. package/dist/db/adapters/index.d.ts +1 -0
  103. package/dist/db/adapters/index.d.ts.map +1 -0
  104. package/dist/db/adapters/index.js +4 -0
  105. package/dist/db/index.d.ts +2 -0
  106. package/dist/db/index.d.ts.map +1 -0
  107. package/dist/db/index.js +4 -0
  108. package/dist/db/interfaces/asset.d.ts +51 -0
  109. package/dist/db/interfaces/asset.d.ts.map +1 -0
  110. package/dist/db/interfaces/asset.js +1 -0
  111. package/dist/db/interfaces/document.d.ts +36 -0
  112. package/dist/db/interfaces/document.d.ts.map +1 -0
  113. package/dist/db/interfaces/document.js +1 -0
  114. package/dist/db/interfaces/index.d.ts +73 -0
  115. package/dist/db/interfaces/index.d.ts.map +1 -0
  116. package/dist/db/interfaces/index.js +1 -0
  117. package/dist/db/interfaces/organization.d.ts +27 -0
  118. package/dist/db/interfaces/organization.d.ts.map +1 -0
  119. package/dist/db/interfaces/organization.js +1 -0
  120. package/dist/db/interfaces/schema.d.ts +21 -0
  121. package/dist/db/interfaces/schema.d.ts.map +1 -0
  122. package/dist/db/interfaces/schema.js +1 -0
  123. package/dist/db/interfaces/user.d.ts +15 -0
  124. package/dist/db/interfaces/user.d.ts.map +1 -0
  125. package/dist/db/interfaces/user.js +1 -0
  126. package/dist/db/utils/reference-resolver.d.ts +18 -0
  127. package/dist/db/utils/reference-resolver.d.ts.map +1 -0
  128. package/dist/db/utils/reference-resolver.js +80 -0
  129. package/dist/define.d.ts +3 -0
  130. package/dist/define.d.ts.map +1 -0
  131. package/dist/define.js +4 -0
  132. package/dist/email/index.d.ts +2 -0
  133. package/dist/email/index.d.ts.map +1 -0
  134. package/dist/email/index.js +4 -0
  135. package/dist/email/interfaces/email.d.ts +42 -0
  136. package/dist/email/interfaces/email.d.ts.map +1 -0
  137. package/dist/email/interfaces/email.js +1 -0
  138. package/dist/engine.d.ts +26 -0
  139. package/dist/engine.d.ts.map +1 -0
  140. package/dist/engine.js +66 -0
  141. package/dist/field-validation/rule.d.ts +51 -0
  142. package/dist/field-validation/rule.d.ts.map +1 -0
  143. package/dist/field-validation/rule.js +221 -0
  144. package/dist/field-validation/utils.d.ts +21 -0
  145. package/dist/field-validation/utils.d.ts.map +1 -0
  146. package/dist/field-validation/utils.js +66 -0
  147. package/dist/hooks.d.ts +23 -0
  148. package/dist/hooks.d.ts.map +1 -0
  149. package/dist/hooks.js +96 -0
  150. package/dist/index.d.ts +2 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +4 -0
  153. package/dist/plugins/README.md +154 -0
  154. package/dist/routes/assets-by-id.d.ts +5 -0
  155. package/dist/routes/assets-by-id.d.ts.map +1 -0
  156. package/dist/routes/assets-by-id.js +138 -0
  157. package/dist/routes/assets-cdn.d.ts +3 -0
  158. package/dist/routes/assets-cdn.d.ts.map +1 -0
  159. package/dist/routes/assets-cdn.js +155 -0
  160. package/dist/routes/assets.d.ts +4 -0
  161. package/dist/routes/assets.d.ts.map +1 -0
  162. package/dist/routes/assets.js +94 -0
  163. package/dist/routes/documents-by-id.d.ts +5 -0
  164. package/dist/routes/documents-by-id.d.ts.map +1 -0
  165. package/dist/routes/documents-by-id.js +142 -0
  166. package/dist/routes/documents-publish.d.ts +4 -0
  167. package/dist/routes/documents-publish.d.ts.map +1 -0
  168. package/dist/routes/documents-publish.js +151 -0
  169. package/dist/routes/documents.d.ts +4 -0
  170. package/dist/routes/documents.d.ts.map +1 -0
  171. package/dist/routes/documents.js +131 -0
  172. package/dist/routes/index.d.ts +6 -0
  173. package/dist/routes/index.d.ts.map +1 -0
  174. package/dist/routes/index.js +10 -0
  175. package/dist/routes/organizations-by-id.d.ts +5 -0
  176. package/dist/routes/organizations-by-id.d.ts.map +1 -0
  177. package/dist/routes/organizations-by-id.js +187 -0
  178. package/dist/routes/organizations-invitations.d.ts +4 -0
  179. package/dist/routes/organizations-invitations.d.ts.map +1 -0
  180. package/dist/routes/organizations-invitations.js +125 -0
  181. package/dist/routes/organizations-members.d.ts +5 -0
  182. package/dist/routes/organizations-members.d.ts.map +1 -0
  183. package/dist/routes/organizations-members.js +206 -0
  184. package/dist/routes/organizations-switch.d.ts +3 -0
  185. package/dist/routes/organizations-switch.d.ts.map +1 -0
  186. package/dist/routes/organizations-switch.js +53 -0
  187. package/dist/routes/organizations.d.ts +4 -0
  188. package/dist/routes/organizations.d.ts.map +1 -0
  189. package/dist/routes/organizations.js +108 -0
  190. package/dist/routes/schemas-by-type.d.ts +3 -0
  191. package/dist/routes/schemas-by-type.d.ts.map +1 -0
  192. package/dist/routes/schemas-by-type.js +25 -0
  193. package/dist/routes/schemas.d.ts +3 -0
  194. package/dist/routes/schemas.d.ts.map +1 -0
  195. package/dist/routes/schemas.js +11 -0
  196. package/dist/routes-exports.d.ts +14 -0
  197. package/dist/routes-exports.d.ts.map +1 -0
  198. package/dist/routes-exports.js +19 -0
  199. package/dist/schema-context.svelte.d.ts +10 -0
  200. package/dist/schema-context.svelte.d.ts.map +1 -0
  201. package/dist/schema-context.svelte.js +18 -0
  202. package/dist/schema-utils/cleanup.d.ts +21 -0
  203. package/dist/schema-utils/cleanup.d.ts.map +1 -0
  204. package/dist/schema-utils/cleanup.js +80 -0
  205. package/dist/schema-utils/index.d.ts +4 -0
  206. package/dist/schema-utils/index.d.ts.map +1 -0
  207. package/dist/schema-utils/index.js +4 -0
  208. package/dist/schema-utils/utils.d.ts +30 -0
  209. package/dist/schema-utils/utils.d.ts.map +1 -0
  210. package/dist/schema-utils/utils.js +37 -0
  211. package/dist/schema-utils/validator.d.ts +6 -0
  212. package/dist/schema-utils/validator.d.ts.map +1 -0
  213. package/dist/schema-utils/validator.js +45 -0
  214. package/dist/server/index.d.ts +16 -0
  215. package/dist/server/index.d.ts.map +1 -0
  216. package/dist/server/index.js +28 -0
  217. package/dist/services/asset-service.d.ts +86 -0
  218. package/dist/services/asset-service.d.ts.map +1 -0
  219. package/dist/services/asset-service.js +187 -0
  220. package/dist/services/index.d.ts +3 -0
  221. package/dist/services/index.d.ts.map +1 -0
  222. package/dist/services/index.js +4 -0
  223. package/dist/storage/adapters/index.d.ts +2 -0
  224. package/dist/storage/adapters/index.d.ts.map +1 -0
  225. package/dist/storage/adapters/index.js +2 -0
  226. package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
  227. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  228. package/dist/storage/adapters/local-storage-adapter.js +187 -0
  229. package/dist/storage/index.d.ts +3 -0
  230. package/dist/storage/index.d.ts.map +1 -0
  231. package/dist/storage/index.js +6 -0
  232. package/dist/storage/interfaces/index.d.ts +2 -0
  233. package/dist/storage/interfaces/index.d.ts.map +1 -0
  234. package/dist/storage/interfaces/index.js +2 -0
  235. package/dist/storage/interfaces/storage.d.ts +91 -0
  236. package/dist/storage/interfaces/storage.d.ts.map +1 -0
  237. package/dist/storage/interfaces/storage.js +1 -0
  238. package/dist/storage/providers/storage.d.ts +43 -0
  239. package/dist/storage/providers/storage.d.ts.map +1 -0
  240. package/dist/storage/providers/storage.js +64 -0
  241. package/dist/types/asset.d.ts +73 -0
  242. package/dist/types/asset.d.ts.map +1 -0
  243. package/dist/types/asset.js +2 -0
  244. package/dist/types/auth.d.ts +50 -0
  245. package/dist/types/auth.d.ts.map +1 -0
  246. package/dist/types/auth.js +41 -0
  247. package/dist/types/config.d.ts +47 -0
  248. package/dist/types/config.d.ts.map +1 -0
  249. package/dist/types/config.js +1 -0
  250. package/dist/types/document.d.ts +34 -0
  251. package/dist/types/document.d.ts.map +1 -0
  252. package/dist/types/document.js +1 -0
  253. package/dist/types/index.d.ts +9 -0
  254. package/dist/types/index.d.ts.map +1 -0
  255. package/dist/types/index.js +8 -0
  256. package/dist/types/organization.d.ts +105 -0
  257. package/dist/types/organization.d.ts.map +1 -0
  258. package/dist/types/organization.js +3 -0
  259. package/dist/types/schemas.d.ts +114 -0
  260. package/dist/types/schemas.d.ts.map +1 -0
  261. package/dist/types/schemas.js +1 -0
  262. package/dist/types/sidebar.d.ts +33 -0
  263. package/dist/types/sidebar.d.ts.map +1 -0
  264. package/dist/types/sidebar.js +1 -0
  265. package/dist/types/user.d.ts +14 -0
  266. package/dist/types/user.d.ts.map +1 -0
  267. package/dist/types/user.js +1 -0
  268. package/dist/utils/content-hash.d.ts +22 -0
  269. package/dist/utils/content-hash.d.ts.map +1 -0
  270. package/dist/utils/content-hash.js +67 -0
  271. package/dist/utils/image-url.d.ts +88 -0
  272. package/dist/utils/image-url.d.ts.map +1 -0
  273. package/dist/utils/image-url.js +165 -0
  274. package/dist/utils/index.d.ts +6 -0
  275. package/dist/utils/index.d.ts.map +1 -0
  276. package/dist/utils/index.js +9 -0
  277. package/dist/utils/slug.d.ts +13 -0
  278. package/dist/utils/slug.d.ts.map +1 -0
  279. package/dist/utils/slug.js +30 -0
  280. package/package.json +11 -41
@@ -0,0 +1,82 @@
1
+ <script lang="ts">
2
+ import { Input } from '@aphexcms/ui/shadcn/input';
3
+ import type { Field } from '../../../types/schemas.js';
4
+
5
+ interface Props {
6
+ field: Field;
7
+ value: number | null;
8
+ onUpdate: (value: number | null) => void;
9
+ validationClasses?: string;
10
+ onBlur?: (event: any) => void;
11
+ onFocus?: (event: any) => void;
12
+ readonly?: boolean;
13
+ }
14
+
15
+ let {
16
+ field,
17
+ value,
18
+ onUpdate,
19
+ validationClasses,
20
+ onBlur,
21
+ onFocus,
22
+ readonly = false
23
+ }: Props = $props();
24
+
25
+ // Convert value to string for input, handle null/undefined
26
+ let inputValue = $derived(value?.toString() || '');
27
+
28
+ function handleInput(event: Event) {
29
+ const target = event.target as HTMLInputElement;
30
+ const newValue = target.value;
31
+
32
+ // Convert to number and update
33
+ if (newValue === '') {
34
+ onUpdate(null);
35
+ } else {
36
+ const numValue = parseFloat(newValue);
37
+ if (!isNaN(numValue)) {
38
+ onUpdate(numValue);
39
+ }
40
+ }
41
+ }
42
+
43
+ function handleKeydown(event: KeyboardEvent) {
44
+ // Allow: backspace, delete, tab, escape, enter
45
+ if (
46
+ [8, 9, 27, 13, 46].includes(event.keyCode) ||
47
+ // Allow: Ctrl+A, Ctrl+C, Ctrl+V, Ctrl+X
48
+ (event.keyCode === 65 && event.ctrlKey) ||
49
+ (event.keyCode === 67 && event.ctrlKey) ||
50
+ (event.keyCode === 86 && event.ctrlKey) ||
51
+ (event.keyCode === 88 && event.ctrlKey) ||
52
+ // Allow: home, end, left, right
53
+ (event.keyCode >= 35 && event.keyCode <= 39)
54
+ ) {
55
+ return;
56
+ }
57
+
58
+ // Ensure that it's a number or decimal point and stop the keypress
59
+ if (
60
+ (event.shiftKey || event.keyCode < 48 || event.keyCode > 57) &&
61
+ (event.keyCode < 96 || event.keyCode > 105) &&
62
+ event.keyCode !== 190 &&
63
+ event.keyCode !== 110
64
+ ) {
65
+ event.preventDefault();
66
+ }
67
+ }
68
+ </script>
69
+
70
+ <Input
71
+ id={field.name}
72
+ type="number"
73
+ step="any"
74
+ placeholder={field.description || `Enter ${field.title?.toLowerCase() || 'number'}`}
75
+ value={inputValue}
76
+ oninput={handleInput}
77
+ onkeydown={handleKeydown}
78
+ onblur={onBlur}
79
+ onfocus={onFocus}
80
+ class={validationClasses}
81
+ disabled={readonly}
82
+ />
@@ -0,0 +1,14 @@
1
+ import type { Field } from '../../../types/schemas.js';
2
+ interface Props {
3
+ field: Field;
4
+ value: number | null;
5
+ onUpdate: (value: number | null) => void;
6
+ validationClasses?: string;
7
+ onBlur?: (event: any) => void;
8
+ onFocus?: (event: any) => void;
9
+ readonly?: boolean;
10
+ }
11
+ declare const NumberField: import("svelte").Component<Props, {}, "">;
12
+ type NumberField = ReturnType<typeof NumberField>;
13
+ export default NumberField;
14
+ //# sourceMappingURL=NumberField.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/NumberField.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGtD,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,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;AAiEF,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,260 @@
1
+ <script lang="ts">
2
+ import CheckIcon from '@lucide/svelte/icons/check';
3
+ import ChevronsUpDownIcon from '@lucide/svelte/icons/chevrons-up-down';
4
+ import PlusIcon from '@lucide/svelte/icons/plus';
5
+ import XIcon from '@lucide/svelte/icons/x';
6
+ import { tick } from 'svelte';
7
+ import * as Command from '@aphexcms/ui/shadcn/command';
8
+ import * as Popover from '@aphexcms/ui/shadcn/popover';
9
+ import { Button } from '@aphexcms/ui/shadcn/button';
10
+ import { cn } from '@aphexcms/ui/utils';
11
+ import type { Field, ReferenceField as ReferenceFieldType } from '../../../types/schemas.js';
12
+ import { documents } from '../../../api/documents.js';
13
+
14
+ interface Props {
15
+ field: Field;
16
+ value: string | null; // Document ID
17
+ onUpdate: (value: string | null) => void;
18
+ onOpenReference?: (documentId: string, documentType: string) => void;
19
+ readonly?: boolean;
20
+ }
21
+
22
+ let { field, value, onUpdate, onOpenReference, readonly = false }: Props = $props();
23
+
24
+ // Cast to reference field type
25
+ const referenceField = field as ReferenceFieldType;
26
+ const targetType = referenceField.to?.[0]?.type;
27
+
28
+ // State
29
+ let open = $state(false);
30
+ let searchResults = $state<any[]>([]);
31
+ let selectedDocument = $state<any>(null);
32
+ let loading = $state(false);
33
+ let creating = $state(false);
34
+ let triggerRef = $state<HTMLButtonElement>(null!);
35
+
36
+ // Load selected document details when value changes
37
+ $effect(() => {
38
+ async function loadDocument() {
39
+ if (value) {
40
+ try {
41
+ const doc = await documents.getById(value);
42
+ if (doc.success) {
43
+ selectedDocument = doc.data;
44
+ }
45
+ } catch (err) {
46
+ console.error('Failed to load referenced document:', err);
47
+ selectedDocument = null;
48
+ }
49
+ } else {
50
+ selectedDocument = null;
51
+ }
52
+ }
53
+ loadDocument();
54
+ });
55
+
56
+ // Load documents when dropdown opens
57
+ $effect(() => {
58
+ async function loadDocuments() {
59
+ if (open && targetType) {
60
+ console.log('[ReferenceField] Opening select box, loading documents for type:', targetType);
61
+ loading = true;
62
+ try {
63
+ const result = await documents.list({
64
+ docType: targetType,
65
+ limit: 10
66
+ });
67
+ console.log('[ReferenceField] Documents loaded:', result);
68
+ if (result.success && result.data) {
69
+ searchResults = result.data;
70
+ console.log('[ReferenceField] Search results:', searchResults.length, 'documents');
71
+ }
72
+ } catch (err) {
73
+ console.error('[ReferenceField] Failed to load documents:', err);
74
+ searchResults = [];
75
+ } finally {
76
+ loading = false;
77
+ }
78
+ }
79
+ }
80
+ loadDocuments();
81
+ });
82
+
83
+ function closeAndFocusTrigger() {
84
+ open = false;
85
+ tick().then(() => {
86
+ triggerRef?.focus();
87
+ });
88
+ }
89
+
90
+ function selectDocument(doc: any) {
91
+ if (readonly) return;
92
+ onUpdate(doc.id);
93
+ closeAndFocusTrigger();
94
+ }
95
+
96
+ function clearSelection() {
97
+ if (readonly) return;
98
+ onUpdate(null);
99
+ selectedDocument = null;
100
+ }
101
+
102
+ function openReference() {
103
+ if (selectedDocument && targetType && onOpenReference) {
104
+ onOpenReference(selectedDocument.id, targetType);
105
+ }
106
+ }
107
+
108
+ async function createNewDocument() {
109
+ if (readonly || !targetType) return;
110
+
111
+ creating = true;
112
+ try {
113
+ const result = await documents.create({
114
+ type: targetType,
115
+ draftData: {
116
+ title: 'Untitled'
117
+ }
118
+ });
119
+
120
+ if (result.success && result.data) {
121
+ onUpdate(result.data.id);
122
+ closeAndFocusTrigger();
123
+ }
124
+ } catch (err) {
125
+ console.error('Failed to create document:', err);
126
+ } finally {
127
+ creating = false;
128
+ }
129
+ }
130
+
131
+ function getDocumentTitle(doc: any): string {
132
+ // Try to get title from draft data first, then published data
133
+ const data = doc.draftData || doc.publishedData || {};
134
+ return data.title || data.name || data.heading || 'Untitled';
135
+ }
136
+
137
+ const selectedLabel = $derived(selectedDocument ? getDocumentTitle(selectedDocument) : null);
138
+ </script>
139
+
140
+ {#if selectedDocument}
141
+ <!-- Selected document display -->
142
+ <div class="border-border bg-muted/30 flex items-center gap-2 rounded-md border p-3">
143
+ <div class="flex-1">
144
+ <div class="text-sm font-medium">{getDocumentTitle(selectedDocument)}</div>
145
+ <div class="text-muted-foreground text-xs">
146
+ {targetType} • {selectedDocument.status === 'published' ? '🟢' : '🟡'}
147
+ {selectedDocument.status}
148
+ </div>
149
+ </div>
150
+ <Button
151
+ variant="ghost"
152
+ size="sm"
153
+ onclick={openReference}
154
+ class="text-muted-foreground hover:text-foreground h-8 w-8 p-0"
155
+ title="Edit referenced document"
156
+ >
157
+ <svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke="currentColor">
158
+ <path
159
+ stroke-linecap="round"
160
+ stroke-linejoin="round"
161
+ stroke-width="2"
162
+ d="M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
163
+ />
164
+ </svg>
165
+ </Button>
166
+ {#if !readonly}
167
+ <Button
168
+ variant="ghost"
169
+ size="sm"
170
+ onclick={clearSelection}
171
+ class="text-muted-foreground hover:text-destructive h-8 w-8 p-0"
172
+ title="Clear selection"
173
+ >
174
+ <XIcon class="h-4 w-4" />
175
+ </Button>
176
+ {/if}
177
+ </div>
178
+ {:else}
179
+ <!-- Search/select interface -->
180
+ {#if readonly}
181
+ <!-- Read-only state: show placeholder -->
182
+ <div
183
+ class="border-input bg-muted/50 flex h-10 w-full items-center justify-between rounded-md border px-3 py-2 text-sm"
184
+ >
185
+ <span class="text-muted-foreground">No reference selected</span>
186
+ </div>
187
+ {:else}
188
+ <Popover.Root bind:open>
189
+ <Popover.Trigger bind:ref={triggerRef}>
190
+ {#snippet child({ props })}
191
+ <Button
192
+ {...props}
193
+ variant="outline"
194
+ class="w-full justify-between"
195
+ role="combobox"
196
+ aria-expanded={open}
197
+ >
198
+ {selectedLabel || `Select ${targetType}...`}
199
+ <ChevronsUpDownIcon class="opacity-50" />
200
+ </Button>
201
+ {/snippet}
202
+ </Popover.Trigger>
203
+ <Popover.Content class="!z-[9999] w-[400px] p-0">
204
+ <Command.Root>
205
+ <Command.List>
206
+ {#if loading}
207
+ <Command.Loading>Loading...</Command.Loading>
208
+ {:else if searchResults.length === 0}
209
+ <Command.Empty>
210
+ <div class="flex flex-col items-center gap-2 py-4">
211
+ <p class="text-muted-foreground text-sm">
212
+ No {targetType}s found
213
+ </p>
214
+ <Button size="sm" onclick={createNewDocument} disabled={creating} class="gap-1">
215
+ <PlusIcon class="h-3 w-3" />
216
+ {creating ? 'Creating...' : `Create new ${targetType}`}
217
+ </Button>
218
+ </div>
219
+ </Command.Empty>
220
+ {:else if searchResults.length > 0}
221
+ <Command.Group>
222
+ {#each searchResults as doc (doc.id)}
223
+ <Command.Item
224
+ value={doc.id}
225
+ onSelect={() => selectDocument(doc)}
226
+ class="flex items-center justify-between"
227
+ >
228
+ <div class="flex items-center gap-2">
229
+ <CheckIcon class={cn('h-4 w-4', value !== doc.id && 'text-transparent')} />
230
+ <div>
231
+ <div class="text-sm font-medium">{getDocumentTitle(doc)}</div>
232
+ <div class="text-muted-foreground text-xs">
233
+ {doc.status === 'published' ? '🟢' : '🟡'}
234
+ {doc.status}
235
+ </div>
236
+ </div>
237
+ </div>
238
+ </Command.Item>
239
+ {/each}
240
+ </Command.Group>
241
+ <Command.Separator />
242
+ <Command.Group>
243
+ <Command.Item onSelect={createNewDocument} class="justify-center">
244
+ <div class="flex items-center gap-1">
245
+ <PlusIcon class="h-3 w-3" />
246
+ {creating ? 'Creating...' : `Create new ${targetType}`}
247
+ </div>
248
+ </Command.Item>
249
+ </Command.Group>
250
+ {:else}
251
+ <Command.Empty>
252
+ No {targetType}s available
253
+ </Command.Empty>
254
+ {/if}
255
+ </Command.List>
256
+ </Command.Root>
257
+ </Popover.Content>
258
+ </Popover.Root>
259
+ {/if}
260
+ {/if}
@@ -0,0 +1,12 @@
1
+ import type { Field } from '../../../types/schemas.js';
2
+ interface Props {
3
+ field: Field;
4
+ value: string | null;
5
+ onUpdate: (value: string | null) => void;
6
+ onOpenReference?: (documentId: string, documentType: string) => void;
7
+ readonly?: boolean;
8
+ }
9
+ declare const ReferenceField: import("svelte").Component<Props, {}, "">;
10
+ type ReferenceField = ReturnType<typeof ReferenceField>;
11
+ export default ReferenceField;
12
+ //# sourceMappingURL=ReferenceField.svelte.d.ts.map
@@ -0,0 +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,2BAA2B,CAAC;AAI5F,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;AAoOF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,74 @@
1
+ <script lang="ts">
2
+ import { Input } from '@aphexcms/ui/shadcn/input';
3
+ import { Button } from '@aphexcms/ui/shadcn/button';
4
+ import type { Field } from '../../../types/schemas.js';
5
+ import { generateSlug } from '../../../utils/index.js';
6
+
7
+ interface Props {
8
+ field: Field;
9
+ value: any;
10
+ documentData?: Record<string, any>;
11
+ onUpdate: (value: any) => void;
12
+ validationClasses?: string;
13
+ onBlur?: (event: any) => void;
14
+ onFocus?: (event: any) => void;
15
+ readonly?: boolean;
16
+ }
17
+
18
+ let {
19
+ field,
20
+ value,
21
+ documentData,
22
+ onUpdate,
23
+ validationClasses,
24
+ onBlur,
25
+ onFocus,
26
+ readonly = false
27
+ }: Props = $props();
28
+
29
+ function handleInputChange(event: Event) {
30
+ const target = event.target as HTMLInputElement;
31
+ onUpdate(target.value);
32
+ }
33
+
34
+ // Generate slug from title
35
+ function generateSlugFromTitle() {
36
+ if (documentData?.title) {
37
+ const generatedSlug = generateSlug(documentData.title);
38
+ onUpdate(generatedSlug);
39
+ }
40
+ }
41
+ </script>
42
+
43
+ <div class="space-y-2">
44
+ <div class="flex gap-2">
45
+ <Input
46
+ id={field.name}
47
+ value={value || ''}
48
+ placeholder="document-slug"
49
+ oninput={handleInputChange}
50
+ onblur={onBlur}
51
+ onfocus={onFocus}
52
+ class="flex-1 {validationClasses}"
53
+ disabled={readonly}
54
+ />
55
+ <Button
56
+ variant="outline"
57
+ size="sm"
58
+ onclick={generateSlugFromTitle}
59
+ disabled={!documentData?.title || readonly}
60
+ class="shrink-0"
61
+ >
62
+ Generate from Title
63
+ </Button>
64
+ </div>
65
+ {#if documentData?.title}
66
+ <p class="text-muted-foreground text-xs">
67
+ Click "Generate from Title" to create slug from: "{documentData.title}"
68
+ </p>
69
+ {:else}
70
+ <p class="text-muted-foreground text-xs">
71
+ Enter a title first to generate a slug automatically
72
+ </p>
73
+ {/if}
74
+ </div>
@@ -0,0 +1,15 @@
1
+ import type { Field } from '../../../types/schemas.js';
2
+ interface Props {
3
+ field: Field;
4
+ value: any;
5
+ documentData?: Record<string, any>;
6
+ onUpdate: (value: any) => void;
7
+ validationClasses?: string;
8
+ onBlur?: (event: any) => void;
9
+ onFocus?: (event: any) => void;
10
+ readonly?: boolean;
11
+ }
12
+ declare const SlugField: import("svelte").Component<Props, {}, "">;
13
+ type SlugField = ReturnType<typeof SlugField>;
14
+ export default SlugField;
15
+ //# sourceMappingURL=SlugField.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlugField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/SlugField.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAItD,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,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;AAqDF,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,40 @@
1
+ <script lang="ts">
2
+ import { Input } from '@aphexcms/ui/shadcn/input';
3
+ import type { Field } from '../../../types/schemas.js';
4
+
5
+ interface Props {
6
+ field: Field;
7
+ value: any;
8
+ onUpdate: (value: any) => void;
9
+ validationClasses?: string;
10
+ onBlur?: (event: any) => void;
11
+ onFocus?: (event: any) => void;
12
+ readonly?: boolean;
13
+ }
14
+
15
+ let {
16
+ field,
17
+ value,
18
+ onUpdate,
19
+ validationClasses,
20
+ onBlur,
21
+ onFocus,
22
+ readonly = false
23
+ }: Props = $props();
24
+
25
+ function handleInputChange(event: Event) {
26
+ const target = event.target as HTMLInputElement;
27
+ onUpdate(target.value);
28
+ }
29
+ </script>
30
+
31
+ <Input
32
+ id={field.name}
33
+ value={value || ''}
34
+ placeholder={field.title}
35
+ oninput={handleInputChange}
36
+ onblur={onBlur}
37
+ onfocus={onFocus}
38
+ class={validationClasses}
39
+ disabled={readonly}
40
+ />
@@ -0,0 +1,14 @@
1
+ import type { Field } from '../../../types/schemas.js';
2
+ interface Props {
3
+ field: Field;
4
+ value: any;
5
+ onUpdate: (value: any) => void;
6
+ validationClasses?: string;
7
+ onBlur?: (event: any) => void;
8
+ onFocus?: (event: any) => void;
9
+ readonly?: boolean;
10
+ }
11
+ declare const StringField: import("svelte").Component<Props, {}, "">;
12
+ type StringField = ReturnType<typeof StringField>;
13
+ export default StringField;
14
+ //# sourceMappingURL=StringField.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StringField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/StringField.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGtD,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,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,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,40 @@
1
+ <script lang="ts">
2
+ import { Textarea } from '@aphexcms/ui/shadcn/textarea';
3
+ import type { Field } from '../../../types/schemas.js';
4
+
5
+ interface Props {
6
+ field: Field;
7
+ value: any;
8
+ onUpdate: (value: any) => void;
9
+ validationClasses?: string;
10
+ onBlur?: (event: any) => void;
11
+ onFocus?: (event: any) => void;
12
+ readonly?: boolean;
13
+ }
14
+
15
+ let {
16
+ field,
17
+ value,
18
+ onUpdate,
19
+ validationClasses,
20
+ onBlur,
21
+ onFocus,
22
+ readonly = false
23
+ }: Props = $props();
24
+
25
+ function handleInputChange(event: Event) {
26
+ const target = event.target as HTMLTextAreaElement;
27
+ onUpdate(target.value);
28
+ }
29
+ </script>
30
+
31
+ <Textarea
32
+ id={field.name}
33
+ value={value || ''}
34
+ placeholder={field.title}
35
+ oninput={handleInputChange}
36
+ onblur={onBlur}
37
+ onfocus={onFocus}
38
+ class="min-h-[100px] {validationClasses}"
39
+ disabled={readonly}
40
+ />
@@ -0,0 +1,14 @@
1
+ import type { Field } from '../../../types/schemas.js';
2
+ interface Props {
3
+ field: Field;
4
+ value: any;
5
+ onUpdate: (value: any) => void;
6
+ validationClasses?: string;
7
+ onBlur?: (event: any) => void;
8
+ onFocus?: (event: any) => void;
9
+ readonly?: boolean;
10
+ }
11
+ declare const TextareaField: import("svelte").Component<Props, {}, "">;
12
+ type TextareaField = ReturnType<typeof TextareaField>;
13
+ export default TextareaField;
14
+ //# sourceMappingURL=TextareaField.svelte.d.ts.map
@@ -0,0 +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,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGtD,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,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"}
@@ -0,0 +1,9 @@
1
+ export { default as StringField } from '../admin/fields/StringField.svelte';
2
+ export { default as TextareaField } from '../admin/fields/TextareaField.svelte';
3
+ export { default as NumberField } from '../admin/fields/NumberField.svelte';
4
+ export { default as BooleanField } from '../admin/fields/BooleanField.svelte';
5
+ export { default as SlugField } from '../admin/fields/SlugField.svelte';
6
+ export { default as ImageField } from '../admin/fields/ImageField.svelte';
7
+ export { default as ArrayField } from '../admin/fields/ArrayField.svelte';
8
+ export { default as ReferenceField } from '../admin/fields/ReferenceField.svelte';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/components/fields/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,uCAAuC,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Field components re-export
2
+ export { default as StringField } from '../admin/fields/StringField.svelte';
3
+ export { default as TextareaField } from '../admin/fields/TextareaField.svelte';
4
+ export { default as NumberField } from '../admin/fields/NumberField.svelte';
5
+ export { default as BooleanField } from '../admin/fields/BooleanField.svelte';
6
+ export { default as SlugField } from '../admin/fields/SlugField.svelte';
7
+ export { default as ImageField } from '../admin/fields/ImageField.svelte';
8
+ export { default as ArrayField } from '../admin/fields/ArrayField.svelte';
9
+ export { default as ReferenceField } from '../admin/fields/ReferenceField.svelte';
@@ -0,0 +1,7 @@
1
+ export { default as AdminApp } from './AdminApp.svelte';
2
+ export { default as Sidebar } from './layout/Sidebar.svelte';
3
+ export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
4
+ export { default as DocumentTypesList } from './admin/DocumentTypesList.svelte';
5
+ export { default as SchemaField } from './admin/SchemaField.svelte';
6
+ export * from './fields/index.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/components/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGpE,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // Aphex CMS Components
2
+ // All admin interface components -- is this being used?
3
+ // Main admin app
4
+ export { default as AdminApp } from './AdminApp.svelte';
5
+ // Sidebar
6
+ export { default as Sidebar } from './layout/Sidebar.svelte';
7
+ // Admin components (will be migrated from your current structure)
8
+ export { default as DocumentEditor } from './admin/DocumentEditor.svelte';
9
+ export { default as DocumentTypesList } from './admin/DocumentTypesList.svelte';
10
+ export { default as SchemaField } from './admin/SchemaField.svelte';
11
+ // Field components
12
+ export * from './fields/index.js';