@aphexcms/cms-core 0.1.1 → 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 (336) 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/{src/api/index.ts → dist/api/index.d.ts} +1 -1
  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/auth/auth-errors.d.ts +7 -0
  20. package/dist/auth/auth-errors.d.ts.map +1 -0
  21. package/dist/auth/auth-errors.js +13 -0
  22. package/dist/auth/auth-hooks.d.ts +6 -0
  23. package/dist/auth/auth-hooks.d.ts.map +1 -0
  24. package/dist/auth/auth-hooks.js +108 -0
  25. package/dist/auth/provider.d.ts +17 -0
  26. package/dist/auth/provider.d.ts.map +1 -0
  27. package/dist/auth/provider.js +1 -0
  28. package/dist/client/index.d.ts +24 -0
  29. package/dist/client/index.d.ts.map +1 -0
  30. package/{src/client/index.ts → dist/client/index.js} +0 -16
  31. package/{src → dist}/components/AdminApp.svelte +7 -8
  32. package/dist/components/AdminApp.svelte.d.ts +24 -0
  33. package/dist/components/AdminApp.svelte.d.ts.map +1 -0
  34. package/dist/components/admin/AdminLayout.svelte.d.ts +15 -0
  35. package/dist/components/admin/AdminLayout.svelte.d.ts.map +1 -0
  36. package/dist/components/admin/DocumentEditor.svelte.d.ts +18 -0
  37. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -0
  38. package/dist/components/admin/DocumentTypesList.svelte.d.ts +14 -0
  39. package/dist/components/admin/DocumentTypesList.svelte.d.ts.map +1 -0
  40. package/dist/components/admin/ObjectModal.svelte.d.ts +15 -0
  41. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -0
  42. package/dist/components/admin/SchemaField.svelte.d.ts +19 -0
  43. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -0
  44. package/dist/components/admin/fields/ArrayField.svelte.d.ts +12 -0
  45. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -0
  46. package/dist/components/admin/fields/BooleanField.svelte.d.ts +13 -0
  47. package/dist/components/admin/fields/BooleanField.svelte.d.ts.map +1 -0
  48. package/dist/components/admin/fields/ImageField.svelte.d.ts +15 -0
  49. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -0
  50. package/dist/components/admin/fields/NumberField.svelte.d.ts +14 -0
  51. package/dist/components/admin/fields/NumberField.svelte.d.ts.map +1 -0
  52. package/dist/components/admin/fields/ReferenceField.svelte.d.ts +12 -0
  53. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -0
  54. package/dist/components/admin/fields/SlugField.svelte.d.ts +15 -0
  55. package/dist/components/admin/fields/SlugField.svelte.d.ts.map +1 -0
  56. package/dist/components/admin/fields/StringField.svelte.d.ts +14 -0
  57. package/dist/components/admin/fields/StringField.svelte.d.ts.map +1 -0
  58. package/dist/components/admin/fields/TextareaField.svelte.d.ts +14 -0
  59. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -0
  60. package/dist/components/fields/index.d.ts +9 -0
  61. package/dist/components/fields/index.d.ts.map +1 -0
  62. package/dist/components/index.d.ts +7 -0
  63. package/dist/components/index.d.ts.map +1 -0
  64. package/{src/components/index.ts → dist/components/index.js} +0 -4
  65. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts +11 -0
  66. package/dist/components/layout/OrganizationSwitcher.svelte.d.ts.map +1 -0
  67. package/{src → dist}/components/layout/Sidebar.svelte +7 -7
  68. package/dist/components/layout/Sidebar.svelte.d.ts +14 -0
  69. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -0
  70. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts +11 -0
  71. package/dist/components/layout/sidebar/AppSidebar.svelte.d.ts.map +1 -0
  72. package/dist/components/layout/sidebar/NavMain.svelte.d.ts +19 -0
  73. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -0
  74. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts +9 -0
  75. package/dist/components/layout/sidebar/NavSecondary.svelte.d.ts.map +1 -0
  76. package/dist/components/layout/sidebar/NavUser.svelte.d.ts +9 -0
  77. package/dist/components/layout/sidebar/NavUser.svelte.d.ts.map +1 -0
  78. package/dist/config.d.ts +3 -0
  79. package/dist/config.d.ts.map +1 -0
  80. package/dist/config.js +15 -0
  81. package/dist/db/adapters/index.d.ts +1 -0
  82. package/dist/db/adapters/index.d.ts.map +1 -0
  83. package/{src/db/adapters/index.ts → dist/db/adapters/index.js} +1 -0
  84. package/dist/db/index.d.ts +2 -0
  85. package/dist/db/index.d.ts.map +1 -0
  86. package/{src/db/index.ts → dist/db/index.js} +0 -1
  87. package/dist/db/interfaces/asset.d.ts +51 -0
  88. package/dist/db/interfaces/asset.d.ts.map +1 -0
  89. package/dist/db/interfaces/asset.js +1 -0
  90. package/dist/db/interfaces/document.d.ts +36 -0
  91. package/dist/db/interfaces/document.d.ts.map +1 -0
  92. package/dist/db/interfaces/document.js +1 -0
  93. package/dist/db/interfaces/index.d.ts +73 -0
  94. package/dist/db/interfaces/index.d.ts.map +1 -0
  95. package/dist/db/interfaces/index.js +1 -0
  96. package/dist/db/interfaces/organization.d.ts +27 -0
  97. package/dist/db/interfaces/organization.d.ts.map +1 -0
  98. package/dist/db/interfaces/organization.js +1 -0
  99. package/dist/db/interfaces/schema.d.ts +21 -0
  100. package/dist/db/interfaces/schema.d.ts.map +1 -0
  101. package/dist/db/interfaces/schema.js +1 -0
  102. package/dist/db/interfaces/user.d.ts +15 -0
  103. package/dist/db/interfaces/user.d.ts.map +1 -0
  104. package/dist/db/interfaces/user.js +1 -0
  105. package/dist/db/utils/reference-resolver.d.ts +18 -0
  106. package/dist/db/utils/reference-resolver.d.ts.map +1 -0
  107. package/dist/db/utils/reference-resolver.js +80 -0
  108. package/dist/define.d.ts +3 -0
  109. package/dist/define.d.ts.map +1 -0
  110. package/dist/define.js +4 -0
  111. package/dist/email/index.d.ts +2 -0
  112. package/dist/email/index.d.ts.map +1 -0
  113. package/{src/email/index.ts → dist/email/index.js} +0 -1
  114. package/dist/email/interfaces/email.d.ts +42 -0
  115. package/dist/email/interfaces/email.d.ts.map +1 -0
  116. package/dist/email/interfaces/email.js +1 -0
  117. package/dist/engine.d.ts +26 -0
  118. package/dist/engine.d.ts.map +1 -0
  119. package/dist/engine.js +66 -0
  120. package/dist/field-validation/rule.d.ts +51 -0
  121. package/dist/field-validation/rule.d.ts.map +1 -0
  122. package/dist/field-validation/rule.js +221 -0
  123. package/dist/field-validation/utils.d.ts +21 -0
  124. package/dist/field-validation/utils.d.ts.map +1 -0
  125. package/dist/field-validation/utils.js +66 -0
  126. package/dist/hooks.d.ts +23 -0
  127. package/dist/hooks.d.ts.map +1 -0
  128. package/dist/hooks.js +96 -0
  129. package/dist/index.d.ts +2 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/{src/index.ts → dist/index.js} +0 -1
  132. package/dist/routes/assets-by-id.d.ts +5 -0
  133. package/dist/routes/assets-by-id.d.ts.map +1 -0
  134. package/dist/routes/assets-by-id.js +138 -0
  135. package/dist/routes/assets-cdn.d.ts +3 -0
  136. package/dist/routes/assets-cdn.d.ts.map +1 -0
  137. package/dist/routes/assets-cdn.js +155 -0
  138. package/dist/routes/assets.d.ts +4 -0
  139. package/dist/routes/assets.d.ts.map +1 -0
  140. package/dist/routes/assets.js +94 -0
  141. package/dist/routes/documents-by-id.d.ts +5 -0
  142. package/dist/routes/documents-by-id.d.ts.map +1 -0
  143. package/dist/routes/documents-by-id.js +142 -0
  144. package/dist/routes/documents-publish.d.ts +4 -0
  145. package/dist/routes/documents-publish.d.ts.map +1 -0
  146. package/dist/routes/documents-publish.js +151 -0
  147. package/dist/routes/documents.d.ts +4 -0
  148. package/dist/routes/documents.d.ts.map +1 -0
  149. package/dist/routes/documents.js +131 -0
  150. package/dist/routes/index.d.ts +6 -0
  151. package/dist/routes/index.d.ts.map +1 -0
  152. package/{src/routes/index.ts → dist/routes/index.js} +0 -3
  153. package/dist/routes/organizations-by-id.d.ts +5 -0
  154. package/dist/routes/organizations-by-id.d.ts.map +1 -0
  155. package/dist/routes/organizations-by-id.js +187 -0
  156. package/dist/routes/organizations-invitations.d.ts +4 -0
  157. package/dist/routes/organizations-invitations.d.ts.map +1 -0
  158. package/dist/routes/organizations-invitations.js +125 -0
  159. package/dist/routes/organizations-members.d.ts +5 -0
  160. package/dist/routes/organizations-members.d.ts.map +1 -0
  161. package/dist/routes/organizations-members.js +206 -0
  162. package/dist/routes/organizations-switch.d.ts +3 -0
  163. package/dist/routes/organizations-switch.d.ts.map +1 -0
  164. package/dist/routes/organizations-switch.js +53 -0
  165. package/dist/routes/organizations.d.ts +4 -0
  166. package/dist/routes/organizations.d.ts.map +1 -0
  167. package/dist/routes/organizations.js +108 -0
  168. package/dist/routes/schemas-by-type.d.ts +3 -0
  169. package/dist/routes/schemas-by-type.d.ts.map +1 -0
  170. package/dist/routes/schemas-by-type.js +25 -0
  171. package/dist/routes/schemas.d.ts +3 -0
  172. package/dist/routes/schemas.d.ts.map +1 -0
  173. package/dist/routes/schemas.js +11 -0
  174. package/dist/routes-exports.d.ts +14 -0
  175. package/dist/routes-exports.d.ts.map +1 -0
  176. package/{src/routes-exports.ts → dist/routes-exports.js} +5 -28
  177. package/dist/schema-context.svelte.d.ts +10 -0
  178. package/dist/schema-context.svelte.d.ts.map +1 -0
  179. package/dist/schema-context.svelte.js +18 -0
  180. package/dist/schema-utils/cleanup.d.ts +21 -0
  181. package/dist/schema-utils/cleanup.d.ts.map +1 -0
  182. package/dist/schema-utils/cleanup.js +80 -0
  183. package/dist/schema-utils/index.d.ts +4 -0
  184. package/dist/schema-utils/index.d.ts.map +1 -0
  185. package/dist/schema-utils/utils.d.ts +30 -0
  186. package/dist/schema-utils/utils.d.ts.map +1 -0
  187. package/dist/schema-utils/utils.js +37 -0
  188. package/dist/schema-utils/validator.d.ts +6 -0
  189. package/dist/schema-utils/validator.d.ts.map +1 -0
  190. package/dist/schema-utils/validator.js +45 -0
  191. package/dist/server/index.d.ts +16 -0
  192. package/dist/server/index.d.ts.map +1 -0
  193. package/{src/server/index.ts → dist/server/index.js} +2 -14
  194. package/dist/services/asset-service.d.ts +86 -0
  195. package/dist/services/asset-service.d.ts.map +1 -0
  196. package/dist/services/asset-service.js +187 -0
  197. package/{src/services/index.ts → dist/services/index.d.ts} +1 -4
  198. package/dist/services/index.d.ts.map +1 -0
  199. package/dist/services/index.js +4 -0
  200. package/dist/storage/adapters/index.d.ts +2 -0
  201. package/dist/storage/adapters/index.d.ts.map +1 -0
  202. package/dist/storage/adapters/local-storage-adapter.d.ts +54 -0
  203. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -0
  204. package/dist/storage/adapters/local-storage-adapter.js +187 -0
  205. package/dist/storage/index.d.ts +3 -0
  206. package/dist/storage/index.d.ts.map +1 -0
  207. package/{src/storage/index.ts → dist/storage/index.js} +0 -2
  208. package/dist/storage/interfaces/index.d.ts +2 -0
  209. package/dist/storage/interfaces/index.d.ts.map +1 -0
  210. package/dist/storage/interfaces/storage.d.ts +91 -0
  211. package/dist/storage/interfaces/storage.d.ts.map +1 -0
  212. package/dist/storage/interfaces/storage.js +1 -0
  213. package/dist/storage/providers/storage.d.ts +43 -0
  214. package/dist/storage/providers/storage.d.ts.map +1 -0
  215. package/dist/storage/providers/storage.js +64 -0
  216. package/dist/types/asset.d.ts +73 -0
  217. package/dist/types/asset.d.ts.map +1 -0
  218. package/dist/types/asset.js +2 -0
  219. package/dist/types/auth.d.ts +50 -0
  220. package/dist/types/auth.d.ts.map +1 -0
  221. package/dist/types/auth.js +41 -0
  222. package/dist/types/config.d.ts +47 -0
  223. package/dist/types/config.d.ts.map +1 -0
  224. package/dist/types/config.js +1 -0
  225. package/dist/types/document.d.ts +34 -0
  226. package/dist/types/document.d.ts.map +1 -0
  227. package/dist/types/document.js +1 -0
  228. package/dist/types/index.d.ts +9 -0
  229. package/dist/types/index.d.ts.map +1 -0
  230. package/dist/types/organization.d.ts +105 -0
  231. package/dist/types/organization.d.ts.map +1 -0
  232. package/dist/types/organization.js +3 -0
  233. package/dist/types/schemas.d.ts +114 -0
  234. package/dist/types/schemas.d.ts.map +1 -0
  235. package/dist/types/schemas.js +1 -0
  236. package/dist/types/sidebar.d.ts +33 -0
  237. package/dist/types/sidebar.d.ts.map +1 -0
  238. package/dist/types/sidebar.js +1 -0
  239. package/dist/types/user.d.ts +14 -0
  240. package/dist/types/user.d.ts.map +1 -0
  241. package/dist/types/user.js +1 -0
  242. package/dist/utils/content-hash.d.ts +22 -0
  243. package/dist/utils/content-hash.d.ts.map +1 -0
  244. package/dist/utils/content-hash.js +67 -0
  245. package/dist/utils/image-url.d.ts +88 -0
  246. package/dist/utils/image-url.d.ts.map +1 -0
  247. package/dist/utils/image-url.js +165 -0
  248. package/dist/utils/index.d.ts +6 -0
  249. package/dist/utils/index.d.ts.map +1 -0
  250. package/{src/utils/index.ts → dist/utils/index.js} +0 -3
  251. package/dist/utils/slug.d.ts +13 -0
  252. package/dist/utils/slug.d.ts.map +1 -0
  253. package/dist/utils/slug.js +30 -0
  254. package/package.json +12 -25
  255. package/src/api/assets.ts +0 -75
  256. package/src/api/client.ts +0 -150
  257. package/src/api/documents.ts +0 -102
  258. package/src/api/organizations.ts +0 -154
  259. package/src/api/types.ts +0 -34
  260. package/src/auth/auth-errors.ts +0 -23
  261. package/src/auth/auth-hooks.ts +0 -132
  262. package/src/auth/provider.ts +0 -25
  263. package/src/config.ts +0 -18
  264. package/src/db/interfaces/asset.ts +0 -61
  265. package/src/db/interfaces/document.ts +0 -53
  266. package/src/db/interfaces/index.ts +0 -98
  267. package/src/db/interfaces/organization.ts +0 -51
  268. package/src/db/interfaces/schema.ts +0 -13
  269. package/src/db/interfaces/user.ts +0 -16
  270. package/src/db/utils/reference-resolver.ts +0 -119
  271. package/src/define.ts +0 -7
  272. package/src/email/interfaces/email.ts +0 -45
  273. package/src/engine.ts +0 -85
  274. package/src/field-validation/rule.ts +0 -287
  275. package/src/field-validation/utils.ts +0 -91
  276. package/src/hooks.ts +0 -142
  277. package/src/lib/is-mobile.svelte.ts +0 -9
  278. package/src/lib/utils.ts +0 -13
  279. package/src/routes/assets-by-id.ts +0 -161
  280. package/src/routes/assets-cdn.ts +0 -185
  281. package/src/routes/assets.ts +0 -116
  282. package/src/routes/documents-by-id.ts +0 -188
  283. package/src/routes/documents-publish.ts +0 -211
  284. package/src/routes/documents.ts +0 -172
  285. package/src/routes/organizations-by-id.ts +0 -258
  286. package/src/routes/organizations-invitations.ts +0 -183
  287. package/src/routes/organizations-members.ts +0 -301
  288. package/src/routes/organizations-switch.ts +0 -74
  289. package/src/routes/organizations.ts +0 -146
  290. package/src/routes/schemas-by-type.ts +0 -35
  291. package/src/routes/schemas.ts +0 -19
  292. package/src/schema-context.svelte.ts +0 -24
  293. package/src/schema-utils/cleanup.ts +0 -116
  294. package/src/schema-utils/utils.ts +0 -47
  295. package/src/schema-utils/validator.ts +0 -58
  296. package/src/services/asset-service.ts +0 -256
  297. package/src/storage/adapters/local-storage-adapter.ts +0 -215
  298. package/src/storage/interfaces/storage.ts +0 -114
  299. package/src/storage/providers/storage.ts +0 -83
  300. package/src/types/asset.ts +0 -81
  301. package/src/types/auth.ts +0 -80
  302. package/src/types/config.ts +0 -45
  303. package/src/types/document.ts +0 -38
  304. package/src/types/organization.ts +0 -119
  305. package/src/types/schemas.ts +0 -151
  306. package/src/types/sidebar.ts +0 -37
  307. package/src/types/user.ts +0 -17
  308. package/src/utils/content-hash.ts +0 -75
  309. package/src/utils/image-url.ts +0 -204
  310. package/src/utils/slug.ts +0 -33
  311. /package/{src → dist}/app.d.ts +0 -0
  312. /package/{src → dist}/auth/MULTI_TENANCY_PLAN.md +0 -0
  313. /package/{src → dist}/components/admin/AdminLayout.svelte +0 -0
  314. /package/{src → dist}/components/admin/DocumentEditor.svelte +0 -0
  315. /package/{src → dist}/components/admin/DocumentTypesList.svelte +0 -0
  316. /package/{src → dist}/components/admin/ObjectModal.svelte +0 -0
  317. /package/{src → dist}/components/admin/SchemaField.svelte +0 -0
  318. /package/{src → dist}/components/admin/fields/ArrayField.svelte +0 -0
  319. /package/{src → dist}/components/admin/fields/BooleanField.svelte +0 -0
  320. /package/{src → dist}/components/admin/fields/ImageField.svelte +0 -0
  321. /package/{src → dist}/components/admin/fields/NumberField.svelte +0 -0
  322. /package/{src → dist}/components/admin/fields/ReferenceField.svelte +0 -0
  323. /package/{src → dist}/components/admin/fields/SlugField.svelte +0 -0
  324. /package/{src → dist}/components/admin/fields/StringField.svelte +0 -0
  325. /package/{src → dist}/components/admin/fields/TextareaField.svelte +0 -0
  326. /package/{src/components/fields/index.ts → dist/components/fields/index.js} +0 -0
  327. /package/{src → dist}/components/layout/OrganizationSwitcher.svelte +0 -0
  328. /package/{src → dist}/components/layout/sidebar/AppSidebar.svelte +0 -0
  329. /package/{src → dist}/components/layout/sidebar/NavMain.svelte +0 -0
  330. /package/{src → dist}/components/layout/sidebar/NavSecondary.svelte +0 -0
  331. /package/{src → dist}/components/layout/sidebar/NavUser.svelte +0 -0
  332. /package/{src → dist}/plugins/README.md +0 -0
  333. /package/{src/schema-utils/index.ts → dist/schema-utils/index.js} +0 -0
  334. /package/{src/storage/adapters/index.ts → dist/storage/adapters/index.js} +0 -0
  335. /package/{src/storage/interfaces/index.ts → dist/storage/interfaces/index.js} +0 -0
  336. /package/{src/types/index.ts → dist/types/index.js} +0 -0
