canopycms 0.0.59 → 0.0.61-int.74
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/dist/api/__test__/mock-client.d.ts +29 -0
- package/dist/api/__test__/mock-client.d.ts.map +1 -1
- package/dist/api/__test__/mock-client.js +55 -4
- package/dist/api/__test__/mock-client.js.map +1 -1
- package/dist/api/admin-branch-health.d.ts +65 -0
- package/dist/api/admin-branch-health.d.ts.map +1 -0
- package/dist/api/admin-branch-health.js +448 -0
- package/dist/api/admin-branch-health.js.map +1 -0
- package/dist/api/admin.d.ts +136 -0
- package/dist/api/admin.d.ts.map +1 -0
- package/dist/api/admin.js +338 -0
- package/dist/api/admin.js.map +1 -0
- package/dist/api/assets.d.ts.map +1 -1
- package/dist/api/assets.js +4 -0
- package/dist/api/assets.js.map +1 -1
- package/dist/api/branch-merge.d.ts +6 -0
- package/dist/api/branch-merge.d.ts.map +1 -1
- package/dist/api/branch-merge.js +15 -9
- package/dist/api/branch-merge.js.map +1 -1
- package/dist/api/branch-status.d.ts.map +1 -1
- package/dist/api/branch-status.js +15 -5
- package/dist/api/branch-status.js.map +1 -1
- package/dist/api/branch-withdraw.d.ts +6 -0
- package/dist/api/branch-withdraw.d.ts.map +1 -1
- package/dist/api/branch-withdraw.js +34 -7
- package/dist/api/branch-withdraw.js.map +1 -1
- package/dist/api/branch.d.ts +11 -1
- package/dist/api/branch.d.ts.map +1 -1
- package/dist/api/branch.js +70 -4
- package/dist/api/branch.js.map +1 -1
- package/dist/api/client.d.ts +34 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +47 -0
- package/dist/api/client.js.map +1 -1
- package/dist/api/comments.d.ts.map +1 -1
- package/dist/api/comments.js +4 -0
- package/dist/api/comments.js.map +1 -1
- package/dist/api/content.d.ts.map +1 -1
- package/dist/api/content.js +4 -4
- package/dist/api/content.js.map +1 -1
- package/dist/api/entries.d.ts.map +1 -1
- package/dist/api/entries.js +23 -4
- package/dist/api/entries.js.map +1 -1
- package/dist/api/github-sync.d.ts.map +1 -1
- package/dist/api/github-sync.js +14 -3
- package/dist/api/github-sync.js.map +1 -1
- package/dist/api/groups.d.ts +3 -0
- package/dist/api/groups.d.ts.map +1 -1
- package/dist/api/groups.js +89 -68
- package/dist/api/groups.js.map +1 -1
- package/dist/api/guards.d.ts +7 -1
- package/dist/api/guards.d.ts.map +1 -1
- package/dist/api/guards.js +54 -0
- package/dist/api/guards.js.map +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +0 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/permissions.d.ts +1 -0
- package/dist/api/permissions.d.ts.map +1 -1
- package/dist/api/permissions.js +23 -20
- package/dist/api/permissions.js.map +1 -1
- package/dist/api/schema.d.ts.map +1 -1
- package/dist/api/schema.js +36 -22
- package/dist/api/schema.js.map +1 -1
- package/dist/authorization/branch.d.ts +14 -1
- package/dist/authorization/branch.d.ts.map +1 -1
- package/dist/authorization/branch.js +5 -3
- package/dist/authorization/branch.js.map +1 -1
- package/dist/authorization/groups/index.d.ts +1 -1
- package/dist/authorization/groups/index.d.ts.map +1 -1
- package/dist/authorization/groups/index.js +1 -1
- package/dist/authorization/groups/index.js.map +1 -1
- package/dist/authorization/groups/loader.d.ts +25 -4
- package/dist/authorization/groups/loader.d.ts.map +1 -1
- package/dist/authorization/groups/loader.js +39 -20
- package/dist/authorization/groups/loader.js.map +1 -1
- package/dist/authorization/groups/schema.d.ts +8 -7
- package/dist/authorization/groups/schema.d.ts.map +1 -1
- package/dist/authorization/groups/schema.js +8 -4
- package/dist/authorization/groups/schema.js.map +1 -1
- package/dist/authorization/index.d.ts +5 -3
- package/dist/authorization/index.d.ts.map +1 -1
- package/dist/authorization/index.js +8 -3
- package/dist/authorization/index.js.map +1 -1
- package/dist/authorization/path.d.ts +8 -0
- package/dist/authorization/path.d.ts.map +1 -1
- package/dist/authorization/path.js +16 -1
- package/dist/authorization/path.js.map +1 -1
- package/dist/authorization/permissions/index.d.ts +1 -1
- package/dist/authorization/permissions/index.d.ts.map +1 -1
- package/dist/authorization/permissions/index.js +1 -1
- package/dist/authorization/permissions/index.js.map +1 -1
- package/dist/authorization/permissions/loader.d.ts +18 -4
- package/dist/authorization/permissions/loader.d.ts.map +1 -1
- package/dist/authorization/permissions/loader.js +35 -24
- package/dist/authorization/permissions/loader.js.map +1 -1
- package/dist/authorization/permissions/schema.d.ts +8 -7
- package/dist/authorization/permissions/schema.d.ts.map +1 -1
- package/dist/authorization/permissions/schema.js +8 -4
- package/dist/authorization/permissions/schema.js.map +1 -1
- package/dist/authorization/protected-branch.d.ts +39 -0
- package/dist/authorization/protected-branch.d.ts.map +1 -0
- package/dist/authorization/protected-branch.js +43 -0
- package/dist/authorization/protected-branch.js.map +1 -0
- package/dist/authorization/settings-file-store.d.ts +127 -0
- package/dist/authorization/settings-file-store.d.ts.map +1 -0
- package/dist/authorization/settings-file-store.js +156 -0
- package/dist/authorization/settings-file-store.js.map +1 -0
- package/dist/branch-health.d.ts +78 -0
- package/dist/branch-health.d.ts.map +1 -0
- package/dist/branch-health.js +151 -0
- package/dist/branch-health.js.map +1 -0
- package/dist/branch-metadata.d.ts +31 -0
- package/dist/branch-metadata.d.ts.map +1 -1
- package/dist/branch-metadata.js +43 -1
- package/dist/branch-metadata.js.map +1 -1
- package/dist/branch-registry.d.ts.map +1 -1
- package/dist/branch-registry.js +13 -1
- package/dist/branch-registry.js.map +1 -1
- package/dist/cli/cli.js +398 -200
- package/dist/cli/generate-ai-content.js +72 -13
- package/dist/cli/init.js +84 -2
- package/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +39 -11
- package/dist/cli/migrate.js.map +1 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -1
- package/dist/cli/sync.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schemas/config.d.ts +55 -5
- package/dist/config/schemas/config.d.ts.map +1 -1
- package/dist/config/schemas/config.js +18 -1
- package/dist/config/schemas/config.js.map +1 -1
- package/dist/config/types.d.ts +11 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/content-store.d.ts +16 -0
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +22 -6
- package/dist/content-store.js.map +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +25 -3
- package/dist/context.js.map +1 -1
- package/dist/editor/BranchManager.d.ts +11 -0
- package/dist/editor/BranchManager.d.ts.map +1 -1
- package/dist/editor/BranchManager.js +34 -10
- package/dist/editor/BranchManager.js.map +1 -1
- package/dist/editor/CommentsPanel.d.ts.map +1 -1
- package/dist/editor/CommentsPanel.js +4 -12
- package/dist/editor/CommentsPanel.js.map +1 -1
- package/dist/editor/Editor.d.ts.map +1 -1
- package/dist/editor/Editor.js +46 -10
- package/dist/editor/Editor.js.map +1 -1
- package/dist/editor/EntryNavigator.d.ts +7 -0
- package/dist/editor/EntryNavigator.d.ts.map +1 -1
- package/dist/editor/EntryNavigator.js +17 -5
- package/dist/editor/EntryNavigator.js.map +1 -1
- package/dist/editor/FormRenderer.d.ts.map +1 -1
- package/dist/editor/FormRenderer.js +4 -0
- package/dist/editor/FormRenderer.js.map +1 -1
- package/dist/editor/admin/SystemHealthPanel.d.ts +6 -0
- package/dist/editor/admin/SystemHealthPanel.d.ts.map +1 -0
- package/dist/editor/admin/SystemHealthPanel.js +234 -0
- package/dist/editor/admin/SystemHealthPanel.js.map +1 -0
- package/dist/editor/admin/useSystemHealth.d.ts +40 -0
- package/dist/editor/admin/useSystemHealth.d.ts.map +1 -0
- package/dist/editor/admin/useSystemHealth.js +205 -0
- package/dist/editor/admin/useSystemHealth.js.map +1 -0
- package/dist/editor/comments/FieldWrapper.d.ts.map +1 -1
- package/dist/editor/comments/FieldWrapper.js +1 -1
- package/dist/editor/comments/FieldWrapper.js.map +1 -1
- package/dist/editor/comments/InlineCommentThread.d.ts.map +1 -1
- package/dist/editor/comments/InlineCommentThread.js +2 -21
- package/dist/editor/comments/InlineCommentThread.js.map +1 -1
- package/dist/editor/comments/ThreadCarousel.d.ts +2 -0
- package/dist/editor/comments/ThreadCarousel.d.ts.map +1 -1
- package/dist/editor/comments/ThreadCarousel.js +5 -2
- package/dist/editor/comments/ThreadCarousel.js.map +1 -1
- package/dist/editor/components/EditorHeader.d.ts +11 -0
- package/dist/editor/components/EditorHeader.d.ts.map +1 -1
- package/dist/editor/components/EditorHeader.js +75 -41
- package/dist/editor/components/EditorHeader.js.map +1 -1
- package/dist/editor/components/EditorSidebar.d.ts +7 -1
- package/dist/editor/components/EditorSidebar.d.ts.map +1 -1
- package/dist/editor/components/EditorSidebar.js +3 -3
- package/dist/editor/components/EditorSidebar.js.map +1 -1
- package/dist/editor/fields/ImageField.d.ts.map +1 -1
- package/dist/editor/fields/ImageField.js +4 -1
- package/dist/editor/fields/ImageField.js.map +1 -1
- package/dist/editor/fields/StringListField.d.ts +20 -0
- package/dist/editor/fields/StringListField.d.ts.map +1 -0
- package/dist/editor/fields/StringListField.js +25 -0
- package/dist/editor/fields/StringListField.js.map +1 -0
- package/dist/editor/hooks/useBranchActions.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchActions.js +8 -2
- package/dist/editor/hooks/useBranchActions.js.map +1 -1
- package/dist/editor/hooks/useBranchManager.d.ts +14 -3
- package/dist/editor/hooks/useBranchManager.d.ts.map +1 -1
- package/dist/editor/hooks/useBranchManager.js +18 -1
- package/dist/editor/hooks/useBranchManager.js.map +1 -1
- package/dist/editor/hooks/useDraftManager.d.ts +7 -0
- package/dist/editor/hooks/useDraftManager.d.ts.map +1 -1
- package/dist/editor/hooks/useDraftManager.js +57 -3
- package/dist/editor/hooks/useDraftManager.js.map +1 -1
- package/dist/editor/hooks/useEntryManager.d.ts.map +1 -1
- package/dist/editor/hooks/useEntryManager.js +25 -7
- package/dist/editor/hooks/useEntryManager.js.map +1 -1
- package/dist/editor/hooks/useGroupManager.d.ts.map +1 -1
- package/dist/editor/hooks/useGroupManager.js +13 -2
- package/dist/editor/hooks/useGroupManager.js.map +1 -1
- package/dist/editor/hooks/usePermissionManager.d.ts.map +1 -1
- package/dist/editor/hooks/usePermissionManager.js +13 -2
- package/dist/editor/hooks/usePermissionManager.js.map +1 -1
- package/dist/editor/media/AssetCard.d.ts.map +1 -1
- package/dist/editor/media/AssetCard.js +23 -2
- package/dist/editor/media/AssetCard.js.map +1 -1
- package/dist/editor/relative-time.d.ts +8 -0
- package/dist/editor/relative-time.d.ts.map +1 -0
- package/dist/editor/relative-time.js +26 -0
- package/dist/editor/relative-time.js.map +1 -0
- package/dist/git-manager.d.ts.map +1 -1
- package/dist/git-manager.js +16 -2
- package/dist/git-manager.js.map +1 -1
- package/dist/http/handler.d.ts.map +1 -1
- package/dist/http/handler.js +20 -9
- package/dist/http/handler.js.map +1 -1
- package/dist/http/router.d.ts.map +1 -1
- package/dist/http/router.js +2 -0
- package/dist/http/router.js.map +1 -1
- package/dist/paths/branch-name.d.ts +20 -0
- package/dist/paths/branch-name.d.ts.map +1 -0
- package/dist/paths/branch-name.js +24 -0
- package/dist/paths/branch-name.js.map +1 -0
- package/dist/paths/branch.d.ts +2 -8
- package/dist/paths/branch.d.ts.map +1 -1
- package/dist/paths/branch.js +6 -12
- package/dist/paths/branch.js.map +1 -1
- package/dist/paths/index.d.ts +2 -1
- package/dist/paths/index.d.ts.map +1 -1
- package/dist/paths/index.js +4 -1
- package/dist/paths/index.js.map +1 -1
- package/dist/schema/schema-store.d.ts +98 -0
- package/dist/schema/schema-store.d.ts.map +1 -1
- package/dist/schema/schema-store.js +187 -29
- package/dist/schema/schema-store.js.map +1 -1
- package/dist/services.js +9 -1
- package/dist/services.js.map +1 -1
- package/dist/task-queue/index.d.ts +2 -2
- package/dist/task-queue/index.d.ts.map +1 -1
- package/dist/task-queue/index.js +1 -1
- package/dist/task-queue/index.js.map +1 -1
- package/dist/task-queue/task-queue.d.ts +37 -1
- package/dist/task-queue/task-queue.d.ts.map +1 -1
- package/dist/task-queue/task-queue.js +104 -0
- package/dist/task-queue/task-queue.js.map +1 -1
- package/dist/task-queue/types.d.ts +11 -0
- package/dist/task-queue/types.d.ts.map +1 -1
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/occ-json-write.d.ts.map +1 -1
- package/dist/utils/occ-json-write.js +7 -0
- package/dist/utils/occ-json-write.js.map +1 -1
- package/dist/utils/provisioning-lock.d.ts +19 -0
- package/dist/utils/provisioning-lock.d.ts.map +1 -1
- package/dist/utils/provisioning-lock.js +26 -0
- package/dist/utils/provisioning-lock.js.map +1 -1
- package/dist/validation/reference-validator.d.ts +17 -1
- package/dist/validation/reference-validator.d.ts.map +1 -1
- package/dist/validation/reference-validator.js +33 -10
- package/dist/validation/reference-validator.js.map +1 -1
- package/dist/worker/cms-worker.d.ts +74 -0
- package/dist/worker/cms-worker.d.ts.map +1 -1
- package/dist/worker/cms-worker.js +542 -29
- package/dist/worker/cms-worker.js.map +1 -1
- package/dist/worker/task-queue.d.ts +3 -3
- package/dist/worker/task-queue.d.ts.map +1 -1
- package/dist/worker/task-queue.js +2 -2
- package/dist/worker/task-queue.js.map +1 -1
- package/dist/worker/worker-status.d.ts +48 -0
- package/dist/worker/worker-status.d.ts.map +1 -0
- package/dist/worker/worker-status.js +53 -0
- package/dist/worker/worker-status.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
|
-
import { Badge, Box, Button, Group, Menu, Paper, Stack, Text, Title, Tooltip } from '@mantine/core';
|
|
4
|
-
import { IconFolderOpen, IconChevronDown, IconGitBranch } from '@tabler/icons-react';
|
|
3
|
+
import { Alert, Badge, Box, Button, Group, Menu, Paper, Stack, Text, Title, Tooltip, } from '@mantine/core';
|
|
4
|
+
import { IconFolderOpen, IconChevronDown, IconGitBranch, IconLock } from '@tabler/icons-react';
|
|
5
5
|
import { clientOperatingStrategy } from '../../operating-mode/client.js';
|
|
6
|
+
import { isAdmin, isReviewer } from '../../authorization/helpers.js';
|
|
6
7
|
/**
|
|
7
8
|
* Status color map matching BranchManager.tsx pattern.
|
|
8
9
|
* Returns the Mantine color string for a given branch status.
|
|
@@ -49,50 +50,83 @@ const getStatusColor = (status) => {
|
|
|
49
50
|
* />
|
|
50
51
|
* ```
|
|
51
52
|
*/
|
|
52
|
-
export const EditorHeader = forwardRef(function EditorHeader({ siteTitle, siteSubtitle, headerTitle, currentEntry, branchName, operatingMode, busy, breadcrumbSegments, editedFiles, modifiedCount, unresolvedCommentCount: _, comments, onNavigatorOpen, onFileReload, onFileDiscardDraft, onEntrySelect, onBranchReloadData, onBranchDiscardDrafts, onBranchManagerOpen, onCommentsPanelOpen, onSave, onSubmit, hasUnsavedChanges, branchStatus, onWithdraw, userContext, branchCreatedBy, branchAccess, }, ref) {
|
|
53
|
+
export const EditorHeader = forwardRef(function EditorHeader({ siteTitle, siteSubtitle, headerTitle, currentEntry, branchName, operatingMode, busy, breadcrumbSegments, editedFiles, modifiedCount, unresolvedCommentCount: _, comments, onNavigatorOpen, onFileReload, onFileDiscardDraft, onEntrySelect, onBranchReloadData, onBranchDiscardDrafts, onBranchManagerOpen, onCommentsPanelOpen, onSave, onSubmit, hasUnsavedChanges, branchStatus, onWithdraw, userContext, branchCreatedBy, branchAccess, branchIsProtected = false, branchReadOnly = false, }, ref) {
|
|
54
|
+
// The base branch's readOnly flag takes precedence (it's a structural
|
|
55
|
+
// property, not a workflow state). Otherwise, any non-'editing' status
|
|
56
|
+
// means content is locked for review — save/add actions must be blocked
|
|
57
|
+
// client-side too, not just rejected server-side by the writableBranch guard.
|
|
58
|
+
const statusLocked = !branchReadOnly && branchStatus !== undefined && branchStatus !== 'editing';
|
|
53
59
|
return (_jsx(Paper, { ref: ref, shadow: "md", withBorder: true, radius: 0, px: 0, py: 0, style: {
|
|
54
60
|
position: 'fixed',
|
|
55
61
|
top: 0,
|
|
56
62
|
left: 0,
|
|
57
63
|
right: 0,
|
|
58
64
|
zIndex: 70,
|
|
59
|
-
}, children:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
65
|
+
}, children: _jsxs(Box, { px: "md", py: "sm", children: [_jsxs(Group, { justify: "space-between", align: "center", wrap: "nowrap", children: [_jsxs(Stack, { gap: 2, style: { minWidth: 0 }, children: [_jsx(Title, { order: 5, style: { lineHeight: 1.1 }, children: siteTitle }), siteSubtitle && (_jsx(Text, { size: "xs", c: "dimmed", children: siteSubtitle }))] }), _jsxs(Stack, { gap: 6, style: { minWidth: 0, flex: 1, alignItems: 'center' }, children: [_jsx(Title, { order: 4, style: { lineHeight: 1.1 }, children: headerTitle }), _jsxs(Group, { gap: "sm", wrap: "wrap", align: "center", style: { minWidth: 0, justifyContent: 'center' }, children: [_jsxs(Menu, { withinPortal: true, shadow: "sm", children: [_jsx(Menu.Target, { children: _jsx(Button, { "data-testid": "file-dropdown-button", variant: "outline", color: "gray", size: "xs", leftSection: _jsx(IconFolderOpen, { size: 16 }), rightSection: _jsx(IconChevronDown, { size: 14 }), children: currentEntry?.label ?? 'No file selected' }) }), _jsxs(Menu.Dropdown, { children: [_jsx(Menu.Item, { onClick: onFileReload, disabled: !branchName || !currentEntry, children: "Reload File" }), _jsx(Menu.Item, { "data-testid": "discard-file-draft-menu-item", onClick: onFileDiscardDraft, disabled: !currentEntry, children: "Discard File Draft" }), _jsx(Menu.Divider, {}), _jsx(Menu.Item, { "data-testid": "all-files-menu-item", onClick: onNavigatorOpen, children: "All Files" }), _jsx(Menu.Divider, {}), _jsx(Menu.Label, { children: "Recently modified" }), editedFiles.slice(0, 3).length === 0 ? (_jsx(Menu.Item, { disabled: true, children: "<none>" })) : (editedFiles.slice(0, 3).map((file) => (_jsx(Menu.Item, { onClick: () => {
|
|
66
|
+
onEntrySelect(file.path);
|
|
67
|
+
onNavigatorOpen();
|
|
68
|
+
}, children: file.label }, file.path))))] })] }), _jsx(Group, { gap: 4, wrap: "wrap", align: "center", style: { minWidth: 0 }, children: breadcrumbSegments.map((segment, idx) => (_jsxs(Group, { gap: 4, align: "center", wrap: "nowrap", children: [idx > 0 && (_jsx(Text, { size: "xs", c: "dimmed", children: "/" })), _jsx(Button, { variant: "subtle", size: "xs", px: "xs", onClick: onNavigatorOpen, children: segment })] }, `${segment}-${idx}`))) }), _jsxs(Menu, { withinPortal: true, shadow: "sm", children: [_jsx(Menu.Target, { children: _jsx(Button, { variant: "outline", color: "gray", size: "xs", leftSection: _jsx(IconGitBranch, { size: 16 }), rightSection: _jsx(IconChevronDown, { size: 14 }), loading: !branchName && busy, "data-testid": "branch-dropdown-button", children: branchName || (busy ? 'Loading branches…' : 'No branch selected') }) }), _jsxs(Menu.Dropdown, { "data-testid": "branch-menu", children: [_jsx(Menu.Item, { onClick: onBranchReloadData, disabled: !branchName, children: "Reload All Files" }), _jsx(Menu.Item, { onClick: onBranchDiscardDrafts, disabled: !branchName, children: "Discard All File Drafts" }), _jsx(Menu.Divider, {}), _jsx(Menu.Item, { onClick: onBranchManagerOpen, "data-testid": "manage-branches-menu-item", children: "Change / Manage Branches" }), _jsx(Menu.Divider, {}), _jsx(Menu.Label, { children: `${modifiedCount} file${modifiedCount === 1 ? '' : 's'} modified` }), editedFiles.length === 0 ? (_jsx(Menu.Item, { disabled: true, children: "No edited files yet" })) : (editedFiles.map((file) => (_jsx(Menu.Item, { onClick: () => {
|
|
69
|
+
onEntrySelect(file.path);
|
|
70
|
+
onNavigatorOpen();
|
|
71
|
+
}, children: file.label }, `branch-mod-${file.path}`))))] })] }), clientOperatingStrategy(operatingMode ?? 'prod').supportsStatusBadge() &&
|
|
72
|
+
branchName &&
|
|
73
|
+
branchStatus && (_jsx(Badge, { color: getStatusColor(branchStatus), variant: "light", size: "sm", "data-testid": `header-status-badge-${branchStatus}`, children: branchStatus })), clientOperatingStrategy(operatingMode ?? 'prod').supportsComments() &&
|
|
74
|
+
branchName && (_jsxs(Button, { variant: "outline", color: "gray", size: "xs", onClick: onCommentsPanelOpen, style: { position: 'relative' }, "data-testid": "comments-button", children: ["Comments", comments.filter((t) => !t.resolved).length > 0 && (_jsx("span", { style: {
|
|
75
|
+
position: 'absolute',
|
|
76
|
+
top: -6,
|
|
77
|
+
right: -6,
|
|
78
|
+
background: 'var(--mantine-color-grape-6)',
|
|
79
|
+
color: 'white',
|
|
80
|
+
borderRadius: '50%',
|
|
81
|
+
width: 18,
|
|
82
|
+
height: 18,
|
|
83
|
+
fontSize: 10,
|
|
84
|
+
display: 'flex',
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
justifyContent: 'center',
|
|
87
|
+
fontWeight: 600,
|
|
88
|
+
}, children: comments.filter((t) => !t.resolved).length }))] }))] })] }), _jsxs(Group, { gap: "xs", wrap: "nowrap", children: [_jsx(Tooltip, { label: branchReadOnly
|
|
89
|
+
? 'The base branch is read-only'
|
|
90
|
+
: statusLocked
|
|
91
|
+
? branchStatus === 'submitted'
|
|
92
|
+
? 'This branch is submitted for review — withdraw it to make changes'
|
|
93
|
+
: `This branch is ${branchStatus} — content is read-only`
|
|
94
|
+
: !hasUnsavedChanges && currentEntry
|
|
95
|
+
? 'No changes to save'
|
|
96
|
+
: '', disabled: !branchReadOnly && !statusLocked && (hasUnsavedChanges || !currentEntry), children: _jsx(Button, { "data-testid": "save-button", variant: "light", size: "sm", onClick: onSave, disabled: !branchName ||
|
|
97
|
+
!currentEntry ||
|
|
98
|
+
busy ||
|
|
99
|
+
!hasUnsavedChanges ||
|
|
100
|
+
branchReadOnly ||
|
|
101
|
+
statusLocked, children: "Save File" }) }), (() => {
|
|
102
|
+
const isSubmitted = branchStatus === 'submitted';
|
|
103
|
+
const isEditing = branchStatus === 'editing';
|
|
104
|
+
// The protected base branch can never be submitted for review (both
|
|
105
|
+
// modes); hide the button entirely rather than showing it disabled.
|
|
106
|
+
// Withdraw stays available as the recovery path for a base branch
|
|
107
|
+
// wrongly stuck in 'submitted'.
|
|
108
|
+
if (branchIsProtected && !isSubmitted)
|
|
109
|
+
return null;
|
|
110
|
+
// Check if user can perform workflow actions (creator OR ACL access OR system
|
|
111
|
+
// branch OR privileged). Admins/Reviewers must be able to withdraw a protected
|
|
112
|
+
// base branch wrongly stuck in 'submitted' -- the documented recovery flow --
|
|
113
|
+
// even when they're neither its creator nor in its ACL; this mirrors the
|
|
114
|
+
// server's canPerformWorkflowAction and BranchManager.tsx.
|
|
115
|
+
const userIsCreator = userContext?.userId === branchCreatedBy;
|
|
116
|
+
const isSystemBranch = branchCreatedBy === 'canopycms-system' && !branchIsProtected;
|
|
117
|
+
const userInACL = userContext &&
|
|
118
|
+
branchAccess &&
|
|
119
|
+
(branchAccess.allowedUsers?.includes(userContext.userId) ||
|
|
120
|
+
userContext.groups?.some((g) => branchAccess.allowedGroups?.includes(g)));
|
|
121
|
+
const userIsPrivileged = !!userContext &&
|
|
122
|
+
(isAdmin(userContext.groups ?? []) || isReviewer(userContext.groups ?? []));
|
|
123
|
+
const canPerformAction = (userIsCreator || userInACL || isSystemBranch || userIsPrivileged) &&
|
|
124
|
+
(isEditing || isSubmitted);
|
|
125
|
+
return (_jsx(Tooltip, { label: !canPerformAction
|
|
126
|
+
? 'You do not have permission to submit or withdraw this branch'
|
|
127
|
+
: '', disabled: canPerformAction, children: _jsx(Button, { size: "sm", color: isSubmitted ? 'orange' : 'brand', onClick: isSubmitted ? onWithdraw : onSubmit, disabled: !branchName || busy || !canPerformAction, "data-testid": isSubmitted ? 'withdraw-button' : 'submit-button', children: isSubmitted ? 'Withdraw Branch...' : 'Submit Branch...' }) }));
|
|
128
|
+
})()] })] }), branchReadOnly && (_jsx(Alert, { icon: _jsx(IconLock, { size: 16 }), color: "yellow", variant: "light", mt: "sm", "data-testid": "protected-branch-banner", children: _jsxs(Group, { justify: "space-between", align: "center", gap: "sm", wrap: "wrap", children: [_jsx(Text, { size: "sm", children: `You are viewing the protected base branch "${branchName}". Content is read-only — create a branch to make changes.` }), _jsx(Button, { size: "xs", variant: "light", color: "yellow", onClick: onBranchManagerOpen, children: "Create a branch" })] }) })), statusLocked && (_jsx(Alert, { icon: _jsx(IconLock, { size: 16 }), color: "yellow", variant: "light", mt: "sm", "data-testid": "status-locked-banner", children: _jsxs(Group, { justify: "space-between", align: "center", gap: "sm", wrap: "wrap", children: [_jsx(Text, { size: "sm", children: branchStatus === 'submitted'
|
|
129
|
+
? `Branch "${branchName}" is submitted for review and locked for edits. Use Withdraw Branch above to resume editing.`
|
|
130
|
+
: `Branch "${branchName}" is ${branchStatus} — content is read-only.` }), _jsx(Button, { size: "xs", variant: "light", color: "yellow", onClick: onBranchManagerOpen, children: "Manage Branches" })] }) }))] }) }));
|
|
97
131
|
});
|
|
98
132
|
//# sourceMappingURL=EditorHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorHeader.js","sourceRoot":"","sources":["../../../src/editor/components/EditorHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"EditorHeader.js","sourceRoot":"","sources":["../../../src/editor/components/EditorHeader.tsx"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,12 @@ export interface EditorSidebarProps {
|
|
|
43
43
|
* Callback when the media library should be opened.
|
|
44
44
|
*/
|
|
45
45
|
onMediaLibraryOpen: () => void;
|
|
46
|
+
/**
|
|
47
|
+
* Callback when the System Health panel should be opened. Admin-only:
|
|
48
|
+
* the "System health" menu item only renders when this is provided --
|
|
49
|
+
* the caller (Editor.tsx) is responsible for the isAdmin() gate.
|
|
50
|
+
*/
|
|
51
|
+
onSystemHealthOpen?: () => void;
|
|
46
52
|
/**
|
|
47
53
|
* Custom account component to render (e.g., Clerk's UserButton).
|
|
48
54
|
* If provided, replaces the default account button.
|
|
@@ -77,5 +83,5 @@ export interface EditorSidebarProps {
|
|
|
77
83
|
* />
|
|
78
84
|
* ```
|
|
79
85
|
*/
|
|
80
|
-
export declare function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHeight, footerHeight, onLayoutChange, onHighlightToggle, onPermissionManagerOpen, onGroupManagerOpen, onMediaLibraryOpen, AccountComponent, onAccountClick, onLogoutClick, }: EditorSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
86
|
+
export declare function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHeight, footerHeight, onLayoutChange, onHighlightToggle, onPermissionManagerOpen, onGroupManagerOpen, onMediaLibraryOpen, onSystemHealthOpen, AccountComponent, onAccountClick, onLogoutClick, }: EditorSidebarProps): import("react/jsx-runtime").JSX.Element;
|
|
81
87
|
//# sourceMappingURL=EditorSidebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorSidebar.d.ts","sourceRoot":"","sources":["../../../src/editor/components/EditorSidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EditorSidebar.d.ts","sourceRoot":"","sources":["../../../src/editor/components/EditorSidebar.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAEhD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;IAElB;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAA;IAEzB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;IAE5C;;OAEG;IACH,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAE7B;;OAEG;IACH,uBAAuB,EAAE,MAAM,IAAI,CAAA;IAEnC;;OAEG;IACH,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAE9B;;OAEG;IACH,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAE9B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAA;IAE/B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAEtC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAE3B;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;CAC3B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,EAAE,kBAAkB,2CAgGpB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { ActionIcon, Menu, Paper, Stack } from '@mantine/core';
|
|
3
|
-
import { IconUserCircle, IconLogout, IconPhoto, IconSettings, IconLayoutColumns, IconLayoutRows, IconSquareDashed, } from '@tabler/icons-react';
|
|
3
|
+
import { IconUserCircle, IconLogout, IconPhoto, IconSettings, IconLayoutColumns, IconLayoutRows, IconSquareDashed, IconActivity, } from '@tabler/icons-react';
|
|
4
4
|
/**
|
|
5
5
|
* Sidebar component for the Editor.
|
|
6
6
|
* Contains layout toggle, highlight toggle, settings menu, account button, and logout button.
|
|
@@ -21,7 +21,7 @@ import { IconUserCircle, IconLogout, IconPhoto, IconSettings, IconLayoutColumns,
|
|
|
21
21
|
* />
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
-
export function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHeight, footerHeight, onLayoutChange, onHighlightToggle, onPermissionManagerOpen, onGroupManagerOpen, onMediaLibraryOpen, AccountComponent, onAccountClick, onLogoutClick, }) {
|
|
24
|
+
export function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHeight, footerHeight, onLayoutChange, onHighlightToggle, onPermissionManagerOpen, onGroupManagerOpen, onMediaLibraryOpen, onSystemHealthOpen, AccountComponent, onAccountClick, onLogoutClick, }) {
|
|
25
25
|
return (_jsxs(Paper, { withBorder: true, shadow: "sm", radius: 0, style: {
|
|
26
26
|
position: 'fixed',
|
|
27
27
|
top: headerHeight,
|
|
@@ -34,6 +34,6 @@ export function EditorSidebar({ layout, highlightEnabled, sidebarWidth, headerHe
|
|
|
34
34
|
alignItems: 'center',
|
|
35
35
|
padding: '10px 6px',
|
|
36
36
|
gap: 8,
|
|
37
|
-
}, children: [_jsxs(Stack, { gap: "sm", align: "center", style: { width: '100%', paddingTop: 6 }, children: [_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Toggle layout", onClick: () => onLayoutChange(layout === 'side' ? 'stacked' : 'side'), children: layout === 'side' ? _jsx(IconLayoutRows, { size: 18 }) : _jsx(IconLayoutColumns, { size: 18 }) }), _jsx(ActionIcon, { variant: highlightEnabled ? 'filled' : 'subtle', color: highlightEnabled ? 'brand' : 'gray', size: "lg", radius: "md", "aria-pressed": highlightEnabled, "aria-label": "Toggle highlights", onClick: onHighlightToggle, children: _jsx(IconSquareDashed, { size: 18 }) })] }), _jsxs(Stack, { gap: "xs", align: "center", children: [_jsxs(Menu, { shadow: "md", width: 200, position: "left", children: [_jsx(Menu.Target, { children: _jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Settings", children: _jsx(IconSettings, { size: 18 }) }) }), _jsxs(Menu.Dropdown, { children: [_jsx(Menu.Label, { children: "Settings" }), _jsx(Menu.Item, { onClick: onPermissionManagerOpen, children: "Manage Permissions" }), _jsx(Menu.Item, { onClick: onGroupManagerOpen, children: "Manage Groups" }), _jsx(Menu.Item, { leftSection: _jsx(IconPhoto, { size: 14 }), onClick: onMediaLibraryOpen, children: "Media library" })] })] }), AccountComponent ? (_jsx(AccountComponent, {})) : (_jsxs(_Fragment, { children: [onAccountClick && (_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Account", onClick: onAccountClick, children: _jsx(IconUserCircle, { size: 18 }) })), onLogoutClick && (_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Sign out", onClick: onLogoutClick, children: _jsx(IconLogout, { size: 18 }) }))] }))] })] }));
|
|
37
|
+
}, children: [_jsxs(Stack, { gap: "sm", align: "center", style: { width: '100%', paddingTop: 6 }, children: [_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Toggle layout", onClick: () => onLayoutChange(layout === 'side' ? 'stacked' : 'side'), children: layout === 'side' ? _jsx(IconLayoutRows, { size: 18 }) : _jsx(IconLayoutColumns, { size: 18 }) }), _jsx(ActionIcon, { variant: highlightEnabled ? 'filled' : 'subtle', color: highlightEnabled ? 'brand' : 'gray', size: "lg", radius: "md", "aria-pressed": highlightEnabled, "aria-label": "Toggle highlights", onClick: onHighlightToggle, children: _jsx(IconSquareDashed, { size: 18 }) })] }), _jsxs(Stack, { gap: "xs", align: "center", children: [_jsxs(Menu, { shadow: "md", width: 200, position: "left", children: [_jsx(Menu.Target, { children: _jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Settings", children: _jsx(IconSettings, { size: 18 }) }) }), _jsxs(Menu.Dropdown, { children: [_jsx(Menu.Label, { children: "Settings" }), _jsx(Menu.Item, { onClick: onPermissionManagerOpen, children: "Manage Permissions" }), _jsx(Menu.Item, { onClick: onGroupManagerOpen, children: "Manage Groups" }), _jsx(Menu.Item, { leftSection: _jsx(IconPhoto, { size: 14 }), onClick: onMediaLibraryOpen, children: "Media library" }), onSystemHealthOpen && (_jsx(Menu.Item, { leftSection: _jsx(IconActivity, { size: 14 }), onClick: onSystemHealthOpen, children: "System health" }))] })] }), AccountComponent ? (_jsx(AccountComponent, {})) : (_jsxs(_Fragment, { children: [onAccountClick && (_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Account", onClick: onAccountClick, children: _jsx(IconUserCircle, { size: 18 }) })), onLogoutClick && (_jsx(ActionIcon, { variant: "subtle", size: "lg", radius: "md", "aria-label": "Sign out", onClick: onLogoutClick, children: _jsx(IconLogout, { size: 18 }) }))] }))] })] }));
|
|
38
38
|
}
|
|
39
39
|
//# sourceMappingURL=EditorSidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorSidebar.js","sourceRoot":"","sources":["../../../src/editor/components/EditorSidebar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,EACL,cAAc,EACd,UAAU,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,gBAAgB,
|
|
1
|
+
{"version":3,"file":"EditorSidebar.js","sourceRoot":"","sources":["../../../src/editor/components/EditorSidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageField.d.ts","sourceRoot":"","sources":["../../../src/editor/fields/ImageField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAA;AASjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAQnD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,eAAe,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAA;IACtD,kKAAkK;IAClK,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAC1B;AAOD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"ImageField.d.ts","sourceRoot":"","sources":["../../../src/editor/fields/ImageField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA6C,MAAM,OAAO,CAAA;AASjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAQnD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,eAAe,GAAG,SAAS,CAAA;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAA;IACtD,kKAAkK;IAClK,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAC1B;AAOD,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyOhD,CAAA;AAED,eAAe,UAAU,CAAA"}
|
|
@@ -40,7 +40,10 @@ export const ImageField = ({ id, label, value, onChange, aspect, altOptional, da
|
|
|
40
40
|
justCommittedRef.current = true;
|
|
41
41
|
onChange({
|
|
42
42
|
src: asset.src,
|
|
43
|
-
alt
|
|
43
|
+
// Preserve the current alt text on replace - it often still describes
|
|
44
|
+
// the new image (e.g. "hero photo"), and the editor can always edit it.
|
|
45
|
+
// Selecting into an empty field has no prior alt, so it stays ''.
|
|
46
|
+
alt: value?.alt ?? '',
|
|
44
47
|
...(asset.width !== undefined ? { width: asset.width } : {}),
|
|
45
48
|
...(asset.height !== undefined ? { height: asset.height } : {}),
|
|
46
49
|
...(crop ? { crop } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageField.js","sourceRoot":"","sources":["../../../src/editor/fields/ImageField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAc,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAG5E,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAwBvF,MAAM,aAAa,GAAG,GAAG,CAAA;AAEzB,MAAM,CAAC,MAAM,UAAU,GAA8B,CAAC,EACpD,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,MAAM,EACN,WAAW,EACX,eAAe,EACf,MAAM,GACP,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,KAAK,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAA;IACjC,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAA;IACrC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAA;IACxE,8EAA8E;IAC9E,0EAA0E;IAC1E,uDAAuD;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;IAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAEtC,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAA;IAE7B,wEAAwE;IACxE,0EAA0E;IAC1E,qBAAqB;IACrB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,gBAAgB,CAAC,OAAO,GAAG,KAAK,CAAA;YAChC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;QAC9B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAEhB,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAE,IAAe,EAAE,EAAE;QAC1D,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;QAC/B,QAAQ,CAAC;YACP,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,GAAG,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"ImageField.js","sourceRoot":"","sources":["../../../src/editor/fields/ImageField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface StringListFieldProps {
|
|
3
|
+
id?: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
value: string[];
|
|
6
|
+
onChange: (value: string[]) => void;
|
|
7
|
+
dataCanopyField?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Editor for `type: 'string', list: true` fields.
|
|
11
|
+
*
|
|
12
|
+
* Uses Mantine's TagsInput: type + Enter adds an item, each item renders as a
|
|
13
|
+
* removable pill, and Backspace on an empty input removes the last item.
|
|
14
|
+
* (Before this component existed, string-list fields fell through to the
|
|
15
|
+
* single-value TextField, which coerced the array to a comma-joined string —
|
|
16
|
+
* effectively unsupported.)
|
|
17
|
+
*/
|
|
18
|
+
export declare const StringListField: React.FC<StringListFieldProps>;
|
|
19
|
+
export default StringListField;
|
|
20
|
+
//# sourceMappingURL=StringListField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringListField.d.ts","sourceRoot":"","sources":["../../../src/editor/fields/StringListField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgB,MAAM,OAAO,CAAA;AAIpC,MAAM,WAAW,oBAAoB;IACnC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IACnC,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CA2B1D,CAAA;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from 'react';
|
|
3
|
+
import { TagsInput } from '@mantine/core';
|
|
4
|
+
/**
|
|
5
|
+
* Editor for `type: 'string', list: true` fields.
|
|
6
|
+
*
|
|
7
|
+
* Uses Mantine's TagsInput: type + Enter adds an item, each item renders as a
|
|
8
|
+
* removable pill, and Backspace on an empty input removes the last item.
|
|
9
|
+
* (Before this component existed, string-list fields fell through to the
|
|
10
|
+
* single-value TextField, which coerced the array to a comma-joined string —
|
|
11
|
+
* effectively unsupported.)
|
|
12
|
+
*/
|
|
13
|
+
export const StringListField = ({ id, label, value, onChange, dataCanopyField, }) => {
|
|
14
|
+
const generatedId = useId();
|
|
15
|
+
const inputId = id ?? generatedId;
|
|
16
|
+
return (_jsx(TagsInput, { id: inputId, label: label, value: value, size: "sm", onChange: onChange,
|
|
17
|
+
// Faithful generic-list semantics, not tag ergonomics: no comma
|
|
18
|
+
// splitting ("New York, NY" stays one item — TagsInput's default
|
|
19
|
+
// splitChars would break it in two) and duplicates are legitimate
|
|
20
|
+
// list data (the default silently drops them, so existing file data
|
|
21
|
+
// couldn't round-trip).
|
|
22
|
+
splitChars: [], allowDuplicates: true, "data-canopy-field": dataCanopyField }));
|
|
23
|
+
};
|
|
24
|
+
export default StringListField;
|
|
25
|
+
//# sourceMappingURL=StringListField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringListField.js","sourceRoot":"","sources":["../../../src/editor/fields/StringListField.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAUzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAmC,CAAC,EAC9D,EAAE,EACF,KAAK,EACL,KAAK,EACL,QAAQ,EACR,eAAe,GAChB,EAAE,EAAE;IACH,MAAM,WAAW,GAAG,KAAK,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,EAAE,IAAI,WAAW,CAAA;IAEjC,OAAO,CACL,KAAC,SAAS,IACR,EAAE,EAAE,OAAO,EACX,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,QAAQ;QAClB,gEAAgE;QAChE,iEAAiE;QACjE,kEAAkE;QAClE,oEAAoE;QACpE,wBAAwB;QACxB,UAAU,EAAE,EAAE,EACd,eAAe,6BACI,eAAe,GAClC,CACH,CAAA;AACH,CAAC,CAAA;AAED,eAAe,eAAe,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBranchActions.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchActions.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,UAAU,EAAE,MAAM,OAAO,CAAA;IACzB,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,kBAAkB,EAAE,CAAC,MAAM,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"useBranchActions.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchActions.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,UAAU,EAAE,MAAM,OAAO,CAAA;IACzB,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,kBAAkB,EAAE,CAAC,MAAM,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,MAAM,CAAA;KACrB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAyFzF"}
|
|
@@ -74,13 +74,19 @@ export function useBranchActions(options) {
|
|
|
74
74
|
if (!result.ok) {
|
|
75
75
|
throw new Error(result.error || 'Failed to create branch');
|
|
76
76
|
}
|
|
77
|
+
// The server sanitizes the branch name (e.g. "feature/x" -> "feature-x")
|
|
78
|
+
// before persisting it. Adopt the canonical name from the response so
|
|
79
|
+
// the client doesn't end up stuck on a name the server never saved.
|
|
80
|
+
const createdName = result.data?.branch?.name ?? branch.name;
|
|
77
81
|
notifications.show({
|
|
78
|
-
message:
|
|
82
|
+
message: createdName === branch.name
|
|
83
|
+
? `Branch "${createdName}" created`
|
|
84
|
+
: `Branch "${createdName}" created (renamed from "${branch.name}")`,
|
|
79
85
|
color: 'green',
|
|
80
86
|
});
|
|
81
87
|
await options.onReloadBranches();
|
|
82
88
|
// Switch to new branch (already confirmed dirty check)
|
|
83
|
-
performBranchSwitch(
|
|
89
|
+
performBranchSwitch(createdName);
|
|
84
90
|
}
|
|
85
91
|
catch (err) {
|
|
86
92
|
const message = err instanceof Error ? err.message : 'Failed to create branch';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBranchActions.js","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchActions.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useBranchActions.js","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchActions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAmBzC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAEhC,gDAAgD;IAChD,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAE,EAAE;QAC3C,8CAA8C;QAC9C,8DAA8D;QAC9D,+CAA+C;QAC/C,oCAAoC;QACpC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAE3B,aAAa;QACb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACzC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YACpC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;QACrD,CAAC;QACD,OAAO,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC,CAAA;IAED,+CAA+C;IAC/C,MAAM,cAAc,GAAG,KAAK,EAAE,OAAe,EAAoB,EAAE;QACjE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAAE,OAAO,IAAI,CAAA;QAEtC,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACtC,MAAM,CAAC,gBAAgB,CAAC;gBACtB,KAAK,EAAE,iBAAiB;gBACxB,QAAQ,EAAE,KAAC,IAAI,IAAC,IAAI,EAAC,IAAI,YAAE,OAAO,GAAQ;gBAC1C,MAAM,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE;gBACxD,YAAY,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC9B,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC9B,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;aAC/B,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAmB,EAAE,EAAE;QACvD,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,OAAO,CAAC,UAAU;YAAE,OAAM;QAEhD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,mDAAmD,CAAC,CAAA;QAC3F,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAE/D,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,MAAM,kBAAkB,GAAG,KAAK,EAAE,MAIjC,EAAE,EAAE;QACH,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,2CAA2C,CAAC,CAAA;QACnF,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,4BAA4B;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7C,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,yBAAyB,CAAC,CAAA;YAC5D,CAAC;YAED,yEAAyE;YACzE,sEAAsE;YACtE,oEAAoE;YACpE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAA;YAC5D,aAAa,CAAC,IAAI,CAAC;gBACjB,OAAO,EACL,WAAW,KAAK,MAAM,CAAC,IAAI;oBACzB,CAAC,CAAC,WAAW,WAAW,WAAW;oBACnC,CAAC,CAAC,WAAW,WAAW,4BAA4B,MAAM,CAAC,IAAI,IAAI;gBACvE,KAAK,EAAE,OAAO;aACf,CAAC,CAAA;YACF,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAA;YAEhC,uDAAuD;YACvD,mBAAmB,CAAC,WAAW,CAAC,CAAA;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAA;YAC9E,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAA;IAED,OAAO;QACL,kBAAkB;QAClB,kBAAkB;KACnB,CAAA;AACH,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ConflictStatus, PullRequestState, SyncStatus } from '../../types';
|
|
2
2
|
import type { OperatingMode } from '../../operating-mode';
|
|
3
3
|
import type { CommentThread } from '../../comment-store';
|
|
4
|
+
import type { BranchListItem } from '../../api/branch';
|
|
4
5
|
/**
|
|
5
6
|
* Branch summary for display in BranchManager component.
|
|
6
7
|
*/
|
|
@@ -15,7 +16,17 @@ export interface BranchSummary {
|
|
|
15
16
|
};
|
|
16
17
|
pullRequestUrl?: string;
|
|
17
18
|
pullRequestNumber?: number;
|
|
19
|
+
pullRequestState?: PullRequestState;
|
|
20
|
+
mergedAt?: string;
|
|
21
|
+
/** Sync status for async GitHub operations (used when Lambda has no internet) */
|
|
22
|
+
syncStatus?: SyncStatus;
|
|
23
|
+
/** Whether this branch has unresolved merge conflicts with the base branch */
|
|
24
|
+
conflictStatus?: ConflictStatus;
|
|
25
|
+
/** ContentIds of entries where --theirs was applied during rebase; cleared on clean rebase */
|
|
26
|
+
conflictFiles?: string[];
|
|
18
27
|
commentCount: number;
|
|
28
|
+
isProtected: boolean;
|
|
29
|
+
readOnly: boolean;
|
|
19
30
|
}
|
|
20
31
|
export interface UseBranchManagerOptions {
|
|
21
32
|
/**
|
|
@@ -38,9 +49,9 @@ export interface UseBranchManagerOptions {
|
|
|
38
49
|
export interface UseBranchManagerReturn {
|
|
39
50
|
branchName: string;
|
|
40
51
|
setBranchName: (name: string) => void;
|
|
41
|
-
branches:
|
|
52
|
+
branches: BranchListItem[];
|
|
42
53
|
branchSummaries: BranchSummary[];
|
|
43
|
-
currentBranch:
|
|
54
|
+
currentBranch: BranchListItem | undefined;
|
|
44
55
|
branchStatus: string;
|
|
45
56
|
handleSubmit: (branchName: string) => Promise<void>;
|
|
46
57
|
handleWithdraw: (branchName: string) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBranchManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"useBranchManager.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAoDtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;QAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iFAAiF;IACjF,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,8FAA8F;IAC9F,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;IACpB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,aAAa,EAAE,aAAa,CAAA;IAE5B;;OAEG;IACH,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAEhC;;OAEG;IACH,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,eAAe,EAAE,aAAa,EAAE,CAAA;IAChC,aAAa,EAAE,cAAc,GAAG,SAAS,CAAA;IACzC,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3C,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CA0NzF"}
|
|
@@ -5,6 +5,11 @@ import { Text } from '@mantine/core';
|
|
|
5
5
|
import { modals } from '@mantine/modals';
|
|
6
6
|
import { notifications } from '@mantine/notifications';
|
|
7
7
|
import { useApiClient } from '../context/index.js';
|
|
8
|
+
// branch-name, NOT branch or the '../../paths' barrel: both of those pull
|
|
9
|
+
// node:fs/promises + node:path at the top level (path RESOLUTION helpers),
|
|
10
|
+
// which breaks adopters' production `next build` of the editor bundle.
|
|
11
|
+
// paths/branch-name.ts is the dependency-free home of sanitizeBranchName.
|
|
12
|
+
import { sanitizeBranchName } from '../../paths/branch-name.js';
|
|
8
13
|
/**
|
|
9
14
|
* Helper function to show confirmation modal for branch submit action.
|
|
10
15
|
*/
|
|
@@ -70,7 +75,12 @@ export function useBranchManager(options) {
|
|
|
70
75
|
const apiClient = useApiClient();
|
|
71
76
|
const [branchName, setBranchName] = useState(options.initialBranch);
|
|
72
77
|
const [branches, setBranches] = useState([]);
|
|
73
|
-
|
|
78
|
+
// Exact match first; fall back to comparing sanitized forms so a legacy
|
|
79
|
+
// deep-link carrying the raw, unsanitized name (e.g. "?branch=feature%2Fx"
|
|
80
|
+
// from before a branch was created, or from an old bookmark) still
|
|
81
|
+
// resolves to the branch the server actually persisted (e.g. "feature-x").
|
|
82
|
+
const currentBranch = branches.find((b) => b.name === branchName) ??
|
|
83
|
+
branches.find((b) => b.name === sanitizeBranchName(branchName));
|
|
74
84
|
const branchStatus = currentBranch?.status ?? 'editing';
|
|
75
85
|
// Compute branch summaries with comment counts
|
|
76
86
|
const branchSummaries = useMemo(() => {
|
|
@@ -88,7 +98,14 @@ export function useBranchManager(options) {
|
|
|
88
98
|
},
|
|
89
99
|
pullRequestUrl: b.pullRequestUrl,
|
|
90
100
|
pullRequestNumber: b.pullRequestNumber,
|
|
101
|
+
pullRequestState: b.pullRequestState,
|
|
102
|
+
mergedAt: b.mergedAt,
|
|
103
|
+
syncStatus: b.syncStatus,
|
|
104
|
+
conflictStatus: b.conflictStatus,
|
|
105
|
+
conflictFiles: b.conflictFiles,
|
|
91
106
|
commentCount: unresolvedCount,
|
|
107
|
+
isProtected: b.isProtected ?? false,
|
|
108
|
+
readOnly: b.readOnly ?? false,
|
|
92
109
|
};
|
|
93
110
|
});
|
|
94
111
|
}, [branches, branchName, options.comments]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBranchManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"useBranchManager.js","sourceRoot":"","sources":["../../../src/editor/hooks/useBranchManager.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,13 @@ export interface UseDraftManagerOptions {
|
|
|
17
17
|
loadEntry: (entry: EditorEntry) => Promise<FormValue>;
|
|
18
18
|
saveEntry: (entry: EditorEntry, value: FormValue) => Promise<FormValue>;
|
|
19
19
|
setBusy: (busy: boolean) => void;
|
|
20
|
+
/**
|
|
21
|
+
* Fired (fire-and-forget) after a successful save. Lets callers refresh
|
|
22
|
+
* data that depends on saved content — e.g. the entries list, so a header/
|
|
23
|
+
* entry-picker label built from a Title field reflects the new value
|
|
24
|
+
* instead of the stale label from the last entries fetch.
|
|
25
|
+
*/
|
|
26
|
+
onSaved?: () => void;
|
|
20
27
|
}
|
|
21
28
|
export interface UseDraftManagerReturn {
|
|
22
29
|
drafts: Record<string, FormValue>;
|