termui 0.1.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 (241) hide show
  1. package/README.md +198 -0
  2. package/package.json +38 -0
  3. package/packages/cli/package.json +36 -0
  4. package/packages/components/dist/data/List.d.ts +15 -0
  5. package/packages/components/dist/data/List.d.ts.map +1 -0
  6. package/packages/components/dist/data/List.js +40 -0
  7. package/packages/components/dist/data/List.js.map +1 -0
  8. package/packages/components/dist/data/Table.d.ts +17 -0
  9. package/packages/components/dist/data/Table.d.ts.map +1 -0
  10. package/packages/components/dist/data/Table.js +74 -0
  11. package/packages/components/dist/data/Table.js.map +1 -0
  12. package/packages/components/dist/data/index.d.ts +5 -0
  13. package/packages/components/dist/data/index.d.ts.map +1 -0
  14. package/packages/components/dist/data/index.js +3 -0
  15. package/packages/components/dist/data/index.js.map +1 -0
  16. package/packages/components/dist/feedback/Alert.d.ts +10 -0
  17. package/packages/components/dist/feedback/Alert.d.ts.map +1 -0
  18. package/packages/components/dist/feedback/Alert.js +23 -0
  19. package/packages/components/dist/feedback/Alert.js.map +1 -0
  20. package/packages/components/dist/feedback/ProgressBar.d.ts +13 -0
  21. package/packages/components/dist/feedback/ProgressBar.d.ts.map +1 -0
  22. package/packages/components/dist/feedback/ProgressBar.js +13 -0
  23. package/packages/components/dist/feedback/ProgressBar.js.map +1 -0
  24. package/packages/components/dist/feedback/Spinner.d.ts +9 -0
  25. package/packages/components/dist/feedback/Spinner.d.ts.map +1 -0
  26. package/packages/components/dist/feedback/Spinner.js +26 -0
  27. package/packages/components/dist/feedback/Spinner.js.map +1 -0
  28. package/packages/components/dist/feedback/index.d.ts +7 -0
  29. package/packages/components/dist/feedback/index.d.ts.map +1 -0
  30. package/packages/components/dist/feedback/index.js +4 -0
  31. package/packages/components/dist/feedback/index.js.map +1 -0
  32. package/packages/components/dist/forms/Form.d.ts +22 -0
  33. package/packages/components/dist/forms/Form.d.ts.map +1 -0
  34. package/packages/components/dist/forms/Form.js +45 -0
  35. package/packages/components/dist/forms/Form.js.map +1 -0
  36. package/packages/components/dist/forms/index.d.ts +3 -0
  37. package/packages/components/dist/forms/index.d.ts.map +1 -0
  38. package/packages/components/dist/forms/index.js +2 -0
  39. package/packages/components/dist/forms/index.js.map +1 -0
  40. package/packages/components/dist/index.d.ts +11 -0
  41. package/packages/components/dist/index.d.ts.map +1 -0
  42. package/packages/components/dist/index.js +21 -0
  43. package/packages/components/dist/index.js.map +1 -0
  44. package/packages/components/dist/input/TextInput.d.ts +14 -0
  45. package/packages/components/dist/input/TextInput.d.ts.map +1 -0
  46. package/packages/components/dist/input/TextInput.js +44 -0
  47. package/packages/components/dist/input/TextInput.js.map +1 -0
  48. package/packages/components/dist/input/index.d.ts +3 -0
  49. package/packages/components/dist/input/index.d.ts.map +1 -0
  50. package/packages/components/dist/input/index.js +2 -0
  51. package/packages/components/dist/input/index.js.map +1 -0
  52. package/packages/components/dist/layout/Box.d.ts +11 -0
  53. package/packages/components/dist/layout/Box.d.ts.map +1 -0
  54. package/packages/components/dist/layout/Box.js +18 -0
  55. package/packages/components/dist/layout/Box.js.map +1 -0
  56. package/packages/components/dist/layout/Grid.d.ts +8 -0
  57. package/packages/components/dist/layout/Grid.d.ts.map +1 -0
  58. package/packages/components/dist/layout/Grid.js +12 -0
  59. package/packages/components/dist/layout/Grid.js.map +1 -0
  60. package/packages/components/dist/layout/ScrollView.d.ts +9 -0
  61. package/packages/components/dist/layout/ScrollView.d.ts.map +1 -0
  62. package/packages/components/dist/layout/ScrollView.js +26 -0
  63. package/packages/components/dist/layout/ScrollView.js.map +1 -0
  64. package/packages/components/dist/layout/Stack.d.ts +12 -0
  65. package/packages/components/dist/layout/Stack.d.ts.map +1 -0
  66. package/packages/components/dist/layout/Stack.js +6 -0
  67. package/packages/components/dist/layout/Stack.js.map +1 -0
  68. package/packages/components/dist/layout/index.d.ts +9 -0
  69. package/packages/components/dist/layout/index.d.ts.map +1 -0
  70. package/packages/components/dist/layout/index.js +5 -0
  71. package/packages/components/dist/layout/index.js.map +1 -0
  72. package/packages/components/dist/navigation/Tabs.d.ts +15 -0
  73. package/packages/components/dist/navigation/Tabs.d.ts.map +1 -0
  74. package/packages/components/dist/navigation/Tabs.js +34 -0
  75. package/packages/components/dist/navigation/Tabs.js.map +1 -0
  76. package/packages/components/dist/navigation/index.d.ts +3 -0
  77. package/packages/components/dist/navigation/index.d.ts.map +1 -0
  78. package/packages/components/dist/navigation/index.js +2 -0
  79. package/packages/components/dist/navigation/index.js.map +1 -0
  80. package/packages/components/dist/overlays/Modal.d.ts +10 -0
  81. package/packages/components/dist/overlays/Modal.d.ts.map +1 -0
  82. package/packages/components/dist/overlays/Modal.js +16 -0
  83. package/packages/components/dist/overlays/Modal.js.map +1 -0
  84. package/packages/components/dist/overlays/index.d.ts +3 -0
  85. package/packages/components/dist/overlays/index.d.ts.map +1 -0
  86. package/packages/components/dist/overlays/index.js +2 -0
  87. package/packages/components/dist/overlays/index.js.map +1 -0
  88. package/packages/components/dist/selection/Checkbox.d.ts +10 -0
  89. package/packages/components/dist/selection/Checkbox.d.ts.map +1 -0
  90. package/packages/components/dist/selection/Checkbox.js +26 -0
  91. package/packages/components/dist/selection/Checkbox.js.map +1 -0
  92. package/packages/components/dist/selection/Select.d.ts +17 -0
  93. package/packages/components/dist/selection/Select.d.ts.map +1 -0
  94. package/packages/components/dist/selection/Select.js +44 -0
  95. package/packages/components/dist/selection/Select.js.map +1 -0
  96. package/packages/components/dist/selection/index.d.ts +5 -0
  97. package/packages/components/dist/selection/index.d.ts.map +1 -0
  98. package/packages/components/dist/selection/index.js +3 -0
  99. package/packages/components/dist/selection/index.js.map +1 -0
  100. package/packages/components/dist/typography/Badge.d.ts +9 -0
  101. package/packages/components/dist/typography/Badge.d.ts.map +1 -0
  102. package/packages/components/dist/typography/Badge.js +18 -0
  103. package/packages/components/dist/typography/Badge.js.map +1 -0
  104. package/packages/components/dist/typography/Text.d.ts +15 -0
  105. package/packages/components/dist/typography/Text.d.ts.map +1 -0
  106. package/packages/components/dist/typography/Text.js +6 -0
  107. package/packages/components/dist/typography/Text.js.map +1 -0
  108. package/packages/components/dist/typography/index.d.ts +5 -0
  109. package/packages/components/dist/typography/index.d.ts.map +1 -0
  110. package/packages/components/dist/typography/index.js +3 -0
  111. package/packages/components/dist/typography/index.js.map +1 -0
  112. package/packages/components/dist/utility/Panel.d.ts +14 -0
  113. package/packages/components/dist/utility/Panel.d.ts.map +1 -0
  114. package/packages/components/dist/utility/Panel.js +8 -0
  115. package/packages/components/dist/utility/Panel.js.map +1 -0
  116. package/packages/components/dist/utility/Toggle.d.ts +11 -0
  117. package/packages/components/dist/utility/Toggle.d.ts.map +1 -0
  118. package/packages/components/dist/utility/Toggle.js +23 -0
  119. package/packages/components/dist/utility/Toggle.js.map +1 -0
  120. package/packages/components/dist/utility/index.d.ts +5 -0
  121. package/packages/components/dist/utility/index.d.ts.map +1 -0
  122. package/packages/components/dist/utility/index.js +3 -0
  123. package/packages/components/dist/utility/index.js.map +1 -0
  124. package/packages/components/package.json +36 -0
  125. package/packages/core/dist/hooks/index.d.ts +18 -0
  126. package/packages/core/dist/hooks/index.d.ts.map +1 -0
  127. package/packages/core/dist/hooks/index.js +13 -0
  128. package/packages/core/dist/hooks/index.js.map +1 -0
  129. package/packages/core/dist/hooks/useAnimation.d.ts +7 -0
  130. package/packages/core/dist/hooks/useAnimation.d.ts.map +1 -0
  131. package/packages/core/dist/hooks/useAnimation.js +40 -0
  132. package/packages/core/dist/hooks/useAnimation.js.map +1 -0
  133. package/packages/core/dist/hooks/useAsync.d.ts +25 -0
  134. package/packages/core/dist/hooks/useAsync.d.ts.map +1 -0
  135. package/packages/core/dist/hooks/useAsync.js +37 -0
  136. package/packages/core/dist/hooks/useAsync.js.map +1 -0
  137. package/packages/core/dist/hooks/useClipboard.d.ts +9 -0
  138. package/packages/core/dist/hooks/useClipboard.d.ts.map +1 -0
  139. package/packages/core/dist/hooks/useClipboard.js +14 -0
  140. package/packages/core/dist/hooks/useClipboard.js.map +1 -0
  141. package/packages/core/dist/hooks/useFocus.d.ts +10 -0
  142. package/packages/core/dist/hooks/useFocus.d.ts.map +1 -0
  143. package/packages/core/dist/hooks/useFocus.js +6 -0
  144. package/packages/core/dist/hooks/useFocus.js.map +1 -0
  145. package/packages/core/dist/hooks/useFocusManager.d.ts +9 -0
  146. package/packages/core/dist/hooks/useFocusManager.d.ts.map +1 -0
  147. package/packages/core/dist/hooks/useFocusManager.js +6 -0
  148. package/packages/core/dist/hooks/useFocusManager.js.map +1 -0
  149. package/packages/core/dist/hooks/useInput.d.ts +22 -0
  150. package/packages/core/dist/hooks/useInput.d.ts.map +1 -0
  151. package/packages/core/dist/hooks/useInput.js +6 -0
  152. package/packages/core/dist/hooks/useInput.js.map +1 -0
  153. package/packages/core/dist/hooks/useInterval.d.ts +6 -0
  154. package/packages/core/dist/hooks/useInterval.d.ts.map +1 -0
  155. package/packages/core/dist/hooks/useInterval.js +18 -0
  156. package/packages/core/dist/hooks/useInterval.js.map +1 -0
  157. package/packages/core/dist/hooks/useKeymap.d.ts +13 -0
  158. package/packages/core/dist/hooks/useKeymap.d.ts.map +1 -0
  159. package/packages/core/dist/hooks/useKeymap.js +36 -0
  160. package/packages/core/dist/hooks/useKeymap.js.map +1 -0
  161. package/packages/core/dist/hooks/useMouse.d.ts +19 -0
  162. package/packages/core/dist/hooks/useMouse.d.ts.map +1 -0
  163. package/packages/core/dist/hooks/useMouse.js +60 -0
  164. package/packages/core/dist/hooks/useMouse.js.map +1 -0
  165. package/packages/core/dist/hooks/useResize.d.ts +7 -0
  166. package/packages/core/dist/hooks/useResize.d.ts.map +1 -0
  167. package/packages/core/dist/hooks/useResize.js +27 -0
  168. package/packages/core/dist/hooks/useResize.js.map +1 -0
  169. package/packages/core/dist/hooks/useTerminal.d.ts +4 -0
  170. package/packages/core/dist/hooks/useTerminal.d.ts.map +1 -0
  171. package/packages/core/dist/hooks/useTerminal.js +17 -0
  172. package/packages/core/dist/hooks/useTerminal.js.map +1 -0
  173. package/packages/core/dist/hooks/useTheme.d.ts +2 -0
  174. package/packages/core/dist/hooks/useTheme.d.ts.map +1 -0
  175. package/packages/core/dist/hooks/useTheme.js +3 -0
  176. package/packages/core/dist/hooks/useTheme.js.map +1 -0
  177. package/packages/core/dist/index.d.ts +4 -0
  178. package/packages/core/dist/index.d.ts.map +1 -0
  179. package/packages/core/dist/index.js +7 -0
  180. package/packages/core/dist/index.js.map +1 -0
  181. package/packages/core/dist/styling/ThemeProvider.d.ts +15 -0
  182. package/packages/core/dist/styling/ThemeProvider.d.ts.map +1 -0
  183. package/packages/core/dist/styling/ThemeProvider.js +44 -0
  184. package/packages/core/dist/styling/ThemeProvider.js.map +1 -0
  185. package/packages/core/dist/styling/index.d.ts +7 -0
  186. package/packages/core/dist/styling/index.d.ts.map +1 -0
  187. package/packages/core/dist/styling/index.js +7 -0
  188. package/packages/core/dist/styling/index.js.map +1 -0
  189. package/packages/core/dist/styling/style.d.ts +25 -0
  190. package/packages/core/dist/styling/style.d.ts.map +1 -0
  191. package/packages/core/dist/styling/style.js +57 -0
  192. package/packages/core/dist/styling/style.js.map +1 -0
  193. package/packages/core/dist/styling/themes/default.d.ts +3 -0
  194. package/packages/core/dist/styling/themes/default.d.ts.map +1 -0
  195. package/packages/core/dist/styling/themes/default.js +49 -0
  196. package/packages/core/dist/styling/themes/default.js.map +1 -0
  197. package/packages/core/dist/styling/themes/dracula.d.ts +3 -0
  198. package/packages/core/dist/styling/themes/dracula.d.ts.map +1 -0
  199. package/packages/core/dist/styling/themes/dracula.js +49 -0
  200. package/packages/core/dist/styling/themes/dracula.js.map +1 -0
  201. package/packages/core/dist/styling/themes/nord.d.ts +3 -0
  202. package/packages/core/dist/styling/themes/nord.d.ts.map +1 -0
  203. package/packages/core/dist/styling/themes/nord.js +49 -0
  204. package/packages/core/dist/styling/themes/nord.js.map +1 -0
  205. package/packages/core/dist/styling/tokens.d.ts +57 -0
  206. package/packages/core/dist/styling/tokens.d.ts.map +1 -0
  207. package/packages/core/dist/styling/tokens.js +6 -0
  208. package/packages/core/dist/styling/tokens.js.map +1 -0
  209. package/packages/core/dist/terminal/ansi.d.ts +107 -0
  210. package/packages/core/dist/terminal/ansi.d.ts.map +1 -0
  211. package/packages/core/dist/terminal/ansi.js +153 -0
  212. package/packages/core/dist/terminal/ansi.js.map +1 -0
  213. package/packages/core/dist/terminal/capabilities.d.ts +21 -0
  214. package/packages/core/dist/terminal/capabilities.d.ts.map +1 -0
  215. package/packages/core/dist/terminal/capabilities.js +74 -0
  216. package/packages/core/dist/terminal/capabilities.js.map +1 -0
  217. package/packages/core/dist/terminal/index.d.ts +3 -0
  218. package/packages/core/dist/terminal/index.d.ts.map +1 -0
  219. package/packages/core/dist/terminal/index.js +3 -0
  220. package/packages/core/dist/terminal/index.js.map +1 -0
  221. package/packages/core/package.json +49 -0
  222. package/registry/components/alert/meta.json +9 -0
  223. package/registry/components/badge/meta.json +9 -0
  224. package/registry/components/box/meta.json +9 -0
  225. package/registry/components/checkbox/meta.json +9 -0
  226. package/registry/components/form/meta.json +9 -0
  227. package/registry/components/grid/meta.json +9 -0
  228. package/registry/components/list/meta.json +9 -0
  229. package/registry/components/modal/meta.json +9 -0
  230. package/registry/components/panel/meta.json +9 -0
  231. package/registry/components/progress-bar/meta.json +9 -0
  232. package/registry/components/scroll-view/meta.json +9 -0
  233. package/registry/components/select/meta.json +9 -0
  234. package/registry/components/spinner/meta.json +9 -0
  235. package/registry/components/stack/meta.json +9 -0
  236. package/registry/components/table/meta.json +9 -0
  237. package/registry/components/tabs/meta.json +9 -0
  238. package/registry/components/text/meta.json +9 -0
  239. package/registry/components/text-input/meta.json +9 -0
  240. package/registry/components/toggle/meta.json +9 -0
  241. package/registry/schema.json +178 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInput.d.ts","sourceRoot":"","sources":["../../src/hooks/useInput.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,GAAG;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;AAE7D,wDAAwD;AACxD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAEtF"}
