@claude-collective/cli 0.21.0 → 0.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +174 -0
- package/README.md +41 -27
- package/config/skills-matrix.yaml +38 -37
- package/config/stacks.yaml +8 -14
- package/dist/{chunk-ZNIDWLL5.js → chunk-3X5D7RM5.js} +4 -3
- package/dist/chunk-3X5D7RM5.js.map +1 -0
- package/dist/chunk-4S4FCAA2.js +100 -0
- package/dist/chunk-4S4FCAA2.js.map +1 -0
- package/dist/chunk-4WGN6SUE.js +197 -0
- package/dist/chunk-4WGN6SUE.js.map +1 -0
- package/dist/{chunk-DHET7RCE.js → chunk-AWKZ5BDL.js} +9 -2
- package/dist/{chunk-DHET7RCE.js.map → chunk-AWKZ5BDL.js.map} +1 -1
- package/dist/{chunk-6Q3Y7KVB.js → chunk-DBRUQQUF.js} +8 -2
- package/dist/chunk-DBRUQQUF.js.map +1 -0
- package/dist/{chunk-OQYYMQJR.js → chunk-ETCVEV3S.js} +8 -11
- package/dist/chunk-ETCVEV3S.js.map +1 -0
- package/dist/{chunk-ZSVMS677.js → chunk-F4RD5FYM.js} +2 -2
- package/dist/chunk-F4RD5FYM.js.map +1 -0
- package/dist/{chunk-5KXUDHAB.js → chunk-GGFOD5PK.js} +6 -9
- package/dist/chunk-GGFOD5PK.js.map +1 -0
- package/dist/{chunk-UMORK7OK.js → chunk-H7SSBSPR.js} +2 -2
- package/dist/chunk-H7SSBSPR.js.map +1 -0
- package/dist/chunk-HWD32NP7.js +19 -0
- package/dist/chunk-HWD32NP7.js.map +1 -0
- package/dist/{chunk-HGCBZUH5.js → chunk-IAYAE6MG.js} +9 -10
- package/dist/chunk-IAYAE6MG.js.map +1 -0
- package/dist/{chunk-RTE64SJA.js → chunk-IXBCRT3F.js} +2 -2
- package/dist/chunk-IXBCRT3F.js.map +1 -0
- package/dist/{chunk-WFEFICFM.js → chunk-KWYO3M5Q.js} +5 -5
- package/dist/chunk-KWYO3M5Q.js.map +1 -0
- package/dist/{chunk-HEOHU5EZ.js → chunk-MCTSHLAF.js} +22 -11
- package/dist/chunk-MCTSHLAF.js.map +1 -0
- package/dist/chunk-MH66WDFV.js +251 -0
- package/dist/chunk-MH66WDFV.js.map +1 -0
- package/dist/{chunk-2LSGX6R4.js → chunk-MTPM7BX5.js} +83 -25
- package/dist/chunk-MTPM7BX5.js.map +1 -0
- package/dist/chunk-NQJ47R4N.js +1092 -0
- package/dist/chunk-NQJ47R4N.js.map +1 -0
- package/dist/chunk-NRC7XYCI.js +211 -0
- package/dist/chunk-NRC7XYCI.js.map +1 -0
- package/dist/{chunk-FJFEKPXF.js → chunk-O6ZTD7ZI.js} +14 -3
- package/dist/chunk-O6ZTD7ZI.js.map +1 -0
- package/dist/chunk-OBXAY23Y.js +56 -0
- package/dist/chunk-OBXAY23Y.js.map +1 -0
- package/dist/{chunk-XY3XDVMI.js → chunk-QR2EBWL2.js} +3 -3
- package/dist/{chunk-66UDJBF6.js → chunk-REJGRCVQ.js} +2 -2
- package/dist/{chunk-CBLPAMZO.js → chunk-TMED5DQ2.js} +68 -42
- package/dist/chunk-TMED5DQ2.js.map +1 -0
- package/dist/{chunk-Q3J43SF3.js → chunk-U7HFKR74.js} +2 -2
- package/dist/chunk-U7HFKR74.js.map +1 -0
- package/dist/{chunk-3EHUF54X.js → chunk-UEMRJI2K.js} +17 -4
- package/dist/chunk-UEMRJI2K.js.map +1 -0
- package/dist/{chunk-Z2CWURZ6.js → chunk-UNN7523L.js} +2 -2
- package/dist/chunk-V2ZIH7HV.js +29 -0
- package/dist/chunk-V2ZIH7HV.js.map +1 -0
- package/dist/{chunk-ZEI3ZUDU.js → chunk-VVYNZZUX.js} +7 -15
- package/dist/chunk-VVYNZZUX.js.map +1 -0
- package/dist/chunk-WXS4S3MA.js +220 -0
- package/dist/chunk-WXS4S3MA.js.map +1 -0
- package/dist/{chunk-A46TPNBJ.js → chunk-XENOESJZ.js} +7 -16
- package/dist/chunk-XENOESJZ.js.map +1 -0
- package/dist/chunk-YDBSSAJ6.js +4207 -0
- package/dist/chunk-YDBSSAJ6.js.map +1 -0
- package/dist/chunk-ZDREFYD2.js +696 -0
- package/dist/chunk-ZDREFYD2.js.map +1 -0
- package/dist/chunk-ZW2PELOH.js +197 -0
- package/dist/chunk-ZW2PELOH.js.map +1 -0
- package/dist/cli/defaults/agent-mappings.yaml +0 -1
- package/dist/commands/build/marketplace.js +15 -13
- package/dist/commands/build/marketplace.js.map +1 -1
- package/dist/commands/build/plugins.js +13 -229
- package/dist/commands/build/plugins.js.map +1 -1
- package/dist/commands/build/stack.js +11 -18
- package/dist/commands/build/stack.js.map +1 -1
- package/dist/commands/compile.js +36 -58
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/config/get.js +8 -8
- package/dist/commands/config/get.js.map +1 -1
- package/dist/commands/config/index.js +7 -7
- package/dist/commands/config/index.js.map +1 -1
- package/dist/commands/config/path.js +6 -6
- package/dist/commands/config/path.js.map +1 -1
- package/dist/commands/config/set-project.js +8 -8
- package/dist/commands/config/set-project.js.map +1 -1
- package/dist/commands/config/show.js +7 -7
- package/dist/commands/config/unset-project.js +8 -8
- package/dist/commands/config/unset-project.js.map +1 -1
- package/dist/commands/diff.js +10 -16
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.js +18 -51
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/edit.js +87 -57
- package/dist/commands/edit.js.map +1 -1
- package/dist/commands/eject.js +17 -49
- package/dist/commands/eject.js.map +1 -1
- package/dist/commands/import/skill.js +26 -26
- package/dist/commands/import/skill.js.map +1 -1
- package/dist/commands/info.js +15 -17
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.js +45 -722
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.js +8 -87
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/new/agent.js +8 -12
- package/dist/commands/new/agent.js.map +1 -1
- package/dist/commands/new/skill.js +6 -6
- package/dist/commands/new/skill.js.map +1 -1
- package/dist/commands/outdated.js +15 -19
- package/dist/commands/outdated.js.map +1 -1
- package/dist/commands/search.js +21 -34
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.js +15 -14
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/commands/update.js +13 -24
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/validate.js +44 -487
- package/dist/commands/validate.js.map +1 -1
- package/dist/commands/version/bump.js +11 -11
- package/dist/commands/version/bump.js.map +1 -1
- package/dist/commands/version/index.js +9 -10
- package/dist/commands/version/index.js.map +1 -1
- package/dist/commands/version/set.js +10 -8
- package/dist/commands/version/set.js.map +1 -1
- package/dist/commands/version/show.js +9 -10
- package/dist/commands/version/show.js.map +1 -1
- package/dist/components/common/confirm.js +2 -2
- package/dist/components/common/confirm.test.js +203 -0
- package/dist/components/common/confirm.test.js.map +1 -0
- package/dist/components/common/message.js +1 -1
- package/dist/components/common/spinner.js +1 -1
- package/dist/components/common/spinner.js.map +1 -1
- package/dist/components/skill-search/skill-search.js +3 -3
- package/dist/components/wizard/category-grid.js +2 -2
- package/dist/components/wizard/category-grid.test.js +132 -78
- package/dist/components/wizard/category-grid.test.js.map +1 -1
- package/dist/components/wizard/menu-item.js +2 -2
- package/dist/components/wizard/search-modal.js +9 -0
- package/dist/components/wizard/search-modal.js.map +1 -0
- package/dist/components/wizard/search-modal.test.js +216 -0
- package/dist/components/wizard/search-modal.test.js.map +1 -0
- package/dist/components/wizard/section-progress.js +2 -2
- package/dist/components/wizard/section-progress.test.js +4 -4
- package/dist/components/wizard/section-progress.test.js.map +1 -1
- package/dist/components/wizard/source-grid.js +10 -0
- package/dist/components/wizard/source-grid.js.map +1 -0
- package/dist/components/wizard/source-grid.test.js +500 -0
- package/dist/components/wizard/source-grid.test.js.map +1 -0
- package/dist/components/wizard/step-approach.js +7 -6
- package/dist/components/wizard/step-approach.test.js +115 -0
- package/dist/components/wizard/step-approach.test.js.map +1 -0
- package/dist/components/wizard/step-build.js +9 -4
- package/dist/components/wizard/step-build.test.js +103 -122
- package/dist/components/wizard/step-build.test.js.map +1 -1
- package/dist/components/wizard/step-confirm.js +3 -2
- package/dist/components/wizard/step-confirm.test.js +364 -0
- package/dist/components/wizard/step-confirm.test.js.map +1 -0
- package/dist/components/wizard/step-refine.js +2 -2
- package/dist/components/wizard/step-refine.test.js +19 -13
- package/dist/components/wizard/step-refine.test.js.map +1 -1
- package/dist/components/wizard/step-settings.js +14 -0
- package/dist/components/wizard/step-settings.js.map +1 -0
- package/dist/components/wizard/step-settings.test.js +240 -0
- package/dist/components/wizard/step-settings.test.js.map +1 -0
- package/dist/components/wizard/step-sources.js +17 -0
- package/dist/components/wizard/step-sources.js.map +1 -0
- package/dist/components/wizard/step-sources.test.js +290 -0
- package/dist/components/wizard/step-sources.test.js.map +1 -0
- package/dist/components/wizard/step-stack.js +7 -6
- package/dist/components/wizard/step-stack.test.js +344 -0
- package/dist/components/wizard/step-stack.test.js.map +1 -0
- package/dist/components/wizard/view-title.js +2 -2
- package/dist/components/wizard/wizard-layout.js +6 -5
- package/dist/components/wizard/wizard-tabs.js +2 -2
- package/dist/components/wizard/wizard-tabs.test.js +292 -0
- package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
- package/dist/components/wizard/wizard.js +22 -14
- package/dist/config/skills-matrix.yaml +38 -37
- package/dist/config/stacks.yaml +8 -14
- package/dist/hooks/init.js +5 -5
- package/dist/hooks/init.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/{magic-string.es-RGXYGAW3.js → magic-string.es-PAH2SOTR.js} +2 -2
- package/dist/source-manager-DSYZEVGZ.js +16 -0
- package/dist/source-manager-DSYZEVGZ.js.map +1 -0
- package/dist/src/agents/developer/api-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/dist/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/dist/src/agents/developer/web-developer/agent.yaml +1 -1
- package/dist/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/dist/src/agents/meta/documentor/agent.yaml +1 -1
- package/dist/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/dist/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/dist/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/dist/src/agents/planning/web-pm/agent.yaml +1 -1
- package/dist/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/dist/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/dist/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/dist/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/dist/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/dist/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/stores/wizard-store.js +4 -3
- package/dist/stores/wizard-store.test.js +51 -82
- package/dist/stores/wizard-store.test.js.map +1 -1
- package/package.json +5 -3
- package/src/agents/developer/api-developer/agent.yaml +1 -1
- package/src/agents/developer/cli-developer/agent.yaml +1 -1
- package/src/agents/developer/web-architecture/agent.yaml +1 -1
- package/src/agents/developer/web-developer/agent.yaml +1 -1
- package/src/agents/meta/agent-summoner/agent.yaml +1 -1
- package/src/agents/meta/documentor/agent.yaml +1 -1
- package/src/agents/meta/skill-summoner/agent.yaml +1 -1
- package/src/agents/migration/cli-migrator/agent.yaml +1 -1
- package/src/agents/pattern/pattern-scout/agent.yaml +1 -1
- package/src/agents/pattern/web-pattern-critique/agent.yaml +1 -1
- package/src/agents/planning/web-pm/agent.yaml +1 -1
- package/src/agents/researcher/api-researcher/agent.yaml +1 -1
- package/src/agents/researcher/web-researcher/agent.yaml +1 -1
- package/src/agents/reviewer/api-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/cli-reviewer/agent.yaml +1 -1
- package/src/agents/reviewer/web-reviewer/agent.yaml +1 -1
- package/src/agents/tester/cli-tester/agent.yaml +1 -1
- package/src/agents/tester/web-tester/agent.yaml +1 -1
- package/dist/chunk-2LSGX6R4.js.map +0 -1
- package/dist/chunk-2OKUEELH.js +0 -32
- package/dist/chunk-2OKUEELH.js.map +0 -1
- package/dist/chunk-374JNMR6.js +0 -212
- package/dist/chunk-374JNMR6.js.map +0 -1
- package/dist/chunk-3EHUF54X.js.map +0 -1
- package/dist/chunk-3XR4PALU.js +0 -529
- package/dist/chunk-3XR4PALU.js.map +0 -1
- package/dist/chunk-5K2ZLUO5.js +0 -57
- package/dist/chunk-5K2ZLUO5.js.map +0 -1
- package/dist/chunk-5KXUDHAB.js.map +0 -1
- package/dist/chunk-6Q3Y7KVB.js.map +0 -1
- package/dist/chunk-7SLV7CMF.js +0 -615
- package/dist/chunk-7SLV7CMF.js.map +0 -1
- package/dist/chunk-A46TPNBJ.js.map +0 -1
- package/dist/chunk-AL74GBW4.js +0 -69
- package/dist/chunk-AL74GBW4.js.map +0 -1
- package/dist/chunk-BQX23RBV.js +0 -191
- package/dist/chunk-BQX23RBV.js.map +0 -1
- package/dist/chunk-CA4LH4LI.js +0 -132
- package/dist/chunk-CA4LH4LI.js.map +0 -1
- package/dist/chunk-CBLPAMZO.js.map +0 -1
- package/dist/chunk-CKPQHGXR.js +0 -417
- package/dist/chunk-CKPQHGXR.js.map +0 -1
- package/dist/chunk-CXOFOJCN.js +0 -80
- package/dist/chunk-CXOFOJCN.js.map +0 -1
- package/dist/chunk-EHGD7HIE.js +0 -104
- package/dist/chunk-EHGD7HIE.js.map +0 -1
- package/dist/chunk-EHS3TWWP.js +0 -95
- package/dist/chunk-EHS3TWWP.js.map +0 -1
- package/dist/chunk-FJFEKPXF.js.map +0 -1
- package/dist/chunk-HEOHU5EZ.js.map +0 -1
- package/dist/chunk-HGCBZUH5.js.map +0 -1
- package/dist/chunk-HPGFY5ZN.js +0 -114
- package/dist/chunk-HPGFY5ZN.js.map +0 -1
- package/dist/chunk-INJ2EFRW.js +0 -127
- package/dist/chunk-INJ2EFRW.js.map +0 -1
- package/dist/chunk-IOBFMF6X.js +0 -61
- package/dist/chunk-IOBFMF6X.js.map +0 -1
- package/dist/chunk-KH3HA7J7.js +0 -116
- package/dist/chunk-KH3HA7J7.js.map +0 -1
- package/dist/chunk-N6JNE326.js +0 -261
- package/dist/chunk-N6JNE326.js.map +0 -1
- package/dist/chunk-NAGU7TVZ.js +0 -36
- package/dist/chunk-NAGU7TVZ.js.map +0 -1
- package/dist/chunk-OQYYMQJR.js.map +0 -1
- package/dist/chunk-PLZOUVDD.js +0 -419
- package/dist/chunk-PLZOUVDD.js.map +0 -1
- package/dist/chunk-Q3J43SF3.js.map +0 -1
- package/dist/chunk-RTE64SJA.js.map +0 -1
- package/dist/chunk-T25OEQFI.js +0 -26
- package/dist/chunk-T25OEQFI.js.map +0 -1
- package/dist/chunk-UMORK7OK.js.map +0 -1
- package/dist/chunk-VFHWU7JU.js +0 -287
- package/dist/chunk-VFHWU7JU.js.map +0 -1
- package/dist/chunk-VS4GVTZE.js +0 -91
- package/dist/chunk-VS4GVTZE.js.map +0 -1
- package/dist/chunk-WFEFICFM.js.map +0 -1
- package/dist/chunk-WG6KIAPK.js +0 -54
- package/dist/chunk-WG6KIAPK.js.map +0 -1
- package/dist/chunk-ZEI3ZUDU.js.map +0 -1
- package/dist/chunk-ZNIDWLL5.js.map +0 -1
- package/dist/chunk-ZSVMS677.js.map +0 -1
- /package/dist/{chunk-XY3XDVMI.js.map → chunk-QR2EBWL2.js.map} +0 -0
- /package/dist/{chunk-66UDJBF6.js.map → chunk-REJGRCVQ.js.map} +0 -0
- /package/dist/{chunk-Z2CWURZ6.js.map → chunk-UNN7523L.js.map} +0 -0
- /package/dist/{magic-string.es-RGXYGAW3.js.map → magic-string.es-PAH2SOTR.js.map} +0 -0
package/config/stacks.yaml
CHANGED
|
@@ -12,7 +12,7 @@ stacks:
|
|
|
12
12
|
client-state: zustand
|
|
13
13
|
server-state: react-query
|
|
14
14
|
testing: vitest
|
|
15
|
-
|
|
15
|
+
mocking: msw
|
|
16
16
|
accessibility: accessibility
|
|
17
17
|
api-developer:
|
|
18
18
|
api: hono
|
|
@@ -24,7 +24,7 @@ stacks:
|
|
|
24
24
|
ci-cd: github-actions
|
|
25
25
|
testing: api-testing
|
|
26
26
|
cli-developer:
|
|
27
|
-
cli: cli-commander
|
|
27
|
+
cli-framework: cli-commander
|
|
28
28
|
web-reviewer:
|
|
29
29
|
reviewing: reviewing
|
|
30
30
|
api-reviewer:
|
|
@@ -32,8 +32,7 @@ stacks:
|
|
|
32
32
|
cli-reviewer:
|
|
33
33
|
reviewing: cli-reviewing
|
|
34
34
|
web-tester:
|
|
35
|
-
testing:
|
|
36
|
-
e2e: playwright-e2e
|
|
35
|
+
testing: playwright-e2e
|
|
37
36
|
cli-tester: {}
|
|
38
37
|
web-pm: {}
|
|
39
38
|
skill-summoner: {}
|
|
@@ -75,8 +74,7 @@ stacks:
|
|
|
75
74
|
skill-summoner: {}
|
|
76
75
|
documentor: {}
|
|
77
76
|
web-tester:
|
|
78
|
-
testing:
|
|
79
|
-
e2e: playwright-e2e
|
|
77
|
+
testing: playwright-e2e
|
|
80
78
|
philosophy: Enterprise-grade and type-safe
|
|
81
79
|
|
|
82
80
|
- id: nuxt-stack
|
|
@@ -108,8 +106,7 @@ stacks:
|
|
|
108
106
|
skill-summoner: {}
|
|
109
107
|
documentor: {}
|
|
110
108
|
web-tester:
|
|
111
|
-
testing:
|
|
112
|
-
e2e: playwright-e2e
|
|
109
|
+
testing: playwright-e2e
|
|
113
110
|
philosophy: Progressive Vue with Nuxt power
|
|
114
111
|
|
|
115
112
|
- id: remix-stack
|
|
@@ -140,8 +137,7 @@ stacks:
|
|
|
140
137
|
skill-summoner: {}
|
|
141
138
|
documentor: {}
|
|
142
139
|
web-tester:
|
|
143
|
-
testing:
|
|
144
|
-
e2e: playwright-e2e
|
|
140
|
+
testing: playwright-e2e
|
|
145
141
|
philosophy: Web standards and excellent forms handling
|
|
146
142
|
|
|
147
143
|
- id: vue-stack
|
|
@@ -172,8 +168,7 @@ stacks:
|
|
|
172
168
|
skill-summoner: {}
|
|
173
169
|
documentor: {}
|
|
174
170
|
web-tester:
|
|
175
|
-
testing:
|
|
176
|
-
e2e: playwright-e2e
|
|
171
|
+
testing: playwright-e2e
|
|
177
172
|
philosophy: Progressive and approachable
|
|
178
173
|
|
|
179
174
|
- id: solidjs-stack
|
|
@@ -203,8 +198,7 @@ stacks:
|
|
|
203
198
|
skill-summoner: {}
|
|
204
199
|
documentor: {}
|
|
205
200
|
web-tester:
|
|
206
|
-
testing:
|
|
207
|
-
e2e: playwright-e2e
|
|
201
|
+
testing: playwright-e2e
|
|
208
202
|
philosophy: Maximum performance with minimal overhead
|
|
209
203
|
|
|
210
204
|
- id: react-native-stack
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
init_esm_shims
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/components/wizard/wizard-tabs.tsx
|
|
7
7
|
init_esm_shims();
|
|
@@ -11,7 +11,8 @@ var WIZARD_STEPS = [
|
|
|
11
11
|
{ id: "approach", label: "Intro", number: 1 },
|
|
12
12
|
{ id: "stack", label: "Stack", number: 2 },
|
|
13
13
|
{ id: "build", label: "Build", number: 3 },
|
|
14
|
-
{ id: "
|
|
14
|
+
{ id: "sources", label: "Sources", number: 4 },
|
|
15
|
+
{ id: "confirm", label: "Confirm", number: 5 }
|
|
15
16
|
];
|
|
16
17
|
var getStepState = (stepId, currentStep, completedSteps, skippedSteps) => {
|
|
17
18
|
if (completedSteps.includes(stepId)) return "completed";
|
|
@@ -65,4 +66,4 @@ export {
|
|
|
65
66
|
WIZARD_STEPS,
|
|
66
67
|
WizardTabs
|
|
67
68
|
};
|
|
68
|
-
//# sourceMappingURL=chunk-
|
|
69
|
+
//# sourceMappingURL=chunk-3X5D7RM5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/wizard-tabs.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\n\nexport type WizardTabStep = {\n id: string;\n label: string;\n number: number;\n};\n\nexport type WizardTabsProps = {\n steps: WizardTabStep[];\n currentStep: string;\n completedSteps: string[];\n skippedSteps?: string[];\n version?: string;\n};\n\nexport const WIZARD_STEPS: WizardTabStep[] = [\n { id: \"approach\", label: \"Intro\", number: 1 },\n { id: \"stack\", label: \"Stack\", number: 2 },\n { id: \"build\", label: \"Build\", number: 3 },\n { id: \"sources\", label: \"Sources\", number: 4 },\n { id: \"confirm\", label: \"Confirm\", number: 5 },\n];\n\ntype StepState = \"completed\" | \"current\" | \"pending\" | \"skipped\";\n\nconst getStepState = (\n stepId: string,\n currentStep: string,\n completedSteps: string[],\n skippedSteps: string[],\n): StepState => {\n if (completedSteps.includes(stepId)) return \"completed\";\n if (stepId === currentStep) return \"current\";\n if (skippedSteps.includes(stepId)) return \"skipped\";\n return \"pending\";\n};\n\ntype TabProps = {\n step: WizardTabStep;\n state: StepState;\n};\n\nconst Tab: React.FC<TabProps> = ({ step, state }) => {\n const label = `[${step.number}] ${step.label}`;\n\n switch (state) {\n case \"current\":\n return <Text color=\"cyan\">{label}</Text>;\n case \"completed\":\n return <Text>{label}</Text>;\n case \"skipped\":\n return <Text dimColor>{label}</Text>;\n case \"pending\":\n default:\n return <Text color=\"white\">{label}</Text>;\n }\n};\n\nexport const WizardTabs: React.FC<WizardTabsProps> = ({\n steps,\n currentStep,\n completedSteps,\n skippedSteps = [],\n version,\n}) => {\n return (\n <Box\n flexDirection=\"row\"\n columnGap={2}\n borderRight={false}\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingRight={1}\n >\n {steps.map((step) => {\n const state = getStepState(step.id, currentStep, completedSteps, skippedSteps);\n\n return <Tab key={step.id} step={step} state={state} />;\n })}\n <Box flexGrow={1} justifyContent=\"flex-end\">\n <Text dimColor>{`v${version}`}</Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAgDb,cAmBT,YAnBS;AAhCN,IAAM,eAAgC;AAAA,EAC3C,EAAE,IAAI,YAAY,OAAO,SAAS,QAAQ,EAAE;AAAA,EAC5C,EAAE,IAAI,SAAS,OAAO,SAAS,QAAQ,EAAE;AAAA,EACzC,EAAE,IAAI,SAAS,OAAO,SAAS,QAAQ,EAAE;AAAA,EACzC,EAAE,IAAI,WAAW,OAAO,WAAW,QAAQ,EAAE;AAAA,EAC7C,EAAE,IAAI,WAAW,OAAO,WAAW,QAAQ,EAAE;AAC/C;AAIA,IAAM,eAAe,CACnB,QACA,aACA,gBACA,iBACc;AACd,MAAI,eAAe,SAAS,MAAM,EAAG,QAAO;AAC5C,MAAI,WAAW,YAAa,QAAO;AACnC,MAAI,aAAa,SAAS,MAAM,EAAG,QAAO;AAC1C,SAAO;AACT;AAOA,IAAM,MAA0B,CAAC,EAAE,MAAM,MAAM,MAAM;AACnD,QAAM,QAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK;AAE5C,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,oBAAC,QAAK,OAAM,QAAQ,iBAAM;AAAA,IACnC,KAAK;AACH,aAAO,oBAAC,QAAM,iBAAM;AAAA,IACtB,KAAK;AACH,aAAO,oBAAC,QAAK,UAAQ,MAAE,iBAAM;AAAA,IAC/B,KAAK;AAAA,IACL;AACE,aAAO,oBAAC,QAAK,OAAM,SAAS,iBAAM;AAAA,EACtC;AACF;AAEO,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AAAA,EAChB;AACF,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,WAAW;AAAA,MACX,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,cAAc;AAAA,MAEb;AAAA,cAAM,IAAI,CAAC,SAAS;AACnB,gBAAM,QAAQ,aAAa,KAAK,IAAI,aAAa,gBAAgB,YAAY;AAE7E,iBAAO,oBAAC,OAAkB,MAAY,SAArB,KAAK,EAA8B;AAAA,QACtD,CAAC;AAAA,QACD,oBAAC,OAAI,UAAU,GAAG,gBAAe,YAC/B,8BAAC,QAAK,UAAQ,MAAE,cAAI,OAAO,IAAG,GAChC;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
init_esm_shims
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
|
+
|
|
6
|
+
// src/cli/components/wizard/search-modal.tsx
|
|
7
|
+
init_esm_shims();
|
|
8
|
+
import { useCallback, useState } from "react";
|
|
9
|
+
import { Box, Text, useInput } from "ink";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
var MARKER_FOCUSED = "\u25B8";
|
|
12
|
+
var MARKER_SPACER = " ";
|
|
13
|
+
var ResultRow = ({ candidate, isFocused }) => {
|
|
14
|
+
const marker = isFocused ? MARKER_FOCUSED : MARKER_SPACER;
|
|
15
|
+
const versionLabel = candidate.version != null ? `v${candidate.version}` : "";
|
|
16
|
+
const sourceLabel = `${candidate.sourceName}/${candidate.id}`;
|
|
17
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
18
|
+
/* @__PURE__ */ jsxs(Text, { bold: isFocused, color: isFocused ? "cyan" : void 0, children: [
|
|
19
|
+
marker,
|
|
20
|
+
" "
|
|
21
|
+
] }),
|
|
22
|
+
/* @__PURE__ */ jsx(Text, { bold: isFocused, color: isFocused ? "cyan" : void 0, children: sourceLabel }),
|
|
23
|
+
versionLabel && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
24
|
+
" ",
|
|
25
|
+
versionLabel
|
|
26
|
+
] }),
|
|
27
|
+
candidate.description && /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
28
|
+
" ",
|
|
29
|
+
candidate.description
|
|
30
|
+
] })
|
|
31
|
+
] });
|
|
32
|
+
};
|
|
33
|
+
var SearchModal = ({ results, alias, onBind, onClose }) => {
|
|
34
|
+
const [focusedIndex, setFocusedIndex] = useState(0);
|
|
35
|
+
useInput(
|
|
36
|
+
useCallback(
|
|
37
|
+
(_input, key) => {
|
|
38
|
+
if (key.escape) {
|
|
39
|
+
onClose();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (key.return && results.length > 0) {
|
|
43
|
+
const selected = results[focusedIndex];
|
|
44
|
+
if (selected) {
|
|
45
|
+
onBind(selected);
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
if (key.upArrow) {
|
|
50
|
+
setFocusedIndex((prev) => prev <= 0 ? results.length - 1 : prev - 1);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (key.downArrow) {
|
|
54
|
+
setFocusedIndex((prev) => prev >= results.length - 1 ? 0 : prev + 1);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
[results, focusedIndex, onBind, onClose]
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
return /* @__PURE__ */ jsxs(
|
|
62
|
+
Box,
|
|
63
|
+
{
|
|
64
|
+
flexDirection: "column",
|
|
65
|
+
borderStyle: "single",
|
|
66
|
+
borderColor: "gray",
|
|
67
|
+
paddingX: 1,
|
|
68
|
+
paddingY: 0,
|
|
69
|
+
marginTop: 1,
|
|
70
|
+
children: [
|
|
71
|
+
/* @__PURE__ */ jsxs(Text, { bold: true, children: [
|
|
72
|
+
'Search results for "',
|
|
73
|
+
alias,
|
|
74
|
+
'"'
|
|
75
|
+
] }),
|
|
76
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
77
|
+
results.length === 0 ? /* @__PURE__ */ jsx(Text, { dimColor: true, children: "No results found" }) : results.map((candidate, index) => /* @__PURE__ */ jsx(
|
|
78
|
+
ResultRow,
|
|
79
|
+
{
|
|
80
|
+
candidate,
|
|
81
|
+
isFocused: index === focusedIndex
|
|
82
|
+
},
|
|
83
|
+
`${candidate.sourceName}-${candidate.id}`
|
|
84
|
+
)),
|
|
85
|
+
/* @__PURE__ */ jsx(Text, { children: " " }),
|
|
86
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
87
|
+
"\u2191",
|
|
88
|
+
"/",
|
|
89
|
+
"\u2193",
|
|
90
|
+
" navigate ENTER bind ESC close"
|
|
91
|
+
] })
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export {
|
|
98
|
+
SearchModal
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=chunk-4S4FCAA2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/search-modal.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport type { BoundSkillCandidate } from \"../../types/index.js\";\n\nexport type SearchModalProps = {\n results: BoundSkillCandidate[];\n alias: string;\n onBind: (candidate: BoundSkillCandidate) => void;\n onClose: () => void;\n};\n\nconst MARKER_FOCUSED = \"\\u25B8\";\nconst MARKER_SPACER = \" \";\n\ntype ResultRowProps = {\n candidate: BoundSkillCandidate;\n isFocused: boolean;\n};\n\nconst ResultRow: React.FC<ResultRowProps> = ({ candidate, isFocused }) => {\n const marker = isFocused ? MARKER_FOCUSED : MARKER_SPACER;\n const versionLabel = candidate.version != null ? `v${candidate.version}` : \"\";\n const sourceLabel = `${candidate.sourceName}/${candidate.id}`;\n\n return (\n <Box>\n <Text bold={isFocused} color={isFocused ? \"cyan\" : undefined}>\n {marker}{\" \"}\n </Text>\n <Text bold={isFocused} color={isFocused ? \"cyan\" : undefined}>\n {sourceLabel}\n </Text>\n {versionLabel && (\n <Text dimColor>\n {\" \"}\n {versionLabel}\n </Text>\n )}\n {candidate.description && (\n <Text dimColor>\n {\" \"}\n {candidate.description}\n </Text>\n )}\n </Box>\n );\n};\n\nexport const SearchModal: React.FC<SearchModalProps> = ({ results, alias, onBind, onClose }) => {\n const [focusedIndex, setFocusedIndex] = useState(0);\n\n useInput(\n useCallback(\n (\n _input: string,\n key: { upArrow: boolean; downArrow: boolean; return: boolean; escape: boolean },\n ) => {\n if (key.escape) {\n onClose();\n return;\n }\n\n if (key.return && results.length > 0) {\n const selected = results[focusedIndex];\n if (selected) {\n onBind(selected);\n }\n return;\n }\n\n if (key.upArrow) {\n setFocusedIndex((prev) => (prev <= 0 ? results.length - 1 : prev - 1));\n return;\n }\n\n if (key.downArrow) {\n setFocusedIndex((prev) => (prev >= results.length - 1 ? 0 : prev + 1));\n return;\n }\n },\n [results, focusedIndex, onBind, onClose],\n ),\n );\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n paddingX={1}\n paddingY={0}\n marginTop={1}\n >\n <Text bold>Search results for "{alias}"</Text>\n <Text> </Text>\n\n {results.length === 0 ? (\n <Text dimColor>No results found</Text>\n ) : (\n results.map((candidate, index) => (\n <ResultRow\n key={`${candidate.sourceName}-${candidate.id}`}\n candidate={candidate}\n isFocused={index === focusedIndex}\n />\n ))\n )}\n\n <Text> </Text>\n <Text dimColor>\n {\"\\u2191\"}/{\"\\u2193\"} navigate ENTER bind ESC close\n </Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA;AAAA,SAAgB,aAAa,gBAAgB;AAC7C,SAAS,KAAK,MAAM,gBAAgB;AAyB9B,SAGA,KAHA;AAfN,IAAM,iBAAiB;AACvB,IAAM,gBAAgB;AAOtB,IAAM,YAAsC,CAAC,EAAE,WAAW,UAAU,MAAM;AACxE,QAAM,SAAS,YAAY,iBAAiB;AAC5C,QAAM,eAAe,UAAU,WAAW,OAAO,IAAI,UAAU,OAAO,KAAK;AAC3E,QAAM,cAAc,GAAG,UAAU,UAAU,IAAI,UAAU,EAAE;AAE3D,SACE,qBAAC,OACC;AAAA,yBAAC,QAAK,MAAM,WAAW,OAAO,YAAY,SAAS,QAChD;AAAA;AAAA,MAAQ;AAAA,OACX;AAAA,IACA,oBAAC,QAAK,MAAM,WAAW,OAAO,YAAY,SAAS,QAChD,uBACH;AAAA,IACC,gBACC,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,MACA;AAAA,OACH;AAAA,IAED,UAAU,eACT,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,MACA,UAAU;AAAA,OACb;AAAA,KAEJ;AAEJ;AAEO,IAAM,cAA0C,CAAC,EAAE,SAAS,OAAO,QAAQ,QAAQ,MAAM;AAC9F,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,CAAC;AAElD;AAAA,IACE;AAAA,MACE,CACE,QACA,QACG;AACH,YAAI,IAAI,QAAQ;AACd,kBAAQ;AACR;AAAA,QACF;AAEA,YAAI,IAAI,UAAU,QAAQ,SAAS,GAAG;AACpC,gBAAM,WAAW,QAAQ,YAAY;AACrC,cAAI,UAAU;AACZ,mBAAO,QAAQ;AAAA,UACjB;AACA;AAAA,QACF;AAEA,YAAI,IAAI,SAAS;AACf,0BAAgB,CAAC,SAAU,QAAQ,IAAI,QAAQ,SAAS,IAAI,OAAO,CAAE;AACrE;AAAA,QACF;AAEA,YAAI,IAAI,WAAW;AACjB,0BAAgB,CAAC,SAAU,QAAQ,QAAQ,SAAS,IAAI,IAAI,OAAO,CAAE;AACrE;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,SAAS,cAAc,QAAQ,OAAO;AAAA,IACzC;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MAEX;AAAA,6BAAC,QAAK,MAAI,MAAC;AAAA;AAAA,UAA0B;AAAA,UAAM;AAAA,WAAM;AAAA,QACjD,oBAAC,QAAK,eAAC;AAAA,QAEN,QAAQ,WAAW,IAClB,oBAAC,QAAK,UAAQ,MAAC,8BAAgB,IAE/B,QAAQ,IAAI,CAAC,WAAW,UACtB;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA,WAAW,UAAU;AAAA;AAAA,UAFhB,GAAG,UAAU,UAAU,IAAI,UAAU,EAAE;AAAA,QAG9C,CACD;AAAA,QAGH,oBAAC,QAAK,eAAC;AAAA,QACP,qBAAC,QAAK,UAAQ,MACX;AAAA;AAAA,UAAS;AAAA,UAAE;AAAA,UAAS;AAAA,WACvB;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
ViewTitle
|
|
4
|
+
} from "./chunk-U7HFKR74.js";
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_SOURCE,
|
|
7
|
+
addSource,
|
|
8
|
+
getSourceSummary,
|
|
9
|
+
removeSource
|
|
10
|
+
} from "./chunk-YDBSSAJ6.js";
|
|
11
|
+
import {
|
|
12
|
+
init_esm_shims
|
|
13
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
14
|
+
|
|
15
|
+
// src/cli/components/wizard/step-settings.tsx
|
|
16
|
+
init_esm_shims();
|
|
17
|
+
import { useState, useEffect, useCallback } from "react";
|
|
18
|
+
import { Box, Text, useInput } from "ink";
|
|
19
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
20
|
+
var DEFAULT_SOURCE_NAME = "public";
|
|
21
|
+
var MIN_PRINTABLE_CHAR_CODE = 32;
|
|
22
|
+
var MAX_PRINTABLE_CHAR_CODE = 126;
|
|
23
|
+
var StepSettings = ({ projectDir, onClose }) => {
|
|
24
|
+
const [summary, setSummary] = useState(null);
|
|
25
|
+
const [focusedIndex, setFocusedIndex] = useState(0);
|
|
26
|
+
const [isAddingSource, setIsAddingSource] = useState(false);
|
|
27
|
+
const [addSourceInput, setAddSourceInput] = useState("");
|
|
28
|
+
const [statusMessage, setStatusMessage] = useState(null);
|
|
29
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
30
|
+
const loadSummary = useCallback(async () => {
|
|
31
|
+
try {
|
|
32
|
+
const result = await getSourceSummary(projectDir);
|
|
33
|
+
setSummary(result);
|
|
34
|
+
} catch {
|
|
35
|
+
setSummary({
|
|
36
|
+
sources: [{ name: DEFAULT_SOURCE_NAME, url: DEFAULT_SOURCE, enabled: true }],
|
|
37
|
+
localSkillCount: 0,
|
|
38
|
+
pluginSkillCount: 0
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
setIsLoading(false);
|
|
42
|
+
}, [projectDir]);
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
void loadSummary();
|
|
45
|
+
}, [loadSummary]);
|
|
46
|
+
const sourceCount = summary?.sources.length ?? 0;
|
|
47
|
+
useInput((input, key) => {
|
|
48
|
+
if (statusMessage) {
|
|
49
|
+
setStatusMessage(null);
|
|
50
|
+
}
|
|
51
|
+
if (isAddingSource) {
|
|
52
|
+
if (key.escape) {
|
|
53
|
+
setIsAddingSource(false);
|
|
54
|
+
setAddSourceInput("");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (key.return) {
|
|
58
|
+
if (addSourceInput.trim()) {
|
|
59
|
+
void handleAddSource(addSourceInput.trim());
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (key.backspace || key.delete) {
|
|
64
|
+
setAddSourceInput((prev) => prev.slice(0, -1));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (input && input.length === 1) {
|
|
68
|
+
const code = input.charCodeAt(0);
|
|
69
|
+
if (code >= MIN_PRINTABLE_CHAR_CODE && code <= MAX_PRINTABLE_CHAR_CODE) {
|
|
70
|
+
setAddSourceInput((prev) => prev + input);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (key.escape) {
|
|
76
|
+
onClose();
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (key.upArrow) {
|
|
80
|
+
setFocusedIndex((prev) => Math.max(0, prev - 1));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (key.downArrow) {
|
|
84
|
+
setFocusedIndex((prev) => Math.min(sourceCount - 1, prev - 0 + 1));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (key.return) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (key.backspace || key.delete) {
|
|
91
|
+
if (summary && summary.sources[focusedIndex]) {
|
|
92
|
+
const source = summary.sources[focusedIndex];
|
|
93
|
+
if (source.name !== DEFAULT_SOURCE_NAME) {
|
|
94
|
+
void handleRemoveSource(source.name);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (input === "a" || input === "A") {
|
|
100
|
+
setIsAddingSource(true);
|
|
101
|
+
setAddSourceInput("");
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
const handleAddSource = async (url) => {
|
|
106
|
+
setIsAddingSource(false);
|
|
107
|
+
setAddSourceInput("");
|
|
108
|
+
try {
|
|
109
|
+
const result = await addSource(projectDir, url);
|
|
110
|
+
setStatusMessage({
|
|
111
|
+
text: `Added "${result.name}" (${result.skillCount} skills)`,
|
|
112
|
+
color: "green"
|
|
113
|
+
});
|
|
114
|
+
await loadSummary();
|
|
115
|
+
} catch (error) {
|
|
116
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
117
|
+
setStatusMessage({ text: `Failed to add source: ${message}`, color: "red" });
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const handleRemoveSource = async (name) => {
|
|
121
|
+
try {
|
|
122
|
+
await removeSource(projectDir, name);
|
|
123
|
+
setStatusMessage({ text: `Removed "${name}"`, color: "green" });
|
|
124
|
+
setFocusedIndex((prev) => Math.max(0, prev - 1));
|
|
125
|
+
await loadSummary();
|
|
126
|
+
} catch (error) {
|
|
127
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
128
|
+
setStatusMessage({ text: `Failed to remove: ${message}`, color: "red" });
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
if (isLoading) {
|
|
132
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, children: [
|
|
133
|
+
/* @__PURE__ */ jsx(ViewTitle, { children: "Skill Sources" }),
|
|
134
|
+
/* @__PURE__ */ jsx(Text, { dimColor: true, children: "Loading sources..." })
|
|
135
|
+
] });
|
|
136
|
+
}
|
|
137
|
+
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 2, children: [
|
|
138
|
+
/* @__PURE__ */ jsx(ViewTitle, { children: "Skill Sources" }),
|
|
139
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1 }),
|
|
140
|
+
/* @__PURE__ */ jsx(Text, { bold: true, children: "Configured marketplaces:" }),
|
|
141
|
+
/* @__PURE__ */ jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: "gray", paddingX: 1, marginTop: 1, children: summary?.sources.map((source, index) => {
|
|
142
|
+
const isFocused = index === focusedIndex && !isAddingSource;
|
|
143
|
+
const isDefault = source.name === DEFAULT_SOURCE_NAME;
|
|
144
|
+
const checkmark = source.enabled ? "\u2713" : " ";
|
|
145
|
+
const displayName = isDefault ? "Public" : source.name;
|
|
146
|
+
const suffix = isDefault ? " (default)" : "";
|
|
147
|
+
return /* @__PURE__ */ jsxs(Box, { children: [
|
|
148
|
+
/* @__PURE__ */ jsxs(Text, { color: isFocused ? "cyan" : void 0, bold: isFocused, children: [
|
|
149
|
+
isFocused ? ">" : " ",
|
|
150
|
+
" ",
|
|
151
|
+
checkmark,
|
|
152
|
+
" ",
|
|
153
|
+
displayName
|
|
154
|
+
] }),
|
|
155
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
156
|
+
" ",
|
|
157
|
+
source.url,
|
|
158
|
+
suffix
|
|
159
|
+
] })
|
|
160
|
+
] }, source.name);
|
|
161
|
+
}) }),
|
|
162
|
+
/* @__PURE__ */ jsx(
|
|
163
|
+
Box,
|
|
164
|
+
{
|
|
165
|
+
flexDirection: "column",
|
|
166
|
+
borderStyle: "round",
|
|
167
|
+
borderColor: isAddingSource ? "cyan" : "gray",
|
|
168
|
+
paddingX: 1,
|
|
169
|
+
marginTop: 1,
|
|
170
|
+
children: /* @__PURE__ */ jsxs(Text, { color: isAddingSource ? "cyan" : void 0, children: [
|
|
171
|
+
"+ Add source: ",
|
|
172
|
+
isAddingSource ? addSourceInput : "",
|
|
173
|
+
isAddingSource ? "\u2588" : ""
|
|
174
|
+
] })
|
|
175
|
+
}
|
|
176
|
+
),
|
|
177
|
+
statusMessage && /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { color: statusMessage.color, children: statusMessage.text }) }),
|
|
178
|
+
/* @__PURE__ */ jsxs(Box, { marginTop: 1, flexDirection: "column", children: [
|
|
179
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
180
|
+
"Local skills: ",
|
|
181
|
+
summary?.localSkillCount ?? 0,
|
|
182
|
+
" in .claude/skills/"
|
|
183
|
+
] }),
|
|
184
|
+
/* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
|
|
185
|
+
"Plugins: ",
|
|
186
|
+
summary?.pluginSkillCount ?? 0,
|
|
187
|
+
" in .claude/plugins/"
|
|
188
|
+
] })
|
|
189
|
+
] }),
|
|
190
|
+
/* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsx(Text, { dimColor: true, children: isAddingSource ? "ENTER submit ESC cancel" : "A add DEL remove ESC close" }) })
|
|
191
|
+
] });
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export {
|
|
195
|
+
StepSettings
|
|
196
|
+
};
|
|
197
|
+
//# sourceMappingURL=chunk-4WGN6SUE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/step-settings.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { ViewTitle } from \"./view-title.js\";\nimport { getSourceSummary, type SourceSummary } from \"../../lib/configuration/source-manager.js\";\nimport { addSource, removeSource } from \"../../lib/configuration/source-manager.js\";\nimport { DEFAULT_SOURCE } from \"../../lib/configuration/config.js\";\n\nconst DEFAULT_SOURCE_NAME = \"public\";\nconst MIN_PRINTABLE_CHAR_CODE = 32;\nconst MAX_PRINTABLE_CHAR_CODE = 126;\n\nexport type StepSettingsProps = {\n projectDir: string;\n onClose: () => void;\n};\n\nexport const StepSettings: React.FC<StepSettingsProps> = ({ projectDir, onClose }) => {\n const [summary, setSummary] = useState<SourceSummary | null>(null);\n const [focusedIndex, setFocusedIndex] = useState(0);\n const [isAddingSource, setIsAddingSource] = useState(false);\n const [addSourceInput, setAddSourceInput] = useState(\"\");\n const [statusMessage, setStatusMessage] = useState<{ text: string; color: string } | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n const loadSummary = useCallback(async () => {\n try {\n const result = await getSourceSummary(projectDir);\n setSummary(result);\n } catch {\n setSummary({\n sources: [{ name: DEFAULT_SOURCE_NAME, url: DEFAULT_SOURCE, enabled: true }],\n localSkillCount: 0,\n pluginSkillCount: 0,\n });\n }\n setIsLoading(false);\n }, [projectDir]);\n\n useEffect(() => {\n void loadSummary();\n }, [loadSummary]);\n\n const sourceCount = summary?.sources.length ?? 0;\n\n useInput((input, key) => {\n // Clear status message on any input\n if (statusMessage) {\n setStatusMessage(null);\n }\n\n if (isAddingSource) {\n if (key.escape) {\n setIsAddingSource(false);\n setAddSourceInput(\"\");\n return;\n }\n\n if (key.return) {\n if (addSourceInput.trim()) {\n void handleAddSource(addSourceInput.trim());\n }\n return;\n }\n\n if (key.backspace || key.delete) {\n setAddSourceInput((prev) => prev.slice(0, -1));\n return;\n }\n\n // Capture printable characters\n if (input && input.length === 1) {\n const code = input.charCodeAt(0);\n if (code >= MIN_PRINTABLE_CHAR_CODE && code <= MAX_PRINTABLE_CHAR_CODE) {\n setAddSourceInput((prev) => prev + input);\n }\n }\n return;\n }\n\n // Non-adding mode keyboard handling\n if (key.escape) {\n onClose();\n return;\n }\n\n if (key.upArrow) {\n setFocusedIndex((prev) => Math.max(0, prev - 1));\n return;\n }\n\n if (key.downArrow) {\n setFocusedIndex((prev) => Math.min(sourceCount - 1, prev - 0 + 1));\n return;\n }\n\n if (key.return) {\n // Toggle enabled/disabled is a placeholder for future enabledSources store integration\n return;\n }\n\n if (key.backspace || key.delete) {\n if (summary && summary.sources[focusedIndex]) {\n const source = summary.sources[focusedIndex];\n if (source.name !== DEFAULT_SOURCE_NAME) {\n void handleRemoveSource(source.name);\n }\n }\n return;\n }\n\n if (input === \"a\" || input === \"A\") {\n setIsAddingSource(true);\n setAddSourceInput(\"\");\n return;\n }\n });\n\n const handleAddSource = async (url: string) => {\n setIsAddingSource(false);\n setAddSourceInput(\"\");\n try {\n const result = await addSource(projectDir, url);\n setStatusMessage({\n text: `Added \"${result.name}\" (${result.skillCount} skills)`,\n color: \"green\",\n });\n await loadSummary();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n setStatusMessage({ text: `Failed to add source: ${message}`, color: \"red\" });\n }\n };\n\n const handleRemoveSource = async (name: string) => {\n try {\n await removeSource(projectDir, name);\n setStatusMessage({ text: `Removed \"${name}\"`, color: \"green\" });\n setFocusedIndex((prev) => Math.max(0, prev - 1));\n await loadSummary();\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n setStatusMessage({ text: `Failed to remove: ${message}`, color: \"red\" });\n }\n };\n\n if (isLoading) {\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <ViewTitle>Skill Sources</ViewTitle>\n <Text dimColor>Loading sources...</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <ViewTitle>Skill Sources</ViewTitle>\n <Box marginTop={1} />\n\n <Text bold>Configured marketplaces:</Text>\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" paddingX={1} marginTop={1}>\n {summary?.sources.map((source, index) => {\n const isFocused = index === focusedIndex && !isAddingSource;\n const isDefault = source.name === DEFAULT_SOURCE_NAME;\n const checkmark = source.enabled ? \"\\u2713\" : \" \";\n const displayName = isDefault ? \"Public\" : source.name;\n const suffix = isDefault ? \" (default)\" : \"\";\n\n return (\n <Box key={source.name}>\n <Text color={isFocused ? \"cyan\" : undefined} bold={isFocused}>\n {isFocused ? \">\" : \" \"} {checkmark} {displayName}\n </Text>\n <Text dimColor>\n {\" \"}\n {source.url}\n {suffix}\n </Text>\n </Box>\n );\n })}\n </Box>\n\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={isAddingSource ? \"cyan\" : \"gray\"}\n paddingX={1}\n marginTop={1}\n >\n <Text color={isAddingSource ? \"cyan\" : undefined}>\n + Add source: {isAddingSource ? addSourceInput : \"\"}\n {isAddingSource ? \"\\u2588\" : \"\"}\n </Text>\n </Box>\n\n {statusMessage && (\n <Box marginTop={1}>\n <Text color={statusMessage.color as \"red\" | \"green\"}>{statusMessage.text}</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>Local skills: {summary?.localSkillCount ?? 0} in .claude/skills/</Text>\n <Text dimColor>Plugins: {summary?.pluginSkillCount ?? 0} in .claude/plugins/</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {isAddingSource ? \"ENTER submit ESC cancel\" : \"A add DEL remove ESC close\"}\n </Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -5,10 +5,16 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
|
+
}) : x)(function(x) {
|
|
11
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
12
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
13
|
+
});
|
|
8
14
|
var __esm = (fn, res) => function __init() {
|
|
9
15
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
16
|
};
|
|
11
|
-
var __commonJS = (cb, mod) => function
|
|
17
|
+
var __commonJS = (cb, mod) => function __require2() {
|
|
12
18
|
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
13
19
|
};
|
|
14
20
|
var __export = (target, all) => {
|
|
@@ -42,9 +48,10 @@ var init_esm_shims = __esm({
|
|
|
42
48
|
});
|
|
43
49
|
|
|
44
50
|
export {
|
|
51
|
+
__require,
|
|
45
52
|
__commonJS,
|
|
46
53
|
__export,
|
|
47
54
|
__toESM,
|
|
48
55
|
init_esm_shims
|
|
49
56
|
};
|
|
50
|
-
//# sourceMappingURL=chunk-
|
|
57
|
+
//# sourceMappingURL=chunk-AWKZ5BDL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAF9B;AAAA;AAAA;AAAA;AAAA;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
init_esm_shims
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/lib/__tests__/test-constants.ts
|
|
7
7
|
init_esm_shims();
|
|
@@ -12,6 +12,9 @@ var ARROW_RIGHT = "\x1B[C";
|
|
|
12
12
|
var ENTER = "\r";
|
|
13
13
|
var ESCAPE = "\x1B";
|
|
14
14
|
var TAB = " ";
|
|
15
|
+
var SPACE = " ";
|
|
16
|
+
var KEY_Y = "y";
|
|
17
|
+
var KEY_N = "n";
|
|
15
18
|
var INPUT_DELAY_MS = 50;
|
|
16
19
|
var RENDER_DELAY_MS = 100;
|
|
17
20
|
var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -24,8 +27,11 @@ export {
|
|
|
24
27
|
ENTER,
|
|
25
28
|
ESCAPE,
|
|
26
29
|
TAB,
|
|
30
|
+
SPACE,
|
|
31
|
+
KEY_Y,
|
|
32
|
+
KEY_N,
|
|
27
33
|
INPUT_DELAY_MS,
|
|
28
34
|
RENDER_DELAY_MS,
|
|
29
35
|
delay
|
|
30
36
|
};
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
37
|
+
//# sourceMappingURL=chunk-DBRUQQUF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/lib/__tests__/test-constants.ts"],"sourcesContent":["// Keyboard escape sequences\nexport const ARROW_UP = \"\\x1B[A\";\nexport const ARROW_DOWN = \"\\x1B[B\";\nexport const ARROW_LEFT = \"\\x1B[D\";\nexport const ARROW_RIGHT = \"\\x1B[C\";\nexport const ENTER = \"\\r\";\nexport const ESCAPE = \"\\x1B\";\nexport const CTRL_C = \"\\x03\";\nexport const TAB = \"\\t\";\nexport const SPACE = \" \";\nexport const BACKSPACE = \"\\x7F\";\nexport const KEY_Y = \"y\";\nexport const KEY_N = \"n\";\n\n// Timing constants (ms)\nexport const INPUT_DELAY_MS = 50;\nexport const RENDER_DELAY_MS = 100;\nexport const OPERATION_DELAY_MS = 150;\n\nexport const delay = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms));\n"],"mappings":";;;;;;AAAA;AACO,IAAM,WAAW;AACjB,IAAM,aAAa;AACnB,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,QAAQ;AACd,IAAM,SAAS;AAEf,IAAM,MAAM;AACZ,IAAM,QAAQ;AAEd,IAAM,QAAQ;AACd,IAAM,QAAQ;AAGd,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AAGxB,IAAM,QAAQ,CAAC,OACpB,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;","names":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
init_esm_shims
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/components/wizard/category-grid.tsx
|
|
7
7
|
init_esm_shims();
|
|
8
8
|
import { useCallback, useEffect } from "react";
|
|
9
9
|
import { Box, Text, useInput } from "ink";
|
|
10
|
+
import { sortBy } from "remeda";
|
|
10
11
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
11
12
|
var SYMBOL_REQUIRED = "*";
|
|
12
13
|
var FRAMEWORK_CATEGORY_ID = "framework";
|
|
@@ -20,9 +21,7 @@ var sortOptions = (options, expertMode) => {
|
|
|
20
21
|
discouraged: 2,
|
|
21
22
|
disabled: 3
|
|
22
23
|
};
|
|
23
|
-
return [...options]
|
|
24
|
-
return stateOrder[a.state] - stateOrder[b.state];
|
|
25
|
-
});
|
|
24
|
+
return sortBy([...options], (o) => stateOrder[o.state]);
|
|
26
25
|
};
|
|
27
26
|
var findNextValidOption = (options, currentIndex, direction, wrap = true) => {
|
|
28
27
|
const length = options.length;
|
|
@@ -58,11 +57,8 @@ var isSectionLocked = (categoryId, categories) => {
|
|
|
58
57
|
return false;
|
|
59
58
|
}
|
|
60
59
|
const frameworkCategory = categories.find((cat) => cat.id === FRAMEWORK_CATEGORY_ID);
|
|
61
|
-
if (!frameworkCategory)
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
const hasFrameworkSelected = frameworkCategory.options.some((opt) => opt.selected);
|
|
65
|
-
return !hasFrameworkSelected;
|
|
60
|
+
if (!frameworkCategory) return false;
|
|
61
|
+
return !frameworkCategory.options.some((opt) => opt.selected);
|
|
66
62
|
};
|
|
67
63
|
var findNextUnlockedSection = (categories, currentIndex, direction, allCategories) => {
|
|
68
64
|
const length = categories.length;
|
|
@@ -125,6 +121,7 @@ var SkillTag = ({ option, isFocused, isLocked }) => {
|
|
|
125
121
|
/* @__PURE__ */ jsx(Text, { backgroundColor: "gray", children: " L " }),
|
|
126
122
|
" "
|
|
127
123
|
] }),
|
|
124
|
+
option.installed && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "\u2713 " }),
|
|
128
125
|
option.label,
|
|
129
126
|
" "
|
|
130
127
|
] })
|
|
@@ -141,7 +138,7 @@ var CategorySection = ({
|
|
|
141
138
|
}) => {
|
|
142
139
|
return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginTop: 1, children: [
|
|
143
140
|
/* @__PURE__ */ jsxs(Box, { flexDirection: "row", children: [
|
|
144
|
-
/* @__PURE__ */ jsx(Text, { dimColor: isLocked, children: category.
|
|
141
|
+
/* @__PURE__ */ jsx(Text, { dimColor: isLocked, children: category.displayName }),
|
|
145
142
|
category.required && /* @__PURE__ */ jsxs(Text, { color: isLocked ? "gray" : "red", dimColor: isLocked, children: [
|
|
146
143
|
" ",
|
|
147
144
|
SYMBOL_REQUIRED
|
|
@@ -300,4 +297,4 @@ var CategoryGrid = ({
|
|
|
300
297
|
export {
|
|
301
298
|
CategoryGrid
|
|
302
299
|
};
|
|
303
|
-
//# sourceMappingURL=chunk-
|
|
300
|
+
//# sourceMappingURL=chunk-ETCVEV3S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/category-grid.tsx"],"sourcesContent":["import React, { useCallback, useEffect } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { sortBy } from \"remeda\";\nimport type { SkillId, Subcategory } from \"../../types/index.js\";\n\nexport type OptionState = \"normal\" | \"recommended\" | \"discouraged\" | \"disabled\";\n\nexport type CategoryOption = {\n id: SkillId;\n label: string;\n state: OptionState;\n stateReason?: string;\n selected: boolean;\n local?: boolean;\n installed?: boolean;\n};\n\nexport type CategoryRow = {\n id: Subcategory;\n displayName: string;\n required: boolean;\n exclusive: boolean;\n options: CategoryOption[];\n};\n\nexport type CategoryGridProps = {\n categories: CategoryRow[];\n focusedRow: number;\n focusedCol: number;\n showDescriptions: boolean;\n expertMode: boolean;\n onToggle: (categoryId: Subcategory, technologyId: SkillId) => void;\n onFocusChange: (row: number, col: number) => void;\n onToggleDescriptions: () => void;\n};\n\nconst SYMBOL_REQUIRED = \"*\";\nconst BG_SELECTED = \"cyan\";\nconst BG_FOCUSED = \"#333\";\nconst FRAMEWORK_CATEGORY_ID = \"framework\";\n\n// Recommended first, discouraged last. Expert mode preserves original order.\nconst sortOptions = (options: CategoryOption[], expertMode: boolean): CategoryOption[] => {\n if (expertMode) {\n return options;\n }\n\n const stateOrder: Record<OptionState, number> = {\n recommended: 0,\n normal: 1,\n discouraged: 2,\n disabled: 3,\n };\n\n return sortBy([...options], (o) => stateOrder[o.state]);\n};\n\nconst findNextValidOption = (\n options: CategoryOption[],\n currentIndex: number,\n direction: 1 | -1,\n wrap: boolean = true,\n): number => {\n const length = options.length;\n if (length === 0) return currentIndex;\n\n let index = currentIndex;\n let attempts = 0;\n\n while (attempts < length) {\n index += direction;\n\n if (wrap) {\n // Wrap around\n if (index < 0) index = length - 1;\n if (index >= length) index = 0;\n } else {\n // Clamp to bounds\n if (index < 0) index = 0;\n if (index >= length) index = length - 1;\n }\n\n if (options[index] && options[index].state !== \"disabled\") {\n return index;\n }\n\n attempts++;\n }\n\n // All options are disabled, return current\n return currentIndex;\n};\n\nconst findValidStartColumn = (options: CategoryOption[]): number => {\n for (let i = 0; i < options.length; i++) {\n if (options[i] && options[i].state !== \"disabled\") {\n return i;\n }\n }\n return 0;\n};\n\n// Locked = non-framework section when no framework is selected\nconst isSectionLocked = (categoryId: Subcategory, categories: CategoryRow[]): boolean => {\n if (categoryId === FRAMEWORK_CATEGORY_ID) {\n return false;\n }\n\n const frameworkCategory = categories.find((cat) => cat.id === FRAMEWORK_CATEGORY_ID);\n if (!frameworkCategory) return false;\n\n return !frameworkCategory.options.some((opt) => opt.selected);\n};\n\nconst findNextUnlockedSection = (\n categories: { id: Subcategory; sortedOptions: CategoryOption[] }[],\n currentIndex: number,\n direction: 1 | -1,\n allCategories: CategoryRow[],\n): number => {\n const length = categories.length;\n if (length === 0) return currentIndex;\n\n let index = currentIndex;\n let attempts = 0;\n\n while (attempts < length) {\n index += direction;\n\n if (index < 0) index = length - 1;\n if (index >= length) index = 0;\n\n const category = categories[index];\n if (category && !isSectionLocked(category.id, allCategories)) {\n return index;\n }\n\n attempts++;\n }\n\n return currentIndex;\n};\n\ntype SkillTagProps = {\n option: CategoryOption;\n isFocused: boolean;\n isLocked: boolean;\n};\n\nconst SkillTag: React.FC<SkillTagProps> = ({ option, isFocused, isLocked }) => {\n const getColor = (): { text: string; border: string } | undefined => {\n if (isLocked || option.state === \"disabled\") {\n return {\n text: \"gray\",\n border: \"gray\",\n };\n }\n if (option.selected) {\n return {\n text: \"cyan\",\n border: \"cyan\",\n };\n }\n if (option.state === \"recommended\") {\n return {\n text: \"white\",\n border: \"gray\",\n };\n }\n if (option.state === \"discouraged\") {\n return {\n text: \"yellow\",\n border: \"yellow\",\n };\n }\n return undefined;\n };\n\n const isBold = isFocused || option.selected;\n const isDimmed = isLocked || option.state === \"disabled\";\n const focusBorderColor = option.selected ? \"cyan\" : \"white\";\n\n return (\n <Box\n marginRight={1}\n borderColor={isFocused ? focusBorderColor : getColor()?.border}\n borderStyle=\"single\"\n borderDimColor={isDimmed}\n >\n <Text color={getColor()?.text} bold={isBold} dimColor={false}>\n {\" \"}\n {option.local && (\n <>\n <Text backgroundColor=\"gray\"> L </Text>{\" \"}\n </>\n )}\n {option.installed && <Text dimColor>✓ </Text>}\n {option.label}{\" \"}\n </Text>\n </Box>\n );\n};\n\ntype CategorySectionProps = {\n category: CategoryRow;\n options: CategoryOption[];\n isLocked: boolean;\n isFocused: boolean;\n focusedOptionIndex: number;\n showDescriptions: boolean;\n};\n\nconst CategorySection: React.FC<CategorySectionProps> = ({\n category,\n options,\n isLocked,\n isFocused,\n focusedOptionIndex,\n showDescriptions,\n}) => {\n return (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\">\n <Text dimColor={isLocked}>{category.displayName}</Text>\n {category.required && (\n <Text color={isLocked ? \"gray\" : \"red\"} dimColor={isLocked}>\n {\" \"}\n {SYMBOL_REQUIRED}\n </Text>\n )}\n </Box>\n\n <Box flexDirection=\"row\" flexWrap=\"wrap\" marginTop={0}>\n {options.map((option, index) => (\n <Box key={option.id} flexDirection=\"column\">\n <SkillTag\n option={option}\n isFocused={isFocused && index === focusedOptionIndex && !isLocked}\n isLocked={isLocked}\n />\n {showDescriptions && option.stateReason && !isLocked && (\n <Box marginLeft={1} marginBottom={0}>\n <Text dimColor wrap=\"truncate-end\">\n {option.stateReason}\n </Text>\n </Box>\n )}\n </Box>\n ))}\n </Box>\n </Box>\n );\n};\n\nexport const CategoryGrid: React.FC<CategoryGridProps> = ({\n categories,\n focusedRow,\n focusedCol,\n showDescriptions,\n expertMode,\n onToggle,\n onFocusChange,\n onToggleDescriptions,\n}) => {\n const processedCategories = categories.map((category) => ({\n ...category,\n sortedOptions: sortOptions(category.options, expertMode),\n }));\n\n const currentRow = processedCategories[focusedRow];\n const currentOptions = currentRow?.sortedOptions || [];\n const currentLocked = currentRow ? isSectionLocked(currentRow.id, categories) : false;\n\n useEffect(() => {\n if (!currentRow) return;\n\n const maxCol = currentOptions.length - 1;\n if (focusedCol > maxCol) {\n const newCol = Math.max(0, maxCol);\n onFocusChange(focusedRow, newCol);\n } else if (currentOptions[focusedCol]?.state === \"disabled\") {\n const validCol = findValidStartColumn(currentOptions);\n if (validCol !== focusedCol) {\n onFocusChange(focusedRow, validCol);\n }\n }\n }, [focusedRow, currentOptions, focusedCol, onFocusChange, currentRow]);\n\n useEffect(() => {\n if (currentRow && currentLocked) {\n const unlockedIndex = findNextUnlockedSection(processedCategories, focusedRow, 1, categories);\n if (unlockedIndex !== focusedRow) {\n const newRowOptions = processedCategories[unlockedIndex]?.sortedOptions || [];\n const newCol = findValidStartColumn(newRowOptions);\n onFocusChange(unlockedIndex, newCol);\n }\n }\n }, [currentRow, currentLocked, focusedRow, processedCategories, categories, onFocusChange]);\n\n useInput(\n useCallback(\n (\n input: string,\n key: {\n leftArrow: boolean;\n rightArrow: boolean;\n upArrow: boolean;\n downArrow: boolean;\n tab: boolean;\n shift: boolean;\n },\n ) => {\n if (key.tab && key.shift) {\n onToggleDescriptions();\n return;\n }\n\n if (key.tab && !key.shift) {\n const nextSection = findNextUnlockedSection(\n processedCategories,\n focusedRow,\n 1,\n categories,\n );\n if (nextSection !== focusedRow) {\n const newRowOptions = processedCategories[nextSection]?.sortedOptions || [];\n const newCol = findValidStartColumn(newRowOptions);\n onFocusChange(nextSection, newCol);\n }\n return;\n }\n\n if (input === \"d\" || input === \"D\") {\n onToggleDescriptions();\n return;\n }\n\n if (input === \" \") {\n if (currentLocked) return;\n const currentOption = currentOptions[focusedCol];\n if (currentOption && currentOption.state !== \"disabled\") {\n onToggle(currentRow.id, currentOption.id);\n }\n return;\n }\n\n const isLeft = key.leftArrow || input === \"h\";\n const isRight = key.rightArrow || input === \"l\";\n const isUp = key.upArrow || input === \"k\";\n const isDown = key.downArrow || input === \"j\";\n\n if (isLeft) {\n if (currentLocked) return;\n const newCol = findNextValidOption(currentOptions, focusedCol, -1, true);\n onFocusChange(focusedRow, newCol);\n } else if (isRight) {\n if (currentLocked) return;\n const newCol = findNextValidOption(currentOptions, focusedCol, 1, true);\n onFocusChange(focusedRow, newCol);\n } else if (isUp) {\n const newRow = findNextUnlockedSection(processedCategories, focusedRow, -1, categories);\n const newRowOptions = processedCategories[newRow]?.sortedOptions || [];\n let newCol = Math.min(focusedCol, newRowOptions.length - 1);\n if (newRowOptions[newCol]?.state === \"disabled\") {\n newCol = findValidStartColumn(newRowOptions);\n }\n onFocusChange(newRow, newCol);\n } else if (isDown) {\n const newRow = findNextUnlockedSection(processedCategories, focusedRow, 1, categories);\n const newRowOptions = processedCategories[newRow]?.sortedOptions || [];\n let newCol = Math.min(focusedCol, newRowOptions.length - 1);\n if (newRowOptions[newCol]?.state === \"disabled\") {\n newCol = findValidStartColumn(newRowOptions);\n }\n onFocusChange(newRow, newCol);\n }\n },\n [\n focusedRow,\n focusedCol,\n currentOptions,\n currentRow,\n currentLocked,\n processedCategories,\n categories,\n onToggle,\n onFocusChange,\n onToggleDescriptions,\n ],\n ),\n );\n\n if (categories.length === 0) {\n return (\n <Box flexDirection=\"column\">\n <Text dimColor>No categories to display.</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\">\n {processedCategories.map((category, rowIndex) => {\n const isLocked = isSectionLocked(category.id, categories);\n\n return (\n <CategorySection\n key={category.id}\n category={category}\n options={category.sortedOptions}\n isLocked={isLocked}\n isFocused={rowIndex === focusedRow}\n focusedOptionIndex={focusedCol}\n showDescriptions={showDescriptions}\n />\n );\n })}\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA;AAAA,SAAgB,aAAa,iBAAiB;AAC9C,SAAS,KAAK,MAAM,gBAAgB;AACpC,SAAS,cAAc;AA8Lb,mBACE,KADF;AA5JV,IAAM,kBAAkB;AAGxB,IAAM,wBAAwB;AAG9B,IAAM,cAAc,CAAC,SAA2B,eAA0C;AACxF,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AAEA,QAAM,aAA0C;AAAA,IAC9C,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,UAAU;AAAA,EACZ;AAEA,SAAO,OAAO,CAAC,GAAG,OAAO,GAAG,CAAC,MAAM,WAAW,EAAE,KAAK,CAAC;AACxD;AAEA,IAAM,sBAAsB,CAC1B,SACA,cACA,WACA,OAAgB,SACL;AACX,QAAM,SAAS,QAAQ;AACvB,MAAI,WAAW,EAAG,QAAO;AAEzB,MAAI,QAAQ;AACZ,MAAI,WAAW;AAEf,SAAO,WAAW,QAAQ;AACxB,aAAS;AAET,QAAI,MAAM;AAER,UAAI,QAAQ,EAAG,SAAQ,SAAS;AAChC,UAAI,SAAS,OAAQ,SAAQ;AAAA,IAC/B,OAAO;AAEL,UAAI,QAAQ,EAAG,SAAQ;AACvB,UAAI,SAAS,OAAQ,SAAQ,SAAS;AAAA,IACxC;AAEA,QAAI,QAAQ,KAAK,KAAK,QAAQ,KAAK,EAAE,UAAU,YAAY;AACzD,aAAO;AAAA,IACT;AAEA;AAAA,EACF;AAGA,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC,YAAsC;AAClE,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,QAAI,QAAQ,CAAC,KAAK,QAAQ,CAAC,EAAE,UAAU,YAAY;AACjD,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAGA,IAAM,kBAAkB,CAAC,YAAyB,eAAuC;AACvF,MAAI,eAAe,uBAAuB;AACxC,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,WAAW,KAAK,CAAC,QAAQ,IAAI,OAAO,qBAAqB;AACnF,MAAI,CAAC,kBAAmB,QAAO;AAE/B,SAAO,CAAC,kBAAkB,QAAQ,KAAK,CAAC,QAAQ,IAAI,QAAQ;AAC9D;AAEA,IAAM,0BAA0B,CAC9B,YACA,cACA,WACA,kBACW;AACX,QAAM,SAAS,WAAW;AAC1B,MAAI,WAAW,EAAG,QAAO;AAEzB,MAAI,QAAQ;AACZ,MAAI,WAAW;AAEf,SAAO,WAAW,QAAQ;AACxB,aAAS;AAET,QAAI,QAAQ,EAAG,SAAQ,SAAS;AAChC,QAAI,SAAS,OAAQ,SAAQ;AAE7B,UAAM,WAAW,WAAW,KAAK;AACjC,QAAI,YAAY,CAAC,gBAAgB,SAAS,IAAI,aAAa,GAAG;AAC5D,aAAO;AAAA,IACT;AAEA;AAAA,EACF;AAEA,SAAO;AACT;AAQA,IAAM,WAAoC,CAAC,EAAE,QAAQ,WAAW,SAAS,MAAM;AAC7E,QAAM,WAAW,MAAoD;AACnE,QAAI,YAAY,OAAO,UAAU,YAAY;AAC3C,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,OAAO,UAAU;AACnB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,OAAO,UAAU,eAAe;AAClC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AACA,QAAI,OAAO,UAAU,eAAe;AAClC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,aAAa,OAAO;AACnC,QAAM,WAAW,YAAY,OAAO,UAAU;AAC9C,QAAM,mBAAmB,OAAO,WAAW,SAAS;AAEpD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAa;AAAA,MACb,aAAa,YAAY,mBAAmB,SAAS,GAAG;AAAA,MACxD,aAAY;AAAA,MACZ,gBAAgB;AAAA,MAEhB,+BAAC,QAAK,OAAO,SAAS,GAAG,MAAM,MAAM,QAAQ,UAAU,OACpD;AAAA;AAAA,QACA,OAAO,SACN,iCACE;AAAA,8BAAC,QAAK,iBAAgB,QAAO,iBAAG;AAAA,UAAQ;AAAA,WAC1C;AAAA,QAED,OAAO,aAAa,oBAAC,QAAK,UAAQ,MAAC,qBAAE;AAAA,QACrC,OAAO;AAAA,QAAO;AAAA,SACjB;AAAA;AAAA,EACF;AAEJ;AAWA,IAAM,kBAAkD,CAAC;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,SACE,qBAAC,OAAI,eAAc,UAAS,WAAW,GACrC;AAAA,yBAAC,OAAI,eAAc,OACjB;AAAA,0BAAC,QAAK,UAAU,UAAW,mBAAS,aAAY;AAAA,MAC/C,SAAS,YACR,qBAAC,QAAK,OAAO,WAAW,SAAS,OAAO,UAAU,UAC/C;AAAA;AAAA,QACA;AAAA,SACH;AAAA,OAEJ;AAAA,IAEA,oBAAC,OAAI,eAAc,OAAM,UAAS,QAAO,WAAW,GACjD,kBAAQ,IAAI,CAAC,QAAQ,UACpB,qBAAC,OAAoB,eAAc,UACjC;AAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAW,aAAa,UAAU,sBAAsB,CAAC;AAAA,UACzD;AAAA;AAAA,MACF;AAAA,MACC,oBAAoB,OAAO,eAAe,CAAC,YAC1C,oBAAC,OAAI,YAAY,GAAG,cAAc,GAChC,8BAAC,QAAK,UAAQ,MAAC,MAAK,gBACjB,iBAAO,aACV,GACF;AAAA,SAXM,OAAO,EAajB,CACD,GACH;AAAA,KACF;AAEJ;AAEO,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,sBAAsB,WAAW,IAAI,CAAC,cAAc;AAAA,IACxD,GAAG;AAAA,IACH,eAAe,YAAY,SAAS,SAAS,UAAU;AAAA,EACzD,EAAE;AAEF,QAAM,aAAa,oBAAoB,UAAU;AACjD,QAAM,iBAAiB,YAAY,iBAAiB,CAAC;AACrD,QAAM,gBAAgB,aAAa,gBAAgB,WAAW,IAAI,UAAU,IAAI;AAEhF,YAAU,MAAM;AACd,QAAI,CAAC,WAAY;AAEjB,UAAM,SAAS,eAAe,SAAS;AACvC,QAAI,aAAa,QAAQ;AACvB,YAAM,SAAS,KAAK,IAAI,GAAG,MAAM;AACjC,oBAAc,YAAY,MAAM;AAAA,IAClC,WAAW,eAAe,UAAU,GAAG,UAAU,YAAY;AAC3D,YAAM,WAAW,qBAAqB,cAAc;AACpD,UAAI,aAAa,YAAY;AAC3B,sBAAc,YAAY,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,gBAAgB,YAAY,eAAe,UAAU,CAAC;AAEtE,YAAU,MAAM;AACd,QAAI,cAAc,eAAe;AAC/B,YAAM,gBAAgB,wBAAwB,qBAAqB,YAAY,GAAG,UAAU;AAC5F,UAAI,kBAAkB,YAAY;AAChC,cAAM,gBAAgB,oBAAoB,aAAa,GAAG,iBAAiB,CAAC;AAC5E,cAAM,SAAS,qBAAqB,aAAa;AACjD,sBAAc,eAAe,MAAM;AAAA,MACrC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,eAAe,YAAY,qBAAqB,YAAY,aAAa,CAAC;AAE1F;AAAA,IACE;AAAA,MACE,CACE,OACA,QAQG;AACH,YAAI,IAAI,OAAO,IAAI,OAAO;AACxB,+BAAqB;AACrB;AAAA,QACF;AAEA,YAAI,IAAI,OAAO,CAAC,IAAI,OAAO;AACzB,gBAAM,cAAc;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,gBAAgB,YAAY;AAC9B,kBAAM,gBAAgB,oBAAoB,WAAW,GAAG,iBAAiB,CAAC;AAC1E,kBAAM,SAAS,qBAAqB,aAAa;AACjD,0BAAc,aAAa,MAAM;AAAA,UACnC;AACA;AAAA,QACF;AAEA,YAAI,UAAU,OAAO,UAAU,KAAK;AAClC,+BAAqB;AACrB;AAAA,QACF;AAEA,YAAI,UAAU,KAAK;AACjB,cAAI,cAAe;AACnB,gBAAM,gBAAgB,eAAe,UAAU;AAC/C,cAAI,iBAAiB,cAAc,UAAU,YAAY;AACvD,qBAAS,WAAW,IAAI,cAAc,EAAE;AAAA,UAC1C;AACA;AAAA,QACF;AAEA,cAAM,SAAS,IAAI,aAAa,UAAU;AAC1C,cAAM,UAAU,IAAI,cAAc,UAAU;AAC5C,cAAM,OAAO,IAAI,WAAW,UAAU;AACtC,cAAM,SAAS,IAAI,aAAa,UAAU;AAE1C,YAAI,QAAQ;AACV,cAAI,cAAe;AACnB,gBAAM,SAAS,oBAAoB,gBAAgB,YAAY,IAAI,IAAI;AACvE,wBAAc,YAAY,MAAM;AAAA,QAClC,WAAW,SAAS;AAClB,cAAI,cAAe;AACnB,gBAAM,SAAS,oBAAoB,gBAAgB,YAAY,GAAG,IAAI;AACtE,wBAAc,YAAY,MAAM;AAAA,QAClC,WAAW,MAAM;AACf,gBAAM,SAAS,wBAAwB,qBAAqB,YAAY,IAAI,UAAU;AACtF,gBAAM,gBAAgB,oBAAoB,MAAM,GAAG,iBAAiB,CAAC;AACrE,cAAI,SAAS,KAAK,IAAI,YAAY,cAAc,SAAS,CAAC;AAC1D,cAAI,cAAc,MAAM,GAAG,UAAU,YAAY;AAC/C,qBAAS,qBAAqB,aAAa;AAAA,UAC7C;AACA,wBAAc,QAAQ,MAAM;AAAA,QAC9B,WAAW,QAAQ;AACjB,gBAAM,SAAS,wBAAwB,qBAAqB,YAAY,GAAG,UAAU;AACrF,gBAAM,gBAAgB,oBAAoB,MAAM,GAAG,iBAAiB,CAAC;AACrE,cAAI,SAAS,KAAK,IAAI,YAAY,cAAc,SAAS,CAAC;AAC1D,cAAI,cAAc,MAAM,GAAG,UAAU,YAAY;AAC/C,qBAAS,qBAAqB,aAAa;AAAA,UAC7C;AACA,wBAAc,QAAQ,MAAM;AAAA,QAC9B;AAAA,MACF;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,WAAW,WAAW,GAAG;AAC3B,WACE,oBAAC,OAAI,eAAc,UACjB,8BAAC,QAAK,UAAQ,MAAC,uCAAyB,GAC1C;AAAA,EAEJ;AAEA,SACE,oBAAC,OAAI,eAAc,UAChB,8BAAoB,IAAI,CAAC,UAAU,aAAa;AAC/C,UAAM,WAAW,gBAAgB,SAAS,IAAI,UAAU;AAExD,WACE;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA,SAAS,SAAS;AAAA,QAClB;AAAA,QACA,WAAW,aAAa;AAAA,QACxB,oBAAoB;AAAA,QACpB;AAAA;AAAA,MANK,SAAS;AAAA,IAOhB;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
init_esm_shims
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AWKZ5BDL.js";
|
|
5
5
|
|
|
6
6
|
// src/cli/components/wizard/section-progress.tsx
|
|
7
7
|
init_esm_shims();
|
|
@@ -42,4 +42,4 @@ var SectionProgress = ({
|
|
|
42
42
|
export {
|
|
43
43
|
SectionProgress
|
|
44
44
|
};
|
|
45
|
-
//# sourceMappingURL=chunk-
|
|
45
|
+
//# sourceMappingURL=chunk-F4RD5FYM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/components/wizard/section-progress.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\n\nexport type SectionProgressProps = {\n label: string;\n current: string;\n /** 1-based */\n index: number;\n total: number;\n next?: string;\n};\n\nexport const SectionProgress: React.FC<SectionProgressProps> = ({\n label,\n current,\n index,\n total,\n next,\n}) => {\n const isLast = index === total;\n const rightText = isLast ? \"Last step\" : `Next: ${next}`;\n\n return (\n <Box flexDirection=\"row\" justifyContent=\"space-between\" marginBottom={1}>\n <Text>\n <Text bold>{label}:</Text> <Text color=\"cyan\">{current}</Text>\n </Text>\n <Text>\n <Text dimColor>\n [{index}/{total}]\n </Text>{\" \"}\n <Text dimColor={isLast}>{rightText}</Text>\n </Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAwBlB,SAA2B,KAA3B;AAbD,IAAM,kBAAkD,CAAC;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,SAAS,UAAU;AACzB,QAAM,YAAY,SAAS,cAAc,SAAS,IAAI;AAEtD,SACE,qBAAC,OAAI,eAAc,OAAM,gBAAe,iBAAgB,cAAc,GACpE;AAAA,yBAAC,QACC;AAAA,2BAAC,QAAK,MAAI,MAAE;AAAA;AAAA,QAAM;AAAA,SAAC;AAAA,MAAO;AAAA,MAAC,oBAAC,QAAK,OAAM,QAAQ,mBAAQ;AAAA,OACzD;AAAA,IACA,qBAAC,QACC;AAAA,2BAAC,QAAK,UAAQ,MAAC;AAAA;AAAA,QACX;AAAA,QAAM;AAAA,QAAE;AAAA,QAAM;AAAA,SAClB;AAAA,MAAQ;AAAA,MACR,oBAAC,QAAK,UAAU,QAAS,qBAAU;AAAA,OACrC;AAAA,KACF;AAEJ;","names":[]}
|