centy 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/add/asset.d.ts.map +1 -1
- package/dist/commands/add/asset.js +0 -1
- package/dist/commands/add/asset.js.map +1 -1
- package/dist/commands/get/asset.d.ts.map +1 -1
- package/dist/commands/get/asset.js +0 -1
- package/dist/commands/get/asset.js.map +1 -1
- package/dist/commands/register/project.d.ts +3 -0
- package/dist/commands/register/project.d.ts.map +1 -1
- package/dist/commands/register/project.js +29 -3
- package/dist/commands/register/project.js.map +1 -1
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +49 -10
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/components/domain/DocCreate.d.ts +2 -0
- package/dist/tui/components/domain/DocCreate.d.ts.map +1 -0
- package/dist/tui/components/domain/DocCreate.js +118 -0
- package/dist/tui/components/domain/DocCreate.js.map +1 -0
- package/dist/tui/components/domain/IssueCreate.d.ts +2 -0
- package/dist/tui/components/domain/IssueCreate.d.ts.map +1 -0
- package/dist/tui/components/domain/IssueCreate.js +167 -0
- package/dist/tui/components/domain/IssueCreate.js.map +1 -0
- package/dist/tui/components/domain/IssueDetail.d.ts.map +1 -1
- package/dist/tui/components/domain/IssueDetail.js +1 -1
- package/dist/tui/components/domain/IssueDetail.js.map +1 -1
- package/dist/tui/components/domain/IssueList.d.ts.map +1 -1
- package/dist/tui/components/domain/IssueList.js +100 -14
- package/dist/tui/components/domain/IssueList.js.map +1 -1
- package/dist/tui/components/domain/ProjectCreate.d.ts +2 -0
- package/dist/tui/components/domain/ProjectCreate.d.ts.map +1 -0
- package/dist/tui/components/domain/ProjectCreate.js +61 -0
- package/dist/tui/components/domain/ProjectCreate.js.map +1 -0
- package/dist/tui/components/domain/ProjectList.d.ts.map +1 -1
- package/dist/tui/components/domain/ProjectList.js +4 -1
- package/dist/tui/components/domain/ProjectList.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +4 -0
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/services/daemon-service.d.ts +15 -1
- package/dist/tui/services/daemon-service.d.ts.map +1 -1
- package/dist/tui/services/daemon-service.js +76 -0
- package/dist/tui/services/daemon-service.js.map +1 -1
- package/dist/tui/state/app-state.d.ts +14 -1
- package/dist/tui/state/app-state.d.ts.map +1 -1
- package/dist/tui/state/app-state.js +16 -1
- package/dist/tui/state/app-state.js.map +1 -1
- package/dist/tui/types/views.d.ts +1 -1
- package/dist/tui/types/views.d.ts.map +1 -1
- package/dist/tui/types/views.js +1 -0
- package/dist/tui/types/views.js.map +1 -1
- package/dist/tui/utils/local-config.d.ts +14 -0
- package/dist/tui/utils/local-config.d.ts.map +1 -0
- package/dist/tui/utils/local-config.js +54 -0
- package/dist/tui/utils/local-config.js.map +1 -0
- package/oclif.manifest.json +57 -48
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/commands/add/asset.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAkD;IAE7E,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;;;MAcpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/commands/add/asset.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAkD;IAE7E,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;;;MAcpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA2ClC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/commands/add/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,+CAA+C,CAAA;IAE7E,MAAM,CAAU,QAAQ,GAAG;QACzB,sDAAsD;QACtD,kDAAkD;QAClD,qEAAqE;KACtE,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,mDAAmD;SACjE,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kDAAkD;YAC/D,OAAO,EAAE,KAAK;SACf,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;YACjB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iDAAiD;SAC/D,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC7D,CAAC;QAED,IAAI,QAAgB,CAAA;QACpB,IAAI,CAAC;YACH,
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/commands/add/asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAuC;IAElE,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;;;MAcpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AACA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAuC;IAElE,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;;;MAcpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+BlC"}
|
|
@@ -52,7 +52,6 @@ export default class GetAsset extends Command {
|
|
|
52
52
|
this.error(response.error);
|
|
53
53
|
}
|
|
54
54
|
const outputPath = flags.output ?? args.filename;
|
|
55
|
-
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
56
55
|
await writeFile(outputPath, response.data);
|
|
57
56
|
this.log(`Saved asset to ${outputPath}`);
|
|
58
57
|
this.log(` Size: ${response.asset.size} bytes`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,IAAI,GAAG;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAA;IAElE,MAAM,CAAU,QAAQ,GAAG;QACzB,gFAAgF;QAChF,mEAAmE;KACpE,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4BAA4B;SAC1C,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,oBAAoB;YACjC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+CAA+C;SAC7D,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAA;QAChD,
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../../src/commands/get/asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAE3E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,IAAI,GAAG;QACrB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,oCAAoC,CAAA;IAElE,MAAM,CAAU,QAAQ,GAAG;QACzB,gFAAgF;QAChF,mEAAmE;KACpE,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,4BAA4B;SAC1C,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,oBAAoB;YACjC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+CAA+C;SAC7D,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAErD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;YACpC,WAAW,EAAE,GAAG;YAChB,OAAO,EAAE,KAAK,CAAC,KAAK;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,KAAK,CAAC,MAAM;SACvB,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAA;QAChD,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;QAE1C,IAAI,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAA;QACxC,IAAI,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC"}
|
|
@@ -8,6 +8,9 @@ export default class RegisterProject extends Command {
|
|
|
8
8
|
};
|
|
9
9
|
static description: string;
|
|
10
10
|
static examples: string[];
|
|
11
|
+
static flags: {
|
|
12
|
+
init: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
11
14
|
run(): Promise<void>;
|
|
12
15
|
}
|
|
13
16
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/commands/register/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../../src/commands/register/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAA;AAKlD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,OAAgB,IAAI;;MAKnB;IAED,OAAgB,WAAW,SAAoC;IAE/D,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;MAOpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgClC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Args, Command } from '@oclif/core';
|
|
1
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
2
2
|
import { daemonRegisterProject } from '../../daemon/daemon-register-project.js';
|
|
3
|
+
import { daemonInit } from '../../daemon/daemon-init.js';
|
|
3
4
|
/**
|
|
4
5
|
* Register a project for tracking
|
|
5
6
|
*/
|
|
@@ -14,9 +15,18 @@ export default class RegisterProject extends Command {
|
|
|
14
15
|
static examples = [
|
|
15
16
|
'<%= config.bin %> register project',
|
|
16
17
|
'<%= config.bin %> register project /path/to/project',
|
|
18
|
+
'<%= config.bin %> register project --no-init',
|
|
17
19
|
];
|
|
20
|
+
static flags = {
|
|
21
|
+
init: Flags.boolean({
|
|
22
|
+
char: 'i',
|
|
23
|
+
description: 'Initialize .centy folder if not already initialized',
|
|
24
|
+
default: true,
|
|
25
|
+
allowNo: true,
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
18
28
|
async run() {
|
|
19
|
-
const { args } = await this.parse(RegisterProject);
|
|
29
|
+
const { args, flags } = await this.parse(RegisterProject);
|
|
20
30
|
const projectPath = args.path ?? process.env['CENTY_CWD'] ?? process.cwd();
|
|
21
31
|
const response = await daemonRegisterProject({
|
|
22
32
|
projectPath,
|
|
@@ -26,7 +36,23 @@ export default class RegisterProject extends Command {
|
|
|
26
36
|
}
|
|
27
37
|
this.log(`Registered project "${response.project.name}"`);
|
|
28
38
|
this.log(` Path: ${response.project.path}`);
|
|
29
|
-
|
|
39
|
+
// Auto-initialize if requested and not already initialized
|
|
40
|
+
if (flags.init && !response.project.initialized) {
|
|
41
|
+
const initResponse = await daemonInit({
|
|
42
|
+
projectPath,
|
|
43
|
+
force: true,
|
|
44
|
+
});
|
|
45
|
+
if (!initResponse.success) {
|
|
46
|
+
this.warn(`Failed to initialize: ${initResponse.error}`);
|
|
47
|
+
this.log(` Initialized: no`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
this.log(` Initialized: yes (just now)`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.log(` Initialized: ${response.project.initialized ? 'yes' : 'no'}`);
|
|
55
|
+
}
|
|
30
56
|
}
|
|
31
57
|
}
|
|
32
58
|
//# sourceMappingURL=project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/register/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/register/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,MAAM,CAAU,IAAI,GAAG;QACrB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAA;IAED,MAAM,CAAU,WAAW,GAAG,iCAAiC,CAAA;IAE/D,MAAM,CAAU,QAAQ,GAAG;QACzB,oCAAoC;QACpC,qDAAqD;QACrD,8CAA8C;KAC/C,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,qDAAqD;YAClE,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,IAAI;SACd,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAE1E,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC;YAC3C,WAAW;SACZ,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAE5C,2DAA2D;QAC3D,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC;gBACpC,WAAW;gBACX,KAAK,EAAE,IAAI;aACZ,CAAC,CAAA;YAEF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,yBAAyB,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;gBACxD,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAC3E,CAAC;IACH,CAAC"}
|
package/dist/tui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AAwBA,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,6BAmIvC"}
|
package/dist/tui/App.js
CHANGED
|
@@ -7,8 +7,11 @@ import { StatusBar } from './components/layout/StatusBar.js';
|
|
|
7
7
|
import { ProjectList } from './components/domain/ProjectList.js';
|
|
8
8
|
import { IssueList } from './components/domain/IssueList.js';
|
|
9
9
|
import { IssueDetail } from './components/domain/IssueDetail.js';
|
|
10
|
+
import { IssueCreate } from './components/domain/IssueCreate.js';
|
|
10
11
|
import { DocList } from './components/domain/DocList.js';
|
|
11
12
|
import { DocDetail } from './components/domain/DocDetail.js';
|
|
13
|
+
import { DocCreate } from './components/domain/DocCreate.js';
|
|
14
|
+
import { ProjectCreate } from './components/domain/ProjectCreate.js';
|
|
12
15
|
import { AssetList } from './components/domain/AssetList.js';
|
|
13
16
|
import { ConfigPanel } from './components/domain/ConfigPanel.js';
|
|
14
17
|
import { DaemonPanel } from './components/domain/DaemonPanel.js';
|
|
@@ -23,19 +26,36 @@ export function App({ onExit }) {
|
|
|
23
26
|
const { state } = useAppState();
|
|
24
27
|
// Get visible sidebar views based on project selection
|
|
25
28
|
const visibleViews = useMemo(() => getVisibleSidebarViews(!!state.selectedProjectPath), [state.selectedProjectPath]);
|
|
29
|
+
// Views that handle their own keyboard input (forms)
|
|
30
|
+
const isFormView = currentView === 'issue-create' ||
|
|
31
|
+
currentView === 'doc-create' ||
|
|
32
|
+
currentView === 'project-create';
|
|
26
33
|
// Global keyboard shortcuts
|
|
27
34
|
useKeyboard((event) => {
|
|
28
|
-
// Quit with 'q' or Ctrl-C
|
|
29
|
-
if (event.name === 'q'
|
|
35
|
+
// Quit with 'q' or Ctrl-C (but not in form views where 'q' is valid input)
|
|
36
|
+
if (event.name === 'q' && !isFormView) {
|
|
30
37
|
onExit();
|
|
31
38
|
return;
|
|
32
39
|
}
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
if (event.ctrl && event.name === 'c') {
|
|
41
|
+
onExit();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Skip sidebar navigation in form views - let forms handle Tab/arrows
|
|
45
|
+
if (isFormView) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Navigate sidebar with Tab, arrow keys, or number keys
|
|
49
|
+
if (event.name === 'tab' || event.name === 'right') {
|
|
35
50
|
const nextIndex = (sidebarIndex + 1) % visibleViews.length;
|
|
36
51
|
selectSidebarItem(nextIndex);
|
|
37
52
|
navigate(visibleViews[nextIndex]);
|
|
38
53
|
}
|
|
54
|
+
if (event.name === 'left') {
|
|
55
|
+
const prevIndex = sidebarIndex > 0 ? sidebarIndex - 1 : visibleViews.length - 1;
|
|
56
|
+
selectSidebarItem(prevIndex);
|
|
57
|
+
navigate(visibleViews[prevIndex]);
|
|
58
|
+
}
|
|
39
59
|
// Number keys for quick navigation
|
|
40
60
|
const numKey = parseInt(event.name);
|
|
41
61
|
if (numKey >= 1 && numKey <= visibleViews.length) {
|
|
@@ -46,28 +66,41 @@ export function App({ onExit }) {
|
|
|
46
66
|
const baseShortcuts = [
|
|
47
67
|
{ key: 'j/k', label: 'navigate' },
|
|
48
68
|
{ key: 'Enter', label: 'select' },
|
|
49
|
-
{ key: '
|
|
69
|
+
{ key: '←/→', label: 'switch view' },
|
|
50
70
|
{ key: 'q/^C', label: 'quit' },
|
|
51
71
|
];
|
|
52
72
|
// View-specific shortcuts
|
|
53
73
|
const viewShortcuts = {
|
|
54
74
|
projects: [
|
|
75
|
+
{ key: 'n', label: 'new' },
|
|
55
76
|
{ key: 'f', label: 'favorite' },
|
|
56
77
|
{ key: 'a', label: 'archive' },
|
|
57
78
|
{ key: 'x', label: 'remove' },
|
|
58
79
|
],
|
|
59
|
-
|
|
80
|
+
'project-create': [
|
|
81
|
+
{ key: '^S', label: 'save' },
|
|
82
|
+
{ key: 'Esc', label: 'cancel' },
|
|
83
|
+
],
|
|
84
|
+
issues: [{ key: 'n', label: 'new' }],
|
|
60
85
|
'issue-detail': [
|
|
61
86
|
{ key: 'Esc', label: 'back' },
|
|
62
87
|
{ key: 'd/u', label: 'scroll' },
|
|
63
88
|
],
|
|
64
|
-
'issue-create': [
|
|
65
|
-
|
|
89
|
+
'issue-create': [
|
|
90
|
+
{ key: 'Tab', label: 'next field' },
|
|
91
|
+
{ key: '^S', label: 'save' },
|
|
92
|
+
{ key: 'Esc', label: 'cancel' },
|
|
93
|
+
],
|
|
94
|
+
docs: [{ key: 'n', label: 'new' }],
|
|
66
95
|
'doc-detail': [
|
|
67
96
|
{ key: 'Esc', label: 'back' },
|
|
68
97
|
{ key: 'd/u', label: 'scroll' },
|
|
69
98
|
],
|
|
70
|
-
'doc-create': [
|
|
99
|
+
'doc-create': [
|
|
100
|
+
{ key: 'Tab', label: 'next field' },
|
|
101
|
+
{ key: '^S', label: 'save' },
|
|
102
|
+
{ key: 'Esc', label: 'cancel' },
|
|
103
|
+
],
|
|
71
104
|
assets: [],
|
|
72
105
|
config: [],
|
|
73
106
|
daemon: [
|
|
@@ -84,14 +117,20 @@ function renderView(view) {
|
|
|
84
117
|
switch (view) {
|
|
85
118
|
case 'projects':
|
|
86
119
|
return _jsx(ProjectList, {});
|
|
120
|
+
case 'project-create':
|
|
121
|
+
return _jsx(ProjectCreate, {});
|
|
87
122
|
case 'issues':
|
|
88
123
|
return _jsx(IssueList, {});
|
|
89
124
|
case 'issue-detail':
|
|
90
125
|
return _jsx(IssueDetail, {});
|
|
126
|
+
case 'issue-create':
|
|
127
|
+
return _jsx(IssueCreate, {});
|
|
91
128
|
case 'docs':
|
|
92
129
|
return _jsx(DocList, {});
|
|
93
130
|
case 'doc-detail':
|
|
94
131
|
return _jsx(DocDetail, {});
|
|
132
|
+
case 'doc-create':
|
|
133
|
+
return _jsx(DocCreate, {});
|
|
95
134
|
case 'assets':
|
|
96
135
|
return _jsx(AssetList, {});
|
|
97
136
|
case 'config':
|
|
@@ -99,7 +138,7 @@ function renderView(view) {
|
|
|
99
138
|
case 'daemon':
|
|
100
139
|
return _jsx(DaemonPanel, {});
|
|
101
140
|
case 'help':
|
|
102
|
-
return (_jsx(MainPanel, { title: "Help", children: _jsxs("box", { flexDirection: "column", children: [_jsx("text", { children: _jsx("b", { children: "Centy TUI Help" }) }), _jsx("text", { children: " " }), _jsx("text", { fg: "cyan", children: "Navigation" }), _jsx("text", { children: " j/k or Up/Down - Move selection" }), _jsx("text", { children: " Enter - Select/open item" }), _jsx("text", { children: " Tab - Cycle through views" }), _jsx("text", { children: " 1-6 - Quick jump to view" }), _jsx("text", { children: " Esc/Backspace - Go back" }), _jsx("text", { children: " " }), _jsx("text", { fg: "cyan", children: "Global" }), _jsx("text", { children: " q or Ctrl-C - Quit" }), _jsx("text", { children: " " }), _jsx("text", { fg: "cyan", children: "Scrolling" }), _jsx("text", { children: " j/k - Scroll line by line" }), _jsx("text", { children: " d/u - Scroll page down/up" })] }) }));
|
|
141
|
+
return (_jsx(MainPanel, { title: "Help", children: _jsxs("box", { flexDirection: "column", children: [_jsx("text", { children: _jsx("b", { children: "Centy TUI Help" }) }), _jsx("text", { children: " " }), _jsx("text", { fg: "cyan", children: "Navigation" }), _jsx("text", { children: " j/k or Up/Down - Move selection" }), _jsx("text", { children: " Enter - Select/open item" }), _jsx("text", { children: " \u2190/\u2192 or Tab - Cycle through views" }), _jsx("text", { children: " 1-6 - Quick jump to view" }), _jsx("text", { children: " Esc/Backspace - Go back" }), _jsx("text", { children: " " }), _jsx("text", { fg: "cyan", children: "Global" }), _jsx("text", { children: " q or Ctrl-C - Quit" }), _jsx("text", { children: " " }), _jsx("text", { fg: "cyan", children: "Scrolling" }), _jsx("text", { children: " j/k - Scroll line by line" }), _jsx("text", { children: " d/u - Scroll page down/up" })] }) }));
|
|
103
142
|
default:
|
|
104
143
|
return _jsx(ProjectList, {});
|
|
105
144
|
}
|
package/dist/tui/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAOzD,MAAM,UAAU,GAAG,CAAC,EAAE,MAAM,EAAY;IACtC,MAAM,EAAE,SAAS,EAAE,GAAG,mBAAmB,EAAE,CAAA;IAC3C,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAC9D,aAAa,EAAE,CAAA;IACjB,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAA;IAE/B,uDAAuD;IACvD,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,EACzD,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAC5B,CAAA;IAED,4BAA4B;IAC5B,WAAW,CAAC,CAAC,KAAe,EAAE,EAAE;QAC9B,
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocCreate.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/domain/DocCreate.tsx"],"names":[],"mappings":"AAYA,wBAAgB,SAAS,8BAwLxB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useKeyboard } from '@opentui/react';
|
|
4
|
+
import { MainPanel } from '../layout/MainPanel.js';
|
|
5
|
+
import { useNavigation } from '../../hooks/useNavigation.js';
|
|
6
|
+
import { useAppState } from '../../state/app-state.js';
|
|
7
|
+
import { daemonService } from '../../services/daemon-service.js';
|
|
8
|
+
const FIELDS = ['title', 'content'];
|
|
9
|
+
export function DocCreate() {
|
|
10
|
+
const { goBack, navigate } = useNavigation();
|
|
11
|
+
const { state, dispatch } = useAppState();
|
|
12
|
+
const [title, setTitle] = useState('');
|
|
13
|
+
const [content, setContent] = useState('');
|
|
14
|
+
const [activeField, setActiveField] = useState('title');
|
|
15
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const handleSubmit = useCallback(async () => {
|
|
18
|
+
if (!state.selectedProjectPath)
|
|
19
|
+
return;
|
|
20
|
+
if (!title.trim()) {
|
|
21
|
+
setError('Title is required');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
setIsSubmitting(true);
|
|
25
|
+
setError(null);
|
|
26
|
+
const result = await daemonService.createDoc(state.selectedProjectPath, {
|
|
27
|
+
title: title.trim(),
|
|
28
|
+
content: content.trim(),
|
|
29
|
+
});
|
|
30
|
+
setIsSubmitting(false);
|
|
31
|
+
if (result.success) {
|
|
32
|
+
// Refresh docs list and navigate back
|
|
33
|
+
dispatch({ type: 'SET_DOCS', docs: [] }); // Clear to force reload
|
|
34
|
+
navigate('docs');
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
setError(result.error || 'Failed to create doc');
|
|
38
|
+
}
|
|
39
|
+
}, [state.selectedProjectPath, title, content, dispatch, navigate]);
|
|
40
|
+
const moveToNextField = useCallback(() => {
|
|
41
|
+
const currentIndex = FIELDS.indexOf(activeField);
|
|
42
|
+
if (currentIndex < FIELDS.length - 1) {
|
|
43
|
+
setActiveField(FIELDS[currentIndex + 1]);
|
|
44
|
+
}
|
|
45
|
+
}, [activeField]);
|
|
46
|
+
const moveToPrevField = useCallback(() => {
|
|
47
|
+
const currentIndex = FIELDS.indexOf(activeField);
|
|
48
|
+
if (currentIndex > 0) {
|
|
49
|
+
setActiveField(FIELDS[currentIndex - 1]);
|
|
50
|
+
}
|
|
51
|
+
}, [activeField]);
|
|
52
|
+
useKeyboard((event) => {
|
|
53
|
+
// Cancel with Escape
|
|
54
|
+
if (event.name === 'escape') {
|
|
55
|
+
goBack();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
// Submit with Ctrl+S
|
|
59
|
+
if (event.ctrl && event.name === 's') {
|
|
60
|
+
handleSubmit();
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Navigate between fields with Tab/Shift+Tab
|
|
64
|
+
if (event.name === 'tab') {
|
|
65
|
+
if (event.shift) {
|
|
66
|
+
moveToPrevField();
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
moveToNextField();
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
// Handle text input
|
|
74
|
+
if (activeField === 'title' || activeField === 'content') {
|
|
75
|
+
if (event.name === 'backspace') {
|
|
76
|
+
if (activeField === 'title') {
|
|
77
|
+
setTitle(prev => prev.slice(0, -1));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
setContent(prev => prev.slice(0, -1));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else if (event.name === 'return') {
|
|
84
|
+
if (activeField === 'content') {
|
|
85
|
+
setContent(prev => prev + '\n');
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
moveToNextField();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if (event.name === 'space') {
|
|
92
|
+
if (activeField === 'title') {
|
|
93
|
+
setTitle(prev => prev + ' ');
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
setContent(prev => prev + ' ');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (event.name.length === 1 && !event.ctrl && !event.meta) {
|
|
100
|
+
if (activeField === 'title') {
|
|
101
|
+
setTitle(prev => prev + event.name);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
setContent(prev => prev + event.name);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
const projectName = state.selectedProjectPath?.split('/').pop() || 'Project';
|
|
110
|
+
if (!state.selectedProjectPath) {
|
|
111
|
+
return (_jsx(MainPanel, { title: "New Doc", children: _jsx("text", { fg: "gray", children: "Select a project first." }) }));
|
|
112
|
+
}
|
|
113
|
+
if (isSubmitting) {
|
|
114
|
+
return (_jsx(MainPanel, { title: `New Doc - ${projectName}`, children: _jsx("text", { fg: "cyan", children: "Creating doc..." }) }));
|
|
115
|
+
}
|
|
116
|
+
return (_jsx(MainPanel, { title: `New Doc - ${projectName}`, children: _jsxs("box", { flexDirection: "column", flexGrow: 1, children: [_jsx("box", { marginBottom: 1, children: _jsx("text", { fg: "gray", children: "Tab: next field | Shift+Tab: prev | Ctrl+S: save | Esc: cancel" }) }), error && (_jsx("box", { marginBottom: 1, children: _jsx("text", { fg: "red", children: error }) })), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'title' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Title ", activeField === 'title' ? '▸' : ' '] }) }), _jsxs("box", { paddingLeft: 2, borderStyle: activeField === 'title' ? 'single' : undefined, children: [_jsx("text", { children: title || (activeField === 'title' ? '│' : '') }), activeField === 'title' && _jsx("text", { fg: "cyan", children: "_" })] }), _jsx("box", { paddingLeft: 2, children: _jsx("text", { fg: "gray", children: "Slug will be auto-generated from title" }) })] }), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'content' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Content (Markdown) ", activeField === 'content' ? '▸' : ' '] }) }), _jsx("box", { paddingLeft: 2, borderStyle: activeField === 'content' ? 'single' : undefined, height: 10, children: _jsxs("text", { children: [content || (activeField === 'content' ? '' : ''), activeField === 'content' && _jsx("text", { fg: "cyan", children: "_" })] }) }), activeField === 'content' && (_jsx("box", { paddingLeft: 2, children: _jsx("text", { fg: "gray", children: "Press Enter for new lines" }) }))] }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: "green", children: "Press Ctrl+S to create doc" }) })] }) }));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=DocCreate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocCreate.js","sourceRoot":"","sources":["../../../../src/tui/components/domain/DocCreate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IssueCreate.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/domain/IssueCreate.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,WAAW,8BAqO1B"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
3
|
+
import { useKeyboard } from '@opentui/react';
|
|
4
|
+
import { MainPanel } from '../layout/MainPanel.js';
|
|
5
|
+
import { useNavigation } from '../../hooks/useNavigation.js';
|
|
6
|
+
import { useAppState } from '../../state/app-state.js';
|
|
7
|
+
import { useConfig } from '../../hooks/useConfig.js';
|
|
8
|
+
import { daemonService } from '../../services/daemon-service.js';
|
|
9
|
+
const FIELDS = ['title', 'description', 'priority'];
|
|
10
|
+
function getPriorityColor(priority) {
|
|
11
|
+
if (priority === 1)
|
|
12
|
+
return 'red';
|
|
13
|
+
if (priority === 2)
|
|
14
|
+
return 'yellow';
|
|
15
|
+
return 'green';
|
|
16
|
+
}
|
|
17
|
+
function getPriorityLabel(priority) {
|
|
18
|
+
if (priority === 1)
|
|
19
|
+
return 'High';
|
|
20
|
+
if (priority === 2)
|
|
21
|
+
return 'Medium';
|
|
22
|
+
return 'Low';
|
|
23
|
+
}
|
|
24
|
+
export function IssueCreate() {
|
|
25
|
+
const { goBack, navigate } = useNavigation();
|
|
26
|
+
const { state, dispatch } = useAppState();
|
|
27
|
+
const { config } = useConfig();
|
|
28
|
+
const [title, setTitle] = useState('');
|
|
29
|
+
const [description, setDescription] = useState('');
|
|
30
|
+
const [priority, setPriority] = useState(3); // Default to low
|
|
31
|
+
const [activeField, setActiveField] = useState('title');
|
|
32
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
33
|
+
const [error, setError] = useState(null);
|
|
34
|
+
const priorityLevels = config?.priorityLevels ?? 3;
|
|
35
|
+
const handleSubmit = useCallback(async () => {
|
|
36
|
+
if (!state.selectedProjectPath)
|
|
37
|
+
return;
|
|
38
|
+
if (!title.trim()) {
|
|
39
|
+
setError('Title is required');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
setIsSubmitting(true);
|
|
43
|
+
setError(null);
|
|
44
|
+
const result = await daemonService.createIssue(state.selectedProjectPath, {
|
|
45
|
+
title: title.trim(),
|
|
46
|
+
description: description.trim(),
|
|
47
|
+
priority,
|
|
48
|
+
});
|
|
49
|
+
setIsSubmitting(false);
|
|
50
|
+
if (result.success) {
|
|
51
|
+
// Refresh issues list and navigate back
|
|
52
|
+
dispatch({ type: 'SET_ISSUES', issues: [] }); // Clear to force reload
|
|
53
|
+
navigate('issues');
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
setError(result.error || 'Failed to create issue');
|
|
57
|
+
}
|
|
58
|
+
}, [
|
|
59
|
+
state.selectedProjectPath,
|
|
60
|
+
title,
|
|
61
|
+
description,
|
|
62
|
+
priority,
|
|
63
|
+
dispatch,
|
|
64
|
+
navigate,
|
|
65
|
+
]);
|
|
66
|
+
const moveToNextField = useCallback(() => {
|
|
67
|
+
const currentIndex = FIELDS.indexOf(activeField);
|
|
68
|
+
if (currentIndex < FIELDS.length - 1) {
|
|
69
|
+
setActiveField(FIELDS[currentIndex + 1]);
|
|
70
|
+
}
|
|
71
|
+
}, [activeField]);
|
|
72
|
+
const moveToPrevField = useCallback(() => {
|
|
73
|
+
const currentIndex = FIELDS.indexOf(activeField);
|
|
74
|
+
if (currentIndex > 0) {
|
|
75
|
+
setActiveField(FIELDS[currentIndex - 1]);
|
|
76
|
+
}
|
|
77
|
+
}, [activeField]);
|
|
78
|
+
const cyclePriority = useCallback((direction) => {
|
|
79
|
+
if (direction === 'up') {
|
|
80
|
+
setPriority(prev => (prev > 1 ? prev - 1 : priorityLevels));
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
setPriority(prev => (prev < priorityLevels ? prev + 1 : 1));
|
|
84
|
+
}
|
|
85
|
+
}, [priorityLevels]);
|
|
86
|
+
useKeyboard((event) => {
|
|
87
|
+
// Cancel with Escape
|
|
88
|
+
if (event.name === 'escape') {
|
|
89
|
+
goBack();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Submit with Ctrl+S
|
|
93
|
+
if (event.ctrl && event.name === 's') {
|
|
94
|
+
handleSubmit();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Navigate between fields with Tab/Shift+Tab
|
|
98
|
+
if (event.name === 'tab') {
|
|
99
|
+
if (event.shift) {
|
|
100
|
+
moveToPrevField();
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
moveToNextField();
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Handle input based on active field
|
|
108
|
+
if (activeField === 'priority') {
|
|
109
|
+
if (event.name === 'up' || event.name === 'k') {
|
|
110
|
+
cyclePriority('up');
|
|
111
|
+
}
|
|
112
|
+
else if (event.name === 'down' || event.name === 'j') {
|
|
113
|
+
cyclePriority('down');
|
|
114
|
+
}
|
|
115
|
+
else if (event.name === 'left' || event.name === 'h') {
|
|
116
|
+
cyclePriority('up');
|
|
117
|
+
}
|
|
118
|
+
else if (event.name === 'right' || event.name === 'l') {
|
|
119
|
+
cyclePriority('down');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (activeField === 'title' || activeField === 'description') {
|
|
123
|
+
// Handle text input
|
|
124
|
+
if (event.name === 'backspace') {
|
|
125
|
+
if (activeField === 'title') {
|
|
126
|
+
setTitle(prev => prev.slice(0, -1));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
setDescription(prev => prev.slice(0, -1));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else if (event.name === 'return') {
|
|
133
|
+
if (activeField === 'description') {
|
|
134
|
+
setDescription(prev => prev + '\n');
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
moveToNextField();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (event.name === 'space') {
|
|
141
|
+
if (activeField === 'title') {
|
|
142
|
+
setTitle(prev => prev + ' ');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
setDescription(prev => prev + ' ');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (event.name.length === 1 && !event.ctrl && !event.meta) {
|
|
149
|
+
if (activeField === 'title') {
|
|
150
|
+
setTitle(prev => prev + event.name);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
setDescription(prev => prev + event.name);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
const projectName = state.selectedProjectPath?.split('/').pop() || 'Project';
|
|
159
|
+
if (!state.selectedProjectPath) {
|
|
160
|
+
return (_jsx(MainPanel, { title: "New Issue", children: _jsx("text", { fg: "gray", children: "Select a project first." }) }));
|
|
161
|
+
}
|
|
162
|
+
if (isSubmitting) {
|
|
163
|
+
return (_jsx(MainPanel, { title: `New Issue - ${projectName}`, children: _jsx("text", { fg: "cyan", children: "Creating issue..." }) }));
|
|
164
|
+
}
|
|
165
|
+
return (_jsx(MainPanel, { title: `New Issue - ${projectName}`, children: _jsxs("box", { flexDirection: "column", flexGrow: 1, children: [_jsx("box", { marginBottom: 1, children: _jsx("text", { fg: "gray", children: "Tab: next field | Shift+Tab: prev | Ctrl+S: save | Esc: cancel" }) }), error && (_jsx("box", { marginBottom: 1, children: _jsx("text", { fg: "red", children: error }) })), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'title' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Title ", activeField === 'title' ? '▸' : ' '] }) }), _jsxs("box", { paddingLeft: 2, borderStyle: activeField === 'title' ? 'single' : undefined, children: [_jsx("text", { children: title || (activeField === 'title' ? '│' : '') }), activeField === 'title' && _jsx("text", { fg: "cyan", children: "_" })] })] }), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'description' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Description ", activeField === 'description' ? '▸' : ' '] }) }), _jsxs("box", { paddingLeft: 2, borderStyle: activeField === 'description' ? 'single' : undefined, height: 5, children: [_jsx("text", { children: description || (activeField === 'description' ? '' : '') }), activeField === 'description' && _jsx("text", { fg: "cyan", children: "_" })] })] }), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'priority' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Priority ", activeField === 'priority' ? '▸' : ' '] }) }), _jsxs("box", { paddingLeft: 2, flexDirection: "row", children: [activeField === 'priority' && _jsx("text", { fg: "gray", children: "\u25C0 " }), _jsxs("text", { fg: getPriorityColor(priority), children: [getPriorityLabel(priority), " (", priority, "/", priorityLevels, ")"] }), activeField === 'priority' && _jsx("text", { fg: "gray", children: " \u25B6" })] }), activeField === 'priority' && (_jsx("box", { paddingLeft: 2, children: _jsx("text", { fg: "gray", children: "Use arrow keys or h/l to change" }) }))] }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: "green", children: "Press Ctrl+S to create issue" }) })] }) }));
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=IssueCreate.js.map
|