linecraft 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +337 -64
  3. package/lib/api/color.d.ts +6 -0
  4. package/lib/api/color.d.ts.map +1 -0
  5. package/lib/api/color.js +9 -0
  6. package/lib/api/color.js.map +1 -0
  7. package/lib/api/color.test.d.ts +2 -0
  8. package/lib/api/color.test.d.ts.map +1 -0
  9. package/lib/api/color.test.js +23 -0
  10. package/lib/api/color.test.js.map +1 -0
  11. package/lib/api/flex.d.ts +55 -0
  12. package/lib/api/flex.d.ts.map +1 -0
  13. package/lib/api/flex.js +86 -0
  14. package/lib/api/flex.js.map +1 -0
  15. package/lib/api/flex.test.d.ts +2 -0
  16. package/lib/api/flex.test.d.ts.map +1 -0
  17. package/lib/api/flex.test.js +82 -0
  18. package/lib/api/flex.test.js.map +1 -0
  19. package/lib/api/grid.d.ts +22 -0
  20. package/lib/api/grid.d.ts.map +1 -0
  21. package/lib/api/grid.js +65 -0
  22. package/lib/api/grid.js.map +1 -0
  23. package/lib/api/grid.test.d.ts +2 -0
  24. package/lib/api/grid.test.d.ts.map +1 -0
  25. package/lib/api/grid.test.js +48 -0
  26. package/lib/api/grid.test.js.map +1 -0
  27. package/lib/components/base.d.ts +53 -0
  28. package/lib/components/base.d.ts.map +1 -0
  29. package/lib/components/base.js +47 -0
  30. package/lib/components/base.js.map +1 -0
  31. package/lib/components/col.d.ts +35 -0
  32. package/lib/components/col.d.ts.map +1 -0
  33. package/lib/components/col.js +168 -0
  34. package/lib/components/col.js.map +1 -0
  35. package/lib/components/col.test.d.ts +2 -0
  36. package/lib/components/col.test.d.ts.map +1 -0
  37. package/lib/components/col.test.js +96 -0
  38. package/lib/components/col.test.js.map +1 -0
  39. package/lib/components/index.d.ts +3 -0
  40. package/lib/components/index.d.ts.map +1 -0
  41. package/lib/components/index.js +5 -0
  42. package/lib/components/index.js.map +1 -0
  43. package/lib/components/progress-bar-grid.d.ts +20 -0
  44. package/lib/components/progress-bar-grid.d.ts.map +1 -0
  45. package/lib/components/progress-bar-grid.js +44 -0
  46. package/lib/components/progress-bar-grid.js.map +1 -0
  47. package/lib/components/progress-bar-grid.test.d.ts +2 -0
  48. package/lib/components/progress-bar-grid.test.d.ts.map +1 -0
  49. package/lib/components/progress-bar-grid.test.js +101 -0
  50. package/lib/components/progress-bar-grid.test.js.map +1 -0
  51. package/lib/components/progress-bar.d.ts +26 -3
  52. package/lib/components/progress-bar.d.ts.map +1 -1
  53. package/lib/components/progress-bar.js +62 -6
  54. package/lib/components/progress-bar.js.map +1 -1
  55. package/lib/components/progress-bar.test.d.ts +2 -0
  56. package/lib/components/progress-bar.test.d.ts.map +1 -0
  57. package/lib/components/progress-bar.test.js +153 -0
  58. package/lib/components/progress-bar.test.js.map +1 -0
  59. package/lib/components/prompt.d.ts +14 -0
  60. package/lib/components/prompt.d.ts.map +1 -0
  61. package/lib/components/prompt.js +77 -0
  62. package/lib/components/prompt.js.map +1 -0
  63. package/lib/components/renderable.d.ts +42 -0
  64. package/lib/components/renderable.d.ts.map +1 -0
  65. package/lib/components/renderable.js +225 -0
  66. package/lib/components/renderable.js.map +1 -0
  67. package/lib/components/spinner.d.ts +2 -2
  68. package/lib/components/spinner.d.ts.map +1 -1
  69. package/lib/components/spinner.js +3 -1
  70. package/lib/components/spinner.js.map +1 -1
  71. package/lib/components/spinner.test.d.ts +2 -0
  72. package/lib/components/spinner.test.d.ts.map +1 -0
  73. package/lib/components/spinner.test.js +168 -0
  74. package/lib/components/spinner.test.js.map +1 -0
  75. package/lib/components/style.d.ts +16 -0
  76. package/lib/components/style.d.ts.map +1 -0
  77. package/lib/components/style.js +72 -0
  78. package/lib/components/style.js.map +1 -0
  79. package/lib/components/style.test.d.ts +2 -0
  80. package/lib/components/style.test.d.ts.map +1 -0
  81. package/lib/components/style.test.js +135 -0
  82. package/lib/components/style.test.js.map +1 -0
  83. package/lib/components/text.d.ts +24 -0
  84. package/lib/components/text.d.ts.map +1 -0
  85. package/lib/components/text.js +65 -0
  86. package/lib/components/text.js.map +1 -0
  87. package/lib/drawing/boxes.d.ts +33 -0
  88. package/lib/drawing/boxes.d.ts.map +1 -0
  89. package/lib/drawing/boxes.js +76 -0
  90. package/lib/drawing/boxes.js.map +1 -0
  91. package/lib/index.d.ts +18 -11
  92. package/lib/index.d.ts.map +1 -1
  93. package/lib/index.js +21 -10
  94. package/lib/index.js.map +1 -1
  95. package/lib/index.test.d.ts +2 -0
  96. package/lib/index.test.d.ts.map +1 -0
  97. package/lib/index.test.js +80 -0
  98. package/lib/index.test.js.map +1 -0
  99. package/lib/layout/flex.d.ts +39 -0
  100. package/lib/layout/flex.d.ts.map +1 -0
  101. package/lib/layout/flex.js +300 -0
  102. package/lib/layout/flex.js.map +1 -0
  103. package/lib/layout/flex.test.d.ts +2 -0
  104. package/lib/layout/flex.test.d.ts.map +1 -0
  105. package/lib/layout/flex.test.js +206 -0
  106. package/lib/layout/flex.test.js.map +1 -0
  107. package/lib/layout/grid.d.ts +53 -0
  108. package/lib/layout/grid.d.ts.map +1 -0
  109. package/lib/layout/grid.js +421 -0
  110. package/lib/layout/grid.js.map +1 -0
  111. package/lib/layout/grid.test.d.ts +2 -0
  112. package/lib/layout/grid.test.d.ts.map +1 -0
  113. package/lib/layout/grid.test.js +139 -0
  114. package/lib/layout/grid.test.js.map +1 -0
  115. package/lib/native/ansi.d.ts +104 -0
  116. package/lib/native/ansi.d.ts.map +1 -0
  117. package/lib/native/ansi.js +120 -0
  118. package/lib/native/ansi.js.map +1 -0
  119. package/lib/native/ansi.test.d.ts +2 -0
  120. package/lib/native/ansi.test.d.ts.map +1 -0
  121. package/lib/native/ansi.test.js +57 -0
  122. package/lib/native/ansi.test.js.map +1 -0
  123. package/lib/native/buffer.d.ts +32 -0
  124. package/lib/native/buffer.d.ts.map +1 -0
  125. package/lib/native/buffer.js +49 -0
  126. package/lib/native/buffer.js.map +1 -0
  127. package/lib/native/buffer.test.d.ts +2 -0
  128. package/lib/native/buffer.test.d.ts.map +1 -0
  129. package/lib/native/buffer.test.js +64 -0
  130. package/lib/native/buffer.test.js.map +1 -0
  131. package/lib/native/diff.d.ts +20 -0
  132. package/lib/native/diff.d.ts.map +1 -0
  133. package/lib/native/diff.js +33 -0
  134. package/lib/native/diff.js.map +1 -0
  135. package/lib/native/diff.test.d.ts +2 -0
  136. package/lib/native/diff.test.d.ts.map +1 -0
  137. package/lib/native/diff.test.js +106 -0
  138. package/lib/native/diff.test.js.map +1 -0
  139. package/lib/native/region-old.d.ts +117 -0
  140. package/lib/native/region-old.d.ts.map +1 -0
  141. package/lib/native/region-old.js +539 -0
  142. package/lib/native/region-old.js.map +1 -0
  143. package/lib/native/region-renderer.d.ts +167 -0
  144. package/lib/native/region-renderer.d.ts.map +1 -0
  145. package/lib/native/region-renderer.js +1238 -0
  146. package/lib/native/region-renderer.js.map +1 -0
  147. package/lib/native/region-simple.d.ts +44 -0
  148. package/lib/native/region-simple.d.ts.map +1 -0
  149. package/lib/native/region-simple.js +290 -0
  150. package/lib/native/region-simple.js.map +1 -0
  151. package/lib/native/region.d.ts +53 -0
  152. package/lib/native/region.d.ts.map +1 -0
  153. package/lib/native/region.js +426 -0
  154. package/lib/native/region.js.map +1 -0
  155. package/lib/native/region.test.d.ts +2 -0
  156. package/lib/native/region.test.d.ts.map +1 -0
  157. package/lib/native/region.test.js +248 -0
  158. package/lib/native/region.test.js.map +1 -0
  159. package/lib/native/throttle.d.ts +29 -0
  160. package/lib/native/throttle.d.ts.map +1 -0
  161. package/lib/native/throttle.js +57 -0
  162. package/lib/native/throttle.js.map +1 -0
  163. package/lib/native/throttle.test.d.ts +2 -0
  164. package/lib/native/throttle.test.d.ts.map +1 -0
  165. package/lib/native/throttle.test.js +86 -0
  166. package/lib/native/throttle.test.js.map +1 -0
  167. package/lib/native.d.ts +5 -11
  168. package/lib/native.d.ts.map +1 -1
  169. package/lib/native.js +8 -64
  170. package/lib/native.js.map +1 -1
  171. package/lib/region.d.ts +48 -5
  172. package/lib/region.d.ts.map +1 -1
  173. package/lib/region.js +474 -36
  174. package/lib/region.js.map +1 -1
  175. package/lib/region.test.d.ts +2 -0
  176. package/lib/region.test.d.ts.map +1 -0
  177. package/lib/region.test.js +227 -0
  178. package/lib/region.test.js.map +1 -0
  179. package/lib/region.visual.test.d.ts +2 -0
  180. package/lib/region.visual.test.d.ts.map +1 -0
  181. package/lib/region.visual.test.js +55 -0
  182. package/lib/region.visual.test.js.map +1 -0
  183. package/lib/test-helpers/capturable-terminal.d.ts +61 -0
  184. package/lib/test-helpers/capturable-terminal.d.ts.map +1 -0
  185. package/lib/test-helpers/capturable-terminal.js +113 -0
  186. package/lib/test-helpers/capturable-terminal.js.map +1 -0
  187. package/lib/test-helpers/capturable-terminal.test.d.ts +2 -0
  188. package/lib/test-helpers/capturable-terminal.test.d.ts.map +1 -0
  189. package/lib/test-helpers/capturable-terminal.test.js +45 -0
  190. package/lib/test-helpers/capturable-terminal.test.js.map +1 -0
  191. package/lib/test-helpers/mock-region.d.ts +21 -0
  192. package/lib/test-helpers/mock-region.d.ts.map +1 -0
  193. package/lib/test-helpers/mock-region.js +37 -0
  194. package/lib/test-helpers/mock-region.js.map +1 -0
  195. package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts +2 -0
  196. package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts.map +1 -0
  197. package/lib/test-helpers/virtual-terminal-diff-reflow.test.js +256 -0
  198. package/lib/test-helpers/virtual-terminal-diff-reflow.test.js.map +1 -0
  199. package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts +2 -0
  200. package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts.map +1 -0
  201. package/lib/test-helpers/virtual-terminal-flex-resize.test.js +438 -0
  202. package/lib/test-helpers/virtual-terminal-flex-resize.test.js.map +1 -0
  203. package/lib/test-helpers/virtual-terminal.d.ts +176 -0
  204. package/lib/test-helpers/virtual-terminal.d.ts.map +1 -0
  205. package/lib/test-helpers/virtual-terminal.js +492 -0
  206. package/lib/test-helpers/virtual-terminal.js.map +1 -0
  207. package/lib/test-helpers/virtual-terminal.test.d.ts +2 -0
  208. package/lib/test-helpers/virtual-terminal.test.d.ts.map +1 -0
  209. package/lib/test-helpers/virtual-terminal.test.js +219 -0
  210. package/lib/test-helpers/virtual-terminal.test.js.map +1 -0
  211. package/lib/ts/components/spinner.test.d.ts +2 -0
  212. package/lib/ts/components/spinner.test.d.ts.map +1 -0
  213. package/lib/ts/components/spinner.test.js +168 -0
  214. package/lib/ts/components/spinner.test.js.map +1 -0
  215. package/lib/ts/utils/colors.test.d.ts +2 -0
  216. package/lib/ts/utils/colors.test.d.ts.map +1 -0
  217. package/lib/ts/utils/colors.test.js +87 -0
  218. package/lib/ts/utils/colors.test.js.map +1 -0
  219. package/lib/types.d.ts +8 -2
  220. package/lib/types.d.ts.map +1 -1
  221. package/lib/types.js.map +1 -1
  222. package/lib/utils/colors-simple.d.ts +51 -0
  223. package/lib/utils/colors-simple.d.ts.map +1 -0
  224. package/lib/utils/colors-simple.js +59 -0
  225. package/lib/utils/colors-simple.js.map +1 -0
  226. package/lib/utils/colors.d.ts +1 -1
  227. package/lib/utils/colors.d.ts.map +1 -1
  228. package/lib/utils/colors.js.map +1 -1
  229. package/lib/utils/colors.test.d.ts +2 -0
  230. package/lib/utils/colors.test.d.ts.map +1 -0
  231. package/lib/utils/colors.test.js +87 -0
  232. package/lib/utils/colors.test.js.map +1 -0
  233. package/lib/utils/cursor-position.d.ts +22 -0
  234. package/lib/utils/cursor-position.d.ts.map +1 -0
  235. package/lib/utils/cursor-position.js +139 -0
  236. package/lib/utils/cursor-position.js.map +1 -0
  237. package/lib/utils/debug-log.d.ts +2 -0
  238. package/lib/utils/debug-log.d.ts.map +1 -0
  239. package/lib/utils/debug-log.js +36 -0
  240. package/lib/utils/debug-log.js.map +1 -0
  241. package/lib/utils/terminal.d.ts +27 -0
  242. package/lib/utils/terminal.d.ts.map +1 -0
  243. package/lib/utils/terminal.js +116 -0
  244. package/lib/utils/terminal.js.map +1 -0
  245. package/lib/utils/text.d.ts +21 -0
  246. package/lib/utils/text.d.ts.map +1 -0
  247. package/lib/utils/text.js +82 -0
  248. package/lib/utils/text.js.map +1 -0
  249. package/lib/utils/wait-for-spacebar.d.ts +10 -0
  250. package/lib/utils/wait-for-spacebar.d.ts.map +1 -0
  251. package/lib/utils/wait-for-spacebar.js +71 -0
  252. package/lib/utils/wait-for-spacebar.js.map +1 -0
  253. package/package.json +35 -28
  254. package/.cursor/plan.md +0 -952
  255. package/TESTING.md +0 -102
  256. package/build.zig +0 -100
  257. package/examples/basic-progress.ts +0 -21
  258. package/examples/multi-lane.ts +0 -29
  259. package/examples/spinner.ts +0 -20
  260. package/examples/test-basic.ts +0 -23
  261. package/src/ts/components/progress-bar.ts +0 -53
  262. package/src/ts/components/spinner.ts +0 -56
  263. package/src/ts/index.ts +0 -37
  264. package/src/ts/native.ts +0 -86
  265. package/src/ts/region.ts +0 -89
  266. package/src/ts/types/ffi-napi.d.ts +0 -11
  267. package/src/ts/types/ref-napi.d.ts +0 -5
  268. package/src/ts/types.ts +0 -53
  269. package/src/ts/utils/colors.ts +0 -72
  270. package/src/zig/ansi.zig +0 -21
  271. package/src/zig/buffer.zig +0 -37
  272. package/src/zig/diff.zig +0 -43
  273. package/src/zig/region.zig +0 -292
  274. package/src/zig/renderer.zig +0 -92
  275. package/src/zig/test_ansi.zig +0 -66
  276. package/src/zig/test_buffer.zig +0 -82
  277. package/src/zig/test_diff.zig +0 -220
  278. package/src/zig/test_integration.zig +0 -76
  279. package/src/zig/test_region.zig +0 -191
  280. package/src/zig/test_runner.zig +0 -27
  281. package/src/zig/test_throttle.zig +0 -59
  282. package/src/zig/throttle.zig +0 -38
  283. package/tsconfig.json +0 -21
