centy 0.0.18 → 0.0.19

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.
Files changed (118) hide show
  1. package/dist/commands/add/asset.d.ts +2 -1
  2. package/dist/commands/add/asset.d.ts.map +1 -1
  3. package/dist/commands/add/asset.js +14 -5
  4. package/dist/commands/add/asset.js.map +1 -1
  5. package/dist/commands/create/pr.d.ts +3 -3
  6. package/dist/commands/create/pr.d.ts.map +1 -1
  7. package/dist/commands/create/pr.js +11 -33
  8. package/dist/commands/create/pr.js.map +1 -1
  9. package/dist/daemon/types.d.ts +1 -0
  10. package/dist/daemon/types.d.ts.map +1 -1
  11. package/dist/lib/create-pr/create-pr.d.ts +8 -0
  12. package/dist/lib/create-pr/create-pr.d.ts.map +1 -0
  13. package/dist/lib/create-pr/create-pr.js +111 -0
  14. package/dist/lib/create-pr/create-pr.js.map +1 -0
  15. package/dist/lib/create-pr/gather-basic-fields.d.ts +8 -0
  16. package/dist/lib/create-pr/gather-basic-fields.d.ts.map +1 -0
  17. package/dist/lib/create-pr/gather-basic-fields.js +34 -0
  18. package/dist/lib/create-pr/gather-basic-fields.js.map +1 -0
  19. package/dist/lib/create-pr/gather-metadata-fields.d.ts +11 -0
  20. package/dist/lib/create-pr/gather-metadata-fields.d.ts.map +1 -0
  21. package/dist/lib/create-pr/gather-metadata-fields.js +34 -0
  22. package/dist/lib/create-pr/gather-metadata-fields.js.map +1 -0
  23. package/dist/lib/create-pr/gather-pr-input.d.ts +8 -0
  24. package/dist/lib/create-pr/gather-pr-input.d.ts.map +1 -0
  25. package/dist/lib/create-pr/gather-pr-input.js +33 -0
  26. package/dist/lib/create-pr/gather-pr-input.js.map +1 -0
  27. package/dist/lib/create-pr/index.d.ts +2 -0
  28. package/dist/lib/create-pr/index.d.ts.map +1 -0
  29. package/dist/lib/create-pr/index.js +2 -0
  30. package/dist/lib/create-pr/index.js.map +1 -0
  31. package/dist/lib/create-pr/prompt-for-description.d.ts +6 -0
  32. package/dist/lib/create-pr/prompt-for-description.d.ts.map +1 -0
  33. package/dist/lib/create-pr/prompt-for-description.js +12 -0
  34. package/dist/lib/create-pr/prompt-for-description.js.map +1 -0
  35. package/dist/lib/create-pr/prompt-for-linked-issues.d.ts +7 -0
  36. package/dist/lib/create-pr/prompt-for-linked-issues.d.ts.map +1 -0
  37. package/dist/lib/create-pr/prompt-for-linked-issues.js +22 -0
  38. package/dist/lib/create-pr/prompt-for-linked-issues.js.map +1 -0
  39. package/dist/lib/create-pr/prompt-for-priority.d.ts +9 -0
  40. package/dist/lib/create-pr/prompt-for-priority.d.ts.map +1 -0
  41. package/dist/lib/create-pr/prompt-for-priority.js +25 -0
  42. package/dist/lib/create-pr/prompt-for-priority.js.map +1 -0
  43. package/dist/lib/create-pr/prompt-for-reviewers.d.ts +7 -0
  44. package/dist/lib/create-pr/prompt-for-reviewers.d.ts.map +1 -0
  45. package/dist/lib/create-pr/prompt-for-reviewers.js +22 -0
  46. package/dist/lib/create-pr/prompt-for-reviewers.js.map +1 -0
  47. package/dist/lib/create-pr/prompt-for-source-branch.d.ts +7 -0
  48. package/dist/lib/create-pr/prompt-for-source-branch.d.ts.map +1 -0
  49. package/dist/lib/create-pr/prompt-for-source-branch.js +20 -0
  50. package/dist/lib/create-pr/prompt-for-source-branch.js.map +1 -0
  51. package/dist/lib/create-pr/prompt-for-status.d.ts +9 -0
  52. package/dist/lib/create-pr/prompt-for-status.d.ts.map +1 -0
  53. package/dist/lib/create-pr/prompt-for-status.js +25 -0
  54. package/dist/lib/create-pr/prompt-for-status.js.map +1 -0
  55. package/dist/lib/create-pr/prompt-for-target-branch.d.ts +7 -0
  56. package/dist/lib/create-pr/prompt-for-target-branch.d.ts.map +1 -0
  57. package/dist/lib/create-pr/prompt-for-target-branch.js +15 -0
  58. package/dist/lib/create-pr/prompt-for-target-branch.js.map +1 -0
  59. package/dist/lib/create-pr/prompt-for-title.d.ts +6 -0
  60. package/dist/lib/create-pr/prompt-for-title.d.ts.map +1 -0
  61. package/dist/lib/create-pr/prompt-for-title.js +12 -0
  62. package/dist/lib/create-pr/prompt-for-title.js.map +1 -0
  63. package/dist/lib/create-pr/types.d.ts +14 -0
  64. package/dist/lib/create-pr/types.d.ts.map +1 -0
  65. package/dist/lib/create-pr/types.js +2 -0
  66. package/dist/lib/create-pr/types.js.map +1 -0
  67. package/dist/tui/App.d.ts.map +1 -1
  68. package/dist/tui/App.js +30 -0
  69. package/dist/tui/App.js.map +1 -1
  70. package/dist/tui/components/domain/PRCreate.d.ts +2 -0
  71. package/dist/tui/components/domain/PRCreate.d.ts.map +1 -0
  72. package/dist/tui/components/domain/PRCreate.js +195 -0
  73. package/dist/tui/components/domain/PRCreate.js.map +1 -0
  74. package/dist/tui/components/domain/PRDetail.d.ts +2 -0
  75. package/dist/tui/components/domain/PRDetail.d.ts.map +1 -0
  76. package/dist/tui/components/domain/PRDetail.js +119 -0
  77. package/dist/tui/components/domain/PRDetail.js.map +1 -0
  78. package/dist/tui/components/domain/PREdit.d.ts +2 -0
  79. package/dist/tui/components/domain/PREdit.d.ts.map +1 -0
  80. package/dist/tui/components/domain/PREdit.js +259 -0
  81. package/dist/tui/components/domain/PREdit.js.map +1 -0
  82. package/dist/tui/components/domain/PRList.d.ts +2 -0
  83. package/dist/tui/components/domain/PRList.d.ts.map +1 -0
  84. package/dist/tui/components/domain/PRList.js +178 -0
  85. package/dist/tui/components/domain/PRList.js.map +1 -0
  86. package/dist/tui/hooks/usePullRequests.d.ts +8 -0
  87. package/dist/tui/hooks/usePullRequests.d.ts.map +1 -0
  88. package/dist/tui/hooks/usePullRequests.js +36 -0
  89. package/dist/tui/hooks/usePullRequests.js.map +1 -0
  90. package/dist/tui/index.d.ts.map +1 -1
  91. package/dist/tui/index.js +5 -3
  92. package/dist/tui/index.js.map +1 -1
  93. package/dist/tui/services/daemon-service.d.ts +29 -1
  94. package/dist/tui/services/daemon-service.d.ts.map +1 -1
  95. package/dist/tui/services/daemon-service.js +87 -0
  96. package/dist/tui/services/daemon-service.js.map +1 -1
  97. package/dist/tui/state/app-state.d.ts +22 -2
  98. package/dist/tui/state/app-state.d.ts.map +1 -1
  99. package/dist/tui/state/app-state.js +23 -1
  100. package/dist/tui/state/app-state.js.map +1 -1
  101. package/dist/tui/types/views.d.ts +2 -1
  102. package/dist/tui/types/views.d.ts.map +1 -1
  103. package/dist/tui/types/views.js +6 -0
  104. package/dist/tui/types/views.js.map +1 -1
  105. package/dist/tui/utils/local-config.d.ts +4 -1
  106. package/dist/tui/utils/local-config.d.ts.map +1 -1
  107. package/dist/tui/utils/local-config.js +10 -1
  108. package/dist/tui/utils/local-config.js.map +1 -1
  109. package/dist/types/create-pr-options.d.ts +30 -0
  110. package/dist/types/create-pr-options.d.ts.map +1 -0
  111. package/dist/types/create-pr-options.js +2 -0
  112. package/dist/types/create-pr-options.js.map +1 -0
  113. package/dist/types/create-pr-result.d.ts +16 -0
  114. package/dist/types/create-pr-result.d.ts.map +1 -0
  115. package/dist/types/create-pr-result.js +2 -0
  116. package/dist/types/create-pr-result.js.map +1 -0
  117. package/oclif.manifest.json +183 -176
  118. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Prompt user for PR description (optional)
