@gogitcms/editor 0.42.0 → 0.43.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/app/src/App.tsx CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  ContentBrowserSkeleton,
17
17
  BranchImportingScreen,
18
18
  BranchImportFailedScreen,
19
+ BranchDeletedModal,
19
20
  ChangeRequestSummary,
20
21
  NotificationList,
21
22
  useTheme,
@@ -2684,6 +2685,10 @@ function useBranchImport(repositoryId?: string, branchId?: string) {
2684
2685
  // Nothing has answered yet. Distinct from "no import run exists", which is a
2685
2686
  // real answer (status "none") and lets the editor open.
2686
2687
  unknown: !skip && !state,
2688
+ // The branch stopped existing while this editor was on it — deleted on the
2689
+ // provider or disconnected from the CMS. The subscription's final message;
2690
+ // it closes after sending it, and `live` keeps the answer.
2691
+ deleted: !!state && state.status === "deleted",
2687
2692
  // The first import of this branch is in flight: no content exists yet, so
2688
2693
  // the editor has nothing to render.
2689
2694
  firstImportRunning: firstImport && state.running,
@@ -2705,6 +2710,7 @@ function useBranchImport(repositoryId?: string, branchId?: string) {
2705
2710
  function BrowserScreen({ onSignOut, workspaces }: { onSignOut: () => void; workspaces: Workspace[] }) {
2706
2711
  const navigation = useNavigation<any>();
2707
2712
  const route = useRoute();
2713
+ const apollo = useApolloClient();
2708
2714
  const { workspaceId, repositoryId, branchId, projectName } = route.params as BrowserParams;
2709
2715
  const { data, loading } = useQuery(REPOSITORIES, { variables: { workspaceId } });
2710
2716
  const repos: Repository[] = data?.repositories ?? [];
@@ -2720,11 +2726,22 @@ function BrowserScreen({ onSignOut, workspaces }: { onSignOut: () => void; works
2720
2726
  // than waiting for it — only a link to a repository root (no branch in the
2721
2727
  // path) has to resolve the default branch first.
2722
2728
  const branchImport = useBranchImport(repositoryId, branchId ?? branch?.id);
2729
+ // Where the "this branch is gone" dialog sends the user. Switching drops into
2730
+ // the chosen branch and refreshes the branch list, which the deleted branch
2731
+ // has by now left; the picker is the exit when there is nothing to switch to.
2732
+ const switchBranch = (b: { id: string }) => {
2733
+ navigation.navigate("Browser", { workspaceId, repositoryId, branchId: b.id, ...EMPTY_SELECTION });
2734
+ void apollo.refetchQueries({ include: [REPOSITORIES] });
2735
+ };
2736
+ const chooseRepository = () => {
2737
+ void apollo.refetchQueries({ include: [REPOSITORIES] });
2738
+ navigation.navigate("RepoPicker", { workspaceId });
2739
+ };
2723
2740
  // Repositories still loading: hold the app-shell skeleton (the dashboard opens
2724
2741
  // editors straight at a repo URL) rather than flashing a not-found state.
2725
2742
  if (loading && !repo) return <ContentBrowserSkeleton />;
2726
2743
  // Stale/unknown repo link: fall back to the picker so the user can recover.
2727
- if (!repo || !branch) {
2744
+ if (!repo) {
2728
2745
  const workspaceName = workspaces.find((w) => w.id === workspaceId)?.name ?? "Workspace";
2729
2746
  const onChangeWorkspace = config.workspaceId ? undefined : () => navigation.navigate("WorkspacePicker");
2730
2747
  return (
@@ -2739,6 +2756,23 @@ function BrowserScreen({ onSignOut, workspaces }: { onSignOut: () => void; works
2739
2756
  />
2740
2757
  );
2741
2758
  }
2759
+ // A link into a branch this repository no longer has: deleted on the
2760
+ // provider, or disconnected, before the page loaded. Its name is unknown (the
2761
+ // list is the only source, and it has left the list), so the dialog says as
2762
+ // much and offers the branches that remain.
2763
+ if (!branch) {
2764
+ return (
2765
+ <View style={{ flex: 1 }}>
2766
+ <ContentBrowserSkeleton />
2767
+ <BranchDeletedModal
2768
+ repository={`${repo.owner}/${repo.name}`}
2769
+ branches={repo.branches}
2770
+ onSwitch={switchBranch}
2771
+ onChooseRepository={chooseRepository}
2772
+ />
2773
+ </View>
2774
+ );
2775
+ }
2742
2776
  // A cms.config.js PROJECT naming a project this repository does not have is a
2743
2777
  // startup error, matching the precedent that a typo in cms.config.mjs fails
2744
2778
  // loudly rather than producing a silently degraded editor. Showing another
@@ -2767,6 +2801,35 @@ function BrowserScreen({ onSignOut, workspaces }: { onSignOut: () => void; works
2767
2801
  // import. The query is cache-and-network, so every later visit paints at once.
2768
2802
  const repoLabel = `${repo.owner}/${repo.name}`;
2769
2803
  if (branchImport.unknown) return <ContentBrowserSkeleton />;
2804
+ // The branch was deleted while this editor was on it. The editor stays
2805
+ // mounted underneath — it may hold work worth copying somewhere else — but
2806
+ // nothing can be saved to a branch that is gone, so the dialog is the only
2807
+ // thing that can be acted on, and every way out of it is another branch.
2808
+ if (branchImport.deleted) {
2809
+ return (
2810
+ <View style={{ flex: 1 }}>
2811
+ <CmsView
2812
+ repo={repo}
2813
+ branch={branch}
2814
+ defaultBranchId={defaultBranchId}
2815
+ importing={false}
2816
+ projectName={project.name}
2817
+ projectId={project.project?.id}
2818
+ projects={project.projects}
2819
+ soleProjectName={project.sole?.name}
2820
+ projectLocked={project.locked}
2821
+ onSignOut={onSignOut}
2822
+ />
2823
+ <BranchDeletedModal
2824
+ branch={branch.name}
2825
+ repository={repoLabel}
2826
+ branches={repo.branches.filter((b) => b.id !== branch.id)}
2827
+ onSwitch={switchBranch}
2828
+ onChooseRepository={chooseRepository}
2829
+ />
2830
+ </View>
2831
+ );
2832
+ }
2770
2833
  if (branchImport.firstImportRunning) {
2771
2834
  return <BranchImportingScreen branch={branch.name} repository={repoLabel} />;
2772
2835
  }
@@ -0,0 +1,42 @@
1
+ import React from "react";
2
+ import { render, screen, fireEvent } from "@testing-library/react";
3
+ import { ThemeProvider } from "../ThemeProvider";
4
+ import { BranchDeletedModal } from "../components/BranchDeletedModal";
5
+
6
+ const wrap = (ui: React.ReactElement) => <ThemeProvider>{ui}</ThemeProvider>;
7
+
8
+ const others = [
9
+ { id: "b-main", name: "main" },
10
+ { id: "b-draft", name: "draft/spring" },
11
+ ];
12
+
13
+ test("names the deleted branch and switches to the one picked", () => {
14
+ const onSwitch = jest.fn();
15
+ render(wrap(
16
+ <BranchDeletedModal branch="feat/pricing" repository="acme/site" branches={others} onSwitch={onSwitch} />,
17
+ ));
18
+
19
+ expect(screen.getByTestId("branch-deleted-title")).toHaveTextContent("feat/pricing was deleted");
20
+ expect(screen.getByText(/removed with it/)).toBeInTheDocument();
21
+
22
+ fireEvent.click(screen.getByTestId("branch-deleted-switch-b-draft"));
23
+ expect(onSwitch).toHaveBeenCalledWith(others[1]);
24
+ // The repository exit is not offered unless the host provides it.
25
+ expect(screen.queryByTestId("branch-deleted-choose-repository")).toBeNull();
26
+ });
27
+
28
+ test("a stale link (no branch name) still explains and offers the others", () => {
29
+ render(wrap(<BranchDeletedModal branches={others} onSwitch={() => {}} />));
30
+ expect(screen.getByTestId("branch-deleted-title")).toHaveTextContent("This branch no longer exists");
31
+ expect(screen.getByTestId("branch-deleted-switch-b-main")).toBeInTheDocument();
32
+ });
33
+
34
+ test("with nothing to switch to, the repository picker is the exit", () => {
35
+ const onChoose = jest.fn();
36
+ render(wrap(
37
+ <BranchDeletedModal branch="main" repository="acme/site" branches={[]} onSwitch={() => {}} onChooseRepository={onChoose} />,
38
+ ));
39
+ expect(screen.getByTestId("branch-deleted-none")).toHaveTextContent("No other branch of acme/site");
40
+ fireEvent.click(screen.getByTestId("branch-deleted-choose-repository"));
41
+ expect(onChoose).toHaveBeenCalled();
42
+ });
@@ -0,0 +1,111 @@
1
+ import React from "react";
2
+ import { View, ScrollView } from "react-native";
3
+ import { useTheme } from "../ThemeProvider";
4
+ import { Text } from "./Text";
5
+ import { Icon } from "./Icon";
6
+ import { Button } from "./Button";
7
+ import type { BranchRef } from "./BranchMenu";
8
+
9
+ export type BranchDeletedModalProps = {
10
+ /**
11
+ * The branch that no longer exists. Omitted when only its id is known — a
12
+ * link into a branch that was deleted before the page loaded.
13
+ */
14
+ branch?: string;
15
+ /** "owner/name", when the host knows it. */
16
+ repository?: string;
17
+ /** The branches still connected, to switch to. The deleted one is not among them. */
18
+ branches: BranchRef[];
19
+ /** Open the editor on `branch` instead. */
20
+ onSwitch: (branch: BranchRef) => void;
21
+ /**
22
+ * Leave this repository for the picker. Offered as the way out when there is
23
+ * no other branch to switch to; omitted → the list is the only exit.
24
+ */
25
+ onChooseRepository?: () => void;
26
+ testID?: string;
27
+ };
28
+
29
+ /**
30
+ * Shown when the branch the editor is on stops existing — deleted on the
31
+ * provider, or disconnected from the CMS — while someone is looking at it.
32
+ *
33
+ * It is a modal rather than a redirect because the screen behind it may hold
34
+ * work in progress. Nothing on it can be saved to this branch any more, but
35
+ * bouncing the user to another branch without a word would make that content
36
+ * vanish mid-thought; the modal says what happened and leaves the page visible
37
+ * while they decide where to go. It cannot be dismissed into the dead branch,
38
+ * because there is nothing there to go back to: every exit is another branch.
39
+ */
40
+ export function BranchDeletedModal({
41
+ branch, repository, branches, onSwitch, onChooseRepository, testID,
42
+ }: BranchDeletedModalProps) {
43
+ const t = useTheme();
44
+ const title = branch ? `${branch} was deleted` : "This branch no longer exists";
45
+ const where = repository ? ` in ${repository}` : "";
46
+ const detail = branch
47
+ ? `The ${branch} branch${where} was deleted on the remote or disconnected from the CMS, and its content was removed with it. Nothing on this screen can be saved to it any more.`
48
+ : `The branch this link points to${where} was deleted on the remote or disconnected from the CMS, so there is nothing here to edit.`;
49
+ const hasOthers = branches.length > 0;
50
+
51
+ return (
52
+ <View
53
+ testID={testID ?? "branch-deleted-modal"}
54
+ style={{
55
+ position: "absolute", top: 0, left: 0, right: 0, bottom: 0, zIndex: 50,
56
+ alignItems: "center", justifyContent: "center", padding: t.space(4),
57
+ backgroundColor: "rgba(0,0,0,0.45)",
58
+ }}
59
+ >
60
+ <View
61
+ style={{
62
+ width: 460, maxWidth: "100%", maxHeight: "100%", gap: t.space(4), padding: t.space(5),
63
+ borderRadius: t.radius.lg, borderWidth: 1, borderColor: t.color.borderDefault,
64
+ backgroundColor: t.color.surfaceRaised,
65
+ }}
66
+ >
67
+ <View style={{ flexDirection: "row", alignItems: "center", gap: t.space(2) }}>
68
+ <Icon name="alert" size={16} color={t.color.diffDelFg} />
69
+ <Text variant="h3" weight="semibold" testID="branch-deleted-title">{title}</Text>
70
+ </View>
71
+
72
+ <Text variant="body" color="secondary">{detail}</Text>
73
+
74
+ {hasOthers ? (
75
+ <>
76
+ <Text variant="sm" weight="semibold">Switch to another branch to keep working</Text>
77
+ <ScrollView style={{ maxHeight: 280 }} contentContainerStyle={{ gap: t.space(2) }}>
78
+ {branches.map((b) => (
79
+ <Button
80
+ key={b.id}
81
+ title={b.name}
82
+ fullWidth
83
+ onPress={() => onSwitch(b)}
84
+ testID={`branch-deleted-switch-${b.id}`}
85
+ />
86
+ ))}
87
+ </ScrollView>
88
+ </>
89
+ ) : (
90
+ <Text variant="sm" color="secondary" testID="branch-deleted-none">
91
+ {repository
92
+ ? `No other branch of ${repository} is connected to the CMS.`
93
+ : "No other branch of this repository is connected to the CMS."}
94
+ </Text>
95
+ )}
96
+
97
+ {onChooseRepository ? (
98
+ <View style={{ flexDirection: "row", justifyContent: "flex-end" }}>
99
+ <Button
100
+ title="Choose a repository"
101
+ variant={hasOthers ? "ghost" : "primary"}
102
+ size="md"
103
+ onPress={onChooseRepository}
104
+ testID="branch-deleted-choose-repository"
105
+ />
106
+ </View>
107
+ ) : null}
108
+ </View>
109
+ </View>
110
+ );
111
+ }
@@ -57,6 +57,8 @@ export type {
57
57
  // Change-request summary surface (developer escalation)
58
58
  export { ProtectedBranchModal } from "./components/ProtectedBranchModal";
59
59
  export type { ProtectedBranchModalProps } from "./components/ProtectedBranchModal";
60
+ export { BranchDeletedModal } from "./components/BranchDeletedModal";
61
+ export type { BranchDeletedModalProps } from "./components/BranchDeletedModal";
60
62
  export { ChangeRequestSummary } from "./components/ChangeRequestSummary";
61
63
  export type {
62
64
  ChangeRequestSummaryProps,
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@gogitcms/editor",
3
- "version": "0.42.0",
3
+ "version": "0.43.1",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@gogitcms/editor",
9
- "version": "0.42.0",
9
+ "version": "0.43.1",
10
10
  "dependencies": {
11
11
  "@apollo/client": "^3.11.8",
12
12
  "@handlewithcare/react-prosemirror": "^3.2.7",
@@ -47,11 +47,11 @@
47
47
  "node": ">=20"
48
48
  },
49
49
  "optionalDependencies": {
50
- "@gogitcms/gitcms-local-darwin-arm64": "0.42.0",
51
- "@gogitcms/gitcms-local-darwin-x64": "0.42.0",
52
- "@gogitcms/gitcms-local-linux-arm64": "0.42.0",
53
- "@gogitcms/gitcms-local-linux-x64": "0.42.0",
54
- "@gogitcms/gitcms-local-win32-x64": "0.42.0"
50
+ "@gogitcms/gitcms-local-darwin-arm64": "0.43.1",
51
+ "@gogitcms/gitcms-local-darwin-x64": "0.43.1",
52
+ "@gogitcms/gitcms-local-linux-arm64": "0.43.1",
53
+ "@gogitcms/gitcms-local-linux-x64": "0.43.1",
54
+ "@gogitcms/gitcms-local-win32-x64": "0.43.1"
55
55
  }
56
56
  },
57
57
  "node_modules/@apollo/client": {
@@ -751,9 +751,9 @@
751
751
  }
752
752
  },
753
753
  "node_modules/@gogitcms/gitcms-local-darwin-arm64": {
754
- "version": "0.42.0",
755
- "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-darwin-arm64/-/gitcms-local-darwin-arm64-0.42.0.tgz",
756
- "integrity": "sha512-rPnqWdexcwEU+jlQc8gRjbYI89uXjBpJYewD5wZz41bRFDVwW93klZw8tJHu108GHihzFh5WnVz0ga1AMWisIw==",
754
+ "version": "0.43.1",
755
+ "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-darwin-arm64/-/gitcms-local-darwin-arm64-0.43.1.tgz",
756
+ "integrity": "sha512-+VmHoQmczK+BUZKmtxyCGZadaG+DOA+VLGdoM1zNdfiDU85UzDHy9JjX123JkFUNNdYYu3JoA7aIYh9iIuLZTA==",
757
757
  "cpu": [
758
758
  "arm64"
759
759
  ],
@@ -764,9 +764,9 @@
764
764
  ]
765
765
  },
766
766
  "node_modules/@gogitcms/gitcms-local-darwin-x64": {
767
- "version": "0.42.0",
768
- "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-darwin-x64/-/gitcms-local-darwin-x64-0.42.0.tgz",
769
- "integrity": "sha512-cqziOuLSOFJOTGzXmVSrkXROtcvJm44Dro+fjB4iluTdRdtvmt/g4KmJEuATKYVpwBn7nJqKnv+eIwezwkaAFQ==",
767
+ "version": "0.43.1",
768
+ "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-darwin-x64/-/gitcms-local-darwin-x64-0.43.1.tgz",
769
+ "integrity": "sha512-c62bK03GV2QGiCsmeJlpYT9ee1jDNT0KUJYbQa2pln+tzQt735pSVuXImcx+3InY63nxUDNibXt8Ky8xbbhhuw==",
770
770
  "cpu": [
771
771
  "x64"
772
772
  ],
@@ -777,9 +777,9 @@
777
777
  ]
778
778
  },
779
779
  "node_modules/@gogitcms/gitcms-local-linux-x64": {
780
- "version": "0.42.0",
781
- "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-linux-x64/-/gitcms-local-linux-x64-0.42.0.tgz",
782
- "integrity": "sha512-hjcY5voX1Do9+BDg9QAAC2SEVLswsm/rHt38teLHKoXCEcFa6E90O2sVj9DqTsxS3HKYJoI8dy92iGoU3kkNYA==",
780
+ "version": "0.43.1",
781
+ "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-linux-x64/-/gitcms-local-linux-x64-0.43.1.tgz",
782
+ "integrity": "sha512-SagcRT4e65YHqQRKbT8imoYwZLprZeMVknOBw09x8hiufWWp3HQdxaS5c/zszPZMKRqA525+XlKG6lKvl9HifA==",
783
783
  "cpu": [
784
784
  "x64"
785
785
  ],
@@ -789,19 +789,6 @@
789
789
  "linux"
790
790
  ]
791
791
  },
792
- "node_modules/@gogitcms/gitcms-local-win32-x64": {
793
- "version": "0.42.0",
794
- "resolved": "https://registry.npmjs.org/@gogitcms/gitcms-local-win32-x64/-/gitcms-local-win32-x64-0.42.0.tgz",
795
- "integrity": "sha512-0Po8OeY9Q43zhvEc6JnzQTInlZ4VVcgli6MDOYxrenTSyTDQmKVySrKeZkqOnDZfZzibqkcLe/JNlR7WOgOHvw==",
796
- "cpu": [
797
- "x64"
798
- ],
799
- "license": "UNLICENSED",
800
- "optional": true,
801
- "os": [
802
- "win32"
803
- ]
804
- },
805
792
  "node_modules/@graphql-typed-document-node/core": {
806
793
  "version": "3.2.0",
807
794
  "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz",
@@ -959,28 +946,28 @@
959
946
  }
960
947
  },
961
948
  "node_modules/@posthog/browser-common": {
962
- "version": "0.7.2",
963
- "resolved": "https://registry.npmjs.org/@posthog/browser-common/-/browser-common-0.7.2.tgz",
964
- "integrity": "sha512-ukDmETXy6fTBE4ZpaO8ccscrNz5SvTaUnhQ0Ze2JX/oYILa89rrNwqUH7lDAuhFKa+NY6EoJ9kZMuOvuu4WwLQ==",
949
+ "version": "0.8.2",
950
+ "resolved": "https://registry.npmjs.org/@posthog/browser-common/-/browser-common-0.8.2.tgz",
951
+ "integrity": "sha512-8g7+ijrx8bfWmpDjmP07e0ZmdRnJoFqZ6PCcMQvfBTUrr422GRXvQWpQn7yD028zIJHIIn/rUTipKgUC5UkWpw==",
965
952
  "license": "MIT",
966
953
  "dependencies": {
967
- "@posthog/core": "^1.50.4",
968
- "@posthog/types": "^1.408.1"
954
+ "@posthog/core": "^1.51.0",
955
+ "@posthog/types": "^1.409.1"
969
956
  }
970
957
  },
971
958
  "node_modules/@posthog/core": {
972
- "version": "1.50.5",
973
- "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.50.5.tgz",
974
- "integrity": "sha512-afEchuShDaVIoxAIj76kDZQ1DhfesDmgfVp+mtTzsA3wlc8DF5uoz8YjuTjnxOicWkpP5HCDqYidK/1kT125Cg==",
959
+ "version": "1.52.0",
960
+ "resolved": "https://registry.npmjs.org/@posthog/core/-/core-1.52.0.tgz",
961
+ "integrity": "sha512-pvbdeRRpizktmo8MXZQxjAI4aFfNajwkzxbm72wKV9n2wWcnQWa4m+AqTI2zmmCSsYk7F666rRUdvYqZLjjhWg==",
975
962
  "license": "MIT",
976
963
  "dependencies": {
977
- "@posthog/types": "^1.409.0"
964
+ "@posthog/types": "^1.409.4"
978
965
  }
979
966
  },
980
967
  "node_modules/@posthog/types": {
981
- "version": "1.409.0",
982
- "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.409.0.tgz",
983
- "integrity": "sha512-239umoaZVb2GBaXeEyJpwFvjhrrChJH8NHCwiao23EBSu3NA6EN0MTMoaHSmMEf4yjiXEFFoYJA6FjJAXF5HGA==",
968
+ "version": "1.410.0",
969
+ "resolved": "https://registry.npmjs.org/@posthog/types/-/types-1.410.0.tgz",
970
+ "integrity": "sha512-741sltt/h+l0eYH+Nkow96qKfDmRxwKacfjF93Z+kMySjzL0a87ptmpklZxGkbjBp/DJH/CSowGrolYWK/1ToA==",
984
971
  "license": "MIT"
985
972
  },
986
973
  "node_modules/@react-native/asset-utils": {
@@ -1629,13 +1616,13 @@
1629
1616
  "license": "MIT"
1630
1617
  },
1631
1618
  "node_modules/@types/node": {
1632
- "version": "26.4.1",
1633
- "resolved": "https://registry.npmjs.org/@types/node/-/node-26.4.1.tgz",
1634
- "integrity": "sha512-k97ENvZWtvA6yqz5/FS6a7duDgOPEeOQOc2iKS/nY6mX6qJUKtLnWzQS+Xj6tXweyj6ZcTAK2Qecetnvi9nCLA==",
1619
+ "version": "22.20.2",
1620
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.2.tgz",
1621
+ "integrity": "sha512-xlvWf4Vs9n1PEVYwP1n4vvG07M6y8WgvJ2t0vbrWTmijsIHp1cS+uJ2kMIRdY3nHZK0nCYKrPeD171+SzF4/zw==",
1635
1622
  "license": "MIT",
1636
1623
  "peer": true,
1637
1624
  "dependencies": {
1638
- "undici-types": "~8.3.0"
1625
+ "undici-types": "~6.21.0"
1639
1626
  }
1640
1627
  },
1641
1628
  "node_modules/@types/trusted-types": {
@@ -1893,9 +1880,9 @@
1893
1880
  }
1894
1881
  },
1895
1882
  "node_modules/browserslist": {
1896
- "version": "4.28.8",
1897
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz",
1898
- "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==",
1883
+ "version": "4.28.9",
1884
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz",
1885
+ "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==",
1899
1886
  "funding": [
1900
1887
  {
1901
1888
  "type": "opencollective",
@@ -1912,11 +1899,11 @@
1912
1899
  ],
1913
1900
  "license": "MIT",
1914
1901
  "dependencies": {
1915
- "baseline-browser-mapping": "^2.11.12",
1916
- "caniuse-lite": "^1.0.30001809",
1917
- "electron-to-chromium": "^1.5.402",
1918
- "node-releases": "^2.0.53",
1919
- "update-browserslist-db": "^1.3.0"
1902
+ "baseline-browser-mapping": "^2.11.20",
1903
+ "caniuse-lite": "^1.0.30001810",
1904
+ "electron-to-chromium": "^1.5.420",
1905
+ "node-releases": "^2.0.54",
1906
+ "update-browserslist-db": "^1.3.2"
1920
1907
  },
1921
1908
  "bin": {
1922
1909
  "browserslist": "cli.js"
@@ -2299,9 +2286,9 @@
2299
2286
  }
2300
2287
  },
2301
2288
  "node_modules/dompurify": {
2302
- "version": "3.4.14",
2303
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.14.tgz",
2304
- "integrity": "sha512-dVoH9z+MY+C9IilgGCk3YfFqjLi3fChm2OiKJMzh6axrJ5qwxqWaZamgmHrpv22CN/KdbZJuGEGgfQoL00LTdg==",
2289
+ "version": "3.4.15",
2290
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.15.tgz",
2291
+ "integrity": "sha512-EUBjM+B+lkDE41iE82DDSCfkoPGfXx8IxFxPMjNzm/Uk4xDet77rTN9wqlxlVg71kK7XGuUMv6wUxJUwwv+Xyw==",
2305
2292
  "license": "(MPL-2.0 OR Apache-2.0)",
2306
2293
  "optionalDependencies": {
2307
2294
  "@types/trusted-types": "^2.0.7"
@@ -2315,9 +2302,9 @@
2315
2302
  "peer": true
2316
2303
  },
2317
2304
  "node_modules/electron-to-chromium": {
2318
- "version": "1.5.422",
2319
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.422.tgz",
2320
- "integrity": "sha512-UvA/32XqrLDdZSn7Jllo1AYNcWji/G0d5M0GTViE7KoGBiMunw3a34Sb2KO4ZZyrSEhqsxFoVhWWJshdyfKqJA==",
2305
+ "version": "1.5.425",
2306
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.425.tgz",
2307
+ "integrity": "sha512-QvPtl41EUOnuT1HBvMKgxXRIaHNcagBPs50u7VULzhZXaGfqTbZyE16LQsctZ/RQHlGu+FOWeDTR4mY6YbeF1g==",
2321
2308
  "license": "ISC"
2322
2309
  },
2323
2310
  "node_modules/emoji-regex": {
@@ -3885,9 +3872,9 @@
3885
3872
  "peer": true
3886
3873
  },
3887
3874
  "node_modules/node-releases": {
3888
- "version": "2.0.54",
3889
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz",
3890
- "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==",
3875
+ "version": "2.0.55",
3876
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz",
3877
+ "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==",
3891
3878
  "license": "MIT",
3892
3879
  "engines": {
3893
3880
  "node": ">=18"
@@ -4058,14 +4045,14 @@
4058
4045
  "license": "MIT"
4059
4046
  },
4060
4047
  "node_modules/posthog-js": {
4061
- "version": "1.427.1",
4062
- "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.427.1.tgz",
4063
- "integrity": "sha512-jPKpF5qQS+SIzg2kJH6mTqkMEVY9YVBEywIccLFdl8A7zn+9aSnXQVv4xbF5gIjPtQe2MdcDugcyyJqfVrImLw==",
4048
+ "version": "1.429.1",
4049
+ "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.429.1.tgz",
4050
+ "integrity": "sha512-6DnWhkmaFlY6/Wjrw59GXeUyyS2NG0CIFNklxuUlEfbw1Wx2A3Z9/NSYCUJlY7feMgqN74BguAmQtXAlsNwguQ==",
4064
4051
  "license": "(Apache-2.0 AND MIT)",
4065
4052
  "dependencies": {
4066
- "@posthog/browser-common": "^0.7.2",
4067
- "@posthog/core": "^1.50.5",
4068
- "@posthog/types": "^1.409.0",
4053
+ "@posthog/browser-common": "^0.8.2",
4054
+ "@posthog/core": "^1.52.0",
4055
+ "@posthog/types": "^1.410.0",
4069
4056
  "core-js": "^3.49.0",
4070
4057
  "dompurify": "^3.4.13",
4071
4058
  "fflate": "^0.4.8",
@@ -4369,9 +4356,9 @@
4369
4356
  }
4370
4357
  },
4371
4358
  "node_modules/react": {
4372
- "version": "19.2.8",
4373
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz",
4374
- "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==",
4359
+ "version": "19.3.0",
4360
+ "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz",
4361
+ "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==",
4375
4362
  "license": "MIT",
4376
4363
  "engines": {
4377
4364
  "node": ">=0.10.0"
@@ -4389,21 +4376,21 @@
4389
4376
  }
4390
4377
  },
4391
4378
  "node_modules/react-dom": {
4392
- "version": "19.2.8",
4393
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.8.tgz",
4394
- "integrity": "sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==",
4379
+ "version": "19.3.0",
4380
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz",
4381
+ "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==",
4395
4382
  "license": "MIT",
4396
4383
  "dependencies": {
4397
- "scheduler": "^0.27.0"
4384
+ "scheduler": "^0.28.0"
4398
4385
  },
4399
4386
  "peerDependencies": {
4400
- "react": "^19.2.8"
4387
+ "react": "^19.3.0"
4401
4388
  }
4402
4389
  },
4403
4390
  "node_modules/react-is": {
4404
- "version": "19.2.8",
4405
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.8.tgz",
4406
- "integrity": "sha512-s5un28nYxKJw5gvUHyW5PCC28CvBqLu9r3cWgzHT4Vo/5fqqkFcdRYsGcKf50WMPpjjFZS5d76fn3YCo2njKwQ==",
4391
+ "version": "19.3.0",
4392
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.3.0.tgz",
4393
+ "integrity": "sha512-UpMYezM4v5/18F28aC66AEsjXIgE02kyEMH6yLdgLXu/UTfa1Ntwck/nNLrbqJsEXW7gPb0coNO9FQse9WTovA==",
4407
4394
  "license": "MIT"
4408
4395
  },
4409
4396
  "node_modules/react-native": {
@@ -4502,6 +4489,13 @@
4502
4489
  "node": ">=0.10.0"
4503
4490
  }
4504
4491
  },
4492
+ "node_modules/react-native/node_modules/scheduler": {
4493
+ "version": "0.27.0",
4494
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
4495
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
4496
+ "license": "MIT",
4497
+ "peer": true
4498
+ },
4505
4499
  "node_modules/react-native/node_modules/semver": {
4506
4500
  "version": "7.8.5",
4507
4501
  "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
@@ -4530,6 +4524,12 @@
4530
4524
  "react": "^19.2.0"
4531
4525
  }
4532
4526
  },
4527
+ "node_modules/react-reconciler/node_modules/scheduler": {
4528
+ "version": "0.27.0",
4529
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
4530
+ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
4531
+ "license": "MIT"
4532
+ },
4533
4533
  "node_modules/react-refresh": {
4534
4534
  "version": "0.17.0",
4535
4535
  "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
@@ -4662,9 +4662,9 @@
4662
4662
  "optional": true
4663
4663
  },
4664
4664
  "node_modules/scheduler": {
4665
- "version": "0.27.0",
4666
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz",
4667
- "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==",
4665
+ "version": "0.28.0",
4666
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz",
4667
+ "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==",
4668
4668
  "license": "MIT"
4669
4669
  },
4670
4670
  "node_modules/semver": {
@@ -5229,9 +5229,9 @@
5229
5229
  "license": "MIT"
5230
5230
  },
5231
5231
  "node_modules/undici-types": {
5232
- "version": "8.3.0",
5233
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
5234
- "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
5232
+ "version": "6.21.0",
5233
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
5234
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
5235
5235
  "license": "MIT",
5236
5236
  "peer": true
5237
5237
  },
@@ -5291,9 +5291,9 @@
5291
5291
  }
5292
5292
  },
5293
5293
  "node_modules/use-sync-external-store": {
5294
- "version": "1.6.0",
5295
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
5296
- "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
5294
+ "version": "1.7.0",
5295
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.7.0.tgz",
5296
+ "integrity": "sha512-6L+EeigHMQhdaIPNIFUKwfWJSwWFQ8gJbJ2DLOs5sDIegTwR9fRxvnM3uciHKjIZhFz+KAv2emhWMRvDmMcY8A==",
5297
5297
  "license": "MIT",
5298
5298
  "peerDependencies": {
5299
5299
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gogitcms/editor",
3
- "version": "0.42.0",
3
+ "version": "0.43.1",
4
4
  "description": "Terminal UI for setting up and running the Go·Git CMS content editor",
5
5
  "type": "module",
6
6
  "bin": {
@@ -65,10 +65,10 @@
65
65
  "@gogitcms/frontend": "workspace:*"
66
66
  },
67
67
  "optionalDependencies": {
68
- "@gogitcms/gitcms-local-darwin-arm64": "0.42.0",
69
- "@gogitcms/gitcms-local-darwin-x64": "0.42.0",
70
- "@gogitcms/gitcms-local-linux-arm64": "0.42.0",
71
- "@gogitcms/gitcms-local-linux-x64": "0.42.0",
72
- "@gogitcms/gitcms-local-win32-x64": "0.42.0"
68
+ "@gogitcms/gitcms-local-darwin-arm64": "0.43.1",
69
+ "@gogitcms/gitcms-local-darwin-x64": "0.43.1",
70
+ "@gogitcms/gitcms-local-linux-arm64": "0.43.1",
71
+ "@gogitcms/gitcms-local-linux-x64": "0.43.1",
72
+ "@gogitcms/gitcms-local-win32-x64": "0.43.1"
73
73
  }
74
74
  }