@claude-collective/cli 0.26.0 → 0.29.4
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/CHANGELOG.md +125 -0
- package/README.md +47 -13
- package/config/stacks.yaml +330 -93
- package/dist/chunk-56ERY7H7.js +29 -0
- package/dist/chunk-56ERY7H7.js.map +1 -0
- package/dist/{chunk-OBXAY23Y.js → chunk-5I6VY2E7.js} +5 -5
- package/dist/chunk-5I6VY2E7.js.map +1 -0
- package/dist/{chunk-ZDREFYD2.js → chunk-5WIHSJRO.js} +234 -59
- package/dist/chunk-5WIHSJRO.js.map +1 -0
- package/dist/{chunk-GGFOD5PK.js → chunk-6F3ZKDVE.js} +122 -66
- package/dist/chunk-6F3ZKDVE.js.map +1 -0
- package/dist/{chunk-DBRUQQUF.js → chunk-7GHTQSWI.js} +5 -1
- package/dist/{chunk-DBRUQQUF.js.map → chunk-7GHTQSWI.js.map} +1 -1
- package/dist/chunk-7ICBJZV2.js +63 -0
- package/dist/chunk-7ICBJZV2.js.map +1 -0
- package/dist/{chunk-3X5D7RM5.js → chunk-7UKQZSWT.js} +15 -4
- package/dist/chunk-7UKQZSWT.js.map +1 -0
- package/dist/{chunk-F4RD5FYM.js → chunk-A4T4YSV4.js} +5 -2
- package/dist/chunk-A4T4YSV4.js.map +1 -0
- package/dist/{chunk-VVYNZZUX.js → chunk-AG5YGYJT.js} +9 -5
- package/dist/chunk-AG5YGYJT.js.map +1 -0
- package/dist/chunk-AJFSCLJ7.js +81 -0
- package/dist/chunk-AJFSCLJ7.js.map +1 -0
- package/dist/{chunk-NQJ47R4N.js → chunk-CQZAKMPJ.js} +66 -14
- package/dist/chunk-CQZAKMPJ.js.map +1 -0
- package/dist/chunk-DIRH4PDF.js +24 -0
- package/dist/chunk-DIRH4PDF.js.map +1 -0
- package/dist/{chunk-R7B63JAP.js → chunk-DUIYVKFK.js} +123 -86
- package/dist/chunk-DUIYVKFK.js.map +1 -0
- package/dist/chunk-EP6J44I4.js +142 -0
- package/dist/chunk-EP6J44I4.js.map +1 -0
- package/dist/{chunk-TDZE4TDG.js → chunk-EUPMWSM3.js} +92 -29
- package/dist/chunk-EUPMWSM3.js.map +1 -0
- package/dist/chunk-FUPBGSRA.js +66 -0
- package/dist/chunk-FUPBGSRA.js.map +1 -0
- package/dist/{chunk-U7HFKR74.js → chunk-FY5D4KIC.js} +5 -2
- package/dist/chunk-FY5D4KIC.js.map +1 -0
- package/dist/chunk-G5WXKKQM.js +233 -0
- package/dist/chunk-G5WXKKQM.js.map +1 -0
- package/dist/{chunk-KWYO3M5Q.js → chunk-GVVEPVR7.js} +25 -24
- package/dist/chunk-GVVEPVR7.js.map +1 -0
- package/dist/chunk-IFODQTCX.js +162 -0
- package/dist/chunk-IFODQTCX.js.map +1 -0
- package/dist/chunk-IQUBOWWU.js +366 -0
- package/dist/chunk-IQUBOWWU.js.map +1 -0
- package/dist/{chunk-ETCVEV3S.js → chunk-IRG52AN5.js} +242 -155
- package/dist/chunk-IRG52AN5.js.map +1 -0
- package/dist/chunk-MQAYAISQ.js +88 -0
- package/dist/chunk-MQAYAISQ.js.map +1 -0
- package/dist/{chunk-4357L7VK.js → chunk-N73GQTCK.js} +37 -104
- package/dist/chunk-N73GQTCK.js.map +1 -0
- package/dist/{chunk-H7SSBSPR.js → chunk-OA5RCL2L.js} +8 -5
- package/dist/chunk-OA5RCL2L.js.map +1 -0
- package/dist/{chunk-I3YYG5IO.js → chunk-PNXFJPXF.js} +3 -3
- package/dist/{chunk-MCTSHLAF.js → chunk-RI5QEK5W.js} +41 -14
- package/dist/chunk-RI5QEK5W.js.map +1 -0
- package/dist/chunk-RXC7AF7N.js +31 -0
- package/dist/chunk-RXC7AF7N.js.map +1 -0
- package/dist/{chunk-ETQ3BPGU.js → chunk-SSHG7MEE.js} +1252 -728
- package/dist/chunk-SSHG7MEE.js.map +1 -0
- package/dist/{chunk-4S4FCAA2.js → chunk-VTUPUKFD.js} +26 -31
- package/dist/chunk-VTUPUKFD.js.map +1 -0
- package/dist/{chunk-XENOESJZ.js → chunk-WLQUQXWO.js} +10 -67
- package/dist/chunk-WLQUQXWO.js.map +1 -0
- package/dist/chunk-WPED6CL3.js +105 -0
- package/dist/chunk-WPED6CL3.js.map +1 -0
- package/dist/{chunk-R5KJVI54.js → chunk-XPMEGGJK.js} +97 -76
- package/dist/chunk-XPMEGGJK.js.map +1 -0
- package/dist/chunk-XZKVOPCR.js +75 -0
- package/dist/chunk-XZKVOPCR.js.map +1 -0
- package/dist/{chunk-ZW2PELOH.js → chunk-ZX5DM4D5.js} +106 -69
- package/dist/chunk-ZX5DM4D5.js.map +1 -0
- package/dist/commands/build/marketplace.js +21 -20
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +7 -11
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +8 -13
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +109 -135
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +4 -5
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +5 -6
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +4 -5
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +4 -5
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +5 -6
- package/dist/commands/config/unset-project.js +4 -5
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +26 -11
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +13 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +71 -42
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +34 -14
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +93 -52
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +27 -9
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +98 -48
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +10 -5
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +8 -11
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +17 -18
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +23 -9
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +23 -20
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +28 -21
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +30 -22
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +103 -39
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +4 -5
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +4 -5
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +4 -5
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +4 -5
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.test.js +2 -2
- package/dist/components/common/confirm.test.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +4 -2
- package/dist/components/wizard/category-grid.js +3 -1
- package/dist/components/wizard/category-grid.test.js +63 -64
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/domain-selection.js +13 -0
- package/dist/components/wizard/help-modal.js +10 -0
- package/dist/components/wizard/help-modal.js.map +1 -0
- package/dist/components/wizard/menu-item.js +2 -1
- package/dist/components/wizard/search-modal.js +3 -1
- package/dist/components/wizard/search-modal.test.js +4 -2
- package/dist/components/wizard/search-modal.test.js.map +1 -1
- package/dist/components/wizard/section-progress.js +2 -1
- package/dist/components/wizard/section-progress.test.js +2 -1
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +6 -2
- package/dist/components/wizard/source-grid.test.js +49 -45
- package/dist/components/wizard/source-grid.test.js.map +1 -1
- package/dist/components/wizard/stack-selection.js +15 -0
- package/dist/components/wizard/stack-selection.js.map +1 -0
- package/dist/components/wizard/step-approach.js +8 -6
- package/dist/components/wizard/step-approach.test.js +11 -9
- package/dist/components/wizard/step-approach.test.js.map +1 -1
- package/dist/components/wizard/step-build.js +9 -13
- package/dist/components/wizard/step-build.test.js +27 -45
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +2 -1
- package/dist/components/wizard/step-confirm.test.js +6 -5
- package/dist/components/wizard/step-confirm.test.js.map +1 -1
- package/dist/components/wizard/step-refine.js +2 -1
- package/dist/components/wizard/step-refine.test.js +3 -2
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +8 -6
- package/dist/components/wizard/step-settings.test.js +12 -10
- package/dist/components/wizard/step-settings.test.js.map +1 -1
- package/dist/components/wizard/step-sources.js +11 -9
- package/dist/components/wizard/step-sources.test.js +16 -15
- package/dist/components/wizard/step-sources.test.js.map +1 -1
- package/dist/components/wizard/step-stack.js +9 -6
- package/dist/components/wizard/step-stack.test.js +15 -12
- package/dist/components/wizard/step-stack.test.js.map +1 -1
- package/dist/components/wizard/view-title.js +2 -1
- package/dist/components/wizard/wizard-layout.js +7 -9
- package/dist/components/wizard/wizard-tabs.js +2 -1
- package/dist/components/wizard/wizard-tabs.test.js +2 -1
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
- package/dist/components/wizard/wizard.js +26 -20
- package/dist/config/stacks.yaml +330 -93
- package/dist/hooks/init.js +3 -4
- package/dist/hooks/init.js.map +1 -1
- package/dist/source-manager-TV2YGPAN.js +15 -0
- package/dist/source-manager-TV2YGPAN.js.map +1 -0
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +272 -25
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +2 -1
- package/src/schemas/agent-frontmatter.schema.json +84 -0
- package/src/schemas/agent.schema.json +93 -0
- package/src/schemas/hooks.schema.json +47 -0
- package/src/schemas/marketplace.schema.json +119 -0
- package/src/schemas/metadata.schema.json +113 -0
- package/src/schemas/plugin.schema.json +130 -0
- package/src/schemas/project-config.schema.json +125 -0
- package/src/schemas/project-source-config.schema.json +81 -0
- package/src/schemas/skill-frontmatter.schema.json +42 -0
- package/src/schemas/skills-matrix.schema.json +467 -0
- package/src/schemas/stack.schema.json +191 -0
- package/src/schemas/stacks.schema.json +111 -0
- package/dist/chunk-3X5D7RM5.js.map +0 -1
- package/dist/chunk-4357L7VK.js.map +0 -1
- package/dist/chunk-4S4FCAA2.js.map +0 -1
- package/dist/chunk-7UPXT32F.js +0 -197
- package/dist/chunk-7UPXT32F.js.map +0 -1
- package/dist/chunk-ETCVEV3S.js.map +0 -1
- package/dist/chunk-ETQ3BPGU.js.map +0 -1
- package/dist/chunk-F4RD5FYM.js.map +0 -1
- package/dist/chunk-GGFOD5PK.js.map +0 -1
- package/dist/chunk-H7SSBSPR.js.map +0 -1
- package/dist/chunk-HWD32NP7.js +0 -19
- package/dist/chunk-HWD32NP7.js.map +0 -1
- package/dist/chunk-KWYO3M5Q.js.map +0 -1
- package/dist/chunk-MCTSHLAF.js.map +0 -1
- package/dist/chunk-NQJ47R4N.js.map +0 -1
- package/dist/chunk-O6ZTD7ZI.js +0 -70
- package/dist/chunk-O6ZTD7ZI.js.map +0 -1
- package/dist/chunk-OBXAY23Y.js.map +0 -1
- package/dist/chunk-R5KJVI54.js.map +0 -1
- package/dist/chunk-R7B63JAP.js.map +0 -1
- package/dist/chunk-TDZE4TDG.js.map +0 -1
- package/dist/chunk-TMED5DQ2.js +0 -210
- package/dist/chunk-TMED5DQ2.js.map +0 -1
- package/dist/chunk-U7HFKR74.js.map +0 -1
- package/dist/chunk-UEMRJI2K.js +0 -146
- package/dist/chunk-UEMRJI2K.js.map +0 -1
- package/dist/chunk-UNN7523L.js +0 -78
- package/dist/chunk-UNN7523L.js.map +0 -1
- package/dist/chunk-VVYNZZUX.js.map +0 -1
- package/dist/chunk-XENOESJZ.js.map +0 -1
- package/dist/chunk-ZDREFYD2.js.map +0 -1
- package/dist/chunk-ZW2PELOH.js.map +0 -1
- package/dist/source-manager-EYO3F2DV.js +0 -16
- /package/dist/{chunk-I3YYG5IO.js.map → chunk-PNXFJPXF.js.map} +0 -0
- /package/dist/{source-manager-EYO3F2DV.js.map → components/wizard/domain-selection.js.map} +0 -0
|
@@ -1,59 +1,138 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
WizardLayout
|
|
4
|
+
} from "./chunk-EP6J44I4.js";
|
|
5
|
+
import {
|
|
6
|
+
StepSettings
|
|
7
|
+
} from "./chunk-G5WXKKQM.js";
|
|
2
8
|
import {
|
|
3
9
|
StepSources
|
|
4
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-N73GQTCK.js";
|
|
5
11
|
import {
|
|
6
12
|
StepStack
|
|
7
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-56ERY7H7.js";
|
|
8
14
|
import {
|
|
9
|
-
|
|
10
|
-
} from "./chunk-
|
|
15
|
+
StepApproach
|
|
16
|
+
} from "./chunk-GVVEPVR7.js";
|
|
11
17
|
import {
|
|
12
18
|
StepBuild
|
|
13
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-EUPMWSM3.js";
|
|
14
20
|
import {
|
|
15
21
|
StepConfirm
|
|
16
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-AG5YGYJT.js";
|
|
17
23
|
import {
|
|
18
24
|
getStackName
|
|
19
25
|
} from "./chunk-V2ZIH7HV.js";
|
|
20
|
-
import {
|
|
21
|
-
StepSettings
|
|
22
|
-
} from "./chunk-7UPXT32F.js";
|
|
23
|
-
import {
|
|
24
|
-
StepApproach
|
|
25
|
-
} from "./chunk-KWYO3M5Q.js";
|
|
26
26
|
import {
|
|
27
27
|
cliTheme
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-AJFSCLJ7.js";
|
|
29
29
|
import {
|
|
30
30
|
useWizardStore
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-IQUBOWWU.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveAlias,
|
|
34
34
|
validateSelection
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-SSHG7MEE.js";
|
|
36
|
+
import {
|
|
37
|
+
warn
|
|
38
|
+
} from "./chunk-5WIHSJRO.js";
|
|
39
|
+
import {
|
|
40
|
+
CLI_COLORS
|
|
41
|
+
} from "./chunk-IFODQTCX.js";
|
|
36
42
|
import {
|
|
37
43
|
init_esm_shims
|
|
38
44
|
} from "./chunk-AWKZ5BDL.js";
|
|
39
45
|
|
|
40
46
|
// src/cli/components/wizard/wizard.tsx
|
|
41
47
|
init_esm_shims();
|
|
42
|
-
import { useCallback
|
|
48
|
+
import { useCallback as useCallback2 } from "react";
|
|
43
49
|
import { Box, Text, useApp, useInput, useStdout } from "ink";
|
|
44
50
|
import { ThemeProvider } from "@inkjs/ui";
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
|
|
52
|
+
// src/cli/components/hooks/use-wizard-initialization.ts
|
|
53
|
+
init_esm_shims();
|
|
54
|
+
import { useRef } from "react";
|
|
55
|
+
function useWizardInitialization({
|
|
56
|
+
matrix,
|
|
57
|
+
initialStep,
|
|
58
|
+
initialInstallMode,
|
|
59
|
+
installedSkillIds
|
|
60
|
+
}) {
|
|
61
|
+
const initialized = useRef(false);
|
|
62
|
+
if (!initialized.current) {
|
|
63
|
+
initialized.current = true;
|
|
64
|
+
if (initialStep) {
|
|
65
|
+
if (installedSkillIds?.length) {
|
|
66
|
+
useWizardStore.getState().populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);
|
|
67
|
+
}
|
|
68
|
+
useWizardStore.setState({ step: initialStep, approach: "scratch" });
|
|
69
|
+
}
|
|
70
|
+
if (initialInstallMode) {
|
|
71
|
+
useWizardStore.setState({ installMode: initialInstallMode });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// src/cli/components/hooks/use-build-step-props.ts
|
|
77
|
+
init_esm_shims();
|
|
78
|
+
import { useCallback } from "react";
|
|
79
|
+
function useBuildStepProps({
|
|
80
|
+
store,
|
|
81
|
+
matrix,
|
|
82
|
+
installedSkillIds
|
|
83
|
+
}) {
|
|
84
|
+
const currentDomain = store.getCurrentDomain();
|
|
85
|
+
const defaultDomains = ["web"];
|
|
86
|
+
const effectiveDomains = store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;
|
|
87
|
+
const allSelections = store.getAllSelectedTechnologies();
|
|
88
|
+
const activeDomain = currentDomain || effectiveDomains[0] || "web";
|
|
89
|
+
const parentDomainSelections = store.getParentDomainSelections(activeDomain, matrix);
|
|
90
|
+
const onToggle = useCallback(
|
|
91
|
+
(subcategoryId, techId) => {
|
|
92
|
+
const domain = store.getCurrentDomain() || "web";
|
|
93
|
+
const cat = matrix.categories[subcategoryId];
|
|
94
|
+
store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);
|
|
95
|
+
},
|
|
96
|
+
[store, matrix]
|
|
97
|
+
);
|
|
98
|
+
const onContinue = useCallback(() => {
|
|
99
|
+
if (!store.nextDomain()) {
|
|
100
|
+
store.setStep("sources");
|
|
101
|
+
}
|
|
102
|
+
}, [store]);
|
|
103
|
+
const onBack = useCallback(() => {
|
|
104
|
+
if (!store.prevDomain()) {
|
|
105
|
+
store.goBack();
|
|
106
|
+
}
|
|
107
|
+
}, [store]);
|
|
108
|
+
return {
|
|
109
|
+
matrix,
|
|
110
|
+
domain: activeDomain,
|
|
111
|
+
selectedDomains: effectiveDomains,
|
|
112
|
+
selections: store.domainSelections[activeDomain] || {},
|
|
113
|
+
allSelections,
|
|
114
|
+
showDescriptions: store.showDescriptions,
|
|
115
|
+
expertMode: store.expertMode,
|
|
116
|
+
parentDomainSelections,
|
|
117
|
+
installedSkillIds,
|
|
118
|
+
onToggle,
|
|
119
|
+
onToggleDescriptions: store.toggleShowDescriptions,
|
|
120
|
+
onContinue,
|
|
121
|
+
onBack
|
|
122
|
+
};
|
|
49
123
|
}
|
|
124
|
+
|
|
125
|
+
// src/cli/components/wizard/wizard.tsx
|
|
126
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
50
127
|
var MIN_TERMINAL_WIDTH = 80;
|
|
51
128
|
var Wizard = ({
|
|
52
129
|
matrix,
|
|
53
130
|
onComplete,
|
|
54
131
|
onCancel,
|
|
55
132
|
version,
|
|
133
|
+
marketplaceLabel,
|
|
56
134
|
initialStep,
|
|
135
|
+
initialInstallMode,
|
|
57
136
|
installedSkillIds,
|
|
58
137
|
projectDir
|
|
59
138
|
}) => {
|
|
@@ -62,17 +141,18 @@ var Wizard = ({
|
|
|
62
141
|
const { stdout } = useStdout();
|
|
63
142
|
const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;
|
|
64
143
|
const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (installedSkillIds?.length) {
|
|
68
|
-
useWizardStore.getState().populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);
|
|
69
|
-
}
|
|
70
|
-
useWizardStore.setState({ step: initialStep, approach: "scratch" });
|
|
71
|
-
}
|
|
72
|
-
return true;
|
|
73
|
-
});
|
|
144
|
+
useWizardInitialization({ matrix, initialStep, initialInstallMode, installedSkillIds });
|
|
145
|
+
const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });
|
|
74
146
|
useInput((input, key) => {
|
|
75
147
|
if (store.showSettings) return;
|
|
148
|
+
if (store.showHelp) {
|
|
149
|
+
store.toggleHelp();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (input === "?") {
|
|
153
|
+
store.toggleHelp();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
76
156
|
if (key.escape) {
|
|
77
157
|
if (store.step === "approach") {
|
|
78
158
|
onCancel();
|
|
@@ -97,15 +177,14 @@ var Wizard = ({
|
|
|
97
177
|
}
|
|
98
178
|
if (input === "p" || input === "P") {
|
|
99
179
|
store.toggleInstallMode();
|
|
100
|
-
return;
|
|
101
180
|
}
|
|
102
181
|
});
|
|
103
|
-
const handleComplete =
|
|
182
|
+
const handleComplete = useCallback2(() => {
|
|
104
183
|
let allSkills;
|
|
105
184
|
if (store.selectedStackId && store.stackAction === "defaults") {
|
|
106
185
|
const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);
|
|
107
186
|
if (!stack) {
|
|
108
|
-
|
|
187
|
+
warn(`Stack not found in matrix: '${store.selectedStackId}'`);
|
|
109
188
|
}
|
|
110
189
|
allSkills = [...stack?.allSkillIds || []];
|
|
111
190
|
} else {
|
|
@@ -113,14 +192,14 @@ var Wizard = ({
|
|
|
113
192
|
allSkills = techNames.map((tech) => {
|
|
114
193
|
const resolved = resolveAlias(tech, matrix);
|
|
115
194
|
if (!matrix.skills[resolved]) {
|
|
116
|
-
|
|
117
|
-
`
|
|
195
|
+
warn(
|
|
196
|
+
`Technology '${tech}' could not be resolved to a skill ID - it may be missing from skill_aliases`
|
|
118
197
|
);
|
|
119
198
|
}
|
|
120
199
|
return resolved;
|
|
121
200
|
});
|
|
122
201
|
}
|
|
123
|
-
const methodologySkills = store.
|
|
202
|
+
const methodologySkills = store.getDefaultMethodologySkills();
|
|
124
203
|
for (const skill of methodologySkills) {
|
|
125
204
|
if (!allSkills.includes(skill)) {
|
|
126
205
|
allSkills.push(skill);
|
|
@@ -146,48 +225,8 @@ var Wizard = ({
|
|
|
146
225
|
return /* @__PURE__ */ jsx(StepApproach, {});
|
|
147
226
|
case "stack":
|
|
148
227
|
return /* @__PURE__ */ jsx(StepStack, { matrix });
|
|
149
|
-
case "build":
|
|
150
|
-
|
|
151
|
-
const defaultDomains = ["web"];
|
|
152
|
-
const effectiveDomains = store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;
|
|
153
|
-
const allSelections = store.getAllSelectedTechnologies();
|
|
154
|
-
const activeDomain = currentDomain || effectiveDomains[0] || "web";
|
|
155
|
-
const parentDomain = getParentDomain(activeDomain, matrix);
|
|
156
|
-
const parentDomainSelections = parentDomain ? store.domainSelections[parentDomain] : void 0;
|
|
157
|
-
return /* @__PURE__ */ jsx(
|
|
158
|
-
StepBuild,
|
|
159
|
-
{
|
|
160
|
-
matrix,
|
|
161
|
-
domain: activeDomain,
|
|
162
|
-
selectedDomains: effectiveDomains,
|
|
163
|
-
selections: store.domainSelections[activeDomain] || {},
|
|
164
|
-
allSelections,
|
|
165
|
-
focusedRow: store.focusedRow,
|
|
166
|
-
focusedCol: store.focusedCol,
|
|
167
|
-
showDescriptions: store.showDescriptions,
|
|
168
|
-
expertMode: store.expertMode,
|
|
169
|
-
parentDomainSelections,
|
|
170
|
-
installedSkillIds,
|
|
171
|
-
onToggle: (subcategoryId, techId) => {
|
|
172
|
-
const domain = store.getCurrentDomain() || "web";
|
|
173
|
-
const cat = matrix.categories[subcategoryId];
|
|
174
|
-
store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);
|
|
175
|
-
},
|
|
176
|
-
onFocusChange: store.setFocus,
|
|
177
|
-
onToggleDescriptions: store.toggleShowDescriptions,
|
|
178
|
-
onContinue: () => {
|
|
179
|
-
if (!store.nextDomain()) {
|
|
180
|
-
store.setStep("sources");
|
|
181
|
-
}
|
|
182
|
-
},
|
|
183
|
-
onBack: () => {
|
|
184
|
-
if (!store.prevDomain()) {
|
|
185
|
-
store.goBack();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
);
|
|
190
|
-
}
|
|
228
|
+
case "build":
|
|
229
|
+
return /* @__PURE__ */ jsx(StepBuild, { ...buildStepProps });
|
|
191
230
|
case "sources": {
|
|
192
231
|
if (store.showSettings) {
|
|
193
232
|
return /* @__PURE__ */ jsx(
|
|
@@ -203,16 +242,14 @@ var Wizard = ({
|
|
|
203
242
|
{
|
|
204
243
|
matrix,
|
|
205
244
|
projectDir,
|
|
206
|
-
onContinue:
|
|
245
|
+
onContinue: () => store.setStep("confirm"),
|
|
207
246
|
onBack: store.goBack
|
|
208
247
|
}
|
|
209
248
|
);
|
|
210
249
|
}
|
|
211
|
-
// NOTE: Currently unreachable — sources step calls handleComplete directly.
|
|
212
|
-
// Kept for future use when confirm step is wired back in.
|
|
213
250
|
case "confirm": {
|
|
214
251
|
const stackName = getStackName(store.selectedStackId, matrix);
|
|
215
|
-
const
|
|
252
|
+
const technologyCount = store.getTechnologyCount();
|
|
216
253
|
return /* @__PURE__ */ jsx(
|
|
217
254
|
StepConfirm,
|
|
218
255
|
{
|
|
@@ -220,8 +257,8 @@ var Wizard = ({
|
|
|
220
257
|
stackName,
|
|
221
258
|
selectedDomains: store.selectedDomains,
|
|
222
259
|
domainSelections: store.domainSelections,
|
|
223
|
-
technologyCount
|
|
224
|
-
skillCount:
|
|
260
|
+
technologyCount,
|
|
261
|
+
skillCount: technologyCount,
|
|
225
262
|
installMode: store.installMode,
|
|
226
263
|
onBack: store.goBack
|
|
227
264
|
}
|
|
@@ -233,7 +270,7 @@ var Wizard = ({
|
|
|
233
270
|
};
|
|
234
271
|
if (isNarrowTerminal) {
|
|
235
272
|
return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", padding: 1, children: [
|
|
236
|
-
/* @__PURE__ */ jsxs(Text, { color:
|
|
273
|
+
/* @__PURE__ */ jsxs(Text, { color: CLI_COLORS.WARNING, children: [
|
|
237
274
|
"Terminal too narrow (",
|
|
238
275
|
terminalWidth,
|
|
239
276
|
" columns). Please resize to at least",
|
|
@@ -248,10 +285,10 @@ var Wizard = ({
|
|
|
248
285
|
] }) })
|
|
249
286
|
] }) });
|
|
250
287
|
}
|
|
251
|
-
return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsx(WizardLayout, { version, children: renderStep() }) });
|
|
288
|
+
return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsx(WizardLayout, { version, marketplaceLabel, children: renderStep() }) });
|
|
252
289
|
};
|
|
253
290
|
|
|
254
291
|
export {
|
|
255
292
|
Wizard
|
|
256
293
|
};
|
|
257
|
-
//# sourceMappingURL=chunk-
|
|
294
|
+
//# sourceMappingURL=chunk-DUIYVKFK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/wizard.tsx","../src/cli/components/hooks/use-wizard-initialization.ts","../src/cli/components/hooks/use-build-step-props.ts"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepApproach } from \"./step-approach.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { StepSources } from \"./step-sources.js\";\nimport { StepSettings } from \"./step-settings.js\";\nimport { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport type { DomainSelections, MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\nimport { getStackName } from \"./utils.js\";\nimport { warn } from \"../../utils/logger.js\";\nimport { useWizardInitialization } from \"../hooks/use-wizard-initialization.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.js\";\n\nexport type WizardResultV2 = {\n selectedSkills: SkillId[];\n selectedStackId: string | null;\n domainSelections: DomainSelections;\n sourceSelections: Partial<Record<SkillId, string>>;\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n};\n\ntype WizardProps = {\n matrix: MergedSkillsMatrix;\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n version?: string;\n marketplaceLabel?: string;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n installedSkillIds?: SkillId[];\n projectDir?: string;\n};\n\nconst MIN_TERMINAL_WIDTH = 80;\n\nexport const Wizard: React.FC<WizardProps> = ({\n matrix,\n onComplete,\n onCancel,\n version,\n marketplaceLabel,\n initialStep,\n initialInstallMode,\n installedSkillIds,\n projectDir,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n\n useWizardInitialization({ matrix, initialStep, initialInstallMode, installedSkillIds });\n\n const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });\n\n useInput((input, key) => {\n // Disable global hotkeys when settings or help overlay is active\n if (store.showSettings) return;\n\n if (store.showHelp) {\n // Any key closes the help modal (useInput in HelpModal handles this too)\n store.toggleHelp();\n return;\n }\n\n if (input === \"?\") {\n store.toggleHelp();\n return;\n }\n\n if (key.escape) {\n if (store.step === \"approach\") {\n onCancel();\n exit();\n } else if (store.step !== \"build\" && store.step !== \"confirm\" && store.step !== \"sources\") {\n // Only handle escape globally for steps that don't have their own escape handler.\n store.goBack();\n }\n return;\n }\n\n // Accept defaults shortcut (stack path only, during build step)\n if ((input === \"a\" || input === \"A\") && store.step === \"build\" && store.selectedStackId) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n if ((input === \"g\" || input === \"G\") && store.step === \"sources\") {\n store.toggleSettings();\n return;\n }\n\n if (input === \"e\" || input === \"E\") {\n store.toggleExpertMode();\n return;\n }\n if (input === \"p\" || input === \"P\") {\n store.toggleInstallMode();\n }\n });\n\n const handleComplete = useCallback(() => {\n let allSkills: SkillId[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);\n if (!stack) {\n warn(`Stack not found in matrix: '${store.selectedStackId}'`);\n }\n allSkills = [...(stack?.allSkillIds || [])];\n } else {\n const techNames = store.getAllSelectedTechnologies();\n allSkills = techNames.map((tech) => {\n const resolved = resolveAlias(tech, matrix);\n if (!matrix.skills[resolved]) {\n warn(\n `Technology '${tech}' could not be resolved to a skill ID - it may be missing from skill_aliases`,\n );\n }\n return resolved;\n });\n }\n\n const methodologySkills = store.getDefaultMethodologySkills();\n for (const skill of methodologySkills) {\n if (!allSkills.includes(skill)) {\n allSkills.push(skill);\n }\n }\n\n const validation = validateSelection(allSkills, matrix);\n\n const result: WizardResultV2 = {\n selectedSkills: allSkills,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n sourceSelections: store.sourceSelections,\n expertMode: store.expertMode,\n installMode: store.installMode,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, matrix, onComplete, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"approach\":\n return <StepApproach />;\n\n case \"stack\":\n return <StepStack matrix={matrix} />;\n\n case \"build\":\n return <StepBuild {...buildStepProps} />;\n\n case \"sources\": {\n if (store.showSettings) {\n return (\n <StepSettings\n projectDir={projectDir || process.cwd()}\n onClose={() => store.toggleSettings()}\n />\n );\n }\n return (\n <StepSources\n matrix={matrix}\n projectDir={projectDir}\n onContinue={() => store.setStep(\"confirm\")}\n onBack={store.goBack}\n />\n );\n }\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId, matrix);\n const technologyCount = store.getTechnologyCount();\n return (\n <StepConfirm\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={technologyCount}\n skillCount={technologyCount}\n installMode={store.installMode}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n if (isNarrowTerminal) {\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color={CLI_COLORS.WARNING}>\n Terminal too narrow ({terminalWidth} columns). Please resize to at least{\" \"}\n {MIN_TERMINAL_WIDTH} columns.\n </Text>\n <Box marginTop={1}>\n <Text dimColor>Current width: {terminalWidth} columns</Text>\n </Box>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version} marketplaceLabel={marketplaceLabel}>\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { useRef } from \"react\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport type { MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\n\ntype UseWizardInitializationOptions = {\n matrix: MergedSkillsMatrix;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n installedSkillIds?: SkillId[];\n};\n\n/**\n * Runs one-time wizard store initialization before the first render.\n * Populates step, approach, install mode, and skill selections from props.\n */\nexport function useWizardInitialization({\n matrix,\n initialStep,\n initialInstallMode,\n installedSkillIds,\n}: UseWizardInitializationOptions): void {\n const initialized = useRef(false);\n\n if (!initialized.current) {\n initialized.current = true;\n\n if (initialStep) {\n if (installedSkillIds?.length) {\n useWizardStore\n .getState()\n .populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);\n }\n useWizardStore.setState({ step: initialStep, approach: \"scratch\" });\n }\n if (initialInstallMode) {\n useWizardStore.setState({ installMode: initialInstallMode });\n }\n }\n}\n","import { useCallback } from \"react\";\nimport type { Domain, MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport type { StepBuildProps } from \"../wizard/step-build.js\";\n\ntype UseBuildStepPropsOptions = {\n store: WizardState;\n matrix: MergedSkillsMatrix;\n installedSkillIds?: SkillId[];\n};\n\nexport function useBuildStepProps({\n store,\n matrix,\n installedSkillIds,\n}: UseBuildStepPropsOptions): StepBuildProps {\n const currentDomain = store.getCurrentDomain();\n const defaultDomains: Domain[] = [\"web\"];\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain: Domain = currentDomain || effectiveDomains[0] || \"web\";\n const parentDomainSelections = store.getParentDomainSelections(activeDomain, matrix);\n\n const onToggle = useCallback(\n (subcategoryId: Parameters<StepBuildProps[\"onToggle\"]>[0], techId: SkillId) => {\n const domain: Domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[subcategoryId];\n store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);\n },\n [store, matrix],\n );\n\n const onContinue = useCallback(() => {\n if (!store.nextDomain()) {\n store.setStep(\"sources\");\n }\n }, [store]);\n\n const onBack = useCallback(() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }, [store]);\n\n return {\n matrix,\n domain: activeDomain,\n selectedDomains: effectiveDomains,\n selections: store.domainSelections[activeDomain] || {},\n allSelections,\n showDescriptions: store.showDescriptions,\n expertMode: store.expertMode,\n parentDomainSelections,\n installedSkillIds,\n onToggle,\n onToggleDescriptions: store.toggleShowDescriptions,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
WIZARD_STEPS,
|
|
4
|
+
WizardTabs
|
|
5
|
+
} from "./chunk-7UKQZSWT.js";
|
|
6
|
+
import {
|
|
7
|
+
HelpModal
|
|
8
|
+
} from "./chunk-MQAYAISQ.js";
|
|
9
|
+
import {
|
|
10
|
+
useWizardStore
|
|
11
|
+
} from "./chunk-IQUBOWWU.js";
|
|
12
|
+
import {
|
|
13
|
+
CLI_COLORS
|
|
14
|
+
} from "./chunk-IFODQTCX.js";
|
|
15
|
+
import {
|
|
16
|
+
init_esm_shims
|
|
17
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
18
|
+
|
|
19
|
+
// src/cli/components/wizard/wizard-layout.tsx
|
|
20
|
+
init_esm_shims();
|
|
21
|
+
import { Fragment } from "react";
|
|
22
|
+
import { Box, Text } from "ink";
|
|
23
|
+
import { Fragment as Fragment2, jsx, jsxs } from "react/jsx-runtime";
|
|
24
|
+
import { createElement } from "react";
|
|
25
|
+
var DefinitionItem = ({
|
|
26
|
+
isVisible = true,
|
|
27
|
+
isActive = false,
|
|
28
|
+
label,
|
|
29
|
+
values
|
|
30
|
+
}) => {
|
|
31
|
+
if (!isVisible) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return /* @__PURE__ */ jsxs(Text, { children: [
|
|
35
|
+
values.map((value) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
36
|
+
/* @__PURE__ */ jsxs(Text, { backgroundColor: "black", color: CLI_COLORS.UNFOCUSED, children: [
|
|
37
|
+
" ",
|
|
38
|
+
value,
|
|
39
|
+
" "
|
|
40
|
+
] }),
|
|
41
|
+
" "
|
|
42
|
+
] }, value)),
|
|
43
|
+
/* @__PURE__ */ jsx(Text, { color: isActive ? CLI_COLORS.PRIMARY : void 0, children: label })
|
|
44
|
+
] });
|
|
45
|
+
};
|
|
46
|
+
var HOT_KEYS = [
|
|
47
|
+
{ label: "navigate", values: ["\u2190/\u2192", "\u2191/\u2193"] },
|
|
48
|
+
{ label: "select", values: ["SPACE"] },
|
|
49
|
+
{ label: "continue", values: ["ENTER"] },
|
|
50
|
+
{ label: "back", values: ["ESC"] }
|
|
51
|
+
];
|
|
52
|
+
var WizardFooter = () => {
|
|
53
|
+
const store = useWizardStore();
|
|
54
|
+
return /* @__PURE__ */ jsxs(
|
|
55
|
+
Box,
|
|
56
|
+
{
|
|
57
|
+
columnGap: 2,
|
|
58
|
+
borderTop: true,
|
|
59
|
+
borderRight: false,
|
|
60
|
+
borderBottom: true,
|
|
61
|
+
borderLeft: false,
|
|
62
|
+
borderColor: "blackBright",
|
|
63
|
+
borderStyle: "single",
|
|
64
|
+
paddingLeft: 1,
|
|
65
|
+
paddingRight: 1,
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
DefinitionItem,
|
|
69
|
+
{
|
|
70
|
+
label: "Accept defaults",
|
|
71
|
+
values: ["A"],
|
|
72
|
+
isVisible: store.step === "build" && !!store.selectedStackId
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
HOT_KEYS.map((hotkey) => /* @__PURE__ */ createElement(DefinitionItem, { ...hotkey, key: hotkey.label }))
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
var WizardLayout = ({
|
|
81
|
+
version,
|
|
82
|
+
marketplaceLabel,
|
|
83
|
+
children
|
|
84
|
+
}) => {
|
|
85
|
+
const store = useWizardStore();
|
|
86
|
+
const { completedSteps, skippedSteps } = store.getStepProgress();
|
|
87
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 1, children: [
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
WizardTabs,
|
|
90
|
+
{
|
|
91
|
+
steps: WIZARD_STEPS,
|
|
92
|
+
currentStep: store.step,
|
|
93
|
+
completedSteps,
|
|
94
|
+
skippedSteps,
|
|
95
|
+
version
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
marketplaceLabel && /* @__PURE__ */ jsxs(Box, { paddingLeft: 1, marginTop: 1, children: [
|
|
99
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Marketplace: " }),
|
|
100
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: marketplaceLabel })
|
|
101
|
+
] }),
|
|
102
|
+
store.showHelp ? /* @__PURE__ */ jsx(HelpModal, { currentStep: store.step, onClose: store.toggleHelp }) : /* @__PURE__ */ jsxs(Fragment2, { children: [
|
|
103
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children }),
|
|
104
|
+
/* @__PURE__ */ jsxs(Box, { paddingX: 1, columnGap: 2, marginTop: 2, children: [
|
|
105
|
+
/* @__PURE__ */ jsx(DefinitionItem, { label: "Expert mode", values: ["E"], isActive: store.expertMode }),
|
|
106
|
+
/* @__PURE__ */ jsx(
|
|
107
|
+
DefinitionItem,
|
|
108
|
+
{
|
|
109
|
+
label: "Descriptions",
|
|
110
|
+
values: ["D"],
|
|
111
|
+
isVisible: store.step === "build",
|
|
112
|
+
isActive: store.showDescriptions
|
|
113
|
+
}
|
|
114
|
+
),
|
|
115
|
+
/* @__PURE__ */ jsx(
|
|
116
|
+
DefinitionItem,
|
|
117
|
+
{
|
|
118
|
+
label: "Plugin mode",
|
|
119
|
+
values: ["P"],
|
|
120
|
+
isActive: store.installMode === "plugin"
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
DefinitionItem,
|
|
125
|
+
{
|
|
126
|
+
label: "Settings",
|
|
127
|
+
values: ["G"],
|
|
128
|
+
isVisible: store.step === "sources",
|
|
129
|
+
isActive: store.showSettings
|
|
130
|
+
}
|
|
131
|
+
),
|
|
132
|
+
/* @__PURE__ */ jsx(DefinitionItem, { label: "Help", values: ["?"] })
|
|
133
|
+
] }),
|
|
134
|
+
/* @__PURE__ */ jsx(WizardFooter, {})
|
|
135
|
+
] })
|
|
136
|
+
] });
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
export {
|
|
140
|
+
WizardLayout
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=chunk-EP6J44I4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/wizard-layout.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { WizardTabs, WIZARD_STEPS } from \"./wizard-tabs.js\";\nimport { HelpModal } from \"./help-modal.js\";\n\ntype KeyHintProps = {\n isVisible?: boolean;\n isActive?: boolean;\n label: string;\n values: string[];\n};\n\nconst DefinitionItem: React.FC<KeyHintProps> = ({\n isVisible = true,\n isActive = false,\n label,\n values,\n}) => {\n if (!isVisible) {\n return null;\n }\n\n return (\n <Text>\n {values.map((value) => (\n <Fragment key={value}>\n <Text backgroundColor=\"black\" color={CLI_COLORS.UNFOCUSED}>\n {\" \"}\n {value}{\" \"}\n </Text>{\" \"}\n </Fragment>\n ))}\n <Text color={isActive ? CLI_COLORS.PRIMARY : undefined}>{label}</Text>\n </Text>\n );\n};\n\nconst HOT_KEYS: { label: string; values: string[] }[] = [\n { label: \"navigate\", values: [\"\\u2190/\\u2192\", \"\\u2191/\\u2193\"] },\n { label: \"select\", values: [\"SPACE\"] },\n { label: \"continue\", values: [\"ENTER\"] },\n { label: \"back\", values: [\"ESC\"] },\n];\n\nconst WizardFooter = () => {\n const store = useWizardStore();\n\n return (\n <Box\n columnGap={2}\n borderTop\n borderRight={false}\n borderBottom\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingLeft={1}\n paddingRight={1}\n >\n <DefinitionItem\n label=\"Accept defaults\"\n values={[\"A\"]}\n isVisible={store.step === \"build\" && !!store.selectedStackId}\n />\n {HOT_KEYS.map((hotkey) => (\n <DefinitionItem {...hotkey} key={hotkey.label} />\n ))}\n </Box>\n );\n};\n\ntype WizardLayoutProps = {\n version?: string;\n marketplaceLabel?: string;\n children: React.ReactNode;\n};\n\nexport const WizardLayout: React.FC<WizardLayoutProps> = ({\n version,\n marketplaceLabel,\n children,\n}) => {\n const store = useWizardStore();\n const { completedSteps, skippedSteps } = store.getStepProgress();\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <WizardTabs\n steps={WIZARD_STEPS}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n version={version}\n />\n {marketplaceLabel && (\n <Box paddingLeft={1} marginTop={1}>\n <Text dimColor>Marketplace: </Text>\n <Text bold>{marketplaceLabel}</Text>\n </Box>\n )}\n {store.showHelp ? (\n <HelpModal currentStep={store.step} onClose={store.toggleHelp} />\n ) : (\n <>\n <Box marginTop={1}>{children}</Box>\n <Box paddingX={1} columnGap={2} marginTop={2}>\n <DefinitionItem label=\"Expert mode\" values={[\"E\"]} isActive={store.expertMode} />\n <DefinitionItem\n label=\"Descriptions\"\n values={[\"D\"]}\n isVisible={store.step === \"build\"}\n isActive={store.showDescriptions}\n />\n <DefinitionItem\n label=\"Plugin mode\"\n values={[\"P\"]}\n isActive={store.installMode === \"plugin\"}\n />\n <DefinitionItem\n label=\"Settings\"\n values={[\"G\"]}\n isVisible={store.step === \"sources\"}\n isActive={store.showSettings}\n />\n <DefinitionItem label=\"Help\" values={[\"?\"]} />\n </Box>\n <WizardFooter />\n </>\n )}\n </Box>\n );\n};\n"],"mappings":"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","names":["Fragment"]}
|