@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/cli/components/common/spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { Spinner as InkSpinner } from \"@inkjs/ui\";\n\
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/components/common/spinner.tsx"],"sourcesContent":["import React from \"react\";\nimport { Spinner as InkSpinner } from \"@inkjs/ui\";\n\ntype SpinnerProps = {\n label: string;\n};\n\nexport const Spinner: React.FC<SpinnerProps> = ({ label }) => <InkSpinner label={label} />;\n"],"mappings":";;;;;;AAAA;AACA,SAAS,WAAW,kBAAkB;AAMwB;AAAvD,IAAM,UAAkC,CAAC,EAAE,MAAM,MAAM,oBAAC,cAAW,OAAc;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
SkillSearch
|
|
4
|
-
} from "../../chunk-
|
|
5
|
-
import "../../chunk-
|
|
6
|
-
import "../../chunk-
|
|
4
|
+
} from "../../chunk-GGFOD5PK.js";
|
|
5
|
+
import "../../chunk-UNN7523L.js";
|
|
6
|
+
import "../../chunk-AWKZ5BDL.js";
|
|
7
7
|
export {
|
|
8
8
|
SkillSearch
|
|
9
9
|
};
|
|
@@ -8,23 +8,23 @@ import {
|
|
|
8
8
|
RENDER_DELAY_MS,
|
|
9
9
|
TAB,
|
|
10
10
|
delay
|
|
11
|
-
} from "../../chunk-
|
|
11
|
+
} from "../../chunk-DBRUQQUF.js";
|
|
12
12
|
import {
|
|
13
13
|
render
|
|
14
|
-
} from "../../chunk-
|
|
14
|
+
} from "../../chunk-REJGRCVQ.js";
|
|
15
15
|
import {
|
|
16
16
|
afterEach,
|
|
17
17
|
describe,
|
|
18
18
|
globalExpect,
|
|
19
19
|
it,
|
|
20
20
|
vi
|
|
21
|
-
} from "../../chunk-
|
|
21
|
+
} from "../../chunk-QR2EBWL2.js";
|
|
22
22
|
import {
|
|
23
23
|
CategoryGrid
|
|
24
|
-
} from "../../chunk-
|
|
24
|
+
} from "../../chunk-ETCVEV3S.js";
|
|
25
25
|
import {
|
|
26
26
|
init_esm_shims
|
|
27
|
-
} from "../../chunk-
|
|
27
|
+
} from "../../chunk-AWKZ5BDL.js";
|
|
28
28
|
|
|
29
29
|
// src/cli/components/wizard/category-grid.test.tsx
|
|
30
30
|
init_esm_shims();
|
|
@@ -36,9 +36,9 @@ var createOption = (id, label, overrides = {}) => ({
|
|
|
36
36
|
selected: false,
|
|
37
37
|
...overrides
|
|
38
38
|
});
|
|
39
|
-
var createCategory = (id,
|
|
39
|
+
var createCategory = (id, displayName, options, overrides = {}) => ({
|
|
40
40
|
id,
|
|
41
|
-
|
|
41
|
+
displayName,
|
|
42
42
|
required: false,
|
|
43
43
|
exclusive: true,
|
|
44
44
|
options,
|
|
@@ -49,13 +49,13 @@ var defaultCategories = [
|
|
|
49
49
|
"framework",
|
|
50
50
|
"Framework",
|
|
51
51
|
[
|
|
52
|
-
createOption("react", "React", {
|
|
52
|
+
createOption("web-test-react", "React", {
|
|
53
53
|
state: "recommended",
|
|
54
54
|
stateReason: "Popular choice"
|
|
55
55
|
}),
|
|
56
|
-
createOption("vue", "Vue"),
|
|
57
|
-
createOption("angular", "Angular"),
|
|
58
|
-
createOption("svelte", "Svelte")
|
|
56
|
+
createOption("web-test-vue", "Vue"),
|
|
57
|
+
createOption("web-test-angular", "Angular"),
|
|
58
|
+
createOption("web-test-svelte", "Svelte")
|
|
59
59
|
],
|
|
60
60
|
{ required: true }
|
|
61
61
|
),
|
|
@@ -63,43 +63,43 @@ var defaultCategories = [
|
|
|
63
63
|
"styling",
|
|
64
64
|
"Styling",
|
|
65
65
|
[
|
|
66
|
-
createOption("scss-mod", "SCSS Modules", { selected: true }),
|
|
67
|
-
createOption("tailwind", "Tailwind", { state: "recommended" }),
|
|
68
|
-
createOption("styled", "Styled Components"),
|
|
69
|
-
createOption("vanilla", "Vanilla CSS")
|
|
66
|
+
createOption("web-scss-mod", "SCSS Modules", { selected: true }),
|
|
67
|
+
createOption("web-test-tailwind", "Tailwind", { state: "recommended" }),
|
|
68
|
+
createOption("web-test-styled", "Styled Components"),
|
|
69
|
+
createOption("web-test-vanilla", "Vanilla CSS")
|
|
70
70
|
],
|
|
71
71
|
{ required: true }
|
|
72
72
|
),
|
|
73
73
|
createCategory("client-state", "Client State", [
|
|
74
|
-
createOption("zustand", "Zustand", { state: "recommended" }),
|
|
75
|
-
createOption("jotai", "Jotai"),
|
|
76
|
-
createOption("redux", "Redux", {
|
|
74
|
+
createOption("web-test-zustand", "Zustand", { state: "recommended" }),
|
|
75
|
+
createOption("web-test-jotai", "Jotai"),
|
|
76
|
+
createOption("web-test-redux", "Redux", {
|
|
77
77
|
state: "discouraged",
|
|
78
78
|
stateReason: "Complex for most apps"
|
|
79
79
|
}),
|
|
80
|
-
createOption("mobx", "MobX")
|
|
80
|
+
createOption("web-test-mobx", "MobX")
|
|
81
81
|
]),
|
|
82
82
|
createCategory("server-state", "Server State", [
|
|
83
|
-
createOption("react-query", "React Query", { selected: true }),
|
|
84
|
-
createOption("swr", "SWR"),
|
|
85
|
-
createOption("apollo", "Apollo")
|
|
83
|
+
createOption("web-react-query", "React Query", { selected: true }),
|
|
84
|
+
createOption("web-test-swr", "SWR"),
|
|
85
|
+
createOption("web-test-apollo", "Apollo")
|
|
86
86
|
]),
|
|
87
|
-
createCategory("analytics", "Analytics", [createOption("posthog", "PostHog")])
|
|
87
|
+
createCategory("analytics", "Analytics", [createOption("web-test-posthog", "PostHog")])
|
|
88
88
|
];
|
|
89
89
|
var categoriesWithFramework = [
|
|
90
90
|
createCategory(
|
|
91
91
|
"framework",
|
|
92
92
|
"Framework",
|
|
93
93
|
[
|
|
94
|
-
createOption("react", "React", {
|
|
94
|
+
createOption("web-test-react", "React", {
|
|
95
95
|
state: "recommended",
|
|
96
96
|
stateReason: "Popular choice",
|
|
97
97
|
selected: true
|
|
98
98
|
// Framework selected
|
|
99
99
|
}),
|
|
100
|
-
createOption("vue", "Vue"),
|
|
101
|
-
createOption("angular", "Angular"),
|
|
102
|
-
createOption("svelte", "Svelte")
|
|
100
|
+
createOption("web-test-vue", "Vue"),
|
|
101
|
+
createOption("web-test-angular", "Angular"),
|
|
102
|
+
createOption("web-test-svelte", "Svelte")
|
|
103
103
|
],
|
|
104
104
|
{ required: true }
|
|
105
105
|
),
|
|
@@ -107,18 +107,18 @@ var categoriesWithFramework = [
|
|
|
107
107
|
"styling",
|
|
108
108
|
"Styling",
|
|
109
109
|
[
|
|
110
|
-
createOption("scss-mod", "SCSS Modules"),
|
|
111
|
-
createOption("tailwind", "Tailwind", { state: "recommended" }),
|
|
112
|
-
createOption("styled", "Styled Components"),
|
|
113
|
-
createOption("vanilla", "Vanilla CSS")
|
|
110
|
+
createOption("web-scss-mod", "SCSS Modules"),
|
|
111
|
+
createOption("web-test-tailwind", "Tailwind", { state: "recommended" }),
|
|
112
|
+
createOption("web-test-styled", "Styled Components"),
|
|
113
|
+
createOption("web-test-vanilla", "Vanilla CSS")
|
|
114
114
|
],
|
|
115
115
|
{ required: true }
|
|
116
116
|
),
|
|
117
117
|
createCategory("client-state", "Client State", [
|
|
118
|
-
createOption("zustand", "Zustand", { state: "recommended" }),
|
|
119
|
-
createOption("jotai", "Jotai"),
|
|
120
|
-
createOption("redux", "Redux", { state: "discouraged" }),
|
|
121
|
-
createOption("mobx", "MobX")
|
|
118
|
+
createOption("web-test-zustand", "Zustand", { state: "recommended" }),
|
|
119
|
+
createOption("web-test-jotai", "Jotai"),
|
|
120
|
+
createOption("web-test-redux", "Redux", { state: "discouraged" }),
|
|
121
|
+
createOption("web-test-mobx", "MobX")
|
|
122
122
|
])
|
|
123
123
|
];
|
|
124
124
|
var defaultProps = {
|
|
@@ -139,7 +139,6 @@ describe("CategoryGrid component", () => {
|
|
|
139
139
|
afterEach(() => {
|
|
140
140
|
cleanup?.();
|
|
141
141
|
cleanup = void 0;
|
|
142
|
-
vi.clearAllMocks();
|
|
143
142
|
});
|
|
144
143
|
describe("rendering", () => {
|
|
145
144
|
it("should render all categories as sections", () => {
|
|
@@ -217,9 +216,9 @@ describe("CategoryGrid component", () => {
|
|
|
217
216
|
});
|
|
218
217
|
it("should show disabled options with dimmed styling", () => {
|
|
219
218
|
const categories = [
|
|
220
|
-
createCategory("
|
|
221
|
-
createOption("opt1", "Option 1"),
|
|
222
|
-
createOption("opt2", "Option 2", { state: "disabled" })
|
|
219
|
+
createCategory("testing", "Test", [
|
|
220
|
+
createOption("web-test-opt1", "Option 1"),
|
|
221
|
+
createOption("web-test-opt2", "Option 2", { state: "disabled" })
|
|
223
222
|
])
|
|
224
223
|
];
|
|
225
224
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
@@ -250,10 +249,10 @@ describe("CategoryGrid component", () => {
|
|
|
250
249
|
it("should not lock any sections when no framework category exists", () => {
|
|
251
250
|
const categoriesNoFramework = [
|
|
252
251
|
createCategory("styling", "Styling", [
|
|
253
|
-
createOption("scss", "SCSS"),
|
|
254
|
-
createOption("tailwind", "Tailwind")
|
|
252
|
+
createOption("web-test-scss", "SCSS"),
|
|
253
|
+
createOption("web-test-tailwind", "Tailwind")
|
|
255
254
|
]),
|
|
256
|
-
createCategory("state", "State", [createOption("zustand", "Zustand")])
|
|
255
|
+
createCategory("client-state", "State", [createOption("web-test-zustand", "Zustand")])
|
|
257
256
|
];
|
|
258
257
|
const { lastFrame, unmount } = renderGrid({
|
|
259
258
|
categories: categoriesNoFramework
|
|
@@ -468,7 +467,7 @@ describe("CategoryGrid component", () => {
|
|
|
468
467
|
await delay(RENDER_DELAY_MS);
|
|
469
468
|
await stdin.write(" ");
|
|
470
469
|
await delay(INPUT_DELAY_MS);
|
|
471
|
-
globalExpect(onToggle).toHaveBeenCalledWith("framework", "vue");
|
|
470
|
+
globalExpect(onToggle).toHaveBeenCalledWith("framework", "web-test-vue");
|
|
472
471
|
});
|
|
473
472
|
it("should call onToggle when pressing space on a selected option", async () => {
|
|
474
473
|
const onToggle = vi.fn();
|
|
@@ -476,7 +475,10 @@ describe("CategoryGrid component", () => {
|
|
|
476
475
|
createCategory(
|
|
477
476
|
"framework",
|
|
478
477
|
"Framework",
|
|
479
|
-
[
|
|
478
|
+
[
|
|
479
|
+
createOption("web-test-react", "React", { selected: true }),
|
|
480
|
+
createOption("web-test-vue", "Vue")
|
|
481
|
+
],
|
|
480
482
|
{ required: true }
|
|
481
483
|
)
|
|
482
484
|
];
|
|
@@ -492,14 +494,14 @@ describe("CategoryGrid component", () => {
|
|
|
492
494
|
await delay(RENDER_DELAY_MS);
|
|
493
495
|
await stdin.write(" ");
|
|
494
496
|
await delay(INPUT_DELAY_MS);
|
|
495
|
-
globalExpect(onToggle).toHaveBeenCalledWith("framework", "react");
|
|
497
|
+
globalExpect(onToggle).toHaveBeenCalledWith("framework", "web-test-react");
|
|
496
498
|
});
|
|
497
499
|
it("should NOT call onToggle when pressing space on a disabled option", async () => {
|
|
498
500
|
const onToggle = vi.fn();
|
|
499
501
|
const categories = [
|
|
500
|
-
createCategory("
|
|
501
|
-
createOption("opt1", "Option 1", { state: "disabled" }),
|
|
502
|
-
createOption("opt2", "Option 2")
|
|
502
|
+
createCategory("testing", "Test", [
|
|
503
|
+
createOption("web-test-opt1", "Option 1", { state: "disabled" }),
|
|
504
|
+
createOption("web-test-opt2", "Option 2")
|
|
503
505
|
])
|
|
504
506
|
];
|
|
505
507
|
const { stdin, unmount } = renderGrid({
|
|
@@ -535,10 +537,10 @@ describe("CategoryGrid component", () => {
|
|
|
535
537
|
it("should skip disabled options when navigating right", async () => {
|
|
536
538
|
const onFocusChange = vi.fn();
|
|
537
539
|
const categories = [
|
|
538
|
-
createCategory("
|
|
539
|
-
createOption("opt1", "Option 1"),
|
|
540
|
-
createOption("opt2", "Option 2", { state: "disabled" }),
|
|
541
|
-
createOption("opt3", "Option 3")
|
|
540
|
+
createCategory("testing", "Test", [
|
|
541
|
+
createOption("web-test-opt1", "Option 1"),
|
|
542
|
+
createOption("web-test-opt2", "Option 2", { state: "disabled" }),
|
|
543
|
+
createOption("web-test-opt3", "Option 3")
|
|
542
544
|
])
|
|
543
545
|
];
|
|
544
546
|
const { stdin, unmount } = renderGrid({
|
|
@@ -557,10 +559,10 @@ describe("CategoryGrid component", () => {
|
|
|
557
559
|
it("should skip disabled options when navigating left", async () => {
|
|
558
560
|
const onFocusChange = vi.fn();
|
|
559
561
|
const categories = [
|
|
560
|
-
createCategory("
|
|
561
|
-
createOption("opt1", "Option 1"),
|
|
562
|
-
createOption("opt2", "Option 2", { state: "disabled" }),
|
|
563
|
-
createOption("opt3", "Option 3")
|
|
562
|
+
createCategory("testing", "Test", [
|
|
563
|
+
createOption("web-test-opt1", "Option 1"),
|
|
564
|
+
createOption("web-test-opt2", "Option 2", { state: "disabled" }),
|
|
565
|
+
createOption("web-test-opt3", "Option 3")
|
|
564
566
|
])
|
|
565
567
|
];
|
|
566
568
|
const { stdin, unmount } = renderGrid({
|
|
@@ -580,9 +582,9 @@ describe("CategoryGrid component", () => {
|
|
|
580
582
|
it("should handle all options disabled in a row", async () => {
|
|
581
583
|
const onFocusChange = vi.fn();
|
|
582
584
|
const categories = [
|
|
583
|
-
createCategory("
|
|
584
|
-
createOption("opt1", "Option 1", { state: "disabled" }),
|
|
585
|
-
createOption("opt2", "Option 2", { state: "disabled" })
|
|
585
|
+
createCategory("testing", "Test", [
|
|
586
|
+
createOption("web-test-opt1", "Option 1", { state: "disabled" }),
|
|
587
|
+
createOption("web-test-opt2", "Option 2", { state: "disabled" })
|
|
586
588
|
])
|
|
587
589
|
];
|
|
588
590
|
const { stdin, unmount } = renderGrid({
|
|
@@ -694,7 +696,7 @@ describe("CategoryGrid component", () => {
|
|
|
694
696
|
describe("edge cases", () => {
|
|
695
697
|
it("should handle single category", () => {
|
|
696
698
|
const categories = [
|
|
697
|
-
createCategory("
|
|
699
|
+
createCategory("forms", "Single Category", [createOption("web-test-opt1", "Option 1")])
|
|
698
700
|
];
|
|
699
701
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
700
702
|
cleanup = unmount;
|
|
@@ -704,7 +706,7 @@ describe("CategoryGrid component", () => {
|
|
|
704
706
|
});
|
|
705
707
|
it("should handle single option in category", () => {
|
|
706
708
|
const categories = [
|
|
707
|
-
createCategory("
|
|
709
|
+
createCategory("forms", "Single", [createOption("web-test-only", "Only Option")])
|
|
708
710
|
];
|
|
709
711
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
710
712
|
cleanup = unmount;
|
|
@@ -712,8 +714,11 @@ describe("CategoryGrid component", () => {
|
|
|
712
714
|
globalExpect(output).toContain("Only Option");
|
|
713
715
|
});
|
|
714
716
|
it("should handle category with many options (flows naturally)", () => {
|
|
715
|
-
const options = Array.from(
|
|
716
|
-
|
|
717
|
+
const options = Array.from(
|
|
718
|
+
{ length: 10 },
|
|
719
|
+
(_, i) => createOption(`web-test-opt${i}`, `Option ${i}`)
|
|
720
|
+
);
|
|
721
|
+
const categories = [createCategory("mocking", "Many Options", options)];
|
|
717
722
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
718
723
|
cleanup = unmount;
|
|
719
724
|
const output = lastFrame();
|
|
@@ -723,9 +728,9 @@ describe("CategoryGrid component", () => {
|
|
|
723
728
|
});
|
|
724
729
|
it("should handle long option labels", () => {
|
|
725
730
|
const categories = [
|
|
726
|
-
createCategory("
|
|
727
|
-
createOption("long1", "Very Long Option Name"),
|
|
728
|
-
createOption("long2", "Another Long Name")
|
|
731
|
+
createCategory("i18n", "Long Labels", [
|
|
732
|
+
createOption("web-test-long1", "Very Long Option Name"),
|
|
733
|
+
createOption("web-test-long2", "Another Long Name")
|
|
729
734
|
])
|
|
730
735
|
];
|
|
731
736
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
@@ -735,15 +740,15 @@ describe("CategoryGrid component", () => {
|
|
|
735
740
|
});
|
|
736
741
|
it("should handle categories with different option counts", () => {
|
|
737
742
|
const categories = [
|
|
738
|
-
createCategory("
|
|
739
|
-
createOption("opt1", "Option 1"),
|
|
740
|
-
createOption("opt2", "Option 2")
|
|
743
|
+
createCategory("framework", "Category 1", [
|
|
744
|
+
createOption("web-test-opt1", "Option 1"),
|
|
745
|
+
createOption("web-test-opt2", "Option 2")
|
|
741
746
|
]),
|
|
742
|
-
createCategory("
|
|
743
|
-
createCategory("
|
|
744
|
-
createOption("opt4", "Option 4"),
|
|
745
|
-
createOption("opt5", "Option 5"),
|
|
746
|
-
createOption("opt6", "Option 6")
|
|
747
|
+
createCategory("styling", "Category 2", [createOption("web-test-opt3", "Option 3")]),
|
|
748
|
+
createCategory("client-state", "Category 3", [
|
|
749
|
+
createOption("web-test-opt4", "Option 4"),
|
|
750
|
+
createOption("web-test-opt5", "Option 5"),
|
|
751
|
+
createOption("web-test-opt6", "Option 6")
|
|
747
752
|
])
|
|
748
753
|
];
|
|
749
754
|
const { lastFrame, unmount } = renderGrid({ categories });
|
|
@@ -762,14 +767,14 @@ describe("CategoryGrid component", () => {
|
|
|
762
767
|
"framework",
|
|
763
768
|
"Framework",
|
|
764
769
|
[
|
|
765
|
-
createOption("opt1", "Option 1", { selected: true }),
|
|
770
|
+
createOption("web-test-opt1", "Option 1", { selected: true }),
|
|
766
771
|
// Framework selected
|
|
767
|
-
createOption("opt2", "Option 2"),
|
|
768
|
-
createOption("opt3", "Option 3")
|
|
772
|
+
createOption("web-test-opt2", "Option 2"),
|
|
773
|
+
createOption("web-test-opt3", "Option 3")
|
|
769
774
|
],
|
|
770
775
|
{ required: true }
|
|
771
776
|
),
|
|
772
|
-
createCategory("
|
|
777
|
+
createCategory("styling", "Category 2", [createOption("web-test-opt4", "Option 4")])
|
|
773
778
|
];
|
|
774
779
|
const { stdin, unmount } = renderGrid({
|
|
775
780
|
categories,
|
|
@@ -785,5 +790,54 @@ describe("CategoryGrid component", () => {
|
|
|
785
790
|
globalExpect(onFocusChange).toHaveBeenCalledWith(1, 0);
|
|
786
791
|
});
|
|
787
792
|
});
|
|
793
|
+
describe("installed indicator", () => {
|
|
794
|
+
it("should show checkmark for installed skill", () => {
|
|
795
|
+
const categories = [
|
|
796
|
+
createCategory("forms", "Forms", [
|
|
797
|
+
createOption("web-test-opt1", "Option 1", { installed: true })
|
|
798
|
+
])
|
|
799
|
+
];
|
|
800
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
801
|
+
cleanup = unmount;
|
|
802
|
+
const output = lastFrame();
|
|
803
|
+
globalExpect(output).toContain("\u2713");
|
|
804
|
+
globalExpect(output).toContain("Option 1");
|
|
805
|
+
});
|
|
806
|
+
it("should NOT show checkmark for non-installed skill", () => {
|
|
807
|
+
const categories = [
|
|
808
|
+
createCategory("forms", "Forms", [createOption("web-test-opt1", "Option 1")])
|
|
809
|
+
];
|
|
810
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
811
|
+
cleanup = unmount;
|
|
812
|
+
const output = lastFrame();
|
|
813
|
+
globalExpect(output).not.toContain("\u2713");
|
|
814
|
+
globalExpect(output).toContain("Option 1");
|
|
815
|
+
});
|
|
816
|
+
it("should show both checkmark and cyan styling when installed and selected", () => {
|
|
817
|
+
const categories = [
|
|
818
|
+
createCategory("forms", "Forms", [
|
|
819
|
+
createOption("web-test-opt1", "Option 1", { installed: true, selected: true })
|
|
820
|
+
])
|
|
821
|
+
];
|
|
822
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
823
|
+
cleanup = unmount;
|
|
824
|
+
const output = lastFrame();
|
|
825
|
+
globalExpect(output).toContain("\u2713");
|
|
826
|
+
globalExpect(output).toContain("Option 1");
|
|
827
|
+
});
|
|
828
|
+
it("should show both L badge and checkmark when local and installed", () => {
|
|
829
|
+
const categories = [
|
|
830
|
+
createCategory("forms", "Forms", [
|
|
831
|
+
createOption("web-test-opt1", "Option 1", { local: true, installed: true })
|
|
832
|
+
])
|
|
833
|
+
];
|
|
834
|
+
const { lastFrame, unmount } = renderGrid({ categories });
|
|
835
|
+
cleanup = unmount;
|
|
836
|
+
const output = lastFrame();
|
|
837
|
+
globalExpect(output).toContain("L");
|
|
838
|
+
globalExpect(output).toContain("\u2713");
|
|
839
|
+
globalExpect(output).toContain("Option 1");
|
|
840
|
+
});
|
|
841
|
+
});
|
|
788
842
|
});
|
|
789
843
|
//# sourceMappingURL=category-grid.test.js.map
|