@aphexcms/cms-core 8.0.0 → 8.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.
@@ -276,14 +276,13 @@
276
276
  const COLLAPSED_WIDTH = 60; // Width of collapsed panels
277
277
  const TYPES_EXPANDED = 350;
278
278
  const DOCS_EXPANDED = 350;
279
-
280
279
  let layoutConfig = $derived.by(() => {
281
280
  const start = performance.now();
282
- // Only ever 1 stacked panel rendered (the last entry), so count it as 0 or 1
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
283
  const totalEditors =
284
284
  (currentView === 'editor' ? 1 : 0) +
285
- (editorStack.length > 0 ? 1 : 0) +
286
- (showVersionPanel ? 1 : 0);
285
+ (editorStack.length > 0 ? 1 : 0);
287
286
 
288
287
  if (totalEditors === 0) {
289
288
  return {
@@ -546,6 +545,7 @@
546
545
  const action = url.searchParams.get('action');
547
546
  const docId = url.searchParams.get('docId');
548
547
  const stackParam = url.searchParams.get('stack');
548
+ const historyParam = url.searchParams.get('history');
549
549
 
550
550
  cmsLogger.debug('[URL Effect]', 'Params:', {
551
551
  docType,
@@ -612,6 +612,18 @@
612
612
  }
613
613
  }
614
614
 
615
+ // Restore version history panel from URL
616
+ if (historyParam === '1' && !showVersionPanel) {
617
+ showVersionPanel = true;
618
+ versionPanelDocId = stackParam
619
+ ? editorStack[editorStack.length - 1]?.documentId ?? docId
620
+ : docId;
621
+ } else if (!historyParam && showVersionPanel) {
622
+ showVersionPanel = false;
623
+ versionPanelDocId = null;
624
+ versionPreviewData = null;
625
+ }
626
+
615
627
  if (docType) {
616
628
  if (selectedDocumentType !== docType) {
617
629
  selectedDocumentType = docType;
@@ -688,6 +700,7 @@
688
700
  params.delete('docId');
689
701
  params.delete('action');
690
702
  params.delete('stack');
703
+ params.delete('history');
691
704
  await goto(`/admin?${params.toString()}`, { replaceState: false });
692
705
  mobileView = 'documents';
693
706
  }
@@ -698,6 +711,7 @@
698
711
  params.set('action', 'create');
699
712
  params.delete('docId');
700
713
  params.delete('stack');
714
+ params.delete('history');
701
715
  await goto(`/admin?${params.toString()}`, { replaceState: false });
702
716
  mobileView = 'editor';
703
717
  }
@@ -735,6 +749,7 @@
735
749
  params.delete('action');
736
750
  params.delete('stack');
737
751
  params.delete('focus');
752
+ params.delete('history');
738
753
  await goto(`/admin?${params.toString()}`, { replaceState: false });
739
754
  mobileView = 'documents';
740
755
  } else {
@@ -745,33 +760,43 @@
745
760
  params.delete('action');
746
761
  params.delete('stack');
747
762
  params.delete('focus');
763
+ params.delete('history');
748
764
  await goto(`/admin?${params.toString()}`, { replaceState: false });
749
765
  mobileView = 'types';
750
766
  }
751
767
  }
752
768
 
753
- // Handle opening reference in new editor panel
754
769
  function handleOpenVersionHistory(docId: string) {
755
770
  showVersionPanel = true;
756
771
  versionPanelDocId = docId;
772
+ const params = new SvelteURLSearchParams(page.url.searchParams);
773
+ params.set('history', '1');
774
+ goto(`/admin?${params.toString()}`, { replaceState: true });
757
775
  }
758
776
 
759
777
  function handleCloseVersionPanel() {
760
778
  showVersionPanel = false;
761
779
  versionPanelDocId = null;
762
780
  versionPreviewData = null;
781
+ const params = new SvelteURLSearchParams(page.url.searchParams);
782
+ params.delete('history');
783
+ goto(`/admin?${params.toString()}`, { replaceState: true });
763
784
  }
764
785
 
765
786
  // Close version panel when navigating away
766
787
  let prevDocType = $state(selectedDocumentType);
767
788
  let prevDocId = $state(editingDocumentId);
789
+ let initialNavDone = $state(false);
768
790
  $effect(() => {
769
791
  if (selectedDocumentType !== prevDocType || editingDocumentId !== prevDocId) {
770
792
  prevDocType = selectedDocumentType;
771
793
  prevDocId = editingDocumentId;
772
- if (showVersionPanel) {
773
- handleCloseVersionPanel();
794
+ if (initialNavDone && showVersionPanel) {
795
+ showVersionPanel = false;
796
+ versionPanelDocId = null;
797
+ versionPreviewData = null;
774
798
  }
799
+ initialNavDone = true;
775
800
  }
776
801
  });
777
802
 
@@ -847,6 +872,7 @@
847
872
  async function handleCloseStackedEditor(_index: number) {
848
873
  const params = new SvelteURLSearchParams(page.url.searchParams);
849
874
  params.delete('stack');
875
+ params.delete('history');
850
876
  await goto(`/admin?${params.toString()}`, { replaceState: false });
851
877
  activeEditorIndex = 0;
852
878
  }
@@ -995,6 +1021,7 @@
995
1021
  params.delete('docId');
996
1022
  params.delete('action');
997
1023
  params.delete('stack');
1024
+ params.delete('history');
998
1025
  await goto(`/admin?${params.toString()}`, { replaceState: false });
999
1026
  }}
1000
1027
  class="text-muted-foreground hover:text-foreground flex items-center gap-2 text-sm"
@@ -1644,7 +1671,7 @@
1644
1671
  {#if isExpanded}
1645
1672
  <div
1646
1673
  class="border-rule h-full flex-1 overflow-x-hidden overflow-y-auto border-l transition-all duration-200"
1647
- style="min-width: 0;{focusModeOn ? '' : ' max-width: 50%;'}"
1674
+ style="min-width: 0;{focusModeOn || showVersionPanel ? '' : ' max-width: 50%;'}"
1648
1675
  >
1649
1676
  <DocumentEditor
1650
1677
  {schemas}
@@ -1710,7 +1737,7 @@
1710
1737
  <!-- Version History Panel -->
1711
1738
  {#if showVersionPanel && versionPanelDocId}
1712
1739
  <div
1713
- class="border-rule h-full w-[280px] min-w-[250px] overflow-y-auto border-l transition-all duration-200"
1740
+ class="border-rule h-full w-[280px] shrink-0 overflow-y-auto border-l transition-all duration-200"
1714
1741
  >
1715
1742
  <DocumentVersionPanel
1716
1743
  bind:this={versionPanelRef}
@@ -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;AAkhDF,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;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"}
@@ -30,6 +30,10 @@ function walk(value, ids) {
30
30
  ids.add(obj._ref);
31
31
  return;
32
32
  }
33
+ // Image/file fields store asset refs ({ _type:'image', asset:{_type:'reference', _ref} })
34
+ // that point to the assets table, not documents — skip them.
35
+ if (obj._type === 'image' || obj._type === 'file')
36
+ return;
33
37
  for (const key of Object.keys(obj)) {
34
38
  if (key.startsWith('_'))
35
39
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"reference-walk.js","sourceRoot":"","sources":["../../../src/lib/utils/reference-walk.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,4CAA4C;AAI5C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAClC,IAAa,EACb,OAA2B,EAC3B,SAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,GAAgB;IAC7C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO;IACR,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACtC,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3E,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO;IACR,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"reference-walk.js","sourceRoot":"","sources":["../../../src/lib/utils/reference-walk.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,4CAA4C;AAI5C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAClC,IAAa,EACb,OAA2B,EAC3B,SAAwB;IAExB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,IAAI,CAAC,KAAc,EAAE,GAAgB;IAC7C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO;IACR,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACtC,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,IAAI,GAAG,CAAC,KAAK,KAAK,WAAW,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3E,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO;IACR,CAAC;IACD,0FAA0F;IAC1F,6DAA6D;IAC7D,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM;QAAE,OAAO;IAC1D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACrB,CAAC;AACF,CAAC"}
@@ -30,6 +30,10 @@ function walk(value, ids) {
30
30
  ids.add(obj._ref);
31
31
  return;
32
32
  }
33
+ // Image/file fields store asset refs ({ _type:'image', asset:{_type:'reference', _ref} })
34
+ // that point to the assets table, not documents — skip them.
35
+ if (obj._type === 'image' || obj._type === 'file')
36
+ return;
33
37
  for (const key of Object.keys(obj)) {
34
38
  if (key.startsWith('_'))
35
39
  continue;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aphexcms/cms-core",
3
- "version": "8.0.0",
3
+ "version": "8.1.0",
4
4
  "description": "Aphex CMS Core - A Sanity-style CMS with ports and adapters architecture",
5
5
  "publishConfig": {
6
6
  "access": "public",