@@ -0,0 +1,13 @@
1
+ // Custom authentication errors with error codes for better error handling
2
+ export class AuthError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.code = code;
7
+ this.name = 'AuthError';
8
+ }
9
+ }
10
+ // Helper function to create auth errors
11
+ export function createAuthError(code, message) {
12
+ return new AuthError(code, message);
13
+ }
@@ -0,0 +1,6 @@
1
+ import type { RequestEvent } from '@sveltejs/kit';
2
+ import type { DatabaseAdapter } from '../db/';
3
+ import type { CMSConfig } from '../types/index.js';
4
+ import type { AuthProvider } from './provider.js';
5
+ export declare function handleAuthHook(event: RequestEvent, config: CMSConfig, authProvider: AuthProvider, db: DatabaseAdapter): Promise<Response | null>;
6
+ //# sourceMappingURL=auth-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/auth/auth-hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,wBAAsB,cAAc,CACnC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,eAAe,GACjB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAuH1B"}
@@ -0,0 +1,108 @@
1
+ import { redirect } from '@sveltejs/kit';
2
+ import { AuthError } from './auth-errors.js';
3
+ export async function handleAuthHook(event, config, authProvider, db) {
4
+ const path = event.url.pathname;
5
+ // 1. Admin UI routes - require session authentication
6
+ if (path.startsWith('/admin')) {
7
+ try {
8
+ const session = await authProvider.requireSession(event.request, db);
9
+ event.locals.auth = session;
10
+ }
11
+ catch (error) {
12
+ // If it's an AuthError, redirect to login with error code
13
+ if (error instanceof AuthError) {
14
+ const loginUrl = config.auth?.loginUrl || '/login';
15
+ throw redirect(302, `${loginUrl}?error=${error.code}`);
16
+ }
17
+ // For other errors, redirect without error code
18
+ throw redirect(302, config.auth?.loginUrl || '/login');
19
+ }
20
+ }
21
+ // 2. Asset CDN routes - accept session OR API key OR signed token
22
+ // Support both /assets/ and /media/ paths (media is Sanity-style URL)
23
+ if (path.startsWith('/assets/') || path.startsWith('/media/')) {
24
+ // Try session first (for admin UI)
25
+ let auth = await authProvider.getSession(event.request, db);
26
+ // If no session, try API key
27
+ if (!auth) {
28
+ auth = await authProvider.validateApiKey(event.request, db);
29
+ }
30
+ // Make auth available (can be null, route will check for signed token)
31
+ if (auth) {
32
+ event.locals.auth = auth;
33
+ }
34
+ }
35
+ // 3. API routes - accept session OR API key
36
+ if (path.startsWith('/api/')) {
37
+ // Skip auth routes (Better Auth handles these)
38
+ if (path.startsWith('/api/auth')) {
39
+ return null; // Let the main hook continue
40
+ }
41
+ // If API key is explicitly provided, prioritize it over session
42
+ // This allows public content access even when user is logged in to a different org
43
+ const hasApiKey = event.request.headers.has('x-api-key');
44
+ let auth = null;
45
+ if (hasApiKey) {
46
+ // API key takes precedence when explicitly provided
47
+ auth = await authProvider.validateApiKey(event.request, db);
48
+ }
49
+ else {
50
+ // Otherwise, try session (for admin UI making API calls)
51
+ auth = await authProvider.getSession(event.request, db);
52
+ }
53
+ // Dynamically find the GraphQL endpoint from plugins
54
+ let graphqlEndpoint;
55
+ const graphqlPlugin = config.plugins?.find((p) => p.name === '@aphexcms/graphql-plugin');
56
+ if (graphqlPlugin && graphqlPlugin.routes) {
57
+ graphqlEndpoint = Object.keys(graphqlPlugin.routes)[0];
58
+ }
59
+ // Require authentication for protected API routes
60
+ const protectedApiRoutes = [
61
+ '/api/documents',
62
+ '/api/assets',
63
+ '/api/schemas',
64
+ '/api/organizations',
65
+ '/api/settings'
66
+ ];
67
+ if (graphqlEndpoint) {
68
+ protectedApiRoutes.push(graphqlEndpoint);
69
+ }
70
+ const isProtectedRoute = protectedApiRoutes.some((route) => path.startsWith(route));
71
+ if (isProtectedRoute && !auth) {
72
+ return new Response(JSON.stringify({ error: 'Unauthorized' }), {
73
+ status: 401,
74
+ headers: { 'Content-Type': 'application/json' }
75
+ });
76
+ }
77
+ // Check write permission for mutations
78
+ if (auth && ['POST', 'PUT', 'PATCH', 'DELETE'].includes(event.request.method)) {
79
+ // Special handling for GraphQL
80
+ if (graphqlEndpoint && path.startsWith(graphqlEndpoint)) {
81
+ // We need to read the body to check if it's a mutation.
82
+ // It's important to clone the request so we don't consume the body stream.
83
+ const requestBody = await event.request.clone().text();
84
+ const isMutation = requestBody.trim().startsWith('mutation');
85
+ if (isMutation && auth.type === 'api_key' && !auth.permissions.includes('write')) {
86
+ return new Response(JSON.stringify({ error: 'Forbidden: Write permission required for mutations' }), {
87
+ status: 403,
88
+ headers: { 'Content-Type': 'application/json' }
89
+ });
90
+ }
91
+ }
92
+ else {
93
+ // Existing logic for other API routes
94
+ if (auth.type === 'api_key' && !auth.permissions.includes('write')) {
95
+ return new Response(JSON.stringify({ error: 'Forbidden: Write permission required' }), {
96
+ status: 403,
97
+ headers: { 'Content-Type': 'application/json' }
98
+ });
99
+ }
100
+ }
101
+ }
102
+ // Make auth available in API routes
103
+ if (auth) {
104
+ event.locals.auth = auth;
105
+ }
106
+ }
107
+ return null; // Tell the main hook to continue
108
+ }
@@ -0,0 +1,17 @@
1
+ import type { SessionAuth, ApiKeyAuth } from '../types/index.js';
2
+ import type { DatabaseAdapter } from '../db/interfaces/index.js';
3
+ export interface AuthProvider {
4
+ getSession(request: Request, db: DatabaseAdapter): Promise<SessionAuth | null>;
5
+ requireSession(request: Request, db: DatabaseAdapter): Promise<SessionAuth>;
6
+ validateApiKey(request: Request, db: DatabaseAdapter): Promise<ApiKeyAuth | null>;
7
+ requireApiKey(request: Request, db: DatabaseAdapter, permission?: 'read' | 'write'): Promise<ApiKeyAuth>;
8
+ getUserById(userId: string): Promise<{
9
+ id: string;
10
+ name?: string;
11
+ email: string;
12
+ } | null>;
13
+ changeUserName(userId: string, name: string): Promise<void>;
14
+ requestPasswordReset(email: string, redirectTo?: string): Promise<void>;
15
+ resetPassword(token: string, newPassword: string): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/lib/auth/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,MAAM,WAAW,YAAY;IAE5B,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC/E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAG5E,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAClF,aAAa,CACZ,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,eAAe,EACnB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAC3B,OAAO,CAAC,UAAU,CAAC,CAAC;IAGvB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IAC1F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAG5D,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ export * from '../types/index.js';
2
+ export type { SidebarUser, SidebarNavItem, SidebarBranding, SidebarData } from '../types/sidebar.js';
3
+ export * from '../field-validation/rule.js';
4
+ export * from '../field-validation/utils.js';
5
+ export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
6
+ export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
7
+ export * from '../schema-utils/index.js';
8
+ export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
9
+ export { default as DocumentTypesList } from '../components/admin/DocumentTypesList.svelte';
10
+ export { default as SchemaField } from '../components/admin/SchemaField.svelte';
11
+ export { default as AdminApp } from '../components/AdminApp.svelte';
12
+ export { default as Sidebar } from '../components/layout/Sidebar.svelte';
13
+ export { default as StringField } from '../components/admin/fields/StringField.svelte';
14
+ export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
15
+ export { default as NumberField } from '../components/admin/fields/NumberField.svelte';
16
+ export { default as BooleanField } from '../components/admin/fields/BooleanField.svelte';
17
+ export { default as ImageField } from '../components/admin/fields/ImageField.svelte';
18
+ export { default as SlugField } from '../components/admin/fields/SlugField.svelte';
19
+ export { default as ArrayField } from '../components/admin/fields/ArrayField.svelte';
20
+ export { default as ReferenceField } from '../components/admin/fields/ReferenceField.svelte';
21
+ export * from '../utils/index.js';
22
+ export * from '../api/index.js';
23
+ export type { ApiResponse } from '../api/index.js';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/client/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,YAAY,EACX,WAAW,EACX,cAAc,EACd,eAAe,EACf,WAAW,EACX,MAAM,qBAAqB,CAAC;AAG7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAG7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAGjF,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAGzE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kDAAkD,CAAC;AAG7F,cAAc,mBAAmB,CAAC;AAElC,cAAc,iBAAiB,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,35 +1,22 @@
1
1
  // Aphex CMS Core - Client-side exports
2
2
  // These are safe to import in the browser (no Node.js dependencies)
3
-
4
3
  // Core types (shared between client and server)
5
4
  export * from '../types/index.js';
6
- export type {
7
- SidebarUser,
8
- SidebarNavItem,
9
- SidebarBranding,
10
- SidebarData
11
- } from '../types/sidebar.js';
12
-
13
5
  // Field validation (client-side validation)
14
6
  export * from '../field-validation/rule.js';
15
7
  export * from '../field-validation/utils.js';
16
-
17
8
  // Content hashing utilities (for client-side change detection)
18
9
  export { createContentHash, hasUnpublishedChanges } from '../utils/content-hash.js';
19
-
20
10
  // Schema context (for providing schemas to components)
21
11
  export { setSchemaContext, getSchemaContext } from '../schema-context.svelte.js';
22
-
23
12
  // Schema utilities (for working with schemas)
24
13
  export * from '../schema-utils/index.js';
25
-
26
14
  // Components (UI components for the admin interface)
27
15
  export { default as DocumentEditor } from '../components/admin/DocumentEditor.svelte';
28
16
  export { default as DocumentTypesList } from '../components/admin/DocumentTypesList.svelte';
29
17
  export { default as SchemaField } from '../components/admin/SchemaField.svelte';
30
18
  export { default as AdminApp } from '../components/AdminApp.svelte';
31
19
  export { default as Sidebar } from '../components/layout/Sidebar.svelte';
32
-
33
20
  // Field components
34
21
  export { default as StringField } from '../components/admin/fields/StringField.svelte';
35
22
  export { default as TextareaField } from '../components/admin/fields/TextareaField.svelte';
@@ -39,9 +26,6 @@ export { default as ImageField } from '../components/admin/fields/ImageField.sve
39
26
  export { default as SlugField } from '../components/admin/fields/SlugField.svelte';
40
27
  export { default as ArrayField } from '../components/admin/fields/ArrayField.svelte';
41
28
  export { default as ReferenceField } from '../components/admin/fields/ReferenceField.svelte';
42
-
43
29
  // Utility functions (browser-safe)
44
30
  export * from '../utils/index.js';
45
-
46
31
  export * from '../api/index.js';
47
- export type { ApiResponse } from '../api/index.js';
@@ -13,7 +13,6 @@
13
13
  import DocumentEditor from './admin/DocumentEditor.svelte';
14
14
  import type { DocumentType } from '../types/index.js';
15
15
  import { documents } from '../api/index.js';
16
- import { activeTabState } from '$lib/stores/activeTab.svelte.js';
17
16
 
18
17
  type InitDocumentType = Pick<DocumentType, 'name' | 'title' | 'description'>;
19
18
 
@@ -24,6 +23,8 @@
24
23
  title?: string;
25
24
  graphqlSettings?: { endpoint: string; enableGraphiQL: boolean } | null;
26
25
  isReadOnly?: boolean;
26
+ activeTab?: { value: 'structure' | 'vision' };
27
+ handleTabChange: (value: string) => void;
27
28
  }
28
29
 
29
30
  let {
@@ -32,13 +33,11 @@
32
33
  schemaError = null,
33
34
  title = 'Aphex CMS',
34
35
  graphqlSettings = null,
35
- isReadOnly = false
36
+ isReadOnly = false,
37
+ activeTab = { value: 'structure' } as { value: 'structure' | 'vision' },
38
+ handleTabChange = () => {},
36
39
  }: Props = $props();
37
40
 
38
- // Handler for when tabs change (instead of bind:value)
39
- function handleTabChange(value: string) {
40
- activeTabState.value = value as 'structure' | 'vision';
41
- }
42
41
 
43
42
  // Set schema context for child components
44
43
 
@@ -605,7 +604,7 @@
605
604
  </script>
606
605
 
607
606
  <svelte:head>
608
- <title>{activeTabState.value === 'structure' ? 'Content' : 'Vision'} - {title}</title>
607
+ <title>{activeTab.value === 'structure' ? 'Content' : 'Vision'} - {title}</title>
609
608
  </svelte:head>
610
609
 
611
610
  <div class="flex h-full flex-col overflow-hidden">
@@ -671,7 +670,7 @@
671
670
 
672
671
  <!-- Main Content -->
673
672
  <div class="flex-1 overflow-hidden">
674
- <Tabs.Root value={activeTabState.value} onValueChange={handleTabChange} class="h-full">
673
+ <Tabs.Root value={activeTab.value} onValueChange={handleTabChange} class="h-full">
675
674
  <Tabs.Content value="structure" class="h-full overflow-hidden">
676
675
  {#key `${currentView}-${selectedDocumentType}-${editingDocumentId}`}
677
676
  <div class={windowWidth < 620 ? 'h-full w-full' : 'flex h-full w-full overflow-hidden'}>
@@ -0,0 +1,24 @@
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
+ interface Props {
5
+ schemas: SchemaType[];
6
+ documentTypes: InitDocumentType[];
7
+ schemaError?: {
8
+ message: string;
9
+ } | null;
10
+ title?: string;
11
+ graphqlSettings?: {
12
+ endpoint: string;
13
+ enableGraphiQL: boolean;
14
+ } | null;
15
+ isReadOnly?: boolean;
16
+ activeTab?: {
17
+ value: 'structure' | 'vision';
18
+ };
19
+ handleTabChange: (value: string) => void;
20
+ }
21
+ declare const AdminApp: import("svelte").Component<Props, {}, "">;
22
+ type AdminApp = ReturnType<typeof AdminApp>;
23
+ export default AdminApp;
24
+ //# sourceMappingURL=AdminApp.svelte.d.ts.map
@@ -0,0 +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,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIrD,KAAK,gBAAgB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,CAAC,CAAC;AAE7E,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,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;AAi6BF,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,15 @@
1
+ interface Props {
2
+ currentView: 'dashboard' | 'documents' | 'editor';
3
+ mobileView: 'types' | 'documents' | 'editor';
4
+ selectedDocumentType: string | null;
5
+ windowWidth: number;
6
+ children?: any;
7
+ }
8
+ declare const AdminLayout: import("svelte").Component<Props, {
9
+ typesPanel: "hidden" | "flex-1" | "w-full" | "w-[350px]" | "w-[60px]";
10
+ documentsPanel: "hidden" | "flex-1" | "w-full" | "w-[350px]" | "w-[60px]";
11
+ editorPanel: "hidden" | "flex-1" | "w-full";
12
+ }, "">;
13
+ type AdminLayout = ReturnType<typeof AdminLayout>;
14
+ export default AdminLayout;
15
+ //# sourceMappingURL=AdminLayout.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminLayout.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/AdminLayout.svelte.ts"],"names":[],"mappings":"AAGC,UAAU,KAAK;IACd,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClD,UAAU,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC7C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,GAAG,CAAC;CACf;AAiHF,QAAA,MAAM,WAAW;;;;MAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SchemaType } from 'src/types/schemas.js';
2
+ interface Props {
3
+ schemas: SchemaType[];
4
+ documentType: string;
5
+ documentId?: string | null;
6
+ isCreating: boolean;
7
+ onBack: () => void;
8
+ onSaved?: (documentId: string) => void;
9
+ onAutoSaved?: (documentId: string, title: string) => void;
10
+ onDeleted?: () => void;
11
+ onPublished?: (documentId: string) => void;
12
+ onOpenReference?: (documentId: string, documentType: string) => void;
13
+ isReadOnly?: boolean;
14
+ }
15
+ declare const DocumentEditor: import("svelte").Component<Props, {}, "">;
16
+ type DocumentEditor = ReturnType<typeof DocumentEditor>;
17
+ export default DocumentEditor;
18
+ //# sourceMappingURL=DocumentEditor.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentEditor.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentEditor.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAMtD,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAwsBF,QAAA,MAAM,cAAc,2CAAwC,CAAC;AAC7D,KAAK,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AACxD,eAAe,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ interface DocumentType {
2
+ name: string;
3
+ title: string;
4
+ description?: string;
5
+ documentCount?: number;
6
+ }
7
+ interface Props {
8
+ documentTypes: DocumentType[];
9
+ objectTypes: DocumentType[];
10
+ }
11
+ declare const DocumentTypesList: import("svelte").Component<Props, {}, "">;
12
+ type DocumentTypesList = ReturnType<typeof DocumentTypesList>;
13
+ export default DocumentTypesList;
14
+ //# sourceMappingURL=DocumentTypesList.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentTypesList.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/DocumentTypesList.svelte.ts"],"names":[],"mappings":"AAeC,UAAU,YAAY;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,KAAK;IACd,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,YAAY,EAAE,CAAC;CAC5B;AA8EF,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SchemaType } from 'src/types/schemas.js';
2
+ interface Props {
3
+ open: boolean;
4
+ schema: SchemaType;
5
+ value: Record<string, any>;
6
+ onClose: () => void;
7
+ onSave: (value: Record<string, any>) => void;
8
+ onUpdate?: (value: Record<string, any>) => void;
9
+ onOpenReference?: (documentId: string, documentType: string) => void;
10
+ readonly?: boolean;
11
+ }
12
+ declare const ObjectModal: import("svelte").Component<Props, {}, "">;
13
+ type ObjectModal = ReturnType<typeof ObjectModal>;
14
+ export default ObjectModal;
15
+ //# sourceMappingURL=ObjectModal.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectModal.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/ObjectModal.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAItD,UAAU,KAAK;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC;IAChD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA+GF,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Field } from 'src/types/schemas.js';
2
+ import SchemaField from './SchemaField.svelte';
3
+ interface Props {
4
+ field: Field;
5
+ value: any;
6
+ documentData?: Record<string, any>;
7
+ onUpdate: (value: any) => void;
8
+ onOpenReference?: (documentId: string, documentType: string) => void;
9
+ doValidation?: () => void;
10
+ schemaType?: string;
11
+ parentPath?: string;
12
+ readonly?: boolean;
13
+ }
14
+ declare const SchemaField: import("svelte").Component<Props, {
15
+ performValidation: (currentValue: any, context?: any) => Promise<void>;
16
+ }, "">;
17
+ type SchemaField = ReturnType<typeof SchemaField>;
18
+ export default SchemaField;
19
+ //# sourceMappingURL=SchemaField.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaField.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/SchemaField.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAgBlD,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAG9C,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,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA4IF,QAAA,MAAM,WAAW;sCArGgC,GAAG,YAAW,GAAG;MAqGT,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ArrayField as ArrayFieldType } from '../../../types/schemas.js';
2
+ interface Props {
3
+ field: ArrayFieldType;
4
+ value: any;
5
+ onUpdate: (value: any) => void;
6
+ onOpenReference?: (documentId: string, documentType: string) => void;
7
+ readonly?: boolean;
8
+ }
9
+ declare const ArrayField: import("svelte").Component<Props, {}, "">;
10
+ type ArrayField = ReturnType<typeof ArrayField>;
11
+ export default ArrayField;
12
+ //# sourceMappingURL=ArrayField.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArrayField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ArrayField.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,2BAA2B,CAAC;AAMzF,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AA0NF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,13 @@
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
+ readonly?: boolean;
9
+ }
10
+ declare const BooleanField: import("svelte").Component<Props, {}, "">;
11
+ type BooleanField = ReturnType<typeof BooleanField>;
12
+ export default BooleanField;
13
+ //# sourceMappingURL=BooleanField.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BooleanField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/BooleanField.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,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAuBF,QAAA,MAAM,YAAY,2CAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ImageValue } from '../../../types/asset.js';
2
+ import type { ImageField as ImageFieldType } from '../../../types/schemas.js';
3
+ interface Props {
4
+ field: ImageFieldType;
5
+ value: ImageValue | null;
6
+ validationClasses?: string;
7
+ onUpdate: (value: ImageValue | null) => void;
8
+ schemaType?: string;
9
+ fieldPath?: string;
10
+ readonly?: boolean;
11
+ }
12
+ declare const ImageField: import("svelte").Component<Props, {}, "">;
13
+ type ImageField = ReturnType<typeof ImageField>;
14
+ export default ImageField;
15
+ //# sourceMappingURL=ImageField.svelte.d.ts.map
@@ -0,0 +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,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAI7E,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;AAuPF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -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,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,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,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,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,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"}