@aphexcms/cms-core 8.1.0 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/dist/api/api-keys.d.ts +8 -3
  2. package/dist/api/api-keys.d.ts.map +1 -1
  3. package/dist/api/schemas/assets.js +1 -1
  4. package/dist/api/schemas/documents.d.ts +0 -2
  5. package/dist/api/schemas/documents.d.ts.map +1 -1
  6. package/dist/api/schemas/documents.js +2 -8
  7. package/dist/api/schemas/instance.d.ts +6 -0
  8. package/dist/api/schemas/instance.d.ts.map +1 -0
  9. package/dist/api/schemas/instance.js +7 -0
  10. package/dist/api/schemas/user.js +1 -1
  11. package/dist/auth/auth-hooks.d.ts.map +1 -1
  12. package/dist/auth/auth-hooks.js +9 -3
  13. package/dist/cli/generate-types.d.ts.map +1 -1
  14. package/dist/cli/generate-types.js +198 -11
  15. package/dist/cli/generate-types.js.map +1 -1
  16. package/dist/components/AdminApp.svelte +55 -149
  17. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  18. package/dist/components/admin/DocumentEditor.svelte +282 -253
  19. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  20. package/dist/components/admin/DocumentVersionPanel.svelte +3 -2
  21. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
  22. package/dist/components/admin/MediaBrowser.svelte +29 -11
  23. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  24. package/dist/components/admin/ObjectModal.svelte +62 -75
  25. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  26. package/dist/components/admin/SchemaField.svelte +2 -2
  27. package/dist/components/admin/fields/ArrayField.svelte +13 -3
  28. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  29. package/dist/components/admin/fields/FileField.svelte +1 -1
  30. package/dist/components/admin/fields/ImageField.svelte +1 -1
  31. package/dist/components/admin/fields/ReferenceField.svelte +42 -11
  32. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  33. package/dist/components/admin/fields/richtext/PortableTextImageView.svelte +116 -0
  34. package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts +12 -0
  35. package/dist/components/admin/fields/richtext/PortableTextImageView.svelte.d.ts.map +1 -0
  36. package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte +111 -0
  37. package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte.d.ts +12 -0
  38. package/dist/components/admin/fields/richtext/PortableTextInlineView.svelte.d.ts.map +1 -0
  39. package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte +67 -0
  40. package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts +12 -0
  41. package/dist/components/admin/fields/richtext/PortableTextObjectView.svelte.d.ts.map +1 -0
  42. package/dist/components/admin/fields/richtext/RichtextField.svelte +1296 -0
  43. package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts +15 -0
  44. package/dist/components/admin/fields/richtext/RichtextField.svelte.d.ts.map +1 -0
  45. package/dist/components/admin/fields/richtext/custom-annotation-mark.d.ts +7 -0
  46. package/dist/components/admin/fields/richtext/custom-annotation-mark.d.ts.map +1 -0
  47. package/dist/components/admin/fields/richtext/custom-annotation-mark.js +33 -0
  48. package/dist/components/admin/fields/richtext/portable-text-inline-object.d.ts +11 -0
  49. package/dist/components/admin/fields/richtext/portable-text-inline-object.d.ts.map +1 -0
  50. package/dist/components/admin/fields/richtext/portable-text-inline-object.js +31 -0
  51. package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts +11 -0
  52. package/dist/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -0
  53. package/dist/components/admin/fields/richtext/portable-text-object-node.js +31 -0
  54. package/dist/components/admin/fields/richtext/portable-text-serializer.d.ts +38 -0
  55. package/dist/components/admin/fields/richtext/portable-text-serializer.d.ts.map +1 -0
  56. package/dist/components/admin/fields/richtext/portable-text-serializer.js +297 -0
  57. package/dist/components/admin/fields/richtext/svelte-inline-node-view.d.ts +8 -0
  58. package/dist/components/admin/fields/richtext/svelte-inline-node-view.d.ts.map +1 -0
  59. package/dist/components/admin/fields/richtext/svelte-inline-node-view.js +67 -0
  60. package/dist/components/admin/fields/richtext/svelte-node-view.d.ts +8 -0
  61. package/dist/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -0
  62. package/dist/components/admin/fields/richtext/svelte-node-view.js +63 -0
  63. package/dist/components/layout/OrganizationSwitcher.svelte +1 -1
  64. package/dist/components/layout/sidebar/NavMain.svelte +9 -1
  65. package/dist/components/layout/sidebar/NavMain.svelte.d.ts.map +1 -1
  66. package/dist/db/interfaces/asset.d.ts +2 -4
  67. package/dist/db/interfaces/asset.d.ts.map +1 -1
  68. package/dist/db/interfaces/document.d.ts +8 -2
  69. package/dist/db/interfaces/document.d.ts.map +1 -1
  70. package/dist/db/interfaces/organization.d.ts +1 -1
  71. package/dist/db/interfaces/organization.d.ts.map +1 -1
  72. package/dist/field-access.d.ts.map +1 -1
  73. package/dist/field-access.js +5 -1
  74. package/dist/graphql/depth-limit.d.ts +8 -0
  75. package/dist/graphql/depth-limit.d.ts.map +1 -0
  76. package/dist/graphql/depth-limit.js +79 -0
  77. package/dist/graphql/index.d.ts.map +1 -1
  78. package/dist/graphql/index.js +12 -1
  79. package/dist/graphql/resolvers.d.ts.map +1 -1
  80. package/dist/graphql/resolvers.js +22 -22
  81. package/dist/graphql/schema.d.ts.map +1 -1
  82. package/dist/graphql/schema.js +7 -3
  83. package/dist/hooks.d.ts +2 -0
  84. package/dist/hooks.d.ts.map +1 -1
  85. package/dist/hooks.js +5 -2
  86. package/dist/lib/api/api-keys.d.ts +8 -3
  87. package/dist/lib/api/api-keys.d.ts.map +1 -1
  88. package/dist/lib/api/api-keys.js.map +1 -1
  89. package/dist/lib/api/schemas/assets.js +1 -1
  90. package/dist/lib/api/schemas/assets.js.map +1 -1
  91. package/dist/lib/api/schemas/documents.d.ts +0 -2
  92. package/dist/lib/api/schemas/documents.d.ts.map +1 -1
  93. package/dist/lib/api/schemas/documents.js +2 -8
  94. package/dist/lib/api/schemas/documents.js.map +1 -1
  95. package/dist/lib/api/schemas/instance.d.ts +6 -0
  96. package/dist/lib/api/schemas/instance.d.ts.map +1 -0
  97. package/dist/lib/api/schemas/instance.js +8 -0
  98. package/dist/lib/api/schemas/instance.js.map +1 -0
  99. package/dist/lib/api/schemas/user.js +1 -1
  100. package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
  101. package/dist/lib/auth/auth-hooks.js +9 -3
  102. package/dist/lib/auth/auth-hooks.js.map +1 -1
  103. package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.d.ts +7 -0
  104. package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.d.ts.map +1 -0
  105. package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.js +34 -0
  106. package/dist/lib/components/admin/fields/richtext/custom-annotation-mark.js.map +1 -0
  107. package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.d.ts +11 -0
  108. package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.d.ts.map +1 -0
  109. package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.js +32 -0
  110. package/dist/lib/components/admin/fields/richtext/portable-text-inline-object.js.map +1 -0
  111. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts +11 -0
  112. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.d.ts.map +1 -0
  113. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js +32 -0
  114. package/dist/lib/components/admin/fields/richtext/portable-text-object-node.js.map +1 -0
  115. package/dist/lib/components/admin/fields/richtext/portable-text-serializer.d.ts +38 -0
  116. package/dist/lib/components/admin/fields/richtext/portable-text-serializer.d.ts.map +1 -0
  117. package/dist/lib/components/admin/fields/richtext/portable-text-serializer.js +298 -0
  118. package/dist/lib/components/admin/fields/richtext/portable-text-serializer.js.map +1 -0
  119. package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.d.ts +8 -0
  120. package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.d.ts.map +1 -0
  121. package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.js +68 -0
  122. package/dist/lib/components/admin/fields/richtext/svelte-inline-node-view.js.map +1 -0
  123. package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts +8 -0
  124. package/dist/lib/components/admin/fields/richtext/svelte-node-view.d.ts.map +1 -0
  125. package/dist/lib/components/admin/fields/richtext/svelte-node-view.js +64 -0
  126. package/dist/lib/components/admin/fields/richtext/svelte-node-view.js.map +1 -0
  127. package/dist/lib/db/interfaces/asset.d.ts +2 -4
  128. package/dist/lib/db/interfaces/asset.d.ts.map +1 -1
  129. package/dist/lib/db/interfaces/document.d.ts +8 -2
  130. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  131. package/dist/lib/db/interfaces/organization.d.ts +1 -1
  132. package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
  133. package/dist/lib/field-access.d.ts.map +1 -1
  134. package/dist/lib/field-access.js +5 -1
  135. package/dist/lib/field-access.js.map +1 -1
  136. package/dist/lib/graphql/depth-limit.d.ts +8 -0
  137. package/dist/lib/graphql/depth-limit.d.ts.map +1 -0
  138. package/dist/lib/graphql/depth-limit.js +80 -0
  139. package/dist/lib/graphql/depth-limit.js.map +1 -0
  140. package/dist/lib/graphql/index.d.ts.map +1 -1
  141. package/dist/lib/graphql/index.js +12 -1
  142. package/dist/lib/graphql/index.js.map +1 -1
  143. package/dist/lib/graphql/resolvers.d.ts.map +1 -1
  144. package/dist/lib/graphql/resolvers.js +22 -22
  145. package/dist/lib/graphql/resolvers.js.map +1 -1
  146. package/dist/lib/graphql/schema.d.ts.map +1 -1
  147. package/dist/lib/graphql/schema.js +7 -3
  148. package/dist/lib/graphql/schema.js.map +1 -1
  149. package/dist/lib/hooks.d.ts +2 -0
  150. package/dist/lib/hooks.d.ts.map +1 -1
  151. package/dist/lib/hooks.js +5 -2
  152. package/dist/lib/hooks.js.map +1 -1
  153. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  154. package/dist/lib/local-api/collection-api.js +14 -9
  155. package/dist/lib/local-api/collection-api.js.map +1 -1
  156. package/dist/lib/local-api/index.d.ts +5 -1
  157. package/dist/lib/local-api/index.d.ts.map +1 -1
  158. package/dist/lib/local-api/index.js +12 -4
  159. package/dist/lib/local-api/index.js.map +1 -1
  160. package/dist/lib/routes/assets-cdn.d.ts.map +1 -1
  161. package/dist/lib/routes/assets-cdn.js +8 -3
  162. package/dist/lib/routes/assets-cdn.js.map +1 -1
  163. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  164. package/dist/lib/schema-utils/validator.js +5 -1
  165. package/dist/lib/schema-utils/validator.js.map +1 -1
  166. package/dist/lib/server/api/index.d.ts.map +1 -1
  167. package/dist/lib/server/api/index.js +18 -0
  168. package/dist/lib/server/api/index.js.map +1 -1
  169. package/dist/lib/server/api/routes/assets-bulk.d.ts.map +1 -1
  170. package/dist/lib/server/api/routes/assets-bulk.js +4 -0
  171. package/dist/lib/server/api/routes/assets-bulk.js.map +1 -1
  172. package/dist/lib/server/api/routes/assets-by-id.d.ts.map +1 -1
  173. package/dist/lib/server/api/routes/assets-by-id.js +17 -2
  174. package/dist/lib/server/api/routes/assets-by-id.js.map +1 -1
  175. package/dist/lib/server/api/routes/assets-references.d.ts.map +1 -1
  176. package/dist/lib/server/api/routes/assets-references.js +6 -4
  177. package/dist/lib/server/api/routes/assets-references.js.map +1 -1
  178. package/dist/lib/server/api/routes/assets.d.ts.map +1 -1
  179. package/dist/lib/server/api/routes/assets.js +18 -9
  180. package/dist/lib/server/api/routes/assets.js.map +1 -1
  181. package/dist/lib/server/api/routes/document-versions.d.ts.map +1 -1
  182. package/dist/lib/server/api/routes/document-versions.js +8 -0
  183. package/dist/lib/server/api/routes/document-versions.js.map +1 -1
  184. package/dist/lib/server/api/routes/documents-by-id.d.ts.map +1 -1
  185. package/dist/lib/server/api/routes/documents-by-id.js +3 -3
  186. package/dist/lib/server/api/routes/documents-by-id.js.map +1 -1
  187. package/dist/lib/server/api/routes/documents-publish.d.ts.map +1 -1
  188. package/dist/lib/server/api/routes/documents-publish.js +2 -2
  189. package/dist/lib/server/api/routes/documents-publish.js.map +1 -1
  190. package/dist/lib/server/api/routes/documents-query.d.ts.map +1 -1
  191. package/dist/lib/server/api/routes/documents-query.js +2 -3
  192. package/dist/lib/server/api/routes/documents-query.js.map +1 -1
  193. package/dist/lib/server/api/routes/documents.d.ts.map +1 -1
  194. package/dist/lib/server/api/routes/documents.js +3 -5
  195. package/dist/lib/server/api/routes/documents.js.map +1 -1
  196. package/dist/lib/server/api/routes/organizations-invitations.d.ts.map +1 -1
  197. package/dist/lib/server/api/routes/organizations-invitations.js +1 -1
  198. package/dist/lib/server/api/routes/organizations-invitations.js.map +1 -1
  199. package/dist/lib/server/api/routes/organizations-members.d.ts.map +1 -1
  200. package/dist/lib/server/api/routes/organizations-members.js.map +1 -1
  201. package/dist/lib/server/index.d.ts +1 -0
  202. package/dist/lib/server/index.d.ts.map +1 -1
  203. package/dist/lib/server/index.js +2 -0
  204. package/dist/lib/server/index.js.map +1 -1
  205. package/dist/lib/services/asset-service.d.ts.map +1 -1
  206. package/dist/lib/services/asset-service.js +4 -2
  207. package/dist/lib/services/asset-service.js.map +1 -1
  208. package/dist/lib/services/references-service.d.ts.map +1 -1
  209. package/dist/lib/services/references-service.js.map +1 -1
  210. package/dist/lib/storage/adapters/local-storage-adapter.d.ts +4 -0
  211. package/dist/lib/storage/adapters/local-storage-adapter.d.ts.map +1 -1
  212. package/dist/lib/storage/adapters/local-storage-adapter.js +28 -6
  213. package/dist/lib/storage/adapters/local-storage-adapter.js.map +1 -1
  214. package/dist/lib/types/capabilities.d.ts +1 -0
  215. package/dist/lib/types/capabilities.d.ts.map +1 -1
  216. package/dist/lib/types/capabilities.js +3 -0
  217. package/dist/lib/types/capabilities.js.map +1 -1
  218. package/dist/lib/types/config.d.ts +16 -1
  219. package/dist/lib/types/config.d.ts.map +1 -1
  220. package/dist/lib/types/schemas.d.ts +27 -0
  221. package/dist/lib/types/schemas.d.ts.map +1 -1
  222. package/dist/lib/types/schemas.js +3 -1
  223. package/dist/lib/types/schemas.js.map +1 -1
  224. package/dist/lib/utils/logger.d.ts +8 -6
  225. package/dist/lib/utils/logger.d.ts.map +1 -1
  226. package/dist/lib/utils/logger.js +11 -2
  227. package/dist/lib/utils/logger.js.map +1 -1
  228. package/dist/lib/utils/mime-detect.d.ts.map +1 -1
  229. package/dist/lib/utils/mime-detect.js +21 -6
  230. package/dist/lib/utils/mime-detect.js.map +1 -1
  231. package/dist/lib/vite/index.d.ts.map +1 -1
  232. package/dist/lib/vite/index.js +4 -5
  233. package/dist/lib/vite/index.js.map +1 -1
  234. package/dist/local-api/collection-api.d.ts.map +1 -1
  235. package/dist/local-api/collection-api.js +14 -9
  236. package/dist/local-api/index.d.ts +5 -1
  237. package/dist/local-api/index.d.ts.map +1 -1
  238. package/dist/local-api/index.js +12 -4
  239. package/dist/routes/assets-cdn.d.ts.map +1 -1
  240. package/dist/routes/assets-cdn.js +8 -3
  241. package/dist/schema-utils/validator.d.ts.map +1 -1
  242. package/dist/schema-utils/validator.js +5 -1
  243. package/dist/server/api/index.d.ts.map +1 -1
  244. package/dist/server/api/index.js +18 -0
  245. package/dist/server/api/routes/assets-bulk.d.ts.map +1 -1
  246. package/dist/server/api/routes/assets-bulk.js +4 -0
  247. package/dist/server/api/routes/assets-by-id.d.ts.map +1 -1
  248. package/dist/server/api/routes/assets-by-id.js +17 -2
  249. package/dist/server/api/routes/assets-references.d.ts.map +1 -1
  250. package/dist/server/api/routes/assets-references.js +6 -4
  251. package/dist/server/api/routes/assets.d.ts.map +1 -1
  252. package/dist/server/api/routes/assets.js +18 -9
  253. package/dist/server/api/routes/document-versions.d.ts.map +1 -1
  254. package/dist/server/api/routes/document-versions.js +8 -0
  255. package/dist/server/api/routes/documents-by-id.d.ts.map +1 -1
  256. package/dist/server/api/routes/documents-by-id.js +3 -3
  257. package/dist/server/api/routes/documents-publish.d.ts.map +1 -1
  258. package/dist/server/api/routes/documents-publish.js +2 -2
  259. package/dist/server/api/routes/documents-query.d.ts.map +1 -1
  260. package/dist/server/api/routes/documents-query.js +2 -3
  261. package/dist/server/api/routes/documents.d.ts.map +1 -1
  262. package/dist/server/api/routes/documents.js +3 -5
  263. package/dist/server/api/routes/organizations-invitations.d.ts.map +1 -1
  264. package/dist/server/api/routes/organizations-invitations.js +1 -1
  265. package/dist/server/api/routes/organizations-members.d.ts.map +1 -1
  266. package/dist/server/index.d.ts +1 -0
  267. package/dist/server/index.d.ts.map +1 -1
  268. package/dist/server/index.js +2 -0
  269. package/dist/services/asset-service.d.ts.map +1 -1
  270. package/dist/services/asset-service.js +4 -2
  271. package/dist/services/references-service.d.ts.map +1 -1
  272. package/dist/storage/adapters/local-storage-adapter.d.ts +4 -0
  273. package/dist/storage/adapters/local-storage-adapter.d.ts.map +1 -1
  274. package/dist/storage/adapters/local-storage-adapter.js +28 -6
  275. package/dist/types/capabilities.d.ts +1 -0
  276. package/dist/types/capabilities.d.ts.map +1 -1
  277. package/dist/types/capabilities.js +3 -0
  278. package/dist/types/config.d.ts +16 -1
  279. package/dist/types/config.d.ts.map +1 -1
  280. package/dist/types/schemas.d.ts +27 -0
  281. package/dist/types/schemas.d.ts.map +1 -1
  282. package/dist/types/schemas.js +3 -1
  283. package/dist/utils/logger.d.ts +8 -6
  284. package/dist/utils/logger.d.ts.map +1 -1
  285. package/dist/utils/logger.js +11 -2
  286. package/dist/utils/mime-detect.d.ts.map +1 -1
  287. package/dist/utils/mime-detect.js +21 -6
  288. package/dist/vite/index.d.ts.map +1 -1
  289. package/dist/vite/index.js +4 -5
  290. package/package.json +9 -5