@@ -0,0 +1,16 @@
1
+ import type { RenderContext, Component } from '../layout/grid';
2
+ import type { Color } from '../types';
3
+ export interface StyleOptions {
4
+ color?: Color;
5
+ backgroundColor?: Color;
6
+ bold?: boolean;
7
+ italic?: boolean;
8
+ underline?: boolean;
9
+ overflow?: 'none' | 'ellipsis-end' | 'ellipsis-start' | 'ellipsis-middle' | 'wrap';
10
+ when?: (ctx: RenderContext) => boolean;
11
+ }
12
+ /**
13
+ * Style component - applies styling and handles overflow
14
+ */
15
+ export declare function style(options: StyleOptions, content: string | string[] | Component): Component;
16
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/components/style.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAItC,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC;IACnF,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;CACxC;AAED;;GAEG;AACH,wBAAgB,KAAK,CACnB,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GACrC,SAAS,CA+DX"}
@@ -0,0 +1,72 @@
1
+ // Style component for text styling and overflow handling
2
+ import { applyStyle } from '../utils/colors';
3
+ import { truncateEnd, truncateStart, truncateMiddle, wrapText } from '../utils/text';
4
+ /**
5
+ * Style component - applies styling and handles overflow
6
+ */
7
+ export function style(options, content) {
8
+ return (ctx) => {
9
+ // Check when condition
10
+ if (options.when && !options.when(ctx)) {
11
+ return null;
12
+ }
13
+ // Get content
14
+ let text;
15
+ if (typeof content === 'string' || Array.isArray(content)) {
16
+ text = content;
17
+ }
18
+ else {
19
+ // It's a component - render it
20
+ const result = content(ctx);
21
+ if (result === null)
22
+ return null;
23
+ text = result;
24
+ }
25
+ // Handle overflow
26
+ const overflow = options.overflow ?? 'none';
27
+ const availableWidth = ctx.availableWidth;
28
+ if (typeof text === 'string') {
29
+ // Single line
30
+ let processed = text;
31
+ if (overflow === 'ellipsis-end' && processed.length > availableWidth) {
32
+ processed = truncateEnd(processed, availableWidth);
33
+ }
34
+ else if (overflow === 'ellipsis-start' && processed.length > availableWidth) {
35
+ processed = truncateStart(processed, availableWidth);
36
+ }
37
+ else if (overflow === 'ellipsis-middle' && processed.length > availableWidth) {
38
+ processed = truncateMiddle(processed, availableWidth);
39
+ }
40
+ else if (overflow === 'wrap') {
41
+ // Wrap returns array
42
+ const wrapped = wrapText(processed, availableWidth);
43
+ return wrapped.map(line => applyStyle(line, {
44
+ color: options.color,
45
+ backgroundColor: options.backgroundColor,
46
+ bold: options.bold,
47
+ italic: options.italic,
48
+ underline: options.underline,
49
+ }));
50
+ }
51
+ // Apply styling
52
+ return applyStyle(processed, {
53
+ color: options.color,
54
+ backgroundColor: options.backgroundColor,
55
+ bold: options.bold,
56
+ italic: options.italic,
57
+ underline: options.underline,
58
+ });
59
+ }
60
+ else {
61
+ // Array of strings - apply styling to each line
62
+ return text.map(line => applyStyle(line, {
63
+ color: options.color,
64
+ backgroundColor: options.backgroundColor,
65
+ bold: options.bold,
66
+ italic: options.italic,
67
+ underline: options.underline,
68
+ }));
69
+ }
70
+ };
71
+ }
72
+ //# sourceMappingURL=style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.js","sourceRoot":"","sources":["../../src/components/style.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=style.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.test.d.ts","sourceRoot":"","sources":["../../src/components/style.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { style } from './style';
3
+ import { TerminalRegion } from '../region';
4
+ describe('Style Component', () => {
5
+ let region;
6
+ beforeEach(() => {
7
+ region = new TerminalRegion({ disableRendering: true, width: 80 });
8
+ });
9
+ describe('basic styling', () => {
10
+ it('should apply color', () => {
11
+ const component = style({ color: 'red' }, 'Hello');
12
+ const result = component({
13
+ availableWidth: 80,
14
+ region: region,
15
+ columnIndex: 0,
16
+ rowIndex: 0,
17
+ });
18
+ expect(result).toContain('Hello');
19
+ expect(result).toContain('\x1b[31m'); // ANSI red
20
+ });
21
+ it('should apply backgroundColor', () => {
22
+ const component = style({ backgroundColor: 'blue' }, 'Hello');
23
+ const result = component({
24
+ availableWidth: 80,
25
+ region: region,
26
+ columnIndex: 0,
27
+ rowIndex: 0,
28
+ });
29
+ expect(result).toContain('Hello');
30
+ expect(result).toContain('\x1b[44m'); // ANSI blue background
31
+ });
32
+ it('should apply bold', () => {
33
+ const component = style({ bold: true }, 'Hello');
34
+ const result = component({
35
+ availableWidth: 80,
36
+ region: region,
37
+ columnIndex: 0,
38
+ rowIndex: 0,
39
+ });
40
+ expect(result).toContain('\x1b[1m'); // ANSI bold
41
+ });
42
+ });
43
+ describe('overflow handling', () => {
44
+ it('should truncate with ellipsis-end', () => {
45
+ const component = style({ overflow: 'ellipsis-end' }, 'This is a very long text');
46
+ const result = component({
47
+ availableWidth: 10,
48
+ region: region,
49
+ columnIndex: 0,
50
+ rowIndex: 0,
51
+ });
52
+ const plain = result.replace(/\x1b\[[0-9;]*m/g, '');
53
+ expect(plain).toMatch(/\.\.\.$/);
54
+ expect(plain.length).toBeLessThanOrEqual(10);
55
+ });
56
+ it('should truncate with ellipsis-start', () => {
57
+ const component = style({ overflow: 'ellipsis-start' }, 'This is a very long text');
58
+ const result = component({
59
+ availableWidth: 10,
60
+ region: region,
61
+ columnIndex: 0,
62
+ rowIndex: 0,
63
+ });
64
+ const plain = result.replace(/\x1b\[[0-9;]*m/g, '');
65
+ expect(plain).toMatch(/^\.\.\./);
66
+ expect(plain.length).toBeLessThanOrEqual(10);
67
+ });
68
+ it('should wrap text', () => {
69
+ const component = style({ overflow: 'wrap' }, 'This is a very long text that should wrap');
70
+ const result = component({
71
+ availableWidth: 10,
72
+ region: region,
73
+ columnIndex: 0,
74
+ rowIndex: 0,
75
+ });
76
+ expect(Array.isArray(result)).toBe(true);
77
+ expect(result.length).toBeGreaterThan(1);
78
+ });
79
+ });
80
+ describe('when condition', () => {
81
+ it('should return null when condition is false', () => {
82
+ const component = style({ when: () => false }, 'Hello');
83
+ const result = component({
84
+ availableWidth: 80,
85
+ region: region,
86
+ columnIndex: 0,
87
+ rowIndex: 0,
88
+ });
89
+ expect(result).toBeNull();
90
+ });
91
+ it('should return content when condition is true', () => {
92
+ const component = style({ when: (ctx) => ctx.availableWidth > 50 }, 'Hello');
93
+ const result = component({
94
+ availableWidth: 80,
95
+ region: region,
96
+ columnIndex: 0,
97
+ rowIndex: 0,
98
+ });
99
+ expect(result).toContain('Hello');
100
+ });
101
+ it('should check availableWidth in condition', () => {
102
+ const component = style({ when: (ctx) => ctx.availableWidth > 50 }, 'Hello');
103
+ const result1 = component({
104
+ availableWidth: 40,
105
+ region: region,
106
+ columnIndex: 0,
107
+ rowIndex: 0,
108
+ });
109
+ expect(result1).toBeNull();
110
+ const result2 = component({
111
+ availableWidth: 60,
112
+ region: region,
113
+ columnIndex: 0,
114
+ rowIndex: 0,
115
+ });
116
+ expect(result2).toContain('Hello');
117
+ });
118
+ });
119
+ describe('multi-line content', () => {
120
+ it('should apply styling to each line', () => {
121
+ const component = style({ color: 'red' }, ['Line 1', 'Line 2']);
122
+ const result = component({
123
+ availableWidth: 80,
124
+ region: region,
125
+ columnIndex: 0,
126
+ rowIndex: 0,
127
+ });
128
+ expect(Array.isArray(result)).toBe(true);
129
+ expect(result.length).toBe(2);
130
+ expect(result[0]).toContain('Line 1');
131
+ expect(result[1]).toContain('Line 2');
132
+ });
133
+ });
134
+ });
135
+ //# sourceMappingURL=style.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.test.js","sourceRoot":"","sources":["../../src/components/style.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Component } from './base.js';
2
+ import type { TerminalRegion } from '../region.js';
3
+ export type TextOverflow = 'none' | 'ellipsis-end' | 'ellipsis-start' | 'ellipsis-middle' | 'wrap';
4
+ export declare class Text extends Component {
5
+ private content;
6
+ private overflow;
7
+ private align;
8
+ constructor(region: TerminalRegion, content: string, options?: TextOptions);
9
+ setContent(content: string): void;
10
+ getPreferredWidth(): number;
11
+ getHeight(): number;
12
+ render(x: number, y: number, width: number): void;
13
+ private alignText;
14
+ }
15
+ export interface TextOptions {
16
+ overflow?: TextOverflow;
17
+ align?: 'left' | 'center' | 'right';
18
+ minWidth?: number;
19
+ maxWidth?: number;
20
+ flexGrow?: number;
21
+ flexShrink?: number;
22
+ width?: number;
23
+ }
24
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/ts/components/text.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAEnG,qBAAa,IAAK,SAAQ,SAAS;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,KAAK,CAAuC;gBAGlD,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,WAAgB;IAQ3B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,iBAAiB,IAAI,MAAM;IAI3B,SAAS,IAAI,MAAM;IAQnB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAwBjD,OAAO,CAAC,SAAS;CAYlB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,65 @@
1
+ // Text component with overflow handling
2
+ import { Component } from './base.js';
3
+ import { truncateEnd, truncateStart, truncateMiddle, wrapText } from '../utils/text.js';
4
+ export class Text extends Component {
5
+ content;
6
+ overflow = 'ellipsis-end';
7
+ align = 'left';
8
+ constructor(region, content, options = {}) {
9
+ super(region, options);
10
+ this.content = content;
11
+ this.overflow = options.overflow ?? 'ellipsis-end';
12
+ this.align = options.align ?? 'left';
13
+ }
14
+ setContent(content) {
15
+ this.content = content;
16
+ }
17
+ getPreferredWidth() {
18
+ return this.content.length;
19
+ }
20
+ getHeight() {
21
+ if (this.overflow === 'wrap') {
22
+ const width = this.width ?? this.getPreferredWidth();
23
+ return wrapText(this.content, width).length;
24
+ }
25
+ return 1;
26
+ }
27
+ render(x, y, width) {
28
+ let text = this.content;
29
+ // Handle overflow
30
+ if (this.overflow === 'ellipsis-end' && text.length > width) {
31
+ text = truncateEnd(text, width);
32
+ }
33
+ else if (this.overflow === 'ellipsis-start' && text.length > width) {
34
+ text = truncateStart(text, width);
35
+ }
36
+ else if (this.overflow === 'ellipsis-middle' && text.length > width) {
37
+ text = truncateMiddle(text, width);
38
+ }
39
+ else if (this.overflow === 'wrap') {
40
+ const lines = wrapText(text, width);
41
+ for (let i = 0; i < lines.length; i++) {
42
+ this.region.setLine(y + i, this.alignText(lines[i], width));
43
+ }
44
+ return;
45
+ }
46
+ // Handle alignment
47
+ text = this.alignText(text, width);
48
+ this.region.setLine(y, text);
49
+ }
50
+ alignText(text, width) {
51
+ if (this.align === 'left') {
52
+ return text.padEnd(width, ' ');
53
+ }
54
+ else if (this.align === 'right') {
55
+ return text.padStart(width, ' ');
56
+ }
57
+ else { // center
58
+ const padding = width - text.length;
59
+ const leftPad = Math.floor(padding / 2);
60
+ const rightPad = padding - leftPad;
61
+ return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/ts/components/text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Draw a rounded box
3
+ */
4
+ export declare function drawRoundedBox(width: number, height: number, options?: BoxOptions): string[];
5
+ /**
6
+ * Draw a double-line box
7
+ */
8
+ export declare function drawDoubleBox(width: number, height: number): string[];
9
+ /**
10
+ * Draw a single-line box
11
+ */
12
+ export declare function drawSingleBox(width: number, height: number): string[];
13
+ /**
14
+ * Draw horizontal line with smooth characters
15
+ */
16
+ export declare function drawHorizontalLine(width: number, style?: 'single' | 'double' | 'thick' | 'dashed'): string;
17
+ /**
18
+ * Draw vertical line
19
+ */
20
+ export declare function drawVerticalLine(height: number, style?: 'single' | 'double' | 'thick'): string[];
21
+ /**
22
+ * Draw a divider line
23
+ */
24
+ export declare function drawDivider(width: number, style?: 'single' | 'double' | 'thick' | 'dashed', left?: string, right?: string): string;
25
+ export interface BoxOptions {
26
+ topLeft?: string;
27
+ topRight?: string;
28
+ bottomLeft?: string;
29
+ bottomRight?: string;
30
+ horizontal?: string;
31
+ vertical?: string;
32
+ }
33
+ //# sourceMappingURL=boxes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boxes.d.ts","sourceRoot":"","sources":["../../src/drawing/boxes.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,UAAe,GACvB,MAAM,EAAE,CA0BV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CASV;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CASV;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAmB,GACzD,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,QAAQ,GAAG,QAAQ,GAAG,OAAkB,GAC9C,MAAM,EAAE,CAOV;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAmB,EAC1D,IAAI,GAAE,MAAW,EACjB,KAAK,GAAE,MAAW,GACjB,MAAM,CAGR;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,76 @@
1
+ // ASCII drawing primitives - boxes, lines, etc.
2
+ /**
3
+ * Draw a rounded box
4
+ */
5
+ export function drawRoundedBox(width, height, options = {}) {
6
+ const { topLeft = '╭', topRight = '╮', bottomLeft = '╰', bottomRight = '╯', horizontal = '─', vertical = '│', } = options;
7
+ const lines = [];
8
+ // Top border
9
+ lines.push(topLeft + horizontal.repeat(Math.max(0, width - 2)) + topRight);
10
+ // Middle lines
11
+ for (let i = 1; i < height - 1; i++) {
12
+ lines.push(vertical + ' '.repeat(Math.max(0, width - 2)) + vertical);
13
+ }
14
+ // Bottom border
15
+ if (height > 1) {
16
+ lines.push(bottomLeft + horizontal.repeat(Math.max(0, width - 2)) + bottomRight);
17
+ }
18
+ return lines;
19
+ }
20
+ /**
21
+ * Draw a double-line box
22
+ */
23
+ export function drawDoubleBox(width, height) {
24
+ return drawRoundedBox(width, height, {
25
+ topLeft: '╔',
26
+ topRight: '╗',
27
+ bottomLeft: '╚',
28
+ bottomRight: '╝',
29
+ horizontal: '═',
30
+ vertical: '║',
31
+ });
32
+ }
33
+ /**
34
+ * Draw a single-line box
35
+ */
36
+ export function drawSingleBox(width, height) {
37
+ return drawRoundedBox(width, height, {
38
+ topLeft: '┌',
39
+ topRight: '┐',
40
+ bottomLeft: '└',
41
+ bottomRight: '┘',
42
+ horizontal: '─',
43
+ vertical: '│',
44
+ });
45
+ }
46
+ /**
47
+ * Draw horizontal line with smooth characters
48
+ */
49
+ export function drawHorizontalLine(width, style = 'single') {
50
+ const chars = {
51
+ single: '─',
52
+ double: '═',
53
+ thick: '━',
54
+ dashed: '┄',
55
+ };
56
+ return chars[style].repeat(width);
57
+ }
58
+ /**
59
+ * Draw vertical line
60
+ */
61
+ export function drawVerticalLine(height, style = 'single') {
62
+ const chars = {
63
+ single: '│',
64
+ double: '║',
65
+ thick: '┃',
66
+ };
67
+ return Array(height).fill(chars[style]);
68
+ }
69
+ /**
70
+ * Draw a divider line
71
+ */
72
+ export function drawDivider(width, style = 'single', left = '', right = '') {
73
+ const line = drawHorizontalLine(width - left.length - right.length, style);
74
+ return left + line + right;
75
+ }
76
+ //# sourceMappingURL=boxes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boxes.js","sourceRoot":"","sources":["../../src/drawing/boxes.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,12 +1,19 @@
1
- export { TerminalRegion } from './region.js';
2
- export { ProgressBar } from './components/progress-bar.js';
3
- export { Spinner } from './components/spinner.js';
4
- export type { RegionOptions, LineContent, TextStyle, Color, ProgressBarOptions, SpinnerOptions, } from './types.js';
5
- import { TerminalRegion } from './region.js';
6
- import { ProgressBar } from './components/progress-bar.js';
7
- import { Spinner } from './components/spinner.js';
8
- import type { RegionOptions, ProgressBarOptions, SpinnerOptions } from './types.js';
9
- export declare function createRegion(options?: RegionOptions): TerminalRegion;
10
- export declare function createProgressBar(region: TerminalRegion, lineNumber: number, options?: ProgressBarOptions): ProgressBar;
11
- export declare function createSpinner(region: TerminalRegion, lineNumber: number, options?: SpinnerOptions): Spinner;
1
+ export { TerminalRegion } from './region';
2
+ export { getTerminalWidth, getTerminalHeight, isTTY, onResize } from './utils/terminal';
3
+ export { grid, style } from './api/grid';
4
+ export type { GridOptions } from './layout/grid';
5
+ export type { StyleOptions } from './components/style';
6
+ export { color } from './api/color';
7
+ export { showPrompt } from './components/index';
8
+ export type { RegionOptions, LineContent, TextStyle, Color, ProgressBarOptions, SpinnerOptions, } from './types';
9
+ import { TerminalRegion } from './region';
10
+ import { Spinner } from './components/spinner';
11
+ import type { RegionOptions, SpinnerOptions } from './types';
12
+ import type { ProgressBarOptions as ProgressBarGridOptions } from './components/progress-bar-grid';
13
+ export declare function region(options?: RegionOptions): TerminalRegion;
14
+ export declare const createRegion: typeof region;
15
+ export declare function progressBar(options: ProgressBarGridOptions): import("./layout/grid").Component;
16
+ export declare const createProgressBar: typeof progressBar;
17
+ export declare function spinner(region: TerminalRegion, lineNumber: number, options?: SpinnerOptions): Spinner;
18
+ export declare const createSpinner: typeof spinner;
12
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEpF,wBAAgB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAEpE;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,WAAW,CAEb;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAET"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAExF,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EACV,aAAa,EACb,WAAW,EACX,SAAS,EACT,KAAK,EACL,kBAAkB,EAClB,cAAc,GACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAsB,cAAc,EAAE,MAAM,SAAS,CAAC;AACjF,OAAO,KAAK,EAAE,kBAAkB,IAAI,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAEnG,wBAAgB,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,cAAc,CAE9D;AAGD,eAAO,MAAM,YAAY,eAAS,CAAC;AAGnC,wBAAgB,WAAW,CAAC,OAAO,EAAE,sBAAsB,qCAE1D;AAGD,eAAO,MAAM,iBAAiB,oBAAc,CAAC;AAE7C,wBAAgB,OAAO,CACrB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAET;AAGD,eAAO,MAAM,aAAa,gBAAU,CAAC"}
package/lib/index.js CHANGED
@@ -1,16 +1,27 @@
1
- export { TerminalRegion } from './region.js';
2
- export { ProgressBar } from './components/progress-bar.js';
3
- export { Spinner } from './components/spinner.js';
4
- import { TerminalRegion } from './region.js';
5
- import { ProgressBar } from './components/progress-bar.js';
6
- import { Spinner } from './components/spinner.js';
7
- export function createRegion(options) {
1
+ export { TerminalRegion } from './region';
2
+ export { getTerminalWidth, getTerminalHeight, isTTY, onResize } from './utils/terminal';
3
+ // Grid system
4
+ export { grid, style } from './api/grid';
5
+ export { color } from './api/color';
6
+ // progressBar is exported below as a function
7
+ export { showPrompt } from './components/index';
8
+ import { TerminalRegion } from './region';
9
+ import { progressBar as progressBarGrid } from './components/progress-bar-grid';
10
+ import { Spinner } from './components/spinner';
11
+ export function region(options) {
8
12
  return new TerminalRegion(options);
9
13
  }
10
- export function createProgressBar(region, lineNumber, options) {
11
- return new ProgressBar(region, lineNumber, options);
14
+ // Keep createRegion as alias for backward compatibility
15
+ export const createRegion = region;
16
+ // Grid-based progress bar (returns Component)
17
+ export function progressBar(options) {
18
+ return progressBarGrid(options);
12
19
  }
13
- export function createSpinner(region, lineNumber, options) {
20
+ // Keep createProgressBar as alias for backward compatibility
21
+ export const createProgressBar = progressBar;
22
+ export function spinner(region, lineNumber, options) {
14
23
  return new Spinner(region, lineNumber, options);
15
24
  }
25
+ // Keep createSpinner as alias for backward compatibility
26
+ export const createSpinner = spinner;
16
27
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/ts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAUlD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGlD,MAAM,UAAU,YAAY,CAAC,OAAuB;IAClD,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAsB,EACtB,UAAkB,EAClB,OAA4B;IAE5B,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAAsB,EACtB,UAAkB,EAClB,OAAwB;IAExB,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACxF,cAAc;AACd,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,8CAA8C;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAUhD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,wDAAwD;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,8CAA8C;AAC9C,MAAM,UAAU,WAAW,CAAC,OAA+B;IACzD,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,WAAW,CAAC;AAE7C,MAAM,UAAU,OAAO,CACrB,MAAsB,EACtB,UAAkB,EAClB,OAAwB;IAExB,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}