3
+ */
4
+ export function promptForDescription(rl, output) {
5
+ return new Promise(resolve => {
6
+ output.write('Enter PR description (optional, press Enter to skip): ');
7
+ rl.question('', answer => {
8
+ resolve(answer.trim());
9
+ });
10
+ });
11
+ }
12
+ //# sourceMappingURL=prompt-for-description.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-description.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-description.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACtE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Interface } from 'node:readline';
2
+ /**
3
+ * Prompt user for linked issue numbers
4
+ * Returns comma-separated issue IDs as an array
5
+ */
6
+ export declare function promptForLinkedIssues(rl: Interface, output: NodeJS.WritableStream): Promise<string[]>;
7
+ //# sourceMappingURL=prompt-for-linked-issues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-linked-issues.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-linked-issues.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Prompt user for linked issue numbers
3
+ * Returns comma-separated issue IDs as an array
4
+ */
5
+ export function promptForLinkedIssues(rl, output) {
6
+ return new Promise(resolve => {
7
+ output.write('Enter linked issue numbers (comma-separated, optional): ');
8
+ rl.question('', answer => {
9
+ const trimmed = answer.trim();
10
+ if (trimmed === '') {
11
+ resolve([]);
12
+ return;
13
+ }
14
+ const issues = trimmed
15
+ .split(',')
16
+ .map(s => s.trim())
17
+ .filter(s => s !== '');
18
+ resolve(issues);
19
+ });
20
+ });
21
+ }
22
+ //# sourceMappingURL=prompt-for-linked-issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-linked-issues.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-linked-issues.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;QACxE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;YAC7B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,EAAE,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,OAAO;iBACnB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YACxB,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Interface } from 'node:readline';
2
+ type Priority = 'low' | 'medium' | 'high';
3
+ /**
4
+ * Prompt user for PR priority
5
+ * Shows options and validates input
6
+ */
7
+ export declare function promptForPriority(rl: Interface, output: NodeJS.WritableStream): Promise<Priority>;
8
+ export {};
9
+ //# sourceMappingURL=prompt-for-priority.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-priority.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-priority.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,KAAK,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;AAIzC;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAkBnB"}
@@ -0,0 +1,25 @@
1
+ const PRIORITY_OPTIONS = ['low', 'medium', 'high'];
2
+ /**
3
+ * Prompt user for PR priority
4
+ * Shows options and validates input
5
+ */
6
+ export function promptForPriority(rl, output) {
7
+ return new Promise(resolve => {
8
+ output.write('Select priority (low/medium/high) [medium]: ');
9
+ rl.question('', answer => {
10
+ const trimmed = answer.trim().toLowerCase();
11
+ if (trimmed === '') {
12
+ resolve('medium');
13
+ return;
14
+ }
15
+ if (PRIORITY_OPTIONS.includes(trimmed)) {
16
+ resolve(trimmed);
17
+ return;
18
+ }
19
+ // Invalid input, prompt again
20
+ output.write(`Invalid priority "${answer}". `);
21
+ resolve(promptForPriority(rl, output));
22
+ });
23
+ });
24
+ }
25
+ //# sourceMappingURL=prompt-for-priority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-priority.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-priority.ts"],"names":[],"mappings":"AAIA,MAAM,gBAAgB,GAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAA;AAEhF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAC5D,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAC3C,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACjB,OAAM;YACR,CAAC;YACD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAmB,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,OAAmB,CAAC,CAAA;gBAC5B,OAAM;YACR,CAAC;YACD,8BAA8B;YAC9B,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,KAAK,CAAC,CAAA;YAC9C,OAAO,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Interface } from 'node:readline';
2
+ /**
3
+ * Prompt user for reviewers
4
+ * Returns comma-separated reviewer names as an array
5
+ */
6
+ export declare function promptForReviewers(rl: Interface, output: NodeJS.WritableStream): Promise<string[]>;
7
+ //# sourceMappingURL=prompt-for-reviewers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-reviewers.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-reviewers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAgBnB"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Prompt user for reviewers
3
+ * Returns comma-separated reviewer names as an array
4
+ */
5
+ export function promptForReviewers(rl, output) {
6
+ return new Promise(resolve => {
7
+ output.write('Enter reviewers (comma-separated, optional): ');
8
+ rl.question('', answer => {
9
+ const trimmed = answer.trim();
10
+ if (trimmed === '') {
11
+ resolve([]);
12
+ return;
13
+ }
14
+ const reviewers = trimmed
15
+ .split(',')
16
+ .map(s => s.trim())
17
+ .filter(s => s !== '');
18
+ resolve(reviewers);
19
+ });
20
+ });
21
+ }
22
+ //# sourceMappingURL=prompt-for-reviewers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-reviewers.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-reviewers.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAA;QAC7D,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;YAC7B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,EAAE,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YACD,MAAM,SAAS,GAAG,OAAO;iBACtB,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;iBAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YACxB,OAAO,CAAC,SAAS,CAAC,CAAA;QACpB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Interface } from 'node:readline';
2
+ /**
3
+ * Prompt user for source branch
4
+ * Shows the auto-detected branch as default
5
+ */
6
+ export declare function promptForSourceBranch(rl: Interface, output: NodeJS.WritableStream, detectedBranch?: string): Promise<string>;
7
+ //# sourceMappingURL=prompt-for-source-branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-source-branch.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-source-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,EAC7B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,CAajB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Prompt user for source branch
3
+ * Shows the auto-detected branch as default
4
+ */
5
+ export function promptForSourceBranch(rl, output, detectedBranch) {
6
+ return new Promise(resolve => {
7
+ const defaultHint = detectedBranch ? ` [${detectedBranch}]` : '';
8
+ output.write(`Enter source branch${defaultHint}: `);
9
+ rl.question('', answer => {
10
+ const trimmed = answer.trim();
11
+ if (trimmed === '' && detectedBranch) {
12
+ resolve(detectedBranch);
13
+ }
14
+ else {
15
+ resolve(trimmed);
16
+ }
17
+ });
18
+ });
19
+ }
20
+ //# sourceMappingURL=prompt-for-source-branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-source-branch.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-source-branch.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAa,EACb,MAA6B,EAC7B,cAAuB;IAEvB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,WAAW,GAAG,cAAc,CAAC,CAAC,CAAC,KAAK,cAAc,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAChE,MAAM,CAAC,KAAK,CAAC,sBAAsB,WAAW,IAAI,CAAC,CAAA;QACnD,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;YAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,cAAc,EAAE,CAAC;gBACrC,OAAO,CAAC,cAAc,CAAC,CAAA;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Interface } from 'node:readline';
2
+ type Status = 'draft' | 'open';
3
+ /**
4
+ * Prompt user for PR status
5
+ * Shows options and validates input
6
+ */
7
+ export declare function promptForStatus(rl: Interface, output: NodeJS.WritableStream): Promise<Status>;
8
+ export {};
9
+ //# sourceMappingURL=prompt-for-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-status.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAI9B;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
@@ -0,0 +1,25 @@
1
+ const STATUS_OPTIONS = ['draft', 'open'];
2
+ /**
3
+ * Prompt user for PR status
4
+ * Shows options and validates input
5
+ */
6
+ export function promptForStatus(rl, output) {
7
+ return new Promise(resolve => {
8
+ output.write('Select status (draft/open) [draft]: ');
9
+ rl.question('', answer => {
10
+ const trimmed = answer.trim().toLowerCase();
11
+ if (trimmed === '') {
12
+ resolve('draft');
13
+ return;
14
+ }
15
+ if (STATUS_OPTIONS.includes(trimmed)) {
16
+ resolve(trimmed);
17
+ return;
18
+ }
19
+ // Invalid input, prompt again
20
+ output.write(`Invalid status "${answer}". `);
21
+ resolve(promptForStatus(rl, output));
22
+ });
23
+ });
24
+ }
25
+ //# sourceMappingURL=prompt-for-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-status.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-status.ts"],"names":[],"mappings":"AAIA,MAAM,cAAc,GAAsB,CAAC,OAAO,EAAE,MAAM,CAAU,CAAA;AAEpE;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;QACpD,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;YAC3C,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,CAAC,CAAA;gBAChB,OAAM;YACR,CAAC;YACD,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAiB,CAAC,EAAE,CAAC;gBAC/C,OAAO,CAAC,OAAiB,CAAC,CAAA;gBAC1B,OAAM;YACR,CAAC;YACD,8BAA8B;YAC9B,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,KAAK,CAAC,CAAA;YAC5C,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Interface } from 'node:readline';
2
+ /**
3
+ * Prompt user for target branch
4
+ * Defaults to 'main'
5
+ */
6
+ export declare function promptForTargetBranch(rl: Interface, output: NodeJS.WritableStream): Promise<string>;
7
+ //# sourceMappingURL=prompt-for-target-branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-target-branch.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-target-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAI9C;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,MAAM,CAAC,CAQjB"}
@@ -0,0 +1,15 @@
1
+ const DEFAULT_TARGET = 'main';
2
+ /**
3
+ * Prompt user for target branch
4
+ * Defaults to 'main'
5
+ */
6
+ export function promptForTargetBranch(rl, output) {
7
+ return new Promise(resolve => {
8
+ output.write(`Enter target branch [${DEFAULT_TARGET}]: `);
9
+ rl.question('', answer => {
10
+ const trimmed = answer.trim();
11
+ resolve(trimmed === '' ? DEFAULT_TARGET : trimmed);
12
+ });
13
+ });
14
+ }
15
+ //# sourceMappingURL=prompt-for-target-branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-target-branch.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-target-branch.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,MAAM,CAAA;AAE7B;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,wBAAwB,cAAc,KAAK,CAAC,CAAA;QACzD,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAA;YAC7B,OAAO,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACpD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Interface } from 'node:readline';
2
+ /**
3
+ * Prompt user for PR title
4
+ */
5
+ export declare function promptForTitle(rl: Interface, output: NodeJS.WritableStream): Promise<string>;
6
+ //# sourceMappingURL=prompt-for-title.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-title.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C;;GAEG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,MAAM,CAAC,cAAc,GAC5B,OAAO,CAAC,MAAM,CAAC,CAOjB"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Prompt user for PR title
3
+ */
4
+ export function promptForTitle(rl, output) {
5
+ return new Promise(resolve => {
6
+ output.write('Enter PR title: ');
7
+ rl.question('', answer => {
8
+ resolve(answer.trim());
9
+ });
10
+ });
11
+ }
12
+ //# sourceMappingURL=prompt-for-title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-for-title.js","sourceRoot":"","sources":["../../../src/lib/create-pr/prompt-for-title.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,EAAa,EACb,MAA6B;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAChC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;YACvB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ type Priority = 'low' | 'medium' | 'high';
2
+ type Status = 'draft' | 'open';
3
+ export interface GatherPrInputResult {
4
+ title: string | null;
5
+ description: string;
6
+ sourceBranch: string;
7
+ targetBranch: string;
8
+ linkedIssues: string[];
9
+ reviewers: string[];
10
+ priority: Priority;
11
+ status: Status;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/create-pr/types.ts"],"names":[],"mappings":"AAAA,KAAK,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;AACzC,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAE9B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/create-pr/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AA0BA,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,6BA6IvC"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"AA8BA,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,IAAI,CAAA;CACnB;AAED,wBAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,6BA+JvC"}
package/dist/tui/App.js CHANGED
@@ -9,6 +9,10 @@ import { IssueList } from './components/domain/IssueList.js';
9
9
  import { IssueDetail } from './components/domain/IssueDetail.js';
10
10
  import { IssueCreate } from './components/domain/IssueCreate.js';
11
11
  import { IssueEdit } from './components/domain/IssueEdit.js';
12
+ import { PRList } from './components/domain/PRList.js';
13
+ import { PRDetail } from './components/domain/PRDetail.js';
14
+ import { PRCreate } from './components/domain/PRCreate.js';
15
+ import { PREdit } from './components/domain/PREdit.js';
12
16
  import { DocList } from './components/domain/DocList.js';
13
17
  import { DocDetail } from './components/domain/DocDetail.js';
14
18
  import { DocCreate } from './components/domain/DocCreate.js';
@@ -33,6 +37,8 @@ export function App({ onExit }) {
33
37
  // Views that handle their own keyboard input (forms)
34
38
  const isFormView = currentView === 'issue-create' ||
35
39
  currentView === 'issue-edit' ||
40
+ currentView === 'pr-create' ||
41
+ currentView === 'pr-edit' ||
36
42
  currentView === 'doc-create' ||
37
43
  currentView === 'project-create';
38
44
  // Global keyboard shortcuts
@@ -102,6 +108,22 @@ export function App({ onExit }) {
102
108
  { key: '^S', label: 'save' },
103
109
  { key: 'Esc', label: 'cancel' },
104
110
  ],
111
+ prs: [{ key: 'n', label: 'new' }],
112
+ 'pr-detail': [
113
+ { key: 'e', label: 'edit' },
114
+ { key: 'Esc', label: 'back' },
115
+ { key: 'd/u', label: 'scroll' },
116
+ ],
117
+ 'pr-create': [
118
+ { key: 'Tab', label: 'next field' },
119
+ { key: '^S', label: 'save' },
120
+ { key: 'Esc', label: 'cancel' },
121
+ ],
122
+ 'pr-edit': [
123
+ { key: 'Tab', label: 'next field' },
124
+ { key: '^S', label: 'save' },
125
+ { key: 'Esc', label: 'cancel' },
126
+ ],
105
127
  docs: [{ key: 'n', label: 'new' }],
106
128
  'doc-detail': [
107
129
  { key: 'Esc', label: 'back' },
@@ -138,6 +160,14 @@ function renderView(view) {
138
160
  return _jsx(IssueCreate, {});
139
161
  case 'issue-edit':
140
162
  return _jsx(IssueEdit, {});
163
+ case 'prs':
164
+ return _jsx(PRList, {});
165
+ case 'pr-detail':
166
+ return _jsx(PRDetail, {});
167
+ case 'pr-create':
168
+ return _jsx(PRCreate, {});
169
+ case 'pr-edit':
170
+ return _jsx(PREdit, {});
141
171
  case 'docs':
142
172
  return _jsx(DocList, {});
143
173
  case 'doc-detail':
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/tui/App.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function PRCreate(): import("react").ReactNode;
2
+ //# sourceMappingURL=PRCreate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PRCreate.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/domain/PRCreate.tsx"],"names":[],"mappings":"AA4CA,wBAAgB,QAAQ,8BA6SvB"}
@@ -0,0 +1,195 @@
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 = [
10
+ 'title',
11
+ 'description',
12
+ 'sourceBranch',
13
+ 'targetBranch',
14
+ 'priority',
15
+ 'status',
16
+ ];
17
+ const STATUS_OPTIONS = ['draft', 'open'];
18
+ function getPriorityColor(priority) {
19
+ if (priority === 1)
20
+ return 'red';
21
+ if (priority === 2)
22
+ return 'yellow';
23
+ return 'green';
24
+ }
25
+ function getPriorityLabel(priority) {
26
+ if (priority === 1)
27
+ return 'High';
28
+ if (priority === 2)
29
+ return 'Medium';
30
+ return 'Low';
31
+ }
32
+ function getStatusColor(status) {
33
+ return status === 'draft' ? 'gray' : 'blue';
34
+ }
35
+ export function PRCreate() {
36
+ const { goBack, navigate } = useNavigation();
37
+ const { state, dispatch } = useAppState();
38
+ const { config } = useConfig();
39
+ const [title, setTitle] = useState('');
40
+ const [description, setDescription] = useState('');
41
+ const [sourceBranch, setSourceBranch] = useState('');
42
+ const [targetBranch, setTargetBranch] = useState('main');
43
+ const [priority, setPriority] = useState(3); // Default to low
44
+ const [status, setStatus] = useState('draft');
45
+ const [activeField, setActiveField] = useState('title');
46
+ const [isSubmitting, setIsSubmitting] = useState(false);
47
+ const [error, setError] = useState(null);
48
+ const priorityLevels = config?.priorityLevels ?? 3;
49
+ const handleSubmit = useCallback(async () => {
50
+ if (!state.selectedProjectPath)
51
+ return;
52
+ if (!title.trim()) {
53
+ setError('Title is required');
54
+ return;
55
+ }
56
+ setIsSubmitting(true);
57
+ setError(null);
58
+ const result = await daemonService.createPr(state.selectedProjectPath, {
59
+ title: title.trim(),
60
+ description: description.trim(),
61
+ sourceBranch: sourceBranch.trim() || undefined,
62
+ targetBranch: targetBranch.trim() || undefined,
63
+ priority,
64
+ status,
65
+ });
66
+ setIsSubmitting(false);
67
+ if (result.success) {
68
+ // Refresh PRs list and navigate back
69
+ dispatch({ type: 'SET_PRS', prs: [] }); // Clear to force reload
70
+ navigate('prs');
71
+ }
72
+ else {
73
+ setError(result.error || 'Failed to create PR');
74
+ }
75
+ }, [
76
+ state.selectedProjectPath,
77
+ title,
78
+ description,
79
+ sourceBranch,
80
+ targetBranch,
81
+ priority,
82
+ status,
83
+ dispatch,
84
+ navigate,
85
+ ]);
86
+ const moveToNextField = useCallback(() => {
87
+ const currentIndex = FIELDS.indexOf(activeField);
88
+ if (currentIndex < FIELDS.length - 1) {
89
+ setActiveField(FIELDS[currentIndex + 1]);
90
+ }
91
+ }, [activeField]);
92
+ const moveToPrevField = useCallback(() => {
93
+ const currentIndex = FIELDS.indexOf(activeField);
94
+ if (currentIndex > 0) {
95
+ setActiveField(FIELDS[currentIndex - 1]);
96
+ }
97
+ }, [activeField]);
98
+ const cyclePriority = useCallback((direction) => {
99
+ if (direction === 'up') {
100
+ setPriority(prev => (prev > 1 ? prev - 1 : priorityLevels));
101
+ }
102
+ else {
103
+ setPriority(prev => (prev < priorityLevels ? prev + 1 : 1));
104
+ }
105
+ }, [priorityLevels]);
106
+ const cycleStatus = useCallback(() => {
107
+ setStatus(prev => (prev === 'draft' ? 'open' : 'draft'));
108
+ }, []);
109
+ useKeyboard((event) => {
110
+ // Cancel with Escape
111
+ if (event.name === 'escape') {
112
+ goBack();
113
+ return;
114
+ }
115
+ // Submit with Ctrl+S
116
+ if (event.ctrl && event.name === 's') {
117
+ handleSubmit();
118
+ return;
119
+ }
120
+ // Navigate between fields with Tab/Shift+Tab
121
+ if (event.name === 'tab') {
122
+ if (event.shift) {
123
+ moveToPrevField();
124
+ }
125
+ else {
126
+ moveToNextField();
127
+ }
128
+ return;
129
+ }
130
+ // Handle input based on active field
131
+ if (activeField === 'priority') {
132
+ if (event.name === 'up' ||
133
+ event.name === 'k' ||
134
+ event.name === 'left' ||
135
+ event.name === 'h') {
136
+ cyclePriority('up');
137
+ }
138
+ else if (event.name === 'down' ||
139
+ event.name === 'j' ||
140
+ event.name === 'right' ||
141
+ event.name === 'l') {
142
+ cyclePriority('down');
143
+ }
144
+ }
145
+ else if (activeField === 'status') {
146
+ if (event.name === 'up' ||
147
+ event.name === 'k' ||
148
+ event.name === 'down' ||
149
+ event.name === 'j' ||
150
+ event.name === 'left' ||
151
+ event.name === 'h' ||
152
+ event.name === 'right' ||
153
+ event.name === 'l') {
154
+ cycleStatus();
155
+ }
156
+ }
157
+ else {
158
+ // Handle text input for title, description, sourceBranch, targetBranch
159
+ const setters = {
160
+ title: setTitle,
161
+ description: setDescription,
162
+ sourceBranch: setSourceBranch,
163
+ targetBranch: setTargetBranch,
164
+ };
165
+ const setter = setters[activeField];
166
+ if (event.name === 'backspace') {
167
+ setter(prev => prev.slice(0, -1));
168
+ }
169
+ else if (event.name === 'return') {
170
+ if (activeField === 'description') {
171
+ setter(prev => prev + '\n');
172
+ }
173
+ else {
174
+ moveToNextField();
175
+ }
176
+ }
177
+ else if (event.name === 'space') {
178
+ setter(prev => prev + ' ');
179
+ }
180
+ else if (event.name.length === 1 && !event.ctrl && !event.meta) {
181
+ const char = event.shift ? event.name.toUpperCase() : event.name;
182
+ setter(prev => prev + char);
183
+ }
184
+ }
185
+ });
186
+ const projectName = state.selectedProjectPath?.split('/').pop() || 'Project';
187
+ if (!state.selectedProjectPath) {
188
+ return (_jsx(MainPanel, { title: "New PR", children: _jsx("text", { fg: "gray", children: "Select a project first." }) }));
189
+ }
190
+ if (isSubmitting) {
191
+ return (_jsx(MainPanel, { title: `New PR - ${projectName}`, children: _jsx("text", { fg: "cyan", children: "Creating PR..." }) }));
192
+ }
193
+ return (_jsx(MainPanel, { title: `New PR - ${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: 3, children: [_jsx("text", { children: description || (activeField === 'description' ? '' : '') }), activeField === 'description' && _jsx("text", { fg: "cyan", children: "_" })] })] }), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsxs("text", { fg: activeField === 'sourceBranch' ? 'cyan' : 'white', children: [_jsxs("b", { children: ["Source Branch ", activeField === 'sourceBranch' ? '▸' : ' '] }), _jsx("text", { fg: "gray", children: " (auto-detected if empty)" })] }), _jsxs("box", { paddingLeft: 2, borderStyle: activeField === 'sourceBranch' ? 'single' : undefined, children: [_jsx("text", { children: sourceBranch || (activeField === 'sourceBranch' ? '│' : '') }), activeField === 'sourceBranch' && _jsx("text", { fg: "cyan", children: "_" })] })] }), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'targetBranch' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Target Branch ", activeField === 'targetBranch' ? '▸' : ' '] }) }), _jsxs("box", { paddingLeft: 2, borderStyle: activeField === 'targetBranch' ? 'single' : undefined, children: [_jsx("text", { children: targetBranch || (activeField === 'targetBranch' ? '│' : '') }), activeField === 'targetBranch' && _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" })] })] }), _jsxs("box", { flexDirection: "column", marginBottom: 1, children: [_jsx("text", { fg: activeField === 'status' ? 'cyan' : 'white', children: _jsxs("b", { children: ["Status ", activeField === 'status' ? '▸' : ' '] }) }), _jsxs("box", { paddingLeft: 2, flexDirection: "row", children: [activeField === 'status' && _jsx("text", { fg: "gray", children: "\u25C0 " }), _jsx("text", { fg: getStatusColor(status), children: status }), activeField === 'status' && _jsx("text", { fg: "gray", children: " \u25B6" })] })] }), _jsx("box", { marginTop: 1, children: _jsx("text", { fg: "green", children: "Press Ctrl+S to create PR" }) })] }) }));
194
+ }
195
+ //# sourceMappingURL=PRCreate.js.map