@arnavpisces/sutra 1.0.0

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 (288) hide show
  1. package/LICENSE +203 -0
  2. package/NOTICE +6 -0
  3. package/README.md +181 -0
  4. package/dist/api/client.d.ts +24 -0
  5. package/dist/api/client.d.ts.map +1 -0
  6. package/dist/api/client.js +168 -0
  7. package/dist/api/client.js.map +1 -0
  8. package/dist/api/confluence-client.d.ts +133 -0
  9. package/dist/api/confluence-client.d.ts.map +1 -0
  10. package/dist/api/confluence-client.js +224 -0
  11. package/dist/api/confluence-client.js.map +1 -0
  12. package/dist/api/jira-client.d.ts +94 -0
  13. package/dist/api/jira-client.d.ts.map +1 -0
  14. package/dist/api/jira-client.js +151 -0
  15. package/dist/api/jira-client.js.map +1 -0
  16. package/dist/app.d.ts +2 -0
  17. package/dist/app.d.ts.map +1 -0
  18. package/dist/app.js +135 -0
  19. package/dist/app.js.map +1 -0
  20. package/dist/components/common/Badge.d.ts +7 -0
  21. package/dist/components/common/Badge.d.ts.map +1 -0
  22. package/dist/components/common/Badge.js +15 -0
  23. package/dist/components/common/Badge.js.map +1 -0
  24. package/dist/components/common/Breadcrumbs.d.ts +5 -0
  25. package/dist/components/common/Breadcrumbs.d.ts.map +1 -0
  26. package/dist/components/common/Breadcrumbs.js +9 -0
  27. package/dist/components/common/Breadcrumbs.js.map +1 -0
  28. package/dist/components/common/Divider.d.ts +7 -0
  29. package/dist/components/common/Divider.d.ts.map +1 -0
  30. package/dist/components/common/Divider.js +13 -0
  31. package/dist/components/common/Divider.js.map +1 -0
  32. package/dist/components/common/EditableTextBox.d.ts +30 -0
  33. package/dist/components/common/EditableTextBox.d.ts.map +1 -0
  34. package/dist/components/common/EditableTextBox.js +512 -0
  35. package/dist/components/common/EditableTextBox.js.map +1 -0
  36. package/dist/components/common/Footer.d.ts +9 -0
  37. package/dist/components/common/Footer.d.ts.map +1 -0
  38. package/dist/components/common/Footer.js +7 -0
  39. package/dist/components/common/Footer.js.map +1 -0
  40. package/dist/components/common/FuzzySelect.d.ts +17 -0
  41. package/dist/components/common/FuzzySelect.d.ts.map +1 -0
  42. package/dist/components/common/FuzzySelect.js +72 -0
  43. package/dist/components/common/FuzzySelect.js.map +1 -0
  44. package/dist/components/common/Header.d.ts +7 -0
  45. package/dist/components/common/Header.d.ts.map +1 -0
  46. package/dist/components/common/Header.js +18 -0
  47. package/dist/components/common/Header.js.map +1 -0
  48. package/dist/components/common/HelpModal.d.ts +13 -0
  49. package/dist/components/common/HelpModal.d.ts.map +1 -0
  50. package/dist/components/common/HelpModal.js +9 -0
  51. package/dist/components/common/HelpModal.js.map +1 -0
  52. package/dist/components/common/KeyHint.d.ts +15 -0
  53. package/dist/components/common/KeyHint.d.ts.map +1 -0
  54. package/dist/components/common/KeyHint.js +10 -0
  55. package/dist/components/common/KeyHint.js.map +1 -0
  56. package/dist/components/common/MenuList.d.ts +15 -0
  57. package/dist/components/common/MenuList.d.ts.map +1 -0
  58. package/dist/components/common/MenuList.js +31 -0
  59. package/dist/components/common/MenuList.js.map +1 -0
  60. package/dist/components/common/Panel.d.ts +12 -0
  61. package/dist/components/common/Panel.d.ts.map +1 -0
  62. package/dist/components/common/Panel.js +6 -0
  63. package/dist/components/common/Panel.js.map +1 -0
  64. package/dist/components/common/ProgressBar.d.ts +11 -0
  65. package/dist/components/common/ProgressBar.d.ts.map +1 -0
  66. package/dist/components/common/ProgressBar.js +11 -0
  67. package/dist/components/common/ProgressBar.js.map +1 -0
  68. package/dist/components/common/SavedList.d.ts +16 -0
  69. package/dist/components/common/SavedList.d.ts.map +1 -0
  70. package/dist/components/common/SavedList.js +37 -0
  71. package/dist/components/common/SavedList.js.map +1 -0
  72. package/dist/components/common/ScrollBox.d.ts +9 -0
  73. package/dist/components/common/ScrollBox.d.ts.map +1 -0
  74. package/dist/components/common/ScrollBox.js +105 -0
  75. package/dist/components/common/ScrollBox.js.map +1 -0
  76. package/dist/components/common/SearchBar.d.ts +10 -0
  77. package/dist/components/common/SearchBar.d.ts.map +1 -0
  78. package/dist/components/common/SearchBar.js +7 -0
  79. package/dist/components/common/SearchBar.js.map +1 -0
  80. package/dist/components/common/SelectableItem.d.ts +14 -0
  81. package/dist/components/common/SelectableItem.d.ts.map +1 -0
  82. package/dist/components/common/SelectableItem.js +14 -0
  83. package/dist/components/common/SelectableItem.js.map +1 -0
  84. package/dist/components/common/Spinner.d.ts +7 -0
  85. package/dist/components/common/Spinner.d.ts.map +1 -0
  86. package/dist/components/common/Spinner.js +23 -0
  87. package/dist/components/common/Spinner.js.map +1 -0
  88. package/dist/components/common/SplitPane.d.ts +8 -0
  89. package/dist/components/common/SplitPane.d.ts.map +1 -0
  90. package/dist/components/common/SplitPane.js +10 -0
  91. package/dist/components/common/SplitPane.js.map +1 -0
  92. package/dist/components/common/StatusBar.d.ts +9 -0
  93. package/dist/components/common/StatusBar.d.ts.map +1 -0
  94. package/dist/components/common/StatusBar.js +6 -0
  95. package/dist/components/common/StatusBar.js.map +1 -0
  96. package/dist/components/common/TabBar.d.ts +9 -0
  97. package/dist/components/common/TabBar.d.ts.map +1 -0
  98. package/dist/components/common/TabBar.js +12 -0
  99. package/dist/components/common/TabBar.js.map +1 -0
  100. package/dist/components/common/Table.d.ts +19 -0
  101. package/dist/components/common/Table.d.ts.map +1 -0
  102. package/dist/components/common/Table.js +24 -0
  103. package/dist/components/common/Table.js.map +1 -0
  104. package/dist/components/common/TextEditor.d.ts +10 -0
  105. package/dist/components/common/TextEditor.d.ts.map +1 -0
  106. package/dist/components/common/TextEditor.js +17 -0
  107. package/dist/components/common/TextEditor.js.map +1 -0
  108. package/dist/components/common/Toast.d.ts +8 -0
  109. package/dist/components/common/Toast.d.ts.map +1 -0
  110. package/dist/components/common/Toast.js +32 -0
  111. package/dist/components/common/Toast.js.map +1 -0
  112. package/dist/components/common/index.d.ts +38 -0
  113. package/dist/components/common/index.d.ts.map +1 -0
  114. package/dist/components/common/index.js +22 -0
  115. package/dist/components/common/index.js.map +1 -0
  116. package/dist/components/confluence/ConfluenceView.d.ts +6 -0
  117. package/dist/components/confluence/ConfluenceView.d.ts.map +1 -0
  118. package/dist/components/confluence/ConfluenceView.js +184 -0
  119. package/dist/components/confluence/ConfluenceView.js.map +1 -0
  120. package/dist/components/confluence/DocTree.d.ts +10 -0
  121. package/dist/components/confluence/DocTree.d.ts.map +1 -0
  122. package/dist/components/confluence/DocTree.js +125 -0
  123. package/dist/components/confluence/DocTree.js.map +1 -0
  124. package/dist/components/confluence/PageAttachments.d.ts +8 -0
  125. package/dist/components/confluence/PageAttachments.d.ts.map +1 -0
  126. package/dist/components/confluence/PageAttachments.js +108 -0
  127. package/dist/components/confluence/PageAttachments.js.map +1 -0
  128. package/dist/components/confluence/PageBrowser.d.ts +8 -0
  129. package/dist/components/confluence/PageBrowser.d.ts.map +1 -0
  130. package/dist/components/confluence/PageBrowser.js +93 -0
  131. package/dist/components/confluence/PageBrowser.js.map +1 -0
  132. package/dist/components/confluence/PageComments.d.ts +8 -0
  133. package/dist/components/confluence/PageComments.d.ts.map +1 -0
  134. package/dist/components/confluence/PageComments.js +75 -0
  135. package/dist/components/confluence/PageComments.js.map +1 -0
  136. package/dist/components/confluence/PageEditor.d.ts +13 -0
  137. package/dist/components/confluence/PageEditor.d.ts.map +1 -0
  138. package/dist/components/confluence/PageEditor.js +37 -0
  139. package/dist/components/confluence/PageEditor.js.map +1 -0
  140. package/dist/components/confluence/PageLabels.d.ts +8 -0
  141. package/dist/components/confluence/PageLabels.d.ts.map +1 -0
  142. package/dist/components/confluence/PageLabels.js +92 -0
  143. package/dist/components/confluence/PageLabels.js.map +1 -0
  144. package/dist/components/confluence/PageList.d.ts +8 -0
  145. package/dist/components/confluence/PageList.d.ts.map +1 -0
  146. package/dist/components/confluence/PageList.js +95 -0
  147. package/dist/components/confluence/PageList.js.map +1 -0
  148. package/dist/components/confluence/PageViewer.d.ts +14 -0
  149. package/dist/components/confluence/PageViewer.d.ts.map +1 -0
  150. package/dist/components/confluence/PageViewer.js +160 -0
  151. package/dist/components/confluence/PageViewer.js.map +1 -0
  152. package/dist/components/confluence/SpaceTree.d.ts +10 -0
  153. package/dist/components/confluence/SpaceTree.d.ts.map +1 -0
  154. package/dist/components/confluence/SpaceTree.js +220 -0
  155. package/dist/components/confluence/SpaceTree.js.map +1 -0
  156. package/dist/components/jira/CommentForm.d.ts +7 -0
  157. package/dist/components/jira/CommentForm.d.ts.map +1 -0
  158. package/dist/components/jira/CommentForm.js +24 -0
  159. package/dist/components/jira/CommentForm.js.map +1 -0
  160. package/dist/components/jira/CreateTicket.d.ts +9 -0
  161. package/dist/components/jira/CreateTicket.d.ts.map +1 -0
  162. package/dist/components/jira/CreateTicket.js +106 -0
  163. package/dist/components/jira/CreateTicket.js.map +1 -0
  164. package/dist/components/jira/IssueList.d.ts +9 -0
  165. package/dist/components/jira/IssueList.d.ts.map +1 -0
  166. package/dist/components/jira/IssueList.js +43 -0
  167. package/dist/components/jira/IssueList.js.map +1 -0
  168. package/dist/components/jira/JiraIssueRow.d.ts +7 -0
  169. package/dist/components/jira/JiraIssueRow.d.ts.map +1 -0
  170. package/dist/components/jira/JiraIssueRow.js +49 -0
  171. package/dist/components/jira/JiraIssueRow.js.map +1 -0
  172. package/dist/components/jira/JiraView.d.ts +7 -0
  173. package/dist/components/jira/JiraView.d.ts.map +1 -0
  174. package/dist/components/jira/JiraView.js +283 -0
  175. package/dist/components/jira/JiraView.js.map +1 -0
  176. package/dist/components/jira/JqlSearch.d.ts +8 -0
  177. package/dist/components/jira/JqlSearch.d.ts.map +1 -0
  178. package/dist/components/jira/JqlSearch.js +51 -0
  179. package/dist/components/jira/JqlSearch.js.map +1 -0
  180. package/dist/components/jira/QuickFilters.d.ts +8 -0
  181. package/dist/components/jira/QuickFilters.d.ts.map +1 -0
  182. package/dist/components/jira/QuickFilters.js +61 -0
  183. package/dist/components/jira/QuickFilters.js.map +1 -0
  184. package/dist/components/jira/StatusSelector.d.ts +9 -0
  185. package/dist/components/jira/StatusSelector.d.ts.map +1 -0
  186. package/dist/components/jira/StatusSelector.js +11 -0
  187. package/dist/components/jira/StatusSelector.js.map +1 -0
  188. package/dist/components/jira/TicketDetail.d.ts +23 -0
  189. package/dist/components/jira/TicketDetail.d.ts.map +1 -0
  190. package/dist/components/jira/TicketDetail.js +409 -0
  191. package/dist/components/jira/TicketDetail.js.map +1 -0
  192. package/dist/components/jira/TicketEditor.d.ts +9 -0
  193. package/dist/components/jira/TicketEditor.d.ts.map +1 -0
  194. package/dist/components/jira/TicketEditor.js +21 -0
  195. package/dist/components/jira/TicketEditor.js.map +1 -0
  196. package/dist/components/jira/TicketList.d.ts +8 -0
  197. package/dist/components/jira/TicketList.d.ts.map +1 -0
  198. package/dist/components/jira/TicketList.js +89 -0
  199. package/dist/components/jira/TicketList.js.map +1 -0
  200. package/dist/config/config-manager.d.ts +11 -0
  201. package/dist/config/config-manager.d.ts.map +1 -0
  202. package/dist/config/config-manager.js +65 -0
  203. package/dist/config/config-manager.js.map +1 -0
  204. package/dist/config/types.d.ts +81 -0
  205. package/dist/config/types.d.ts.map +1 -0
  206. package/dist/config/types.js +16 -0
  207. package/dist/config/types.js.map +1 -0
  208. package/dist/formatters/adf-converter.d.ts +21 -0
  209. package/dist/formatters/adf-converter.d.ts.map +1 -0
  210. package/dist/formatters/adf-converter.js +73 -0
  211. package/dist/formatters/adf-converter.js.map +1 -0
  212. package/dist/formatters/confluence-converter.d.ts +25 -0
  213. package/dist/formatters/confluence-converter.d.ts.map +1 -0
  214. package/dist/formatters/confluence-converter.js +77 -0
  215. package/dist/formatters/confluence-converter.js.map +1 -0
  216. package/dist/formatters/glow-renderer.d.ts +39 -0
  217. package/dist/formatters/glow-renderer.d.ts.map +1 -0
  218. package/dist/formatters/glow-renderer.js +136 -0
  219. package/dist/formatters/glow-renderer.js.map +1 -0
  220. package/dist/formatters/markdown-ansi-renderer.d.ts +24 -0
  221. package/dist/formatters/markdown-ansi-renderer.d.ts.map +1 -0
  222. package/dist/formatters/markdown-ansi-renderer.js +240 -0
  223. package/dist/formatters/markdown-ansi-renderer.js.map +1 -0
  224. package/dist/formatters/mdcat-renderer.d.ts +29 -0
  225. package/dist/formatters/mdcat-renderer.d.ts.map +1 -0
  226. package/dist/formatters/mdcat-renderer.js +106 -0
  227. package/dist/formatters/mdcat-renderer.js.map +1 -0
  228. package/dist/hooks/useConfluencePage.d.ts +9 -0
  229. package/dist/hooks/useConfluencePage.d.ts.map +1 -0
  230. package/dist/hooks/useConfluencePage.js +53 -0
  231. package/dist/hooks/useConfluencePage.js.map +1 -0
  232. package/dist/hooks/useJiraIssue.d.ts +9 -0
  233. package/dist/hooks/useJiraIssue.d.ts.map +1 -0
  234. package/dist/hooks/useJiraIssue.js +52 -0
  235. package/dist/hooks/useJiraIssue.js.map +1 -0
  236. package/dist/index.d.ts +3 -0
  237. package/dist/index.d.ts.map +1 -0
  238. package/dist/index.js +214 -0
  239. package/dist/index.js.map +1 -0
  240. package/dist/storage/bookmarks.d.ts +16 -0
  241. package/dist/storage/bookmarks.d.ts.map +1 -0
  242. package/dist/storage/bookmarks.js +49 -0
  243. package/dist/storage/bookmarks.js.map +1 -0
  244. package/dist/storage/cache.d.ts +12 -0
  245. package/dist/storage/cache.d.ts.map +1 -0
  246. package/dist/storage/cache.js +57 -0
  247. package/dist/storage/cache.js.map +1 -0
  248. package/dist/storage/db.d.ts +4 -0
  249. package/dist/storage/db.d.ts.map +1 -0
  250. package/dist/storage/db.js +63 -0
  251. package/dist/storage/db.js.map +1 -0
  252. package/dist/storage/recents.d.ts +13 -0
  253. package/dist/storage/recents.d.ts.map +1 -0
  254. package/dist/storage/recents.js +40 -0
  255. package/dist/storage/recents.js.map +1 -0
  256. package/dist/theme/te.d.ts +12 -0
  257. package/dist/theme/te.d.ts.map +1 -0
  258. package/dist/theme/te.js +13 -0
  259. package/dist/theme/te.js.map +1 -0
  260. package/dist/utils/cache.d.ts +15 -0
  261. package/dist/utils/cache.d.ts.map +1 -0
  262. package/dist/utils/cache.js +34 -0
  263. package/dist/utils/cache.js.map +1 -0
  264. package/dist/utils/errors.d.ts +16 -0
  265. package/dist/utils/errors.d.ts.map +1 -0
  266. package/dist/utils/errors.js +32 -0
  267. package/dist/utils/errors.js.map +1 -0
  268. package/dist/utils/external-editor.d.ts +32 -0
  269. package/dist/utils/external-editor.d.ts.map +1 -0
  270. package/dist/utils/external-editor.js +173 -0
  271. package/dist/utils/external-editor.js.map +1 -0
  272. package/dist/utils/jira-colors.d.ts +4 -0
  273. package/dist/utils/jira-colors.d.ts.map +1 -0
  274. package/dist/utils/jira-colors.js +47 -0
  275. package/dist/utils/jira-colors.js.map +1 -0
  276. package/dist/utils/links.d.ts +5 -0
  277. package/dist/utils/links.d.ts.map +1 -0
  278. package/dist/utils/links.js +43 -0
  279. package/dist/utils/links.js.map +1 -0
  280. package/dist/utils/markdown-highlighter.d.ts +49 -0
  281. package/dist/utils/markdown-highlighter.d.ts.map +1 -0
  282. package/dist/utils/markdown-highlighter.js +282 -0
  283. package/dist/utils/markdown-highlighter.js.map +1 -0
  284. package/dist/utils/paths.d.ts +3 -0
  285. package/dist/utils/paths.d.ts.map +1 -0
  286. package/dist/utils/paths.js +15 -0
  287. package/dist/utils/paths.js.map +1 -0
  288. package/package.json +74 -0
