@burdenoff/microfe-planmagnet 2026.1001.1 → 2026.1001.2
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/planmagnet/PlanMagnetRoot.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoot.js +156 -150
- package/dist/planmagnet/PlanMagnetRoot.js.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +1 -1
- package/dist/planmagnet/PlanMagnetRoutes.js +19 -15
- package/dist/planmagnet/PlanMagnetRoutes.js.map +1 -1
- package/dist/planmagnet/comments/CommentThread.js +36 -36
- package/dist/planmagnet/comments/RoadmapComments.js +21 -21
- package/dist/planmagnet/controls/AutomationRuleControls.js +24 -24
- package/dist/planmagnet/controls/FeatureControls.js +60 -60
- package/dist/planmagnet/controls/SyncControls.js +59 -59
- package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +15 -15
- package/dist/planmagnet/docs/DocSuggestionsPanel.js +12 -12
- package/dist/planmagnet/docs/DocVersionCompare.js +3 -3
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts +12 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.js +208 -0
- package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +1 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts +5 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.js +190 -0
- package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +1 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts +5 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +99 -0
- package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +1 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts +8 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +1 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.js +185 -0
- package/dist/planmagnet/forecast/ResourceForecastCard.js.map +1 -0
- package/dist/planmagnet/forecast/riskFlags.d.ts +35 -0
- package/dist/planmagnet/forecast/riskFlags.d.ts.map +1 -0
- package/dist/planmagnet/forecast/riskFlags.js +37 -0
- package/dist/planmagnet/forecast/riskFlags.js.map +1 -0
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +216 -182
- package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +1 -1
- package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +11 -11
- package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +4 -4
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js +163 -163
- package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +165 -165
- package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts +2 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +1 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +234 -0
- package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +1 -0
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +206 -182
- package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportPagePage.js +22 -22
- package/dist/planmagnet/pages/ReportsReportPagePage.js.map +1 -1
- package/dist/planmagnet/pages/ReportsReportsPagePage.js +21 -21
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +1 -1
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +88 -83
- package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +1 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +1 -1
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +139 -112
- package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +1 -1
- package/dist/planmagnet/pages/analytics/StatusFlowCard.js +21 -21
- package/dist/planmagnet/product/ProductControls.js +91 -91
- package/dist/planmagnet/reports/SchedulesPanel.js +33 -33
- package/dist/planmagnet/reports/ShareDialog.js +20 -20
- package/dist/planmagnet/reports/ShareDialog.js.map +1 -1
- package/dist/planmagnet/reports/sharedReportRoute.d.ts +3 -2
- package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +1 -1
- package/dist/planmagnet/reports/sharedReportRoute.js.map +1 -1
- package/dist/planmagnet/roadmaps/RoadmapControls.js +60 -60
- package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +30 -30
- package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +21 -21
- package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +22 -22
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { usePlanMagnetNavigate as e } from "../providers/PlanMagnetProvider.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
2
|
+
import { isForbidden as t, mutationErrorMessage as n } from "../utils/graphqlErrors.js";
|
|
3
|
+
import { throwOnError as r } from "../utils/mutationResult.js";
|
|
4
|
+
import { ErrorLine as i } from "../controls/ConfirmButton.js";
|
|
5
|
+
import { enumLabel as a } from "../controls/WorkItemControls.js";
|
|
6
6
|
import { detailPath as ee } from "../utils/rowNavigation.js";
|
|
7
7
|
import { ProjectSelect as te } from "../controls/Pickers.js";
|
|
8
|
-
import { useSyncProviderCapabilities as
|
|
9
|
-
import { CONFLICT_RESOLUTIONS as
|
|
10
|
-
import { CONFLICT_STRATEGY_EXPLANATION as
|
|
8
|
+
import { useSyncProviderCapabilities as ne } from "../integrations/useSyncProviderCapabilities.js";
|
|
9
|
+
import { CONFLICT_RESOLUTIONS as re, GITHUB_FIELD_MAPPING_DEFAULTS as o, SYNC_DIRECTIONS as ie, directionLabel as s, directionSupported as ae, isValidGithubOwner as oe, isValidGithubRepo as c, providerIsLive as l, providerLabel as u } from "../integrations/syncTypes.js";
|
|
10
|
+
import { CONFLICT_STRATEGY_EXPLANATION as d, RunNowButton as se, SyncRunResultSummary as f, TestConnectionButton as ce } from "../controls/SyncControls.js";
|
|
11
11
|
import { useState as p } from "react";
|
|
12
|
-
import { ArrowLeft as le, CheckCircle2 as
|
|
13
|
-
import { gql as
|
|
14
|
-
import { useMutation as
|
|
15
|
-
import { Fragment as
|
|
16
|
-
import { Button as
|
|
12
|
+
import { ArrowLeft as le, CheckCircle2 as m, Github as h, Loader2 as ue, Plug as g, ShieldQuestion as de } from "lucide-react";
|
|
13
|
+
import { gql as _ } from "@apollo/client";
|
|
14
|
+
import { useMutation as fe } from "@apollo/client/react";
|
|
15
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
16
|
+
import { Button as x, Card as S, CardContent as C, CardHeader as w, CardTitle as T, Checkbox as pe, Input as E } from "@burdenoff/fe-libs/ui";
|
|
17
17
|
//#region src/planmagnet/pages/IntegrationsNewSyncPagePage.tsx
|
|
18
|
-
var
|
|
18
|
+
var D = "text-sm font-medium", me = _`
|
|
19
19
|
mutation NewSyncCreate($input: PlanmagnetCreateExternalSyncInput!) {
|
|
20
20
|
planmagnetCreateExternalSync(input: $input) {
|
|
21
21
|
id
|
|
@@ -28,29 +28,29 @@ var E = "text-sm font-medium", he = g`
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
`;
|
|
31
|
-
function
|
|
32
|
-
return /* @__PURE__ */
|
|
31
|
+
function he({ capabilities: e, capabilitiesLoading: t, provider: n, onSelect: r }) {
|
|
32
|
+
return /* @__PURE__ */ b(S, {
|
|
33
33
|
"data-testid": "sync-wizard-step",
|
|
34
|
-
children: [/* @__PURE__ */
|
|
34
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(T, { children: "1. Provider" }) }), /* @__PURE__ */ b(C, {
|
|
35
35
|
className: "space-y-2",
|
|
36
|
-
children: [t && /* @__PURE__ */
|
|
36
|
+
children: [t && /* @__PURE__ */ y("p", {
|
|
37
37
|
className: "text-sm text-muted-foreground",
|
|
38
38
|
children: "Loading providers…"
|
|
39
|
-
}), /* @__PURE__ */
|
|
39
|
+
}), /* @__PURE__ */ y("div", {
|
|
40
40
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-2",
|
|
41
41
|
children: e.map((e) => {
|
|
42
|
-
let t =
|
|
43
|
-
return /* @__PURE__ */
|
|
42
|
+
let t = l(e), i = n === e.provider;
|
|
43
|
+
return /* @__PURE__ */ b("button", {
|
|
44
44
|
type: "button",
|
|
45
45
|
disabled: !t,
|
|
46
46
|
"aria-pressed": i,
|
|
47
47
|
"data-testid": `sync-wizard-provider-${e.provider}`,
|
|
48
48
|
onClick: () => t && r(e.provider),
|
|
49
49
|
className: `flex items-start gap-2 rounded-md border p-3 text-left text-sm transition-colors ${i ? "border-primary bg-primary/5" : "border-input"} ${t ? "hover:bg-muted" : "cursor-not-allowed opacity-50"}`,
|
|
50
|
-
children: [e.provider === "GITHUB" ? /* @__PURE__ */
|
|
50
|
+
children: [e.provider === "GITHUB" ? /* @__PURE__ */ y(h, { className: "mt-0.5 h-4 w-4 shrink-0" }) : /* @__PURE__ */ y(g, { className: "mt-0.5 h-4 w-4 shrink-0" }), /* @__PURE__ */ b("span", { children: [/* @__PURE__ */ y("span", {
|
|
51
51
|
className: "block font-medium",
|
|
52
|
-
children:
|
|
53
|
-
}), /* @__PURE__ */
|
|
52
|
+
children: u(e.provider)
|
|
53
|
+
}), /* @__PURE__ */ y("span", {
|
|
54
54
|
className: "block text-xs text-muted-foreground",
|
|
55
55
|
children: t ? [
|
|
56
56
|
e.supportsImport && "inbound",
|
|
@@ -64,339 +64,339 @@ function ge({ capabilities: e, capabilitiesLoading: t, provider: n, onSelect: r
|
|
|
64
64
|
})]
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
|
-
function
|
|
68
|
-
let
|
|
67
|
+
function O() {
|
|
68
|
+
let l = e(), { capabilities: h, loading: g } = ne(), [_, O] = p(""), [k, ge] = p(""), [A, j] = p(""), [M, N] = p(""), [P, F] = p(""), [I, L] = p(""), [R, _e] = p("MANUAL"), [z, ve] = p(""), [B, ye] = p(""), [V, be] = p(!0), [H, U] = p(null), [W, xe] = p(null), [G, Se] = p(null), [Ce, K] = fe(me, { refetchQueries: ["SyncsList"] }), q = h.find((e) => e.provider === _), J = _ === "GITHUB", Y = q ? ie.filter((e) => ae(q, e)) : [], X = A.trim() !== "" && oe(A), Z = M.trim() !== "" && c(M), Q = !!_ && !!k && (!J || X && Z) && !!P, $ = Q && I.trim() !== "", we = () => {
|
|
69
69
|
let e = {};
|
|
70
|
-
return
|
|
71
|
-
projectId:
|
|
72
|
-
provider:
|
|
73
|
-
direction:
|
|
74
|
-
externalProjectId: J ? `${
|
|
75
|
-
externalProjectUrl: J ? `https://github.com/${
|
|
70
|
+
return z.trim() && (e.priority = z.trim()), B.trim() && (e.dueDate = B.trim()), {
|
|
71
|
+
projectId: k,
|
|
72
|
+
provider: _,
|
|
73
|
+
direction: P,
|
|
74
|
+
externalProjectId: J ? `${A.trim()}/${M.trim()}` : "",
|
|
75
|
+
externalProjectUrl: J ? `https://github.com/${A.trim()}/${M.trim()}` : void 0,
|
|
76
76
|
connectionConfig: J ? {
|
|
77
|
-
token:
|
|
78
|
-
owner:
|
|
79
|
-
repo:
|
|
77
|
+
token: I.trim(),
|
|
78
|
+
owner: A.trim(),
|
|
79
|
+
repo: M.trim()
|
|
80
80
|
} : {},
|
|
81
|
-
conflictStrategy:
|
|
81
|
+
conflictStrategy: R,
|
|
82
82
|
...Object.keys(e).length > 0 ? { fieldMapping: e } : {},
|
|
83
|
-
testConnection:
|
|
83
|
+
testConnection: V
|
|
84
84
|
};
|
|
85
85
|
}, Te = async () => {
|
|
86
|
-
if (
|
|
87
|
-
|
|
86
|
+
if (U(null), !$) {
|
|
87
|
+
U("Fill in the project, external project and credentials above before creating the sync.");
|
|
88
88
|
return;
|
|
89
89
|
}
|
|
90
90
|
try {
|
|
91
|
-
let e = await
|
|
92
|
-
e.data &&
|
|
91
|
+
let e = await r(Ce({ variables: { input: we() } }));
|
|
92
|
+
e.data && xe(e.data.planmagnetCreateExternalSync);
|
|
93
93
|
} catch (e) {
|
|
94
|
-
|
|
94
|
+
U(t(e) ? "Your role can view integrations but not set them up." : n(e, "The sync could not be created."));
|
|
95
95
|
}
|
|
96
96
|
};
|
|
97
|
-
return
|
|
97
|
+
return W ? /* @__PURE__ */ y("div", {
|
|
98
98
|
className: "space-y-6 p-6 max-w-2xl",
|
|
99
|
-
children: /* @__PURE__ */
|
|
99
|
+
children: /* @__PURE__ */ b(S, {
|
|
100
100
|
"data-testid": "sync-wizard-created",
|
|
101
|
-
children: [/* @__PURE__ */
|
|
101
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ b(T, {
|
|
102
102
|
className: "flex items-center gap-2",
|
|
103
|
-
children: [/* @__PURE__ */
|
|
104
|
-
}) }), /* @__PURE__ */
|
|
103
|
+
children: [/* @__PURE__ */ y(m, { className: "h-5 w-5 text-status-success-text" }), "Sync created"]
|
|
104
|
+
}) }), /* @__PURE__ */ b(C, {
|
|
105
105
|
className: "space-y-4",
|
|
106
106
|
children: [
|
|
107
|
-
/* @__PURE__ */
|
|
107
|
+
/* @__PURE__ */ b("p", {
|
|
108
108
|
className: "text-sm text-muted-foreground",
|
|
109
109
|
children: [
|
|
110
|
-
|
|
110
|
+
u(W.provider),
|
|
111
111
|
" sync for ",
|
|
112
|
-
|
|
112
|
+
W.project?.name ?? "the project",
|
|
113
113
|
" is set up and idle. Test the connection and run the first sync now, or do either later from the sync's own page."
|
|
114
114
|
]
|
|
115
115
|
}),
|
|
116
|
-
/* @__PURE__ */
|
|
116
|
+
/* @__PURE__ */ b("div", {
|
|
117
117
|
className: "flex flex-wrap items-center gap-3",
|
|
118
|
-
children: [/* @__PURE__ */
|
|
119
|
-
syncId:
|
|
120
|
-
onResult:
|
|
118
|
+
children: [/* @__PURE__ */ y(ce, { syncId: W.id }), /* @__PURE__ */ y(se, {
|
|
119
|
+
syncId: W.id,
|
|
120
|
+
onResult: Se
|
|
121
121
|
})]
|
|
122
122
|
}),
|
|
123
|
-
|
|
124
|
-
/* @__PURE__ */
|
|
125
|
-
onClick: () =>
|
|
123
|
+
G && /* @__PURE__ */ y(f, { result: G }),
|
|
124
|
+
/* @__PURE__ */ y(x, {
|
|
125
|
+
onClick: () => l(ee("/integrations/sync-detail-page", W.id)),
|
|
126
126
|
"data-testid": "sync-wizard-view",
|
|
127
127
|
children: "View sync"
|
|
128
128
|
})
|
|
129
129
|
]
|
|
130
130
|
})]
|
|
131
131
|
})
|
|
132
|
-
}) : /* @__PURE__ */
|
|
132
|
+
}) : /* @__PURE__ */ b("div", {
|
|
133
133
|
className: "space-y-6 p-6 max-w-2xl",
|
|
134
134
|
children: [
|
|
135
|
-
/* @__PURE__ */
|
|
135
|
+
/* @__PURE__ */ b("div", {
|
|
136
136
|
className: "flex items-start gap-3",
|
|
137
|
-
children: [/* @__PURE__ */
|
|
137
|
+
children: [/* @__PURE__ */ y(x, {
|
|
138
138
|
variant: "ghost",
|
|
139
139
|
size: "icon",
|
|
140
140
|
"aria-label": "Back to Integrations",
|
|
141
|
-
onClick: () =>
|
|
142
|
-
children: /* @__PURE__ */
|
|
143
|
-
}), /* @__PURE__ */
|
|
141
|
+
onClick: () => l("/integrations/syncs-page"),
|
|
142
|
+
children: /* @__PURE__ */ y(le, { className: "h-4 w-4" })
|
|
143
|
+
}), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("h1", {
|
|
144
144
|
className: "text-2xl font-semibold",
|
|
145
145
|
children: "Set up a sync"
|
|
146
|
-
}), /* @__PURE__ */
|
|
146
|
+
}), /* @__PURE__ */ y("p", {
|
|
147
147
|
className: "text-sm text-muted-foreground",
|
|
148
148
|
children: "Connect a PlanMagnet project to an external issue tracker so work items stay in step on both sides."
|
|
149
149
|
})] })]
|
|
150
150
|
}),
|
|
151
|
-
/* @__PURE__ */
|
|
152
|
-
capabilities:
|
|
153
|
-
capabilitiesLoading:
|
|
154
|
-
provider:
|
|
151
|
+
/* @__PURE__ */ y(he, {
|
|
152
|
+
capabilities: h,
|
|
153
|
+
capabilitiesLoading: g,
|
|
154
|
+
provider: _,
|
|
155
155
|
onSelect: (e) => {
|
|
156
|
-
|
|
156
|
+
O(e), F(""), j(""), N(""), L("");
|
|
157
157
|
}
|
|
158
158
|
}),
|
|
159
|
-
|
|
159
|
+
_ && /* @__PURE__ */ b(S, {
|
|
160
160
|
"data-testid": "sync-wizard-step",
|
|
161
|
-
children: [/* @__PURE__ */
|
|
161
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(T, { children: "2. Project, external project and direction" }) }), /* @__PURE__ */ b(C, {
|
|
162
162
|
className: "space-y-4",
|
|
163
163
|
children: [
|
|
164
|
-
/* @__PURE__ */
|
|
164
|
+
/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
|
|
165
165
|
htmlFor: "sync-wizard-project",
|
|
166
|
-
className:
|
|
166
|
+
className: D,
|
|
167
167
|
children: "PlanMagnet project"
|
|
168
|
-
}), /* @__PURE__ */
|
|
168
|
+
}), /* @__PURE__ */ y("div", {
|
|
169
169
|
className: "mt-1",
|
|
170
|
-
children: /* @__PURE__ */
|
|
170
|
+
children: /* @__PURE__ */ y(te, {
|
|
171
171
|
id: "sync-wizard-project",
|
|
172
|
-
value:
|
|
172
|
+
value: k,
|
|
173
173
|
noneLabel: "Choose a project",
|
|
174
|
-
onChange:
|
|
174
|
+
onChange: ge
|
|
175
175
|
})
|
|
176
176
|
})] }),
|
|
177
|
-
J && /* @__PURE__ */
|
|
177
|
+
J && /* @__PURE__ */ b("div", {
|
|
178
178
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-3",
|
|
179
|
-
children: [/* @__PURE__ */
|
|
180
|
-
/* @__PURE__ */
|
|
179
|
+
children: [/* @__PURE__ */ b("div", { children: [
|
|
180
|
+
/* @__PURE__ */ y("label", {
|
|
181
181
|
htmlFor: "sync-wizard-owner",
|
|
182
|
-
className:
|
|
182
|
+
className: D,
|
|
183
183
|
children: "GitHub owner (user or org)"
|
|
184
184
|
}),
|
|
185
|
-
/* @__PURE__ */
|
|
185
|
+
/* @__PURE__ */ y(E, {
|
|
186
186
|
id: "sync-wizard-owner",
|
|
187
187
|
className: "mt-1",
|
|
188
188
|
placeholder: "e.g. algoshred",
|
|
189
|
-
value:
|
|
189
|
+
value: A,
|
|
190
190
|
"data-testid": "sync-wizard-owner",
|
|
191
|
-
onChange: (e) =>
|
|
191
|
+
onChange: (e) => j(e.target.value)
|
|
192
192
|
}),
|
|
193
|
-
|
|
194
|
-
] }), /* @__PURE__ */
|
|
195
|
-
/* @__PURE__ */
|
|
193
|
+
A.trim() !== "" && !X && /* @__PURE__ */ y(i, { message: "Not a valid GitHub owner name." })
|
|
194
|
+
] }), /* @__PURE__ */ b("div", { children: [
|
|
195
|
+
/* @__PURE__ */ y("label", {
|
|
196
196
|
htmlFor: "sync-wizard-repo",
|
|
197
|
-
className:
|
|
197
|
+
className: D,
|
|
198
198
|
children: "Repository"
|
|
199
199
|
}),
|
|
200
|
-
/* @__PURE__ */
|
|
200
|
+
/* @__PURE__ */ y(E, {
|
|
201
201
|
id: "sync-wizard-repo",
|
|
202
202
|
className: "mt-1",
|
|
203
203
|
placeholder: "e.g. wspace-planmagnet-svc",
|
|
204
|
-
value:
|
|
204
|
+
value: M,
|
|
205
205
|
"data-testid": "sync-wizard-repo",
|
|
206
|
-
onChange: (e) =>
|
|
206
|
+
onChange: (e) => N(e.target.value)
|
|
207
207
|
}),
|
|
208
|
-
|
|
208
|
+
M.trim() !== "" && !Z && /* @__PURE__ */ y(i, { message: "Not a valid repository name." })
|
|
209
209
|
] })]
|
|
210
210
|
}),
|
|
211
|
-
/* @__PURE__ */
|
|
212
|
-
className:
|
|
211
|
+
/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("span", {
|
|
212
|
+
className: D,
|
|
213
213
|
children: "Direction"
|
|
214
|
-
}), Y.length === 0 ? /* @__PURE__ */
|
|
214
|
+
}), Y.length === 0 ? /* @__PURE__ */ y("p", {
|
|
215
215
|
className: "mt-1 text-sm text-muted-foreground",
|
|
216
216
|
children: "This provider offers no live sync direction yet."
|
|
217
|
-
}) : /* @__PURE__ */
|
|
217
|
+
}) : /* @__PURE__ */ y("div", {
|
|
218
218
|
className: "mt-1 flex flex-col gap-1",
|
|
219
219
|
role: "radiogroup",
|
|
220
220
|
"aria-label": "Direction",
|
|
221
|
-
children: Y.map((e) => /* @__PURE__ */
|
|
221
|
+
children: Y.map((e) => /* @__PURE__ */ b("label", {
|
|
222
222
|
className: "flex items-center gap-2 text-sm",
|
|
223
|
-
children: [/* @__PURE__ */
|
|
223
|
+
children: [/* @__PURE__ */ y("input", {
|
|
224
224
|
type: "radio",
|
|
225
225
|
name: "sync-wizard-direction",
|
|
226
|
-
checked:
|
|
226
|
+
checked: P === e,
|
|
227
227
|
"data-testid": `sync-wizard-direction-${e}`,
|
|
228
|
-
onChange: () =>
|
|
229
|
-
}),
|
|
228
|
+
onChange: () => F(e)
|
|
229
|
+
}), s(e)]
|
|
230
230
|
}, e))
|
|
231
231
|
})] })
|
|
232
232
|
]
|
|
233
233
|
})]
|
|
234
234
|
}),
|
|
235
|
-
Q && /* @__PURE__ */
|
|
235
|
+
Q && /* @__PURE__ */ b(S, {
|
|
236
236
|
"data-testid": "sync-wizard-step",
|
|
237
|
-
children: [/* @__PURE__ */
|
|
237
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(T, { children: "3. Credentials" }) }), /* @__PURE__ */ y(C, {
|
|
238
238
|
className: "space-y-3",
|
|
239
|
-
children: J && /* @__PURE__ */
|
|
239
|
+
children: J && /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ b("p", {
|
|
240
240
|
className: "text-sm text-muted-foreground",
|
|
241
241
|
children: [
|
|
242
242
|
"Use a GitHub fine-grained personal access token scoped to",
|
|
243
243
|
" ",
|
|
244
|
-
/* @__PURE__ */
|
|
245
|
-
|
|
244
|
+
/* @__PURE__ */ b("strong", { children: [
|
|
245
|
+
A,
|
|
246
246
|
"/",
|
|
247
|
-
|
|
247
|
+
M
|
|
248
248
|
] }),
|
|
249
249
|
", with Issues set to ",
|
|
250
|
-
/* @__PURE__ */
|
|
250
|
+
/* @__PURE__ */ y("strong", { children: "Read and write" }),
|
|
251
251
|
" — no other repository permission is needed."
|
|
252
252
|
]
|
|
253
|
-
}), /* @__PURE__ */
|
|
253
|
+
}), /* @__PURE__ */ b("div", {
|
|
254
254
|
className: "max-w-sm",
|
|
255
|
-
children: [/* @__PURE__ */
|
|
255
|
+
children: [/* @__PURE__ */ y("label", {
|
|
256
256
|
htmlFor: "sync-wizard-token",
|
|
257
|
-
className:
|
|
257
|
+
className: D,
|
|
258
258
|
children: "Personal access token"
|
|
259
|
-
}), /* @__PURE__ */
|
|
259
|
+
}), /* @__PURE__ */ y(E, {
|
|
260
260
|
id: "sync-wizard-token",
|
|
261
261
|
type: "password",
|
|
262
262
|
autoComplete: "off",
|
|
263
263
|
className: "mt-1",
|
|
264
|
-
value:
|
|
264
|
+
value: I,
|
|
265
265
|
"data-testid": "sync-wizard-token",
|
|
266
|
-
onChange: (e) =>
|
|
266
|
+
onChange: (e) => L(e.target.value)
|
|
267
267
|
})]
|
|
268
268
|
})] })
|
|
269
269
|
})]
|
|
270
270
|
}),
|
|
271
|
-
$ && /* @__PURE__ */
|
|
272
|
-
/* @__PURE__ */
|
|
271
|
+
$ && /* @__PURE__ */ b(v, { children: [
|
|
272
|
+
/* @__PURE__ */ b(S, {
|
|
273
273
|
"data-testid": "sync-wizard-step",
|
|
274
|
-
children: [/* @__PURE__ */
|
|
274
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(T, { children: "4. Conflict strategy" }) }), /* @__PURE__ */ b(C, {
|
|
275
275
|
className: "space-y-2",
|
|
276
|
-
children: [/* @__PURE__ */
|
|
276
|
+
children: [/* @__PURE__ */ y("p", {
|
|
277
277
|
className: "text-sm text-muted-foreground",
|
|
278
278
|
children: "What happens when the same item changed on both sides since the last sync."
|
|
279
|
-
}), /* @__PURE__ */
|
|
279
|
+
}), /* @__PURE__ */ y("div", {
|
|
280
280
|
className: "flex flex-col gap-1",
|
|
281
281
|
role: "radiogroup",
|
|
282
282
|
"aria-label": "Conflict strategy",
|
|
283
|
-
children:
|
|
283
|
+
children: re.map((e) => /* @__PURE__ */ b("label", {
|
|
284
284
|
className: "flex items-start gap-2 text-sm",
|
|
285
|
-
children: [/* @__PURE__ */
|
|
285
|
+
children: [/* @__PURE__ */ y("input", {
|
|
286
286
|
type: "radio",
|
|
287
287
|
name: "sync-wizard-strategy",
|
|
288
288
|
className: "mt-0.5",
|
|
289
|
-
checked:
|
|
289
|
+
checked: R === e,
|
|
290
290
|
"data-testid": `sync-wizard-strategy-${e}`,
|
|
291
|
-
onChange: () =>
|
|
292
|
-
}), /* @__PURE__ */
|
|
291
|
+
onChange: () => _e(e)
|
|
292
|
+
}), /* @__PURE__ */ b("span", { children: [/* @__PURE__ */ y("span", {
|
|
293
293
|
className: "font-medium",
|
|
294
|
-
children:
|
|
295
|
-
}), /* @__PURE__ */
|
|
294
|
+
children: a(e)
|
|
295
|
+
}), /* @__PURE__ */ y("span", {
|
|
296
296
|
className: "block text-xs text-muted-foreground",
|
|
297
|
-
children:
|
|
297
|
+
children: d[e]
|
|
298
298
|
})] })]
|
|
299
299
|
}, e))
|
|
300
300
|
})]
|
|
301
301
|
})]
|
|
302
302
|
}),
|
|
303
|
-
J && /* @__PURE__ */
|
|
303
|
+
J && /* @__PURE__ */ b(S, {
|
|
304
304
|
"data-testid": "sync-wizard-step",
|
|
305
|
-
children: [/* @__PURE__ */
|
|
305
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(T, { children: "5. Field mapping (optional)" }) }), /* @__PURE__ */ b(C, {
|
|
306
306
|
className: "space-y-3",
|
|
307
|
-
children: [/* @__PURE__ */
|
|
307
|
+
children: [/* @__PURE__ */ b("p", {
|
|
308
308
|
className: "text-sm text-muted-foreground",
|
|
309
309
|
children: [
|
|
310
310
|
"GitHub issues have no native priority or due-date field — PlanMagnet encodes each as a label of the form ",
|
|
311
|
-
/* @__PURE__ */
|
|
311
|
+
/* @__PURE__ */ y("code", { children: "prefix+value" }),
|
|
312
312
|
" (e.g. ",
|
|
313
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ y("code", { children: "priority:HIGH" }),
|
|
314
314
|
",",
|
|
315
315
|
" ",
|
|
316
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ y("code", { children: "due:2026-10-01" }),
|
|
317
317
|
"). Leave both blank to use the built-in prefixes."
|
|
318
318
|
]
|
|
319
|
-
}), /* @__PURE__ */
|
|
319
|
+
}), /* @__PURE__ */ b("div", {
|
|
320
320
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-3",
|
|
321
|
-
children: [/* @__PURE__ */
|
|
321
|
+
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ b("label", {
|
|
322
322
|
htmlFor: "sync-wizard-priority-prefix",
|
|
323
323
|
className: "text-xs text-muted-foreground",
|
|
324
324
|
children: [
|
|
325
325
|
"Priority label prefix (default \"",
|
|
326
|
-
|
|
326
|
+
o.priority,
|
|
327
327
|
"\")"
|
|
328
328
|
]
|
|
329
|
-
}), /* @__PURE__ */
|
|
329
|
+
}), /* @__PURE__ */ y(E, {
|
|
330
330
|
id: "sync-wizard-priority-prefix",
|
|
331
331
|
className: "mt-1",
|
|
332
|
-
placeholder:
|
|
333
|
-
value:
|
|
334
|
-
onChange: (e) =>
|
|
335
|
-
})] }), /* @__PURE__ */
|
|
332
|
+
placeholder: o.priority,
|
|
333
|
+
value: z,
|
|
334
|
+
onChange: (e) => ve(e.target.value)
|
|
335
|
+
})] }), /* @__PURE__ */ b("div", { children: [/* @__PURE__ */ b("label", {
|
|
336
336
|
htmlFor: "sync-wizard-duedate-prefix",
|
|
337
337
|
className: "text-xs text-muted-foreground",
|
|
338
338
|
children: [
|
|
339
339
|
"Due-date label prefix (default \"",
|
|
340
|
-
|
|
340
|
+
o.dueDate,
|
|
341
341
|
"\")"
|
|
342
342
|
]
|
|
343
|
-
}), /* @__PURE__ */
|
|
343
|
+
}), /* @__PURE__ */ y(E, {
|
|
344
344
|
id: "sync-wizard-duedate-prefix",
|
|
345
345
|
className: "mt-1",
|
|
346
|
-
placeholder:
|
|
347
|
-
value:
|
|
348
|
-
onChange: (e) =>
|
|
346
|
+
placeholder: o.dueDate,
|
|
347
|
+
value: B,
|
|
348
|
+
onChange: (e) => ye(e.target.value)
|
|
349
349
|
})] })]
|
|
350
350
|
})]
|
|
351
351
|
})]
|
|
352
352
|
}),
|
|
353
|
-
/* @__PURE__ */
|
|
353
|
+
/* @__PURE__ */ b(S, {
|
|
354
354
|
"data-testid": "sync-wizard-step",
|
|
355
|
-
children: [/* @__PURE__ */
|
|
355
|
+
children: [/* @__PURE__ */ y(w, { children: /* @__PURE__ */ y(T, { children: "6. Review & create" }) }), /* @__PURE__ */ b(C, {
|
|
356
356
|
className: "space-y-3",
|
|
357
357
|
children: [
|
|
358
|
-
/* @__PURE__ */
|
|
358
|
+
/* @__PURE__ */ b("dl", {
|
|
359
359
|
className: "grid grid-cols-1 sm:grid-cols-2 gap-x-4 gap-y-1 text-sm",
|
|
360
360
|
children: [
|
|
361
|
-
/* @__PURE__ */
|
|
361
|
+
/* @__PURE__ */ y("dt", {
|
|
362
362
|
className: "text-muted-foreground",
|
|
363
363
|
children: "Provider"
|
|
364
364
|
}),
|
|
365
|
-
/* @__PURE__ */
|
|
366
|
-
/* @__PURE__ */
|
|
365
|
+
/* @__PURE__ */ y("dd", { children: u(_) }),
|
|
366
|
+
/* @__PURE__ */ y("dt", {
|
|
367
367
|
className: "text-muted-foreground",
|
|
368
368
|
children: "Direction"
|
|
369
369
|
}),
|
|
370
|
-
/* @__PURE__ */
|
|
371
|
-
/* @__PURE__ */
|
|
370
|
+
/* @__PURE__ */ y("dd", { children: P ? s(P) : "—" }),
|
|
371
|
+
/* @__PURE__ */ y("dt", {
|
|
372
372
|
className: "text-muted-foreground",
|
|
373
373
|
children: "External project"
|
|
374
374
|
}),
|
|
375
|
-
/* @__PURE__ */
|
|
376
|
-
/* @__PURE__ */
|
|
375
|
+
/* @__PURE__ */ y("dd", { children: J ? `${A}/${M}` : "—" }),
|
|
376
|
+
/* @__PURE__ */ y("dt", {
|
|
377
377
|
className: "text-muted-foreground",
|
|
378
378
|
children: "Conflict strategy"
|
|
379
379
|
}),
|
|
380
|
-
/* @__PURE__ */
|
|
380
|
+
/* @__PURE__ */ y("dd", { children: a(R) })
|
|
381
381
|
]
|
|
382
382
|
}),
|
|
383
|
-
/* @__PURE__ */
|
|
383
|
+
/* @__PURE__ */ b("label", {
|
|
384
384
|
className: "flex items-start gap-2 text-sm",
|
|
385
|
-
children: [/* @__PURE__ */
|
|
386
|
-
checked:
|
|
387
|
-
onCheckedChange: (e) =>
|
|
385
|
+
children: [/* @__PURE__ */ y(pe, {
|
|
386
|
+
checked: V,
|
|
387
|
+
onCheckedChange: (e) => be(e === !0),
|
|
388
388
|
"data-testid": "sync-wizard-verify"
|
|
389
|
-
}), /* @__PURE__ */
|
|
389
|
+
}), /* @__PURE__ */ b("span", { children: ["Verify the connection before creating (recommended)", /* @__PURE__ */ y("span", {
|
|
390
390
|
className: "block text-xs text-muted-foreground",
|
|
391
391
|
children: "Probes the credentials first; the sync is not created if the probe fails."
|
|
392
392
|
})] })]
|
|
393
393
|
}),
|
|
394
|
-
|
|
395
|
-
/* @__PURE__ */
|
|
394
|
+
H && /* @__PURE__ */ y(i, { message: H }),
|
|
395
|
+
/* @__PURE__ */ b(x, {
|
|
396
396
|
onClick: () => void Te(),
|
|
397
397
|
disabled: K.loading,
|
|
398
398
|
"data-testid": "sync-wizard-create",
|
|
399
|
-
children: [K.loading ? /* @__PURE__ */
|
|
399
|
+
children: [K.loading ? /* @__PURE__ */ y(ue, { className: "mr-1 h-4 w-4 animate-spin" }) : /* @__PURE__ */ y(de, { className: "mr-1 h-4 w-4" }), "Create sync"]
|
|
400
400
|
})
|
|
401
401
|
]
|
|
402
402
|
})]
|
|
@@ -406,6 +406,6 @@ function D() {
|
|
|
406
406
|
});
|
|
407
407
|
}
|
|
408
408
|
//#endregion
|
|
409
|
-
export {
|
|
409
|
+
export { O as IntegrationsNewSyncPagePage };
|
|
410
410
|
|
|
411
411
|
//# sourceMappingURL=IntegrationsNewSyncPagePage.js.map
|