@@ -0,0 +1,6 @@
1
+ import { useInput as inkUseInput } from 'ink';
2
+ /** Keyboard input hook — delegates to Ink's useInput */
3
+ export function useInput(handler, options) {
4
+ inkUseInput(handler, options);
5
+ }
6
+ //# sourceMappingURL=useInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInput.js","sourceRoot":"","sources":["../../src/hooks/useInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,MAAM,KAAK,CAAC;AAqB9C,wDAAwD;AACxD,MAAM,UAAU,QAAQ,CAAC,OAAqB,EAAE,OAAgC;IAC9E,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * React-safe setInterval hook with automatic cleanup.
3
+ * The callback is always fresh (via ref) so stale closure is not an issue.
4
+ */
5
+ export declare function useInterval(callback: () => void, delay: number | null): void;
6
+ //# sourceMappingURL=useInterval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInterval.d.ts","sourceRoot":"","sources":["../../src/hooks/useInterval.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAY5E"}
@@ -0,0 +1,18 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /**
3
+ * React-safe setInterval hook with automatic cleanup.
4
+ * The callback is always fresh (via ref) so stale closure is not an issue.
5
+ */
6
+ export function useInterval(callback, delay) {
7
+ const savedCallback = useRef(callback);
8
+ useEffect(() => {
9
+ savedCallback.current = callback;
10
+ }, [callback]);
11
+ useEffect(() => {
12
+ if (delay === null)
13
+ return;
14
+ const id = setInterval(() => savedCallback.current(), delay);
15
+ return () => clearInterval(id);
16
+ }, [delay]);
17
+ }
18
+ //# sourceMappingURL=useInterval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInterval.js","sourceRoot":"","sources":["../../src/hooks/useInterval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAoB,EAAE,KAAoB;IACpE,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvC,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,CAAC,OAAO,GAAG,QAAQ,CAAC;IACnC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO;QAC3B,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type KeyBinding = {
2
+ key?: string;
3
+ ctrl?: boolean;
4
+ shift?: boolean;
5
+ meta?: boolean;
6
+ action: () => void;
7
+ };
8
+ /**
9
+ * Declarative keybinding registration with conflict detection.
10
+ * Pass an array of KeyBinding objects; the hook handles matching and invocation.
11
+ */
12
+ export declare function useKeymap(bindings: KeyBinding[], isActive?: boolean): void;
13
+ //# sourceMappingURL=useKeymap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeymap.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeymap.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,QAAQ,UAAO,GAAG,IAAI,CA+BvE"}
@@ -0,0 +1,36 @@
1
+ import { useEffect, useRef } from 'react';
2
+ import { useInput } from './useInput.js';
3
+ /**
4
+ * Declarative keybinding registration with conflict detection.
5
+ * Pass an array of KeyBinding objects; the hook handles matching and invocation.
6
+ */
7
+ export function useKeymap(bindings, isActive = true) {
8
+ const bindingsRef = useRef(bindings);
9
+ useEffect(() => {
10
+ bindingsRef.current = bindings;
11
+ }, [bindings]);
12
+ // Detect conflicts on mount
13
+ useEffect(() => {
14
+ const seen = new Set();
15
+ for (const b of bindings) {
16
+ const id = `${b.key ?? ''}:${b.ctrl ? 'ctrl' : ''}:${b.shift ? 'shift' : ''}:${b.meta ? 'meta' : ''}`;
17
+ if (seen.has(id)) {
18
+ console.warn(`[useKeymap] Conflicting keybinding: ${id}`);
19
+ }
20
+ seen.add(id);
21
+ }
22
+ // eslint-disable-next-line react-hooks/exhaustive-deps
23
+ }, []);
24
+ useInput((input, key) => {
25
+ for (const binding of bindingsRef.current) {
26
+ const keyMatch = !binding.key || input === binding.key;
27
+ const ctrlMatch = binding.ctrl === undefined || binding.ctrl === key.ctrl;
28
+ const shiftMatch = binding.shift === undefined || binding.shift === key.shift;
29
+ const metaMatch = binding.meta === undefined || binding.meta === key.meta;
30
+ if (keyMatch && ctrlMatch && shiftMatch && metaMatch) {
31
+ binding.action();
32
+ }
33
+ }
34
+ }, { isActive });
35
+ }
36
+ //# sourceMappingURL=useKeymap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeymap.js","sourceRoot":"","sources":["../../src/hooks/useKeymap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAWzC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAsB,EAAE,QAAQ,GAAG,IAAI;IAC/D,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,4BAA4B;IAC5B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACtG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;QACH,uDAAuD;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,QAAQ,CAAC,CAAC,KAAa,EAAE,GAAQ,EAAE,EAAE;QACnC,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC;YACvD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;YAC1E,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;YAC9E,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;YAC1E,IAAI,QAAQ,IAAI,SAAS,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;gBACrD,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type MouseButton = 'left' | 'middle' | 'right' | 'scrollUp' | 'scrollDown';
2
+ export interface MouseEvent {
3
+ type: 'press' | 'release' | 'move';
4
+ button: MouseButton;
5
+ x: number;
6
+ y: number;
7
+ ctrl: boolean;
8
+ shift: boolean;
9
+ meta: boolean;
10
+ }
11
+ type MouseHandler = (event: MouseEvent) => void;
12
+ /**
13
+ * Mouse events hook (click, scroll, drag).
14
+ * Requires terminal to support xterm mouse protocol.
15
+ * Enables mouse tracking on mount, disables on unmount.
16
+ */
17
+ export declare function useMouse(handler: MouseHandler): void;
18
+ export {};
19
+ //# sourceMappingURL=useMouse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMouse.d.ts","sourceRoot":"","sources":["../../src/hooks/useMouse.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;AAElF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACnC,MAAM,EAAE,WAAW,CAAC;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAEhD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CA2DpD"}
@@ -0,0 +1,60 @@
1
+ import { useEffect } from 'react';
2
+ /**
3
+ * Mouse events hook (click, scroll, drag).
4
+ * Requires terminal to support xterm mouse protocol.
5
+ * Enables mouse tracking on mount, disables on unmount.
6
+ */
7
+ export function useMouse(handler) {
8
+ const handlerRef = { current: handler };
9
+ useEffect(() => {
10
+ handlerRef.current = handler;
11
+ });
12
+ useEffect(() => {
13
+ if (!process.stdout.isTTY)
14
+ return;
15
+ // Enable xterm mouse protocol (button + any event tracking)
16
+ process.stdout.write('\x1b[?1000h'); // basic mouse
17
+ process.stdout.write('\x1b[?1002h'); // button event tracking
18
+ process.stdout.write('\x1b[?1006h'); // SGR extended coordinates
19
+ const rawHandler = (data) => {
20
+ const str = data.toString();
21
+ // Parse SGR mouse sequence: \x1b[<Cb;Cx;CyM or m
22
+ const match = str.match(/\x1b\[<(\d+);(\d+);(\d+)([Mm])/);
23
+ if (!match)
24
+ return;
25
+ const cb = parseInt(match[1], 10);
26
+ const x = parseInt(match[2], 10);
27
+ const y = parseInt(match[3], 10);
28
+ const released = match[4] === 'm';
29
+ const ctrl = Boolean(cb & 16);
30
+ const meta = Boolean(cb & 8);
31
+ const shift = Boolean(cb & 4);
32
+ const buttonCode = cb & 3;
33
+ let button;
34
+ if (cb & 64) {
35
+ button = buttonCode === 0 ? 'scrollUp' : 'scrollDown';
36
+ }
37
+ else {
38
+ button = ['left', 'middle', 'right'][buttonCode] ?? 'left';
39
+ }
40
+ handlerRef.current({
41
+ type: released ? 'release' : 'press',
42
+ button,
43
+ x,
44
+ y,
45
+ ctrl,
46
+ shift,
47
+ meta,
48
+ });
49
+ };
50
+ process.stdin.on('data', rawHandler);
51
+ return () => {
52
+ // Disable mouse tracking
53
+ process.stdout.write('\x1b[?1000l');
54
+ process.stdout.write('\x1b[?1002l');
55
+ process.stdout.write('\x1b[?1006l');
56
+ process.stdin.off('data', rawHandler);
57
+ };
58
+ }, []);
59
+ }
60
+ //# sourceMappingURL=useMouse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMouse.js","sourceRoot":"","sources":["../../src/hooks/useMouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,OAAO,CAAC;AAgB5C;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAqB;IAC5C,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;YAAE,OAAO;QAElC,4DAA4D;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc;QACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,wBAAwB;QAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,2BAA2B;QAEhE,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,iDAAiD;YACjD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK;gBAAE,OAAO;YAEnB,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YAElC,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;YAE1B,IAAI,MAAmB,CAAC;YACxB,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;gBACZ,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAW,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC;YACxE,CAAC;YAED,UAAU,CAAC,OAAO,CAAC;gBACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;gBACpC,MAAM;gBACN,CAAC;gBACD,CAAC;gBACD,IAAI;gBACJ,KAAK;gBACL,IAAI;aACL,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErC,OAAO,GAAG,EAAE;YACV,yBAAyB;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface TerminalSize {
2
+ columns: number;
3
+ rows: number;
4
+ }
5
+ /** Returns terminal dimensions, updates on resize with debounce */
6
+ export declare function useResize(debounceMs?: number): TerminalSize;
7
+ //# sourceMappingURL=useResize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResize.d.ts","sourceRoot":"","sources":["../../src/hooks/useResize.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,UAAU,SAAK,GAAG,YAAY,CAyBvD"}
@@ -0,0 +1,27 @@
1
+ import { useState, useEffect } from 'react';
2
+ /** Returns terminal dimensions, updates on resize with debounce */
3
+ export function useResize(debounceMs = 50) {
4
+ const [size, setSize] = useState({
5
+ columns: process.stdout.columns ?? 80,
6
+ rows: process.stdout.rows ?? 24,
7
+ });
8
+ useEffect(() => {
9
+ let timer;
10
+ const handler = () => {
11
+ clearTimeout(timer);
12
+ timer = setTimeout(() => {
13
+ setSize({
14
+ columns: process.stdout.columns ?? 80,
15
+ rows: process.stdout.rows ?? 24,
16
+ });
17
+ }, debounceMs);
18
+ };
19
+ process.stdout.on('resize', handler);
20
+ return () => {
21
+ clearTimeout(timer);
22
+ process.stdout.off('resize', handler);
23
+ };
24
+ }, [debounceMs]);
25
+ return size;
26
+ }
27
+ //# sourceMappingURL=useResize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResize.js","sourceRoot":"","sources":["../../src/hooks/useResize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAO5C,mEAAmE;AACnE,MAAM,UAAU,SAAS,CAAC,UAAU,GAAG,EAAE;IACvC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAe;QAC7C,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;QACrC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;KAChC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAoC,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,OAAO,CAAC;oBACN,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;oBACrC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;iBAChC,CAAC,CAAC;YACL,CAAC,EAAE,UAAU,CAAC,CAAC;QACjB,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type TerminalCapabilities } from '../terminal/capabilities.js';
2
+ /** Returns current terminal capabilities, updates on resize */
3
+ export declare function useTerminal(): TerminalCapabilities;
4
+ //# sourceMappingURL=useTerminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminal.d.ts","sourceRoot":"","sources":["../../src/hooks/useTerminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAwC,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAE9G,+DAA+D;AAC/D,wBAAgB,WAAW,IAAI,oBAAoB,CAclD"}
@@ -0,0 +1,17 @@
1
+ import { useState, useEffect } from 'react';
2
+ import { getCapabilities, refreshCapabilities } from '../terminal/capabilities.js';
3
+ /** Returns current terminal capabilities, updates on resize */
4
+ export function useTerminal() {
5
+ const [caps, setCaps] = useState(getCapabilities);
6
+ useEffect(() => {
7
+ const handler = () => {
8
+ setCaps(refreshCapabilities());
9
+ };
10
+ process.stdout.on('resize', handler);
11
+ return () => {
12
+ process.stdout.off('resize', handler);
13
+ };
14
+ }, []);
15
+ return caps;
16
+ }
17
+ //# sourceMappingURL=useTerminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminal.js","sourceRoot":"","sources":["../../src/hooks/useTerminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAA6B,MAAM,6BAA6B,CAAC;AAE9G,+DAA+D;AAC/D,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAuB,eAAe,CAAC,CAAC;IAExE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;QACjC,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useTheme } from '../styling/ThemeProvider.js';
2
+ //# sourceMappingURL=useTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.d.ts","sourceRoot":"","sources":["../../src/hooks/useTheme.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ // Re-export from styling engine for convenience
2
+ export { useTheme } from '../styling/ThemeProvider.js';
3
+ //# sourceMappingURL=useTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTheme.js","sourceRoot":"","sources":["../../src/hooks/useTheme.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './terminal/index.js';
2
+ export * from './styling/index.js';
3
+ export * from './hooks/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Terminal layer
2
+ export * from './terminal/index.js';
3
+ // Styling engine
4
+ export * from './styling/index.js';
5
+ // Hooks
6
+ export * from './hooks/index.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,cAAc,qBAAqB,CAAC;AAEpC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC;AAEnC,QAAQ;AACR,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { Theme } from './tokens.js';
3
+ interface ThemeProviderProps {
4
+ theme?: Theme;
5
+ children: ReactNode;
6
+ }
7
+ export declare function ThemeProvider({ theme, children }: ThemeProviderProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function useTheme(): Theme;
9
+ export declare function useThemeUpdater(): (theme: Theme) => void;
10
+ /** Create a custom theme by merging with the default theme */
11
+ export declare function createTheme(overrides: Partial<Theme> & {
12
+ name: string;
13
+ }): Theme;
14
+ export {};
15
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../src/styling/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAc,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAazC,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,EAAE,KAAoB,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CAYnF;AAED,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED,wBAAgB,eAAe,IAAI,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAExD;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAqB/E"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { createContext, useContext } from 'react';
3
+ import { defaultTheme } from './themes/default.js';
4
+ const ThemeContext = createContext({
5
+ theme: defaultTheme,
6
+ setTheme: () => { },
7
+ });
8
+ export function ThemeProvider({ theme = defaultTheme, children }) {
9
+ const [currentTheme, setCurrentTheme] = React.useState(theme);
10
+ React.useEffect(() => {
11
+ setCurrentTheme(theme);
12
+ }, [theme]);
13
+ return (_jsx(ThemeContext.Provider, { value: { theme: currentTheme, setTheme: setCurrentTheme }, children: children }));
14
+ }
15
+ export function useTheme() {
16
+ return useContext(ThemeContext).theme;
17
+ }
18
+ export function useThemeUpdater() {
19
+ return useContext(ThemeContext).setTheme;
20
+ }
21
+ /** Create a custom theme by merging with the default theme */
22
+ export function createTheme(overrides) {
23
+ return {
24
+ ...defaultTheme,
25
+ ...overrides,
26
+ colors: {
27
+ ...defaultTheme.colors,
28
+ ...(overrides.colors ?? {}),
29
+ },
30
+ spacing: {
31
+ ...defaultTheme.spacing,
32
+ ...(overrides.spacing ?? {}),
33
+ },
34
+ typography: {
35
+ ...defaultTheme.typography,
36
+ ...(overrides.typography ?? {}),
37
+ },
38
+ border: {
39
+ ...defaultTheme.border,
40
+ ...(overrides.border ?? {}),
41
+ },
42
+ };
43
+ }
44
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","sourceRoot":"","sources":["../../src/styling/ThemeProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAOnD,MAAM,YAAY,GAAG,aAAa,CAAoB;IACpD,KAAK,EAAE,YAAY;IACnB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;CACnB,CAAC,CAAC;AAOH,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,GAAG,YAAY,EAAE,QAAQ,EAAsB;IAClF,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAQ,KAAK,CAAC,CAAC;IAErE,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACL,KAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAC7E,QAAQ,GACa,CACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW,CAAC,SAA4C;IACtE,OAAO;QACL,GAAG,YAAY;QACf,GAAG,SAAS;QACZ,MAAM,EAAE;YACN,GAAG,YAAY,CAAC,MAAM;YACtB,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;SAC5B;QACD,OAAO,EAAE;YACP,GAAG,YAAY,CAAC,OAAO;YACvB,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;SAC7B;QACD,UAAU,EAAE;YACV,GAAG,YAAY,CAAC,UAAU;YAC1B,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC;SAChC;QACD,MAAM,EAAE;YACN,GAAG,YAAY,CAAC,MAAM;YACtB,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;SAC5B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './tokens.js';
2
+ export * from './ThemeProvider.js';
3
+ export * from './style.js';
4
+ export { defaultTheme } from './themes/default.js';
5
+ export { draculaTheme } from './themes/dracula.js';
6
+ export { nordTheme } from './themes/nord.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/styling/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './tokens.js';
2
+ export * from './ThemeProvider.js';
3
+ export * from './style.js';
4
+ export { defaultTheme } from './themes/default.js';
5
+ export { draculaTheme } from './themes/dracula.js';
6
+ export { nordTheme } from './themes/nord.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/styling/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Chainable style builder for ANSI-styled strings.
3
+ *
4
+ * Usage:
5
+ * style('Hello').bold().fg('#FF0000').build()
6
+ * style('World').dim().underline().build()
7
+ */
8
+ export declare class StyleBuilder {
9
+ private _text;
10
+ private _codes;
11
+ constructor(text: string);
12
+ bold(): this;
13
+ dim(): this;
14
+ italic(): this;
15
+ underline(): this;
16
+ strikethrough(): this;
17
+ fg(color: string): this;
18
+ bg(color: string): this;
19
+ /** Build the final ANSI-styled string */
20
+ build(): string;
21
+ toString(): string;
22
+ }
23
+ /** Entry point: style('text').bold().fg('#fff').build() */
24
+ export declare function style(text: string): StyleBuilder;
25
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/styling/style.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAgB;gBAElB,IAAI,EAAE,MAAM;IAIxB,IAAI,IAAI,IAAI;IAKZ,GAAG,IAAI,IAAI;IAKX,MAAM,IAAI,IAAI;IAKd,SAAS,IAAI,IAAI;IAKjB,aAAa,IAAI,IAAI;IAKrB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKvB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKvB,yCAAyC;IACzC,KAAK,IAAI,MAAM;IAKf,QAAQ,IAAI,MAAM;CAGnB;AAED,2DAA2D;AAC3D,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEhD"}
@@ -0,0 +1,57 @@
1
+ import { fgHex, bgHex, bold, dim, italic, underline, strikethrough, reset } from '../terminal/ansi.js';
2
+ /**
3
+ * Chainable style builder for ANSI-styled strings.
4
+ *
5
+ * Usage:
6
+ * style('Hello').bold().fg('#FF0000').build()
7
+ * style('World').dim().underline().build()
8
+ */
9
+ export class StyleBuilder {
10
+ _text;
11
+ _codes = [];
12
+ constructor(text) {
13
+ this._text = text;
14
+ }
15
+ bold() {
16
+ this._codes.push(bold);
17
+ return this;
18
+ }
19
+ dim() {
20
+ this._codes.push(dim);
21
+ return this;
22
+ }
23
+ italic() {
24
+ this._codes.push(italic);
25
+ return this;
26
+ }
27
+ underline() {
28
+ this._codes.push(underline);
29
+ return this;
30
+ }
31
+ strikethrough() {
32
+ this._codes.push(strikethrough);
33
+ return this;
34
+ }
35
+ fg(color) {
36
+ this._codes.push(fgHex(color));
37
+ return this;
38
+ }
39
+ bg(color) {
40
+ this._codes.push(bgHex(color));
41
+ return this;
42
+ }
43
+ /** Build the final ANSI-styled string */
44
+ build() {
45
+ if (this._codes.length === 0)
46
+ return this._text;
47
+ return `${this._codes.join('')}${this._text}${reset}`;
48
+ }
49
+ toString() {
50
+ return this.build();
51
+ }
52
+ }
53
+ /** Entry point: style('text').bold().fg('#fff').build() */
54
+ export function style(text) {
55
+ return new StyleBuilder(text);
56
+ }
57
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/styling/style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIvG;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACf,KAAK,CAAS;IACd,MAAM,GAAa,EAAE,CAAC;IAE9B,YAAY,IAAY;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,KAAa;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,KAAa;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACzC,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAChD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED,2DAA2D;AAC3D,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Theme } from '../tokens.js';
2
+ export declare const defaultTheme: Theme;
3
+ //# sourceMappingURL=default.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../src/styling/themes/default.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,KAkD1B,CAAC"}
@@ -0,0 +1,49 @@
1
+ export const defaultTheme = {
2
+ name: 'default',
3
+ colors: {
4
+ primary: '#7C3AED',
5
+ primaryForeground: '#FFFFFF',
6
+ secondary: '#6B7280',
7
+ secondaryForeground: '#FFFFFF',
8
+ accent: '#8B5CF6',
9
+ accentForeground: '#FFFFFF',
10
+ success: '#10B981',
11
+ successForeground: '#FFFFFF',
12
+ warning: '#F59E0B',
13
+ warningForeground: '#000000',
14
+ error: '#EF4444',
15
+ errorForeground: '#FFFFFF',
16
+ info: '#3B82F6',
17
+ infoForeground: '#FFFFFF',
18
+ background: '#000000',
19
+ foreground: '#FFFFFF',
20
+ muted: '#374151',
21
+ mutedForeground: '#9CA3AF',
22
+ border: '#4B5563',
23
+ focusRing: '#8B5CF6',
24
+ selection: '#7C3AED',
25
+ selectionForeground: '#FFFFFF',
26
+ },
27
+ spacing: {
28
+ 0: 0,
29
+ 1: 1,
30
+ 2: 2,
31
+ 3: 3,
32
+ 4: 4,
33
+ 6: 6,
34
+ 8: 8,
35
+ },
36
+ typography: {
37
+ bold: true,
38
+ sm: 'dim',
39
+ base: '',
40
+ lg: 'bold',
41
+ xl: 'bold',
42
+ },
43
+ border: {
44
+ style: 'round',
45
+ color: '#4B5563',
46
+ focusColor: '#8B5CF6',
47
+ },
48
+ };
49
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../../src/styling/themes/default.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAU;IACjC,IAAI,EAAE,SAAS;IACf,MAAM,EAAE;QACN,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,SAAS,EAAE,SAAS;QACpB,mBAAmB,EAAE,SAAS;QAC9B,MAAM,EAAE,SAAS;QACjB,gBAAgB,EAAE,SAAS;QAE3B,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,SAAS;QAC1B,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,SAAS;QAEzB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,SAAS;QAC1B,MAAM,EAAE,SAAS;QAEjB,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,SAAS;QACpB,mBAAmB,EAAE,SAAS;KAC/B;IACD,OAAO,EAAE;QACP,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,CAAC;KACL;IACD,UAAU,EAAE;QACV,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,EAAE;QACR,EAAE,EAAE,MAAM;QACV,EAAE,EAAE,MAAM;KACX;IACD,MAAM,EAAE;QACN,KAAK,EAAE,OAAO;QACd,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,SAAS;KACtB;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Theme } from '../tokens.js';
2
+ export declare const draculaTheme: Theme;
3
+ //# sourceMappingURL=dracula.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dracula.d.ts","sourceRoot":"","sources":["../../../src/styling/themes/dracula.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,YAAY,EAAE,KAkD1B,CAAC"}
@@ -0,0 +1,49 @@
1
+ export const draculaTheme = {
2
+ name: 'dracula',
3
+ colors: {
4
+ primary: '#BD93F9',
5
+ primaryForeground: '#282A36',
6
+ secondary: '#6272A4',
7
+ secondaryForeground: '#F8F8F2',
8
+ accent: '#FF79C6',
9
+ accentForeground: '#282A36',
10
+ success: '#50FA7B',
11
+ successForeground: '#282A36',
12
+ warning: '#F1FA8C',
13
+ warningForeground: '#282A36',
14
+ error: '#FF5555',
15
+ errorForeground: '#F8F8F2',
16
+ info: '#8BE9FD',
17
+ infoForeground: '#282A36',
18
+ background: '#282A36',
19
+ foreground: '#F8F8F2',
20
+ muted: '#44475A',
21
+ mutedForeground: '#6272A4',
22
+ border: '#6272A4',
23
+ focusRing: '#BD93F9',
24
+ selection: '#44475A',
25
+ selectionForeground: '#F8F8F2',
26
+ },
27
+ spacing: {
28
+ 0: 0,
29
+ 1: 1,
30
+ 2: 2,
31
+ 3: 3,
32
+ 4: 4,
33
+ 6: 6,
34
+ 8: 8,
35
+ },
36
+ typography: {
37
+ bold: true,
38
+ sm: 'dim',
39
+ base: '',
40
+ lg: 'bold',
41
+ xl: 'bold',
42
+ },
43
+ border: {
44
+ style: 'round',
45
+ color: '#6272A4',
46
+ focusColor: '#BD93F9',
47
+ },
48
+ };
49
+ //# sourceMappingURL=dracula.js.map