@@ -0,0 +1,282 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from 'ink';
3
+ /**
4
+ * Markdown syntax highlighter for terminal display
5
+ * Inspired by md-tui's approach: parse markdown elements and apply terminal colors
6
+ */
7
+ // Color configuration (like md-tui's config.toml)
8
+ export const MarkdownColors = {
9
+ // Headings by level
10
+ h1: 'cyanBright',
11
+ h2: 'cyan',
12
+ h3: 'blue',
13
+ h4: 'green',
14
+ h5: 'yellow',
15
+ h6: 'magenta',
16
+ // Inline elements
17
+ bold: 'white',
18
+ italic: 'cyan',
19
+ boldItalic: 'cyan',
20
+ code: 'yellow',
21
+ codeBg: 'gray',
22
+ strikethrough: 'gray',
23
+ // Links and references
24
+ link: 'blueBright',
25
+ linkBrackets: 'gray',
26
+ // Lists
27
+ listMarker: 'cyan',
28
+ taskDone: 'green',
29
+ taskPending: 'yellow',
30
+ // Quotes and special blocks
31
+ quote: 'gray',
32
+ quoteTip: 'green',
33
+ quoteWarning: 'yellow',
34
+ quoteCaution: 'magenta',
35
+ quoteImportant: 'red',
36
+ quoteNote: 'blue',
37
+ // Code blocks
38
+ codeBlockBorder: 'gray',
39
+ codeBlockLang: 'cyan',
40
+ // Horizontal rule
41
+ horizontalRule: 'gray',
42
+ };
43
+ /**
44
+ * Parse and highlight a single line of markdown
45
+ * Returns an array of styled Text components
46
+ */
47
+ export function highlightMarkdownLine(line, lineIndex) {
48
+ const segments = [];
49
+ // Check for block-level elements first
50
+ // Heading detection: # ## ### etc.
51
+ const headingMatch = line.match(/^(#{1,6})\s+(.*)$/);
52
+ if (headingMatch) {
53
+ const level = headingMatch[1].length;
54
+ const headingColors = {
55
+ 1: MarkdownColors.h1,
56
+ 2: MarkdownColors.h2,
57
+ 3: MarkdownColors.h3,
58
+ 4: MarkdownColors.h4,
59
+ 5: MarkdownColors.h5,
60
+ 6: MarkdownColors.h6,
61
+ };
62
+ return (_jsx(Text, { bold: true, color: headingColors[level], children: line }));
63
+ }
64
+ // Horizontal rule: --- or *** or ___
65
+ if (/^(\*{3,}|-{3,}|_{3,})\s*$/.test(line)) {
66
+ return _jsx(Text, { color: MarkdownColors.horizontalRule, children: line });
67
+ }
68
+ // Quote block: > text or special quotes [!tip] etc.
69
+ const quoteMatch = line.match(/^(\s*>\s*)(.*)$/);
70
+ if (quoteMatch) {
71
+ const prefix = quoteMatch[1];
72
+ const content = quoteMatch[2];
73
+ // Check for special quote types
74
+ let quoteColor = MarkdownColors.quote;
75
+ if (content.startsWith('[!tip]'))
76
+ quoteColor = MarkdownColors.quoteTip;
77
+ else if (content.startsWith('[!warning]'))
78
+ quoteColor = MarkdownColors.quoteWarning;
79
+ else if (content.startsWith('[!caution]'))
80
+ quoteColor = MarkdownColors.quoteCaution;
81
+ else if (content.startsWith('[!important]'))
82
+ quoteColor = MarkdownColors.quoteImportant;
83
+ else if (content.startsWith('[!note]'))
84
+ quoteColor = MarkdownColors.quoteNote;
85
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { color: quoteColor, bold: true, children: "\u2502 " }), _jsx(Text, { color: quoteColor, italic: true, children: content })] }));
86
+ }
87
+ // List items: - or * or + or numbered 1.
88
+ const listMatch = line.match(/^(\s*)([-*+]|\d+\.)\s+(.*)$/);
89
+ if (listMatch) {
90
+ const indent = listMatch[1];
91
+ const marker = listMatch[2];
92
+ const content = listMatch[3];
93
+ // Check for task list: - [ ] or - [x]
94
+ const taskMatch = content.match(/^\[([ xX])\]\s*(.*)$/);
95
+ if (taskMatch) {
96
+ const isDone = taskMatch[1].toLowerCase() === 'x';
97
+ const taskContent = taskMatch[2];
98
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: indent }), _jsxs(Text, { color: MarkdownColors.listMarker, children: [marker, " "] }), _jsxs(Text, { color: isDone ? MarkdownColors.taskDone : MarkdownColors.taskPending, children: ["[", isDone ? '✓' : ' ', "]"] }), _jsx(Text, { children: " " }), highlightInlineMarkdown(taskContent)] }));
99
+ }
100
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { children: indent }), _jsxs(Text, { color: MarkdownColors.listMarker, children: [marker, " "] }), highlightInlineMarkdown(content)] }));
101
+ }
102
+ // Code block fence: ```language
103
+ const codeFenceMatch = line.match(/^(`{3,})([\w]*)$/);
104
+ if (codeFenceMatch) {
105
+ const fence = codeFenceMatch[1];
106
+ const lang = codeFenceMatch[2];
107
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { color: MarkdownColors.codeBlockBorder, children: fence }), lang && _jsx(Text, { color: MarkdownColors.codeBlockLang, children: lang })] }));
108
+ }
109
+ // Regular line - highlight inline elements
110
+ return highlightInlineMarkdown(line);
111
+ }
112
+ /**
113
+ * Highlight inline markdown elements: bold, italic, code, links, etc.
114
+ */
115
+ function highlightInlineMarkdown(text) {
116
+ if (!text)
117
+ return _jsx(Text, { children: " " });
118
+ const segments = [];
119
+ let remaining = text;
120
+ let keyIndex = 0;
121
+ // Patterns in order of precedence (most specific first)
122
+ const patterns = [
123
+ // Inline code: `code`
124
+ {
125
+ regex: /`([^`]+)`/,
126
+ render: (match, key) => (_jsx(Text, { color: MarkdownColors.code, backgroundColor: MarkdownColors.codeBg, children: match[0] }, key)),
127
+ },
128
+ // Bold + Italic: ***text*** or ___text___
129
+ {
130
+ regex: /(\*{3}|_{3})([^*_]+)\1/,
131
+ render: (match, key) => (_jsx(Text, { color: MarkdownColors.boldItalic, bold: true, italic: true, children: match[0] }, key)),
132
+ },
133
+ // Bold: **text** or __text__
134
+ {
135
+ regex: /(\*{2}|_{2})([^*_]+)\1/,
136
+ render: (match, key) => (_jsx(Text, { color: MarkdownColors.bold, bold: true, children: match[0] }, key)),
137
+ },
138
+ // Italic: *text* or _text_
139
+ {
140
+ regex: /(\*|_)([^*_]+)\1/,
141
+ render: (match, key) => (_jsx(Text, { color: MarkdownColors.italic, italic: true, children: match[0] }, key)),
142
+ },
143
+ // Strikethrough: ~~text~~
144
+ {
145
+ regex: /~~([^~]+)~~/,
146
+ render: (match, key) => (_jsx(Text, { color: MarkdownColors.strikethrough, strikethrough: true, children: match[0] }, key)),
147
+ },
148
+ // Links: [text](url)
149
+ {
150
+ regex: /\[([^\]]+)\]\(([^)]+)\)/,
151
+ render: (match, key) => (_jsxs(Text, { children: [_jsx(Text, { color: MarkdownColors.linkBrackets, children: "[" }), _jsx(Text, { color: MarkdownColors.link, underline: true, children: match[1] }), _jsx(Text, { color: MarkdownColors.linkBrackets, children: "](" }), _jsx(Text, { color: MarkdownColors.link, dimColor: true, children: match[2] }), _jsx(Text, { color: MarkdownColors.linkBrackets, children: ")" })] }, key)),
152
+ },
153
+ // Image: ![alt](url)
154
+ {
155
+ regex: /!\[([^\]]*)\]\(([^)]+)\)/,
156
+ render: (match, key) => (_jsxs(Text, { children: [_jsx(Text, { color: MarkdownColors.linkBrackets, children: "![" }), _jsx(Text, { color: MarkdownColors.link, children: match[1] }), _jsx(Text, { color: MarkdownColors.linkBrackets, children: "](" }), _jsx(Text, { color: MarkdownColors.link, dimColor: true, children: match[2] }), _jsx(Text, { color: MarkdownColors.linkBrackets, children: ")" })] }, key)),
157
+ },
158
+ // Reference links: [text][ref]
159
+ {
160
+ regex: /\[([^\]]+)\]\[([^\]]*)\]/,
161
+ render: (match, key) => (_jsxs(Text, { children: [_jsx(Text, { color: MarkdownColors.linkBrackets, children: "[" }), _jsx(Text, { color: MarkdownColors.link, underline: true, children: match[1] }), _jsx(Text, { color: MarkdownColors.linkBrackets, children: "][" }), _jsx(Text, { color: MarkdownColors.link, dimColor: true, children: match[2] }), _jsx(Text, { color: MarkdownColors.linkBrackets, children: "]" })] }, key)),
162
+ },
163
+ ];
164
+ while (remaining.length > 0) {
165
+ let earliestMatch = null;
166
+ // Find the earliest matching pattern
167
+ for (const pattern of patterns) {
168
+ const match = remaining.match(pattern.regex);
169
+ if (match && match.index !== undefined) {
170
+ if (!earliestMatch || match.index < earliestMatch.index) {
171
+ earliestMatch = { pattern, match, index: match.index };
172
+ }
173
+ }
174
+ }
175
+ if (earliestMatch) {
176
+ // Add text before the match
177
+ if (earliestMatch.index > 0) {
178
+ segments.push(_jsx(Text, { children: remaining.slice(0, earliestMatch.index) }, keyIndex++));
179
+ }
180
+ // Add the matched element
181
+ segments.push(earliestMatch.pattern.render(earliestMatch.match, keyIndex++));
182
+ // Continue with remaining text
183
+ remaining = remaining.slice(earliestMatch.index + earliestMatch.match[0].length);
184
+ }
185
+ else {
186
+ // No more matches, add remaining text
187
+ segments.push(_jsx(Text, { children: remaining }, keyIndex++));
188
+ break;
189
+ }
190
+ }
191
+ return _jsx(_Fragment, { children: segments });
192
+ }
193
+ /**
194
+ * Detect if we're inside a code block based on line context
195
+ * Returns the language if inside a code block, null otherwise
196
+ */
197
+ export function detectCodeBlock(lines, currentLine) {
198
+ let inCodeBlock = false;
199
+ let language = null;
200
+ for (let i = 0; i <= currentLine; i++) {
201
+ const fenceMatch = lines[i].match(/^`{3,}([\w]*)$/);
202
+ if (fenceMatch) {
203
+ if (!inCodeBlock) {
204
+ inCodeBlock = true;
205
+ language = fenceMatch[1] || 'text';
206
+ }
207
+ else {
208
+ inCodeBlock = false;
209
+ language = null;
210
+ }
211
+ }
212
+ }
213
+ return inCodeBlock ? language : null;
214
+ }
215
+ /**
216
+ * Apply simple syntax highlighting to code based on language
217
+ * This is a simplified version - md-tui uses tree-sitter for full parsing
218
+ */
219
+ export function highlightCodeLine(line, language) {
220
+ // Common keywords for various languages
221
+ const keywords = {
222
+ javascript: ['const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while', 'class', 'import', 'export', 'from', 'async', 'await', 'try', 'catch', 'throw', 'new', 'this', 'null', 'undefined', 'true', 'false'],
223
+ typescript: ['const', 'let', 'var', 'function', 'return', 'if', 'else', 'for', 'while', 'class', 'import', 'export', 'from', 'async', 'await', 'try', 'catch', 'throw', 'new', 'this', 'null', 'undefined', 'true', 'false', 'interface', 'type', 'enum', 'implements', 'extends', 'public', 'private', 'protected'],
224
+ python: ['def', 'class', 'import', 'from', 'return', 'if', 'elif', 'else', 'for', 'while', 'try', 'except', 'raise', 'with', 'as', 'lambda', 'True', 'False', 'None', 'and', 'or', 'not', 'in', 'is', 'async', 'await'],
225
+ rust: ['fn', 'let', 'mut', 'const', 'struct', 'enum', 'impl', 'trait', 'pub', 'use', 'mod', 'if', 'else', 'match', 'for', 'while', 'loop', 'return', 'self', 'Self', 'true', 'false', 'async', 'await', 'move', 'ref', 'where'],
226
+ go: ['func', 'var', 'const', 'type', 'struct', 'interface', 'package', 'import', 'if', 'else', 'for', 'range', 'switch', 'case', 'return', 'defer', 'go', 'chan', 'select', 'true', 'false', 'nil'],
227
+ bash: ['if', 'then', 'else', 'fi', 'for', 'do', 'done', 'while', 'case', 'esac', 'function', 'return', 'exit', 'echo', 'export', 'source', 'local', 'readonly'],
228
+ json: [],
229
+ yaml: [],
230
+ html: [],
231
+ css: [],
232
+ };
233
+ const langKeywords = keywords[language.toLowerCase()] || keywords['javascript'] || [];
234
+ if (langKeywords.length === 0) {
235
+ // No highlighting for this language
236
+ return _jsx(Text, { color: "white", children: line });
237
+ }
238
+ const segments = [];
239
+ let remaining = line;
240
+ let keyIndex = 0;
241
+ // Simple tokenizer patterns
242
+ const tokenPatterns = [
243
+ // Strings (double quotes)
244
+ { regex: /"(?:[^"\\]|\\.)*"/, color: 'magenta' },
245
+ // Strings (single quotes)
246
+ { regex: /'(?:[^'\\]|\\.)*'/, color: 'magenta' },
247
+ // Template strings
248
+ { regex: /`(?:[^`\\]|\\.)*`/, color: 'magenta' },
249
+ // Comments (// and #)
250
+ { regex: /\/\/.*$|#.*$/, color: 'gray' },
251
+ // Numbers
252
+ { regex: /\b\d+(\.\d+)?\b/, color: 'yellow' },
253
+ // Keywords (built dynamically)
254
+ { regex: new RegExp(`\\b(${langKeywords.join('|')})\\b`), color: 'red', bold: true },
255
+ // Function calls
256
+ { regex: /\b([a-zA-Z_]\w*)\s*\(/, color: 'green' },
257
+ ];
258
+ while (remaining.length > 0) {
259
+ let earliestMatch = null;
260
+ for (const pattern of tokenPatterns) {
261
+ const match = remaining.match(pattern.regex);
262
+ if (match && match.index !== undefined) {
263
+ if (!earliestMatch || match.index < earliestMatch.index) {
264
+ earliestMatch = { pattern, match, index: match.index };
265
+ }
266
+ }
267
+ }
268
+ if (earliestMatch) {
269
+ if (earliestMatch.index > 0) {
270
+ segments.push(_jsx(Text, { color: "white", children: remaining.slice(0, earliestMatch.index) }, keyIndex++));
271
+ }
272
+ segments.push(_jsx(Text, { color: earliestMatch.pattern.color, bold: earliestMatch.pattern.bold, children: earliestMatch.match[0] }, keyIndex++));
273
+ remaining = remaining.slice(earliestMatch.index + earliestMatch.match[0].length);
274
+ }
275
+ else {
276
+ segments.push(_jsx(Text, { color: "white", children: remaining }, keyIndex++));
277
+ break;
278
+ }
279
+ }
280
+ return _jsx(_Fragment, { children: segments });
281
+ }
282
+ //# sourceMappingURL=markdown-highlighter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-highlighter.js","sourceRoot":"","sources":["../../src/utils/markdown-highlighter.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getDownloadsDir(): string;
2
+ export declare function normalizeDraggedPath(input: string): string;
3
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
@@ -0,0 +1,15 @@
1
+ import { homedir } from 'os';
2
+ import { join } from 'path';
3
+ export function getDownloadsDir() {
4
+ return join(homedir(), 'Downloads');
5
+ }
6
+ export function normalizeDraggedPath(input) {
7
+ // Drag & drop often wraps paths in quotes or escapes spaces
8
+ const trimmed = input.trim();
9
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
10
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
11
+ return trimmed.slice(1, -1);
12
+ }
13
+ return trimmed.replace(/\\ /g, ' ');
14
+ }
15
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,4DAA4D;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@arnavpisces/sutra",
3
+ "version": "1.0.0",
4
+ "description": "Terminal TUI for Jira tickets and Confluence docs",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "files": [
8
+ "dist",
9
+ "README.md",
10
+ "LICENSE",
11
+ "NOTICE"
12
+ ],
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/arnavpisces/sutra.git"
16
+ },
17
+ "bugs": {
18
+ "url": "https://github.com/arnavpisces/sutra/issues"
19
+ },
20
+ "homepage": "https://github.com/arnavpisces/sutra#readme",
21
+ "engines": {
22
+ "node": ">=20"
23
+ },
24
+ "publishConfig": {
25
+ "access": "public"
26
+ },
27
+ "bin": {
28
+ "sutra": "dist/index.js"
29
+ },
30
+ "scripts": {
31
+ "dev": "tsx src/index.tsx",
32
+ "build": "tsc",
33
+ "start": "node dist/index.js",
34
+ "prepack": "npm run build",
35
+ "check:pack": "npm pack --dry-run",
36
+ "prepublishOnly": "npm run build && npm run check:pack",
37
+ "test": "echo \"Error: no test specified\" && exit 1"
38
+ },
39
+ "keywords": [
40
+ "jira",
41
+ "confluence",
42
+ "atlassian",
43
+ "terminal",
44
+ "tui"
45
+ ],
46
+ "author": "Arnav Kumar",
47
+ "license": "Apache-2.0",
48
+ "dependencies": {
49
+ "adf-to-markdown": "^1.0.1",
50
+ "better-sqlite3": "^11.5.0",
51
+ "chalk": "^4.1.2",
52
+ "clipboardy": "^5.1.0",
53
+ "commander": "^12.1.0",
54
+ "conf": "^13.1.0",
55
+ "fuse.js": "^7.1.0",
56
+ "ink": "^5.2.1",
57
+ "ink-select-input": "^6.2.0",
58
+ "ink-text-input": "^6.0.0",
59
+ "ky": "^1.14.3",
60
+ "markdown-it": "^14.1.0",
61
+ "marklassian": "^1.1.0",
62
+ "turndown": "^7.2.2",
63
+ "zod": "^3.25.76"
64
+ },
65
+ "devDependencies": {
66
+ "@types/better-sqlite3": "^7.6.7",
67
+ "@types/markdown-it": "^14.1.2",
68
+ "@types/node": "^25.1.0",
69
+ "@types/react": "^19.2.10",
70
+ "@types/turndown": "^5.0.6",
71
+ "tsx": "^4.21.0",
72
+ "typescript": "^5.9.3"
73
+ }
74
+ }