@@ -9,7 +9,7 @@
9
9
  import * as Popover from '@aphexcms/ui/shadcn/popover';
10
10
  import * as Select from '@aphexcms/ui/shadcn/select';
11
11
  import { page } from '$app/state';
12
- import { goto, replaceState } from '$app/navigation';
12
+ import { goto } from '$app/navigation';
13
13
  import { SvelteURLSearchParams } from 'svelte/reactivity';
14
14
  import type { SchemaType } from '../types/index';
15
15
  import type { UserSessionPreferences } from '../types/organization';
@@ -36,7 +36,6 @@
36
36
  import { cmsLogger } from '../utils/logger';
37
37
  import { pluralize } from '../utils/pluralize';
38
38
  import { toast } from 'svelte-sonner';
39
- import { resolve } from '$app/paths';
40
39
  import { setPermissionsContext } from '../permissions-context.svelte';
41
40
 
42
41
  interface Props {
@@ -151,8 +150,9 @@
151
150
  // Mobile navigation state (Sanity-style)
152
151
  let mobileView = $state<'types' | 'documents' | 'editor'>('types');
153
152
 
154
- // Window size reactivity
155
- let windowWidth = $state(1024); // Default to desktop size
153
+ // Window size reactivity — default to mobile-safe width for SSR,
154
+ // immediately overwritten on mount.
155
+ let windowWidth = $state(typeof window !== 'undefined' ? window.innerWidth : 375);
156
156
 
157
157
  // Document editor state (moved before layoutConfig)
158
158
  let editingDocumentId = $state<string | null>(null);
@@ -271,18 +271,15 @@
271
271
  // Track which editor is currently active/focused (0 = primary, 1+ = stacked)
272
272
  let activeEditorIndex = $state<number>(0);
273
273
 
274
- // Calculate how many editors can be shown expanded based on available space
275
- const MIN_EDITOR_WIDTH = 700; // Minimum width for ANY expanded editor
276
- const COLLAPSED_WIDTH = 60; // Width of collapsed panels
277
- const TYPES_EXPANDED = 350;
278
- const DOCS_EXPANDED = 350;
274
+ // Layout: editors take precedence. When space is tight, panels collapse
275
+ // to 60px strips. Types panel always stays visible; docs list collapses
276
+ // first, then types.
277
+ const MIN_EDITOR_WIDTH = 650;
278
+ const COLLAPSED_WIDTH = 60;
279
+ const TYPES_WIDTH = 350;
280
+ const DOCS_WIDTH = 350;
279
281
  let layoutConfig = $derived.by(() => {
280
- const start = performance.now();
281
- // Version panel is fixed-width (280px), not a full editor — deduct it
282
- // from available space instead of counting it as an editor slot.
283
- const totalEditors =
284
- (currentView === 'editor' ? 1 : 0) +
285
- (editorStack.length > 0 ? 1 : 0);
282
+ const totalEditors = (currentView === 'editor' ? 1 : 0) + (editorStack.length > 0 ? 1 : 0);
286
283
 
287
284
  if (totalEditors === 0) {
288
285
  return {
@@ -298,149 +295,58 @@
298
295
  };
299
296
  }
300
297
 
301
- // Ensure activeEditorIndex is valid (can be -1 for types, -2 for docs)
302
298
  const validActiveIndex =
303
299
  activeEditorIndex < 0
304
300
  ? activeEditorIndex
305
301
  : Math.max(0, Math.min(activeEditorIndex, totalEditors - 1));
306
302
 
307
- // Check if types or docs are active (user clicked on collapsed strip)
303
+ const hasDocs = !!selectedDocumentType && !currentTypeIsSingleton;
308
304
  const typesActive = activeEditorIndex === -1;
309
305
  const docsActive = activeEditorIndex === -2;
310
306
 
311
- // Calculate space requirements
312
- // If user clicked types/docs, force those panels expanded
313
- // Otherwise, prioritize editors over panels
314
-
315
- let typesExpanded: boolean = typesActive || true; // Expand types if clicked, or by default
316
- let docsExpanded: boolean = docsActive || true; // Expand docs if clicked, or by default
317
- let typesWidth = typesExpanded ? TYPES_EXPANDED : COLLAPSED_WIDTH;
318
- let docsWidth = selectedDocumentType ? (docsExpanded ? DOCS_EXPANDED : COLLAPSED_WIDTH) : 0;
319
-
320
- // If user explicitly clicked types/docs, keep those panels expanded no matter what
321
- if (typesActive || docsActive) {
322
- // Force the clicked panel to stay expanded
323
- typesExpanded = typesActive ? true : typesExpanded;
324
- docsExpanded = docsActive ? true : docsExpanded;
325
- typesWidth = typesActive ? TYPES_EXPANDED : COLLAPSED_WIDTH;
326
- docsWidth = docsActive ? DOCS_EXPANDED : selectedDocumentType ? COLLAPSED_WIDTH : 0;
327
-
328
- // Calculate how many editors fit with these panel sizes
329
- let remainingWidth = windowWidth - typesWidth - docsWidth;
330
- let maxExpandedEditors = Math.floor(remainingWidth / MIN_EDITOR_WIDTH);
331
-
332
- // Expand as many editors as possible around the last active editor
333
- if (maxExpandedEditors < 1) maxExpandedEditors = 0;
334
-
335
- // Build expanded indices for editors
336
- let expandedIndices: number[] = [];
337
- if (maxExpandedEditors > 0 && totalEditors > 0) {
338
- // Start from rightmost editor (most recently opened)
339
- const lastEditorIndex = totalEditors - 1;
340
- expandedIndices.push(lastEditorIndex);
341
-
342
- // Expand editors to the left if space allows
343
- for (
344
- let i = lastEditorIndex - 1;
345
- i >= 0 && expandedIndices.length < maxExpandedEditors;
346
- i--
347
- ) {
348
- expandedIndices.push(i);
349
- }
307
+ // Two editors open → always collapse both panels to maximize editing space
308
+ // Unless user explicitly clicked a collapsed strip to expand it
309
+ let typesExpanded = typesActive || totalEditors < 2;
310
+ let docsExpanded = docsActive || totalEditors < 2;
311
+
312
+ let panelsWidth =
313
+ (typesExpanded ? TYPES_WIDTH : COLLAPSED_WIDTH) +
314
+ (hasDocs ? (docsExpanded ? DOCS_WIDTH : COLLAPSED_WIDTH) : 0);
315
+ let editorSpace = windowWidth - panelsWidth;
316
+ let maxEditors = Math.floor(editorSpace / MIN_EDITOR_WIDTH);
317
+
318
+ // Single editor: collapse panels only if editor doesn't fit.
319
+ // Skip if user explicitly clicked a collapsed strip to expand it.
320
+ if (totalEditors === 1 && !typesActive && !docsActive) {
321
+ if (maxEditors < 1 && hasDocs) {
322
+ docsExpanded = false;
323
+ panelsWidth = TYPES_WIDTH + COLLAPSED_WIDTH;
324
+ editorSpace = windowWidth - panelsWidth;
325
+ maxEditors = Math.floor(editorSpace / MIN_EDITOR_WIDTH);
350
326
  }
351
327
 
352
- const expandedCount = expandedIndices.length;
353
-
354
- return {
355
- totalEditors,
356
- expandedCount,
357
- collapsedCount: totalEditors - expandedCount,
358
- typesCollapsed: !typesExpanded,
359
- docsCollapsed: !docsExpanded,
360
- expandedIndices,
361
- activeIndex: validActiveIndex,
362
- typesExpanded,
363
- docsExpanded
364
- };
365
- }
366
-
367
- // Normal mode: prioritize editors over panels
368
- // Calculate how many editors we can fit with current panel widths
369
- let remainingWidth = windowWidth - typesWidth - docsWidth;
370
- let maxExpandedEditors = Math.floor(remainingWidth / MIN_EDITOR_WIDTH);
371
-
372
- // If we can't fit all editors, start collapsing panels.
373
- // Types sidebar collapses first — the docs list is more useful when
374
- // actively editing (shows siblings in the same collection).
375
- if (maxExpandedEditors < totalEditors) {
376
- typesWidth = COLLAPSED_WIDTH;
377
- typesExpanded = false;
378
- remainingWidth = windowWidth - typesWidth - docsWidth;
379
- maxExpandedEditors = Math.floor(remainingWidth / MIN_EDITOR_WIDTH);
380
- }
381
-
382
- // If still not enough space, collapse docs list too
383
- if (maxExpandedEditors < totalEditors) {
384
- docsWidth = selectedDocumentType ? COLLAPSED_WIDTH : 0;
385
- docsExpanded = false;
386
- remainingWidth = windowWidth - typesWidth - docsWidth;
387
- maxExpandedEditors = Math.floor(remainingWidth / MIN_EDITOR_WIDTH);
328
+ if (maxEditors < 1) {
329
+ typesExpanded = false;
330
+ panelsWidth = COLLAPSED_WIDTH + (hasDocs ? COLLAPSED_WIDTH : 0);
331
+ editorSpace = windowWidth - panelsWidth;
332
+ maxEditors = Math.floor(editorSpace / MIN_EDITOR_WIDTH);
333
+ }
388
334
  }
389
335
 
390
- // Always expand at least the active editor
391
- if (maxExpandedEditors < 1) {
392
- maxExpandedEditors = 1;
393
- }
336
+ if (maxEditors < 1) maxEditors = 1;
394
337
 
395
- // Expand editors around the active one symmetrically
338
+ // Build expanded editor indices, prioritizing active + most recent
396
339
  let expandedIndices: number[] = [validActiveIndex];
397
-
398
- if (maxExpandedEditors > 1) {
399
- // How many editors to add on each side
400
- const slotsToFill = Math.min(maxExpandedEditors - 1, totalEditors - 1);
401
-
402
- // Expand symmetrically around active editor
403
- for (let offset = 1; offset <= slotsToFill; offset++) {
404
- const leftIndex = validActiveIndex - offset;
405
- const rightIndex = validActiveIndex + offset;
406
-
407
- // Alternate left and right to maintain symmetry
408
- if (offset % 2 === 1) {
409
- // Odd offset: try right first, then left
410
- if (rightIndex < totalEditors && !expandedIndices.includes(rightIndex)) {
411
- expandedIndices.push(rightIndex);
412
- if (expandedIndices.length >= maxExpandedEditors) break;
413
- }
414
- if (leftIndex >= 0 && !expandedIndices.includes(leftIndex)) {
415
- expandedIndices.push(leftIndex);
416
- if (expandedIndices.length >= maxExpandedEditors) break;
417
- }
418
- } else {
419
- // Even offset: try left first, then right
420
- if (leftIndex >= 0 && !expandedIndices.includes(leftIndex)) {
421
- expandedIndices.push(leftIndex);
422
- if (expandedIndices.length >= maxExpandedEditors) break;
423
- }
424
- if (rightIndex < totalEditors && !expandedIndices.includes(rightIndex)) {
425
- expandedIndices.push(rightIndex);
426
- if (expandedIndices.length >= maxExpandedEditors) break;
427
- }
428
- }
340
+ if (maxEditors > 1) {
341
+ for (let i = totalEditors - 1; i >= 0 && expandedIndices.length < maxEditors; i--) {
342
+ if (i !== validActiveIndex) expandedIndices.push(i);
429
343
  }
430
344
  }
431
345
 
432
- const expandedCount = expandedIndices.length;
433
-
434
- const end = performance.now();
435
- cmsLogger.debug(
436
- 'Layout Calc',
437
- `${(end - start).toFixed(3)}ms | Editors: ${totalEditors} | Expanded: ${expandedCount} | Window: ${windowWidth}px | Active: ${validActiveIndex} | ExpandedIndices: [${expandedIndices.join(', ')}]`
438
- );
439
-
440
346
  return {
441
347
  totalEditors,
442
- expandedCount,
443
- collapsedCount: totalEditors - expandedCount,
348
+ expandedCount: expandedIndices.length,
349
+ collapsedCount: totalEditors - expandedIndices.length,
444
350
  typesCollapsed: !typesExpanded,
445
351
  docsCollapsed: !docsExpanded,
446
352
  expandedIndices,
@@ -530,7 +436,7 @@
530
436
  });
531
437
  organizationsMap = map;
532
438
  }
533
- } catch (err) {
439
+ } catch {
534
440
  toast.error('Failed to fetch organizations');
535
441
  }
536
442
  }
@@ -616,7 +522,7 @@
616
522
  if (historyParam === '1' && !showVersionPanel) {
617
523
  showVersionPanel = true;
618
524
  versionPanelDocId = stackParam
619
- ? editorStack[editorStack.length - 1]?.documentId ?? docId
525
+ ? (editorStack[editorStack.length - 1]?.documentId ?? docId)
620
526
  : docId;
621
527
  } else if (!historyParam && showVersionPanel) {
622
528
  showVersionPanel = false;
@@ -784,8 +690,8 @@
784
690
  }
785
691
 
786
692
  // Close version panel when navigating away
787
- let prevDocType = $state(selectedDocumentType);
788
- let prevDocId = $state(editingDocumentId);
693
+ let prevDocType = $state<string | null>(null);
694
+ let prevDocId = $state<string | null>(null);
789
695
  let initialNavDone = $state(false);
790
696
  $effect(() => {
791
697
  if (selectedDocumentType !== prevDocType || editingDocumentId !== prevDocId) {
@@ -835,9 +741,7 @@
835
741
  // the same array — replace the whole stack with the new pick.
836
742
  // If clicking from within the stacked panel, push deeper.
837
743
  const newStack =
838
- activeEditorIndex === 0 && editorStack.length > 0
839
- ? [newEntry]
840
- : [...editorStack, newEntry];
744
+ activeEditorIndex === 0 && editorStack.length > 0 ? [newEntry] : [...editorStack, newEntry];
841
745
 
842
746
  // URL tracks the full chain for refresh support
843
747
  const stackParam = newStack.map((item) => `${item.documentType}:${item.documentId}`).join(',');
@@ -1158,7 +1062,9 @@
1158
1062
  {/if}
1159
1063
  </div>
1160
1064
  <span class="text-sm"
1161
- >{docType.singleton ? docType.title : pluralize(docType.title)}</span
1065
+ >{docType.singleton
1066
+ ? docType.title
1067
+ : pluralize(docType.title)}</span
1162
1068
  >
1163
1069
  </div>
1164
1070
  <svg
@@ -1671,7 +1577,7 @@
1671
1577
  {#if isExpanded}
1672
1578
  <div
1673
1579
  class="border-rule h-full flex-1 overflow-x-hidden overflow-y-auto border-l transition-all duration-200"
1674
- style="min-width: 0;{focusModeOn || showVersionPanel ? '' : ' max-width: 50%;'}"
1580
+ style="min-width: 0;"
1675
1581
  >
1676
1582
  <DocumentEditor
1677
1583
  {schemas}
@@ -1787,7 +1693,7 @@
1787
1693
  <p class="text-muted-foreground mb-4">Query your CMS data with the GraphQL API</p>
1788
1694
 
1789
1695
  <a
1790
- href={resolve(graphqlSettings.endpoint, {})}
1696
+ href={graphqlSettings.endpoint}
1791
1697
  target="_blank"
1792
1698
  class="bg-primary text-primary-foreground hover:bg-primary/90 inline-flex items-center gap-2 rounded-md px-4 py-2 transition-colors"
1793
1699
  >
@@ -1 +1 @@
1
- {"version":3,"file":"AdminApp.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/AdminApp.svelte.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AA4BnE,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC;IACxD,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAChD;AA6iDF,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"AdminApp.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/components/AdminApp.svelte.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AA2BnE,UAAU,KAAK;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC;IACxD,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,eAAe,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CAChD;AA+8CF,QAAA,MAAM,QAAQ,2CAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}