termui 0.1.0 → 0.1.2

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 (257) hide show
  1. package/dist/chunk-B2VO7M2O.js +3493 -0
  2. package/dist/chunk-B2VO7M2O.js.map +1 -0
  3. package/dist/chunk-ZZKFZA2U.js +694 -0
  4. package/dist/chunk-ZZKFZA2U.js.map +1 -0
  5. package/dist/components.d.ts +668 -0
  6. package/dist/components.js +130 -0
  7. package/dist/components.js.map +1 -0
  8. package/dist/core.d.ts +144 -0
  9. package/dist/core.js +99 -0
  10. package/dist/core.js.map +1 -0
  11. package/dist/hooks-YADffFjU.d.ts +237 -0
  12. package/dist/hooks.d.ts +3 -0
  13. package/dist/hooks.js +29 -0
  14. package/dist/hooks.js.map +1 -0
  15. package/dist/index.d.ts +6 -0
  16. package/dist/index.js +225 -0
  17. package/dist/index.js.map +1 -0
  18. package/package.json +41 -10
  19. package/packages/cli/package.json +0 -36
  20. package/packages/components/dist/data/List.d.ts +0 -15
  21. package/packages/components/dist/data/List.d.ts.map +0 -1
  22. package/packages/components/dist/data/List.js +0 -40
  23. package/packages/components/dist/data/List.js.map +0 -1
  24. package/packages/components/dist/data/Table.d.ts +0 -17
  25. package/packages/components/dist/data/Table.d.ts.map +0 -1
  26. package/packages/components/dist/data/Table.js +0 -74
  27. package/packages/components/dist/data/Table.js.map +0 -1
  28. package/packages/components/dist/data/index.d.ts +0 -5
  29. package/packages/components/dist/data/index.d.ts.map +0 -1
  30. package/packages/components/dist/data/index.js +0 -3
  31. package/packages/components/dist/data/index.js.map +0 -1
  32. package/packages/components/dist/feedback/Alert.d.ts +0 -10
  33. package/packages/components/dist/feedback/Alert.d.ts.map +0 -1
  34. package/packages/components/dist/feedback/Alert.js +0 -23
  35. package/packages/components/dist/feedback/Alert.js.map +0 -1
  36. package/packages/components/dist/feedback/ProgressBar.d.ts +0 -13
  37. package/packages/components/dist/feedback/ProgressBar.d.ts.map +0 -1
  38. package/packages/components/dist/feedback/ProgressBar.js +0 -13
  39. package/packages/components/dist/feedback/ProgressBar.js.map +0 -1
  40. package/packages/components/dist/feedback/Spinner.d.ts +0 -9
  41. package/packages/components/dist/feedback/Spinner.d.ts.map +0 -1
  42. package/packages/components/dist/feedback/Spinner.js +0 -26
  43. package/packages/components/dist/feedback/Spinner.js.map +0 -1
  44. package/packages/components/dist/feedback/index.d.ts +0 -7
  45. package/packages/components/dist/feedback/index.d.ts.map +0 -1
  46. package/packages/components/dist/feedback/index.js +0 -4
  47. package/packages/components/dist/feedback/index.js.map +0 -1
  48. package/packages/components/dist/forms/Form.d.ts +0 -22
  49. package/packages/components/dist/forms/Form.d.ts.map +0 -1
  50. package/packages/components/dist/forms/Form.js +0 -45
  51. package/packages/components/dist/forms/Form.js.map +0 -1
  52. package/packages/components/dist/forms/index.d.ts +0 -3
  53. package/packages/components/dist/forms/index.d.ts.map +0 -1
  54. package/packages/components/dist/forms/index.js +0 -2
  55. package/packages/components/dist/forms/index.js.map +0 -1
  56. package/packages/components/dist/index.d.ts +0 -11
  57. package/packages/components/dist/index.d.ts.map +0 -1
  58. package/packages/components/dist/index.js +0 -21
  59. package/packages/components/dist/index.js.map +0 -1
  60. package/packages/components/dist/input/TextInput.d.ts +0 -14
  61. package/packages/components/dist/input/TextInput.d.ts.map +0 -1
  62. package/packages/components/dist/input/TextInput.js +0 -44
  63. package/packages/components/dist/input/TextInput.js.map +0 -1
  64. package/packages/components/dist/input/index.d.ts +0 -3
  65. package/packages/components/dist/input/index.d.ts.map +0 -1
  66. package/packages/components/dist/input/index.js +0 -2
  67. package/packages/components/dist/input/index.js.map +0 -1
  68. package/packages/components/dist/layout/Box.d.ts +0 -11
  69. package/packages/components/dist/layout/Box.d.ts.map +0 -1
  70. package/packages/components/dist/layout/Box.js +0 -18
  71. package/packages/components/dist/layout/Box.js.map +0 -1
  72. package/packages/components/dist/layout/Grid.d.ts +0 -8
  73. package/packages/components/dist/layout/Grid.d.ts.map +0 -1
  74. package/packages/components/dist/layout/Grid.js +0 -12
  75. package/packages/components/dist/layout/Grid.js.map +0 -1
  76. package/packages/components/dist/layout/ScrollView.d.ts +0 -9
  77. package/packages/components/dist/layout/ScrollView.d.ts.map +0 -1
  78. package/packages/components/dist/layout/ScrollView.js +0 -26
  79. package/packages/components/dist/layout/ScrollView.js.map +0 -1
  80. package/packages/components/dist/layout/Stack.d.ts +0 -12
  81. package/packages/components/dist/layout/Stack.d.ts.map +0 -1
  82. package/packages/components/dist/layout/Stack.js +0 -6
  83. package/packages/components/dist/layout/Stack.js.map +0 -1
  84. package/packages/components/dist/layout/index.d.ts +0 -9
  85. package/packages/components/dist/layout/index.d.ts.map +0 -1
  86. package/packages/components/dist/layout/index.js +0 -5
  87. package/packages/components/dist/layout/index.js.map +0 -1
  88. package/packages/components/dist/navigation/Tabs.d.ts +0 -15
  89. package/packages/components/dist/navigation/Tabs.d.ts.map +0 -1
  90. package/packages/components/dist/navigation/Tabs.js +0 -34
  91. package/packages/components/dist/navigation/Tabs.js.map +0 -1
  92. package/packages/components/dist/navigation/index.d.ts +0 -3
  93. package/packages/components/dist/navigation/index.d.ts.map +0 -1
  94. package/packages/components/dist/navigation/index.js +0 -2
  95. package/packages/components/dist/navigation/index.js.map +0 -1
  96. package/packages/components/dist/overlays/Modal.d.ts +0 -10
  97. package/packages/components/dist/overlays/Modal.d.ts.map +0 -1
  98. package/packages/components/dist/overlays/Modal.js +0 -16
  99. package/packages/components/dist/overlays/Modal.js.map +0 -1
  100. package/packages/components/dist/overlays/index.d.ts +0 -3
  101. package/packages/components/dist/overlays/index.d.ts.map +0 -1
  102. package/packages/components/dist/overlays/index.js +0 -2
  103. package/packages/components/dist/overlays/index.js.map +0 -1
  104. package/packages/components/dist/selection/Checkbox.d.ts +0 -10
  105. package/packages/components/dist/selection/Checkbox.d.ts.map +0 -1
  106. package/packages/components/dist/selection/Checkbox.js +0 -26
  107. package/packages/components/dist/selection/Checkbox.js.map +0 -1
  108. package/packages/components/dist/selection/Select.d.ts +0 -17
  109. package/packages/components/dist/selection/Select.d.ts.map +0 -1
  110. package/packages/components/dist/selection/Select.js +0 -44
  111. package/packages/components/dist/selection/Select.js.map +0 -1
  112. package/packages/components/dist/selection/index.d.ts +0 -5
  113. package/packages/components/dist/selection/index.d.ts.map +0 -1
  114. package/packages/components/dist/selection/index.js +0 -3
  115. package/packages/components/dist/selection/index.js.map +0 -1
  116. package/packages/components/dist/typography/Badge.d.ts +0 -9
  117. package/packages/components/dist/typography/Badge.d.ts.map +0 -1
  118. package/packages/components/dist/typography/Badge.js +0 -18
  119. package/packages/components/dist/typography/Badge.js.map +0 -1
  120. package/packages/components/dist/typography/Text.d.ts +0 -15
  121. package/packages/components/dist/typography/Text.d.ts.map +0 -1
  122. package/packages/components/dist/typography/Text.js +0 -6
  123. package/packages/components/dist/typography/Text.js.map +0 -1
  124. package/packages/components/dist/typography/index.d.ts +0 -5
  125. package/packages/components/dist/typography/index.d.ts.map +0 -1
  126. package/packages/components/dist/typography/index.js +0 -3
  127. package/packages/components/dist/typography/index.js.map +0 -1
  128. package/packages/components/dist/utility/Panel.d.ts +0 -14
  129. package/packages/components/dist/utility/Panel.d.ts.map +0 -1
  130. package/packages/components/dist/utility/Panel.js +0 -8
  131. package/packages/components/dist/utility/Panel.js.map +0 -1
  132. package/packages/components/dist/utility/Toggle.d.ts +0 -11
  133. package/packages/components/dist/utility/Toggle.d.ts.map +0 -1
  134. package/packages/components/dist/utility/Toggle.js +0 -23
  135. package/packages/components/dist/utility/Toggle.js.map +0 -1
  136. package/packages/components/dist/utility/index.d.ts +0 -5
  137. package/packages/components/dist/utility/index.d.ts.map +0 -1
  138. package/packages/components/dist/utility/index.js +0 -3
  139. package/packages/components/dist/utility/index.js.map +0 -1
  140. package/packages/components/package.json +0 -36
  141. package/packages/core/dist/hooks/index.d.ts +0 -18
  142. package/packages/core/dist/hooks/index.d.ts.map +0 -1
  143. package/packages/core/dist/hooks/index.js +0 -13
  144. package/packages/core/dist/hooks/index.js.map +0 -1
  145. package/packages/core/dist/hooks/useAnimation.d.ts +0 -7
  146. package/packages/core/dist/hooks/useAnimation.d.ts.map +0 -1
  147. package/packages/core/dist/hooks/useAnimation.js +0 -40
  148. package/packages/core/dist/hooks/useAnimation.js.map +0 -1
  149. package/packages/core/dist/hooks/useAsync.d.ts +0 -25
  150. package/packages/core/dist/hooks/useAsync.d.ts.map +0 -1
  151. package/packages/core/dist/hooks/useAsync.js +0 -37
  152. package/packages/core/dist/hooks/useAsync.js.map +0 -1
  153. package/packages/core/dist/hooks/useClipboard.d.ts +0 -9
  154. package/packages/core/dist/hooks/useClipboard.d.ts.map +0 -1
  155. package/packages/core/dist/hooks/useClipboard.js +0 -14
  156. package/packages/core/dist/hooks/useClipboard.js.map +0 -1
  157. package/packages/core/dist/hooks/useFocus.d.ts +0 -10
  158. package/packages/core/dist/hooks/useFocus.d.ts.map +0 -1
  159. package/packages/core/dist/hooks/useFocus.js +0 -6
  160. package/packages/core/dist/hooks/useFocus.js.map +0 -1
  161. package/packages/core/dist/hooks/useFocusManager.d.ts +0 -9
  162. package/packages/core/dist/hooks/useFocusManager.d.ts.map +0 -1
  163. package/packages/core/dist/hooks/useFocusManager.js +0 -6
  164. package/packages/core/dist/hooks/useFocusManager.js.map +0 -1
  165. package/packages/core/dist/hooks/useInput.d.ts +0 -22
  166. package/packages/core/dist/hooks/useInput.d.ts.map +0 -1
  167. package/packages/core/dist/hooks/useInput.js +0 -6
  168. package/packages/core/dist/hooks/useInput.js.map +0 -1
  169. package/packages/core/dist/hooks/useInterval.d.ts +0 -6
  170. package/packages/core/dist/hooks/useInterval.d.ts.map +0 -1
  171. package/packages/core/dist/hooks/useInterval.js +0 -18
  172. package/packages/core/dist/hooks/useInterval.js.map +0 -1
  173. package/packages/core/dist/hooks/useKeymap.d.ts +0 -13
  174. package/packages/core/dist/hooks/useKeymap.d.ts.map +0 -1
  175. package/packages/core/dist/hooks/useKeymap.js +0 -36
  176. package/packages/core/dist/hooks/useKeymap.js.map +0 -1
  177. package/packages/core/dist/hooks/useMouse.d.ts +0 -19
  178. package/packages/core/dist/hooks/useMouse.d.ts.map +0 -1
  179. package/packages/core/dist/hooks/useMouse.js +0 -60
  180. package/packages/core/dist/hooks/useMouse.js.map +0 -1
  181. package/packages/core/dist/hooks/useResize.d.ts +0 -7
  182. package/packages/core/dist/hooks/useResize.d.ts.map +0 -1
  183. package/packages/core/dist/hooks/useResize.js +0 -27
  184. package/packages/core/dist/hooks/useResize.js.map +0 -1
  185. package/packages/core/dist/hooks/useTerminal.d.ts +0 -4
  186. package/packages/core/dist/hooks/useTerminal.d.ts.map +0 -1
  187. package/packages/core/dist/hooks/useTerminal.js +0 -17
  188. package/packages/core/dist/hooks/useTerminal.js.map +0 -1
  189. package/packages/core/dist/hooks/useTheme.d.ts +0 -2
  190. package/packages/core/dist/hooks/useTheme.d.ts.map +0 -1
  191. package/packages/core/dist/hooks/useTheme.js +0 -3
  192. package/packages/core/dist/hooks/useTheme.js.map +0 -1
  193. package/packages/core/dist/index.d.ts +0 -4
  194. package/packages/core/dist/index.d.ts.map +0 -1
  195. package/packages/core/dist/index.js +0 -7
  196. package/packages/core/dist/index.js.map +0 -1
  197. package/packages/core/dist/styling/ThemeProvider.d.ts +0 -15
  198. package/packages/core/dist/styling/ThemeProvider.d.ts.map +0 -1
  199. package/packages/core/dist/styling/ThemeProvider.js +0 -44
  200. package/packages/core/dist/styling/ThemeProvider.js.map +0 -1
  201. package/packages/core/dist/styling/index.d.ts +0 -7
  202. package/packages/core/dist/styling/index.d.ts.map +0 -1
  203. package/packages/core/dist/styling/index.js +0 -7
  204. package/packages/core/dist/styling/index.js.map +0 -1
  205. package/packages/core/dist/styling/style.d.ts +0 -25
  206. package/packages/core/dist/styling/style.d.ts.map +0 -1
  207. package/packages/core/dist/styling/style.js +0 -57
  208. package/packages/core/dist/styling/style.js.map +0 -1
  209. package/packages/core/dist/styling/themes/default.d.ts +0 -3
  210. package/packages/core/dist/styling/themes/default.d.ts.map +0 -1
  211. package/packages/core/dist/styling/themes/default.js +0 -49
  212. package/packages/core/dist/styling/themes/default.js.map +0 -1
  213. package/packages/core/dist/styling/themes/dracula.d.ts +0 -3
  214. package/packages/core/dist/styling/themes/dracula.d.ts.map +0 -1
  215. package/packages/core/dist/styling/themes/dracula.js +0 -49
  216. package/packages/core/dist/styling/themes/dracula.js.map +0 -1
  217. package/packages/core/dist/styling/themes/nord.d.ts +0 -3
  218. package/packages/core/dist/styling/themes/nord.d.ts.map +0 -1
  219. package/packages/core/dist/styling/themes/nord.js +0 -49
  220. package/packages/core/dist/styling/themes/nord.js.map +0 -1
  221. package/packages/core/dist/styling/tokens.d.ts +0 -57
  222. package/packages/core/dist/styling/tokens.d.ts.map +0 -1
  223. package/packages/core/dist/styling/tokens.js +0 -6
  224. package/packages/core/dist/styling/tokens.js.map +0 -1
  225. package/packages/core/dist/terminal/ansi.d.ts +0 -107
  226. package/packages/core/dist/terminal/ansi.d.ts.map +0 -1
  227. package/packages/core/dist/terminal/ansi.js +0 -153
  228. package/packages/core/dist/terminal/ansi.js.map +0 -1
  229. package/packages/core/dist/terminal/capabilities.d.ts +0 -21
  230. package/packages/core/dist/terminal/capabilities.d.ts.map +0 -1
  231. package/packages/core/dist/terminal/capabilities.js +0 -74
  232. package/packages/core/dist/terminal/capabilities.js.map +0 -1
  233. package/packages/core/dist/terminal/index.d.ts +0 -3
  234. package/packages/core/dist/terminal/index.d.ts.map +0 -1
  235. package/packages/core/dist/terminal/index.js +0 -3
  236. package/packages/core/dist/terminal/index.js.map +0 -1
  237. package/packages/core/package.json +0 -49
  238. package/registry/components/alert/meta.json +0 -9
  239. package/registry/components/badge/meta.json +0 -9
  240. package/registry/components/box/meta.json +0 -9
  241. package/registry/components/checkbox/meta.json +0 -9
  242. package/registry/components/form/meta.json +0 -9
  243. package/registry/components/grid/meta.json +0 -9
  244. package/registry/components/list/meta.json +0 -9
  245. package/registry/components/modal/meta.json +0 -9
  246. package/registry/components/panel/meta.json +0 -9
  247. package/registry/components/progress-bar/meta.json +0 -9
  248. package/registry/components/scroll-view/meta.json +0 -9
  249. package/registry/components/select/meta.json +0 -9
  250. package/registry/components/spinner/meta.json +0 -9
  251. package/registry/components/stack/meta.json +0 -9
  252. package/registry/components/table/meta.json +0 -9
  253. package/registry/components/tabs/meta.json +0 -9
  254. package/registry/components/text/meta.json +0 -9
  255. package/registry/components/text-input/meta.json +0 -9
  256. package/registry/components/toggle/meta.json +0 -9
  257. package/registry/schema.json +0 -178
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/components/src/layout/Box.tsx","../packages/components/src/layout/Stack.tsx","../packages/components/src/layout/Grid.tsx","../packages/components/src/layout/ScrollView.tsx","../packages/components/src/layout/Divider.tsx","../packages/components/src/layout/Spacer.tsx","../packages/components/src/layout/Columns.tsx","../packages/components/src/layout/Center.tsx","../packages/components/src/layout/AspectRatio.tsx","../packages/components/src/typography/Text.tsx","../packages/components/src/typography/Badge.tsx","../packages/components/src/typography/Heading.tsx","../packages/components/src/typography/Code.tsx","../packages/components/src/typography/Link.tsx","../packages/components/src/typography/Tag.tsx","../packages/components/src/typography/Gradient.tsx","../packages/components/src/typography/BigText.tsx","../packages/components/src/typography/Digits.tsx","../packages/components/src/input/TextInput.tsx","../packages/components/src/input/TextArea.tsx","../packages/components/src/input/PasswordInput.tsx","../packages/components/src/input/NumberInput.tsx","../packages/components/src/input/SearchInput.tsx","../packages/components/src/selection/Checkbox.tsx","../packages/components/src/selection/Select.tsx","../packages/components/src/selection/MultiSelect.tsx","../packages/components/src/selection/RadioGroup.tsx","../packages/components/src/selection/CheckboxGroup.tsx","../packages/components/src/selection/TagInput.tsx","../packages/components/src/data/List.tsx","../packages/components/src/data/Table.tsx","../packages/components/src/data/Card.tsx","../packages/components/src/data/KeyValue.tsx","../packages/components/src/data/Definition.tsx","../packages/components/src/data/VirtualList.tsx","../packages/components/src/data/Tree.tsx","../packages/components/src/feedback/Spinner.tsx","../packages/components/src/feedback/ProgressBar.tsx","../packages/components/src/feedback/Alert.tsx","../packages/components/src/feedback/StatusMessage.tsx","../packages/components/src/feedback/Toast.tsx","../packages/components/src/feedback/Banner.tsx","../packages/components/src/feedback/Skeleton.tsx","../packages/components/src/feedback/ProgressCircle.tsx","../packages/components/src/navigation/Tabs.tsx","../packages/components/src/navigation/Breadcrumb.tsx","../packages/components/src/navigation/Pagination.tsx","../packages/components/src/navigation/Menu.tsx","../packages/components/src/navigation/Sidebar.tsx","../packages/components/src/overlays/Modal.tsx","../packages/components/src/overlays/Dialog.tsx","../packages/components/src/overlays/Drawer.tsx","../packages/components/src/overlays/Tooltip.tsx","../packages/components/src/overlays/Popover.tsx","../packages/components/src/forms/Form.tsx","../packages/components/src/forms/FormField.tsx","../packages/components/src/forms/Confirm.tsx","../packages/components/src/forms/Wizard.tsx","../packages/components/src/utility/Panel.tsx","../packages/components/src/utility/Toggle.tsx"],"sourcesContent":["import React, { type ReactNode } from 'react';\nimport { Box as InkBox, type BoxProps as InkBoxProps } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type BorderVariant = 'default' | 'muted' | 'focus' | 'success' | 'error' | 'warning';\n\nexport interface BoxProps extends InkBoxProps {\n border?: boolean;\n borderVariant?: BorderVariant;\n borderColor?: string;\n children?: ReactNode;\n}\n\nexport function Box({\n border,\n borderVariant = 'default',\n borderColor,\n children,\n ...props\n}: BoxProps) {\n const theme = useTheme();\n\n const resolvedBorderColor =\n borderColor ??\n (() => {\n switch (borderVariant) {\n case 'focus':\n return theme.colors.focusRing;\n case 'success':\n return theme.colors.success;\n case 'error':\n return theme.colors.error;\n case 'warning':\n return theme.colors.warning;\n case 'muted':\n return theme.colors.mutedForeground;\n default:\n return theme.colors.border;\n }\n })();\n\n return (\n <InkBox\n borderStyle={border ? (props.borderStyle ?? theme.border.style) : undefined}\n borderColor={border ? resolvedBorderColor : undefined}\n {...props}\n >\n {children}\n </InkBox>\n );\n}\n","import React from 'react';\nimport { Box } from 'ink';\nimport type { ReactNode } from 'react';\n\nexport interface StackProps {\n direction?: 'vertical' | 'horizontal';\n gap?: number;\n children: ReactNode;\n width?: number | string;\n height?: number | string;\n alignItems?: 'flex-start' | 'center' | 'flex-end';\n justifyContent?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around';\n}\n\nexport function Stack({\n direction = 'vertical',\n gap = 0,\n children,\n width,\n height,\n alignItems,\n justifyContent,\n}: StackProps) {\n return (\n <Box\n flexDirection={direction === 'vertical' ? 'column' : 'row'}\n gap={gap}\n width={width as number}\n height={height as number}\n alignItems={alignItems}\n justifyContent={justifyContent}\n >\n {children}\n </Box>\n );\n}\n","import React, { Children } from 'react';\nimport { Box } from 'ink';\nimport type { ReactNode } from 'react';\n\nexport interface GridProps {\n columns: number;\n gap?: number;\n children: ReactNode;\n}\n\nexport function Grid({ columns, gap = 0, children }: GridProps) {\n const items = Children.toArray(children);\n const rows: ReactNode[][] = [];\n\n for (let i = 0; i < items.length; i += columns) {\n rows.push(items.slice(i, i + columns));\n }\n\n return (\n <Box flexDirection=\"column\" gap={gap}>\n {rows.map((row, rowIdx) => (\n <Box key={rowIdx} flexDirection=\"row\" gap={gap}>\n {row.map((cell, colIdx) => (\n <Box key={colIdx} flexGrow={1}>\n {cell}\n </Box>\n ))}\n </Box>\n ))}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface ScrollViewProps {\n height: number;\n children: ReactNode;\n showScrollbar?: boolean;\n scrollbarColor?: string;\n}\n\n// Note: Ink doesn't natively support scrolling viewport clipping.\n// ScrollView uses a scroll offset and the `overflow: 'hidden'` Box prop.\n// The children are rendered inside an offset container.\nexport function ScrollView({\n height,\n children,\n showScrollbar = true,\n scrollbarColor = 'gray',\n}: ScrollViewProps) {\n const [scrollTop, setScrollTop] = useState(0);\n\n useInput((input, key) => {\n if (key.upArrow) {\n setScrollTop((s) => Math.max(0, s - 1));\n } else if (key.downArrow) {\n setScrollTop((s) => s + 1);\n } else if (key.pageUp) {\n setScrollTop((s) => Math.max(0, s - height));\n } else if (key.pageDown) {\n setScrollTop((s) => s + height);\n }\n });\n\n return (\n <Box flexDirection=\"row\" height={height} overflow=\"hidden\">\n <Box flexGrow={1} flexDirection=\"column\" marginTop={-scrollTop as number}>\n {children}\n </Box>\n {showScrollbar && (\n <Box width={1} flexDirection=\"column\" height={height}>\n <Text color={scrollbarColor}>{'│'.repeat(height)}</Text>\n </Box>\n )}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport interface DividerProps {\n variant?: 'single' | 'double' | 'bold';\n orientation?: 'horizontal' | 'vertical';\n color?: string;\n label?: string;\n height?: number;\n width?: number;\n}\n\nconst HORIZONTAL_CHARS: Record<NonNullable<DividerProps['variant']>, string> = {\n single: '─',\n double: '═',\n bold: '━',\n};\n\nconst VERTICAL_CHARS: Record<NonNullable<DividerProps['variant']>, string> = {\n single: '│',\n double: '║',\n bold: '┃',\n};\n\nexport function Divider({\n variant = 'single',\n orientation = 'horizontal',\n color,\n label,\n height = 1,\n width,\n}: DividerProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.border;\n const hChar = HORIZONTAL_CHARS[variant];\n const vChar = VERTICAL_CHARS[variant];\n\n if (orientation === 'vertical') {\n const lines = Array.from({ length: height }, (_, i) => i);\n return (\n <Box flexDirection=\"column\">\n {lines.map((i) => (\n <Text key={i} color={resolvedColor}>\n {vChar}\n </Text>\n ))}\n </Box>\n );\n }\n\n // Horizontal\n if (label) {\n return (\n <Box flexDirection=\"row\" width={width}>\n <Text color={resolvedColor}>\n {hChar}\n {hChar}\n {hChar}{' '}\n </Text>\n <Text color={resolvedColor}>{label}</Text>\n <Text color={resolvedColor}>\n {' '}\n {hChar}\n {hChar}\n {hChar}\n </Text>\n <Box flexGrow={1}>\n <Text color={resolvedColor}>{hChar.repeat(1)}</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box width={width ?? '100%'}>\n <Text color={resolvedColor} wrap=\"truncate\">\n {hChar.repeat(width ?? 80)}\n </Text>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box } from 'ink';\n\nexport interface SpacerProps {\n size?: number;\n direction?: 'horizontal' | 'vertical';\n}\n\nexport function Spacer({ size, direction = 'horizontal' }: SpacerProps) {\n if (size === undefined) {\n return <Box flexGrow={1} />;\n }\n\n if (direction === 'vertical') {\n return <Box height={size} />;\n }\n\n return <Box width={size} />;\n}\n","import React from 'react';\nimport { Box } from 'ink';\nimport type { ReactNode } from 'react';\n\nexport interface ColumnsProps {\n children: ReactNode;\n gap?: number;\n align?: 'top' | 'center' | 'bottom';\n}\n\nconst ALIGN_MAP: Record<\n NonNullable<ColumnsProps['align']>,\n 'flex-start' | 'center' | 'flex-end'\n> = {\n top: 'flex-start',\n center: 'center',\n bottom: 'flex-end',\n};\n\nexport function Columns({ children, gap = 0, align = 'top' }: ColumnsProps) {\n const items = React.Children.toArray(children);\n\n return (\n <Box flexDirection=\"row\" gap={gap} alignItems={ALIGN_MAP[align]}>\n {items.map((child, index) => (\n <Box key={index} flexGrow={1} flexDirection=\"column\">\n {child}\n </Box>\n ))}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box } from 'ink';\nimport type { ReactNode } from 'react';\n\nexport interface CenterProps {\n children: ReactNode;\n axis?: 'both' | 'horizontal' | 'vertical';\n}\n\nexport function Center({ children, axis = 'both' }: CenterProps) {\n const justifyContent = axis === 'both' || axis === 'horizontal' ? 'center' : undefined;\n const alignItems = axis === 'both' || axis === 'vertical' ? 'center' : undefined;\n\n return (\n <Box\n flexGrow={1}\n justifyContent={justifyContent as 'center' | undefined}\n alignItems={alignItems as 'center' | undefined}\n >\n {children}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box } from 'ink';\nimport type { ReactNode } from 'react';\n\nexport interface AspectRatioProps {\n children: ReactNode;\n ratio?: number;\n width?: number;\n}\n\nexport function AspectRatio({ children, ratio = 16 / 9, width = 80 }: AspectRatioProps) {\n const height = Math.round(width / ratio / 2);\n\n return (\n <Box width={width} height={height} overflow=\"hidden\">\n {children}\n </Box>\n );\n}\n","import React from 'react';\nimport { Text as InkText } from 'ink';\nimport type { ReactNode } from 'react';\n\nexport interface TextProps {\n children?: ReactNode;\n bold?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n dim?: boolean;\n inverse?: boolean;\n color?: string;\n backgroundColor?: string;\n wrap?: 'wrap' | 'end' | 'truncate' | 'truncate-start' | 'truncate-middle';\n}\n\nexport function Text({\n children,\n bold,\n italic,\n underline,\n strikethrough,\n dim,\n inverse,\n color,\n backgroundColor,\n wrap,\n}: TextProps) {\n return (\n <InkText\n bold={bold}\n italic={italic}\n underline={underline}\n strikethrough={strikethrough}\n dimColor={dim}\n inverse={inverse}\n color={color}\n backgroundColor={backgroundColor}\n wrap={wrap}\n >\n {children}\n </InkText>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info' | 'secondary';\n\nexport interface BadgeProps {\n children: string;\n variant?: BadgeVariant;\n color?: string;\n bold?: boolean;\n}\n\nexport function Badge({ children, variant = 'default', color, bold = false }: BadgeProps) {\n const theme = useTheme();\n\n const variantColor =\n color ??\n (() => {\n switch (variant) {\n case 'success':\n return theme.colors.success;\n case 'warning':\n return theme.colors.warning;\n case 'error':\n return theme.colors.error;\n case 'info':\n return theme.colors.info;\n case 'secondary':\n return theme.colors.secondary;\n default:\n return theme.colors.primary;\n }\n })();\n\n return (\n <Box borderStyle=\"round\" borderColor={variantColor} paddingX={1}>\n <Text color={variantColor} bold={bold}>\n {children}\n </Text>\n </Box>\n );\n}\n","import React from 'react';\nimport type { ReactNode } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type HeadingLevel = 1 | 2 | 3 | 4;\n\nexport interface HeadingProps {\n level?: HeadingLevel;\n children: ReactNode;\n color?: string;\n}\n\nexport function Heading({ level = 1, children, color }: HeadingProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.primary;\n\n switch (level) {\n case 1:\n return (\n <Box>\n <Text color={resolvedColor} bold>\n {'██ '}\n </Text>\n <Text color={resolvedColor} bold>\n {typeof children === 'string' ? children.toUpperCase() : children}\n </Text>\n </Box>\n );\n\n case 2:\n return (\n <Box>\n <Text color={resolvedColor} bold>\n {'▌ '}\n </Text>\n <Text color={resolvedColor} bold>\n {children}\n </Text>\n </Box>\n );\n\n case 3:\n return (\n <Box>\n <Text bold>{'› '}</Text>\n <Text bold>{children}</Text>\n </Box>\n );\n\n case 4:\n return (\n <Box>\n <Text underline dimColor>\n {children}\n </Text>\n </Box>\n );\n\n default:\n return (\n <Box>\n <Text>{children}</Text>\n </Box>\n );\n }\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport interface CodeProps {\n children: string;\n language?: string;\n inline?: boolean;\n}\n\nconst KEYWORDS = new Set([\n 'const',\n 'let',\n 'var',\n 'function',\n 'return',\n 'if',\n 'else',\n 'import',\n 'export',\n 'from',\n 'class',\n 'interface',\n 'type',\n 'async',\n 'await',\n 'new',\n 'this',\n 'true',\n 'false',\n 'null',\n 'undefined',\n 'void',\n 'typeof',\n 'instanceof',\n 'in',\n 'of',\n 'for',\n 'while',\n 'do',\n 'switch',\n 'case',\n 'break',\n 'continue',\n 'try',\n 'catch',\n 'finally',\n 'throw',\n 'extends',\n 'implements',\n 'static',\n 'public',\n 'private',\n 'protected',\n 'readonly',\n 'enum',\n 'default',\n 'delete',\n 'yield',\n 'super',\n]);\n\nconst OPERATORS = /^[=+\\-*/<>!&|?%^~]+$/;\n\ntype Token = {\n text: string;\n kind: 'keyword' | 'string' | 'number' | 'comment' | 'operator' | 'plain';\n};\n\nfunction tokenizeLine(line: string): Token[] {\n // Handle full-line comments\n const trimmed = line.trimStart();\n if (trimmed.startsWith('//')) {\n return [{ text: line, kind: 'comment' }];\n }\n\n const tokens: Token[] = [];\n let i = 0;\n\n while (i < line.length) {\n // Inline comment\n if (line[i] === '/' && line[i + 1] === '/') {\n tokens.push({ text: line.slice(i), kind: 'comment' });\n break;\n }\n\n // String literals\n const quote = line[i];\n if (quote === '\"' || quote === \"'\" || quote === '`') {\n let j = i + 1;\n while (j < line.length && line[j] !== quote) {\n if (line[j] === '\\\\') j++; // skip escaped char\n j++;\n }\n j++; // include closing quote\n tokens.push({ text: line.slice(i, j), kind: 'string' });\n i = j;\n continue;\n }\n\n // Numbers\n if (/[0-9]/.test(line[i])) {\n let j = i;\n while (j < line.length && /[0-9._xXa-fA-FbBoO]/.test(line[j])) j++;\n tokens.push({ text: line.slice(i, j), kind: 'number' });\n i = j;\n continue;\n }\n\n // Identifiers / keywords\n if (/[a-zA-Z_$]/.test(line[i])) {\n let j = i;\n while (j < line.length && /[a-zA-Z0-9_$]/.test(line[j])) j++;\n const word = line.slice(i, j);\n tokens.push({ text: word, kind: KEYWORDS.has(word) ? 'keyword' : 'plain' });\n i = j;\n continue;\n }\n\n // Operators\n if (/[=+\\-*/<>!&|?%^~]/.test(line[i])) {\n let j = i;\n while (j < line.length && OPERATORS.test(line[j])) j++;\n tokens.push({ text: line.slice(i, j), kind: 'operator' });\n i = j;\n continue;\n }\n\n // Everything else — whitespace, punctuation\n tokens.push({ text: line[i], kind: 'plain' });\n i++;\n }\n\n return tokens;\n}\n\nfunction CodeLine({\n line,\n keywordColor,\n stringColor,\n numberColor,\n commentColor,\n operatorColor,\n plainColor,\n}: {\n line: string;\n keywordColor: string;\n stringColor: string;\n numberColor: string;\n commentColor: string;\n operatorColor: string;\n plainColor: string;\n}) {\n const tokens = tokenizeLine(line);\n\n return (\n <Box flexDirection=\"row\">\n {tokens.map((token, idx) => {\n switch (token.kind) {\n case 'keyword':\n return (\n <Text key={idx} color={keywordColor}>\n {token.text}\n </Text>\n );\n case 'string':\n return (\n <Text key={idx} color={stringColor}>\n {token.text}\n </Text>\n );\n case 'number':\n return (\n <Text key={idx} color={numberColor}>\n {token.text}\n </Text>\n );\n case 'comment':\n return (\n <Text key={idx} dimColor>\n {token.text}\n </Text>\n );\n case 'operator':\n return (\n <Text key={idx} color={operatorColor}>\n {token.text}\n </Text>\n );\n default:\n return (\n <Text key={idx} color={plainColor}>\n {token.text}\n </Text>\n );\n }\n })}\n </Box>\n );\n}\n\nexport function Code({ children, language, inline = false }: CodeProps) {\n const theme = useTheme();\n\n const keywordColor = theme.colors.accent;\n const stringColor = theme.colors.success;\n const numberColor = theme.colors.warning;\n const commentColor = theme.colors.mutedForeground;\n const operatorColor = theme.colors.info;\n const plainColor = theme.colors.foreground;\n\n const lines = children.split('\\n');\n\n if (inline) {\n // Inline: single line, no border, no line numbers\n const displayLine = lines[0] ?? '';\n return (\n <Box borderStyle=\"single\" borderColor={theme.colors.border} paddingX={1}>\n <CodeLine\n line={displayLine}\n keywordColor={keywordColor}\n stringColor={stringColor}\n numberColor={numberColor}\n commentColor={commentColor}\n operatorColor={operatorColor}\n plainColor={plainColor}\n />\n </Box>\n );\n }\n\n const lineNumberWidth = String(lines.length).length;\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor={theme.colors.border}>\n {language && (\n <Box justifyContent=\"flex-end\" paddingX={1}>\n <Text color={theme.colors.mutedForeground}>{language}</Text>\n </Box>\n )}\n {lines.map((line, idx) => (\n <Box key={idx} flexDirection=\"row\" paddingX={1}>\n <Text color={theme.colors.mutedForeground}>\n {String(idx + 1).padStart(lineNumberWidth, ' ')}{' '}\n </Text>\n <Text color={theme.colors.mutedForeground}>{'│ '}</Text>\n <CodeLine\n line={line}\n keywordColor={keywordColor}\n stringColor={stringColor}\n numberColor={numberColor}\n commentColor={commentColor}\n operatorColor={operatorColor}\n plainColor={plainColor}\n />\n </Box>\n ))}\n </Box>\n );\n}\n","import React from 'react';\nimport type { ReactNode } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport interface LinkProps {\n children: ReactNode;\n href: string;\n color?: string;\n showHref?: boolean;\n}\n\nexport function Link({ children, href, color, showHref = false }: LinkProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.info;\n\n return (\n <Box flexDirection=\"row\">\n <Text color={resolvedColor} underline>\n {children}\n </Text>\n {showHref && <Text dimColor>{` (${href})`}</Text>}\n </Box>\n );\n}\n","import React from 'react';\nimport type { ReactNode } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type TagVariant = 'default' | 'outline';\n\nexport interface TagProps {\n children: ReactNode;\n onRemove?: () => void;\n color?: string;\n variant?: TagVariant;\n}\n\nexport function Tag({ children, onRemove, color, variant = 'default' }: TagProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.primary;\n const borderColor = variant === 'outline' ? theme.colors.mutedForeground : resolvedColor;\n\n return (\n <Box borderStyle=\"round\" borderColor={borderColor} paddingX={1} flexDirection=\"row\">\n <Text color={variant === 'outline' ? theme.colors.mutedForeground : resolvedColor}>\n {children}\n </Text>\n {onRemove && <Text color={theme.colors.mutedForeground}>{' ×'}</Text>}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\n\nexport interface GradientProps {\n children: string;\n colors: string[];\n bold?: boolean;\n}\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nfunction parseHex(hex: string): RGB {\n const clean = hex.replace('#', '');\n const full =\n clean.length === 3\n ? clean\n .split('')\n .map((c) => c + c)\n .join('')\n : clean;\n return {\n r: parseInt(full.slice(0, 2), 16),\n g: parseInt(full.slice(2, 4), 16),\n b: parseInt(full.slice(4, 6), 16),\n };\n}\n\nfunction toHex({ r, g, b }: RGB): string {\n return (\n '#' +\n [r, g, b]\n .map((v) =>\n Math.round(Math.max(0, Math.min(255, v)))\n .toString(16)\n .padStart(2, '0')\n )\n .join('')\n );\n}\n\nfunction lerpColor(a: RGB, b: RGB, t: number): RGB {\n return {\n r: a.r + (b.r - a.r) * t,\n g: a.g + (b.g - a.g) * t,\n b: a.b + (b.b - a.b) * t,\n };\n}\n\nexport interface GradientChar {\n char: string;\n color: string;\n}\n\nexport function gradientText(text: string, colors: string[]): GradientChar[] {\n if (colors.length === 0) return text.split('').map((char) => ({ char, color: '' }));\n if (colors.length === 1) return text.split('').map((char) => ({ char, color: colors[0] }));\n\n const parsedColors = colors.map(parseHex);\n const segments = colors.length - 1;\n const len = text.length;\n\n return text.split('').map((char, i) => {\n if (len <= 1) {\n return { char, color: colors[0] };\n }\n // Position in [0, segments]\n const pos = (i / (len - 1)) * segments;\n const segIndex = Math.min(Math.floor(pos), segments - 1);\n const t = pos - segIndex;\n const color = toHex(lerpColor(parsedColors[segIndex], parsedColors[segIndex + 1], t));\n return { char, color };\n });\n}\n\nexport function Gradient({ children, colors, bold = false }: GradientProps) {\n const chars = gradientText(children, colors);\n\n return (\n <Box flexDirection=\"row\">\n {chars.map((item, idx) => (\n <Text key={idx} color={item.color} bold={bold}>\n {item.char}\n </Text>\n ))}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type BigTextFont = 'block' | 'simple';\n\nexport interface BigTextProps {\n children: string;\n color?: string;\n font?: BigTextFont;\n}\n\n// Each character is defined as a 3-wide × 5-tall grid (row-major, 0=off, 1=on)\n// Rows are stored top-to-bottom.\nconst FONT: Record<string, number[][]> = {\n A: [\n [0, 1, 0],\n [1, 0, 1],\n [1, 1, 1],\n [1, 0, 1],\n [1, 0, 1],\n ],\n B: [\n [1, 1, 0],\n [1, 0, 1],\n [1, 1, 0],\n [1, 0, 1],\n [1, 1, 0],\n ],\n C: [\n [0, 1, 1],\n [1, 0, 0],\n [1, 0, 0],\n [1, 0, 0],\n [0, 1, 1],\n ],\n D: [\n [1, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 0],\n ],\n E: [\n [1, 1, 1],\n [1, 0, 0],\n [1, 1, 0],\n [1, 0, 0],\n [1, 1, 1],\n ],\n F: [\n [1, 1, 1],\n [1, 0, 0],\n [1, 1, 0],\n [1, 0, 0],\n [1, 0, 0],\n ],\n G: [\n [0, 1, 1],\n [1, 0, 0],\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 1],\n ],\n H: [\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 1],\n [1, 0, 1],\n [1, 0, 1],\n ],\n I: [\n [1, 1, 1],\n [0, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n [1, 1, 1],\n ],\n J: [\n [0, 0, 1],\n [0, 0, 1],\n [0, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n ],\n K: [\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n ],\n L: [\n [1, 0, 0],\n [1, 0, 0],\n [1, 0, 0],\n [1, 0, 0],\n [1, 1, 1],\n ],\n M: [\n [1, 0, 1],\n [1, 1, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n ],\n N: [\n [1, 0, 1],\n [1, 1, 1],\n [1, 1, 1],\n [1, 0, 1],\n [1, 0, 1],\n ],\n O: [\n [0, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n ],\n P: [\n [1, 1, 0],\n [1, 0, 1],\n [1, 1, 0],\n [1, 0, 0],\n [1, 0, 0],\n ],\n Q: [\n [0, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 1],\n [0, 1, 1],\n ],\n R: [\n [1, 1, 0],\n [1, 0, 1],\n [1, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n ],\n S: [\n [0, 1, 1],\n [1, 0, 0],\n [0, 1, 0],\n [0, 0, 1],\n [1, 1, 0],\n ],\n T: [\n [1, 1, 1],\n [0, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n ],\n U: [\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n ],\n V: [\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n ],\n W: [\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 1],\n [1, 0, 1],\n ],\n X: [\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n ],\n Y: [\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n ],\n Z: [\n [1, 1, 1],\n [0, 0, 1],\n [0, 1, 0],\n [1, 0, 0],\n [1, 1, 1],\n ],\n '0': [\n [0, 1, 0],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [0, 1, 0],\n ],\n '1': [\n [0, 1, 0],\n [1, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n [1, 1, 1],\n ],\n '2': [\n [1, 1, 0],\n [0, 0, 1],\n [0, 1, 0],\n [1, 0, 0],\n [1, 1, 1],\n ],\n '3': [\n [1, 1, 0],\n [0, 0, 1],\n [0, 1, 0],\n [0, 0, 1],\n [1, 1, 0],\n ],\n '4': [\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 1],\n [0, 0, 1],\n [0, 0, 1],\n ],\n '5': [\n [1, 1, 1],\n [1, 0, 0],\n [1, 1, 0],\n [0, 0, 1],\n [1, 1, 0],\n ],\n '6': [\n [0, 1, 1],\n [1, 0, 0],\n [1, 1, 0],\n [1, 0, 1],\n [0, 1, 0],\n ],\n '7': [\n [1, 1, 1],\n [0, 0, 1],\n [0, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n ],\n '8': [\n [0, 1, 0],\n [1, 0, 1],\n [0, 1, 0],\n [1, 0, 1],\n [0, 1, 0],\n ],\n '9': [\n [0, 1, 0],\n [1, 0, 1],\n [0, 1, 1],\n [0, 0, 1],\n [1, 1, 0],\n ],\n ' ': [\n [0, 0, 0],\n [0, 0, 0],\n [0, 0, 0],\n [0, 0, 0],\n [0, 0, 0],\n ],\n '!': [\n [0, 1, 0],\n [0, 1, 0],\n [0, 1, 0],\n [0, 0, 0],\n [0, 1, 0],\n ],\n '?': [\n [0, 1, 0],\n [1, 0, 1],\n [0, 0, 1],\n [0, 1, 0],\n [0, 1, 0],\n ],\n '.': [\n [0, 0, 0],\n [0, 0, 0],\n [0, 0, 0],\n [0, 0, 0],\n [0, 1, 0],\n ],\n ':': [\n [0, 0, 0],\n [0, 1, 0],\n [0, 0, 0],\n [0, 1, 0],\n [0, 0, 0],\n ],\n '-': [\n [0, 0, 0],\n [0, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n [0, 0, 0],\n ],\n};\n\nconst FALLBACK: number[][] = [\n [1, 1, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 0, 1],\n [1, 1, 1],\n];\n\nfunction getCharRows(ch: string): number[][] {\n const upper = ch.toUpperCase();\n return FONT[upper] ?? FONT[ch] ?? FALLBACK;\n}\n\nexport function BigText({ children, color, font = 'block' }: BigTextProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.primary;\n const onChar = font === 'block' ? '█' : '▓';\n const offChar = ' ';\n\n const chars = children.split('');\n const rows = 5;\n\n return (\n <Box flexDirection=\"column\">\n {Array.from({ length: rows }, (_, rowIdx) => (\n <Box key={rowIdx} flexDirection=\"row\">\n {chars.map((ch, charIdx) => {\n const charRows = getCharRows(ch);\n const row = charRows[rowIdx] ?? [0, 0, 0];\n const rowStr = row.map((pixel) => (pixel ? onChar : offChar)).join('');\n return (\n <Text key={charIdx} color={resolvedColor}>\n {rowStr + ' '}\n </Text>\n );\n })}\n </Box>\n ))}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type DigitSize = 'sm' | 'md' | 'lg';\n\nexport interface DigitsProps {\n value: string | number;\n color?: string;\n size?: DigitSize;\n}\n\n// 7-segment style: each digit is 3 chars wide × 3 rows tall\n// Using box-drawing characters: ─ │ ╭ ╮ ╰ ╯ ┼\n// Row layout:\n// row 0: top segment e.g. \" ─ \" or \" \"\n// row 1: middle segment e.g. \"│ │\" or \" │\"\n// row 2: mid-bar e.g. \" ─ \" or \" \"\n// row 3: lower sides e.g. \"│ │\" or \" │\"\n// row 4: bottom segment e.g. \" ─ \" or \" \"\n// For 'md' we use 3×5, for 'lg' we use 5×5\n\n// 3-wide × 5-row representation for each digit/symbol (7-segment style)\nconst SEGMENTS_MD: Record<string, string[]> = {\n '0': ['╭─╮', '│ │', '│ │', '│ │', '╰─╯'],\n '1': [' │', ' │', ' │', ' │', ' │'],\n '2': ['╭─╮', ' │', '╭─╯', '│ ', '╰─╴'],\n '3': ['╭─╮', ' │', ' ─┤', ' │', '╰─╯'],\n '4': ['╷ ╷', '│ │', '╰─┤', ' │', ' ╵'],\n '5': ['╭─╴', '│ ', '╰─╮', ' │', '╰─╯'],\n '6': ['╭─╴', '│ ', '├─╮', '│ │', '╰─╯'],\n '7': ['╭─╮', ' │', ' │', ' │', ' ╵'],\n '8': ['╭─╮', '│ │', '├─┤', '│ │', '╰─╯'],\n '9': ['╭─╮', '│ │', '╰─┤', ' │', '╰─╯'],\n ':': [' ', ' ● ', ' ', ' ● ', ' '],\n '.': [' ', ' ', ' ', ' ', ' ● '],\n '-': [' ', ' ', ' ─ ', ' ', ' '],\n ' ': [' ', ' ', ' ', ' ', ' '],\n};\n\n// 5-wide × 5-row for lg size\nconst SEGMENTS_LG: Record<string, string[]> = {\n '0': ['╭───╮', '│ │', '│ │', '│ │', '╰───╯'],\n '1': [' ╷ ', ' │ ', ' │ ', ' │ ', ' ╵ '],\n '2': ['╭───╮', ' │', ' ───╯', '│ ', '╰───╴'],\n '3': ['╭───╮', ' │', ' ───┤', ' │', '╰───╯'],\n '4': ['╷ ╷', '│ │', '╰───┤', ' │', ' ╵'],\n '5': ['╭───╴', '│ ', '╰───╮', ' │', '╰───╯'],\n '6': ['╭───╴', '│ ', '├───╮', '│ │', '╰───╯'],\n '7': ['╭───╮', ' │', ' │', ' │', ' ╵'],\n '8': ['╭───╮', '│ │', '├───┤', '│ │', '╰───╯'],\n '9': ['╭───╮', '│ │', '╰───┤', ' │', '╰───╯'],\n ':': [' ', ' ● ', ' ', ' ● ', ' '],\n '.': [' ', ' ', ' ', ' ', ' ● '],\n '-': [' ', ' ', ' ─── ', ' ', ' '],\n ' ': [' ', ' ', ' ', ' ', ' '],\n};\n\nfunction getSegmentMap(size: DigitSize): Record<string, string[]> {\n return size === 'lg' ? SEGMENTS_LG : SEGMENTS_MD;\n}\n\nfunction getFallback(size: DigitSize): string[] {\n const w = size === 'lg' ? 5 : 3;\n const bar = '─'.repeat(w - 2);\n const side = '│' + ' '.repeat(w - 2) + '│';\n return [`╭${bar}╮`, side, side, side, `╰${bar}╯`];\n}\n\nexport function Digits({ value, color, size = 'md' }: DigitsProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.primary;\n const str = String(value);\n\n if (size === 'sm') {\n return (\n <Text color={resolvedColor} bold>\n {str}\n </Text>\n );\n }\n\n const segMap = getSegmentMap(size);\n const fallback = getFallback(size);\n const chars = str.split('');\n const rows = 5;\n\n return (\n <Box flexDirection=\"column\">\n {Array.from({ length: rows }, (_, rowIdx) => (\n <Box key={rowIdx} flexDirection=\"row\">\n {chars.map((ch, charIdx) => {\n const segments = segMap[ch] ?? fallback;\n const rowStr = segments[rowIdx] ?? ' '.repeat(size === 'lg' ? 5 : 3);\n return (\n <Text key={charIdx} color={resolvedColor}>\n {rowStr}{' '}\n </Text>\n );\n })}\n </Box>\n ))}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface TextInputProps {\n value?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n placeholder?: string;\n mask?: string;\n validate?: (value: string) => string | null;\n width?: number;\n label?: string;\n autoFocus?: boolean;\n id?: string;\n}\n\nexport function TextInput({\n value: controlledValue,\n onChange,\n onSubmit,\n placeholder = '',\n mask,\n validate,\n width = 40,\n label,\n autoFocus = false,\n id,\n}: TextInputProps) {\n const [internalValue, setInternalValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const theme = useTheme();\n const { isFocused } = useFocus({ autoFocus, id });\n\n const value = controlledValue ?? internalValue;\n\n useInput((input, key) => {\n if (!isFocused) return;\n\n if (key.return) {\n const err = validate ? validate(value) : null;\n if (err) {\n setError(err);\n return;\n }\n setError(null);\n onSubmit?.(value);\n return;\n }\n\n if (key.backspace || key.delete) {\n const newVal = value.slice(0, -1);\n onChange ? onChange(newVal) : setInternalValue(newVal);\n return;\n }\n\n if (key.escape) return;\n if (key.upArrow || key.downArrow || key.tab) return;\n\n const newVal = value + input;\n onChange ? onChange(newVal) : setInternalValue(newVal);\n });\n\n const displayValue = mask ? mask.repeat(value.length) : value;\n const borderColor = error\n ? theme.colors.error\n : isFocused\n ? theme.colors.focusRing\n : theme.colors.border;\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text bold>{label}</Text>}\n <Box borderStyle=\"round\" borderColor={borderColor} width={width} paddingX={1}>\n <Text color={value ? theme.colors.foreground : theme.colors.mutedForeground}>\n {displayValue || placeholder}\n </Text>\n {isFocused && <Text color={theme.colors.focusRing}>█</Text>}\n </Box>\n {error && <Text color={theme.colors.error}>{error}</Text>}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface TextAreaProps {\n value?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n placeholder?: string;\n rows?: number;\n label?: string;\n id?: string;\n}\n\nexport function TextArea({\n value: controlledValue,\n onChange,\n onSubmit,\n placeholder = '',\n rows = 4,\n label,\n id,\n}: TextAreaProps) {\n const [internalValue, setInternalValue] = useState('');\n const [cursorLine, setCursorLine] = useState(0);\n const [cursorCol, setCursorCol] = useState(0);\n const [scrollOffset, setScrollOffset] = useState(0);\n const theme = useTheme();\n const { isFocused } = useFocus({ id });\n\n const value = controlledValue ?? internalValue;\n\n function setValue(newVal: string) {\n onChange ? onChange(newVal) : setInternalValue(newVal);\n }\n\n // Split value into lines array\n function getLines(v: string): string[] {\n return v.split('\\n');\n }\n\n // Rebuild value from lines array\n function joinLines(lines: string[]): string {\n return lines.join('\\n');\n }\n\n useInput((input, key) => {\n if (!isFocused) return;\n\n const lines = getLines(value);\n\n // Ctrl+Enter submits\n if (key.return && key.ctrl) {\n onSubmit?.(value);\n return;\n }\n\n // Enter adds a newline (unless at row limit)\n if (key.return) {\n const totalLines = lines.length;\n if (totalLines >= rows && cursorLine === rows - 1) {\n // At row limit on last visible row — do nothing\n return;\n }\n const currentLine = lines[cursorLine] ?? '';\n const before = currentLine.slice(0, cursorCol);\n const after = currentLine.slice(cursorCol);\n const newLines = [\n ...lines.slice(0, cursorLine),\n before,\n after,\n ...lines.slice(cursorLine + 1),\n ];\n setValue(joinLines(newLines));\n const newLine = cursorLine + 1;\n setCursorLine(newLine);\n setCursorCol(0);\n // Scroll down if needed\n if (newLine >= scrollOffset + rows) {\n setScrollOffset(newLine - rows + 1);\n }\n return;\n }\n\n if (key.backspace || key.delete) {\n const currentLine = lines[cursorLine] ?? '';\n if (cursorCol > 0) {\n // Delete character before cursor on same line\n const newLine = currentLine.slice(0, cursorCol - 1) + currentLine.slice(cursorCol);\n const newLines = [...lines.slice(0, cursorLine), newLine, ...lines.slice(cursorLine + 1)];\n setValue(joinLines(newLines));\n setCursorCol(cursorCol - 1);\n } else if (cursorLine > 0) {\n // Merge with previous line\n const prevLine = lines[cursorLine - 1] ?? '';\n const mergedLine = prevLine + currentLine;\n const newLines = [\n ...lines.slice(0, cursorLine - 1),\n mergedLine,\n ...lines.slice(cursorLine + 1),\n ];\n setValue(joinLines(newLines));\n const newLineIdx = cursorLine - 1;\n setCursorLine(newLineIdx);\n setCursorCol(prevLine.length);\n // Scroll up if needed\n if (newLineIdx < scrollOffset) {\n setScrollOffset(newLineIdx);\n }\n }\n return;\n }\n\n if (key.leftArrow) {\n if (cursorCol > 0) {\n setCursorCol(cursorCol - 1);\n } else if (cursorLine > 0) {\n const prevLine = lines[cursorLine - 1] ?? '';\n const newLineIdx = cursorLine - 1;\n setCursorLine(newLineIdx);\n setCursorCol(prevLine.length);\n if (newLineIdx < scrollOffset) {\n setScrollOffset(newLineIdx);\n }\n }\n return;\n }\n\n if (key.rightArrow) {\n const currentLine = lines[cursorLine] ?? '';\n if (cursorCol < currentLine.length) {\n setCursorCol(cursorCol + 1);\n } else if (cursorLine < lines.length - 1) {\n const newLineIdx = cursorLine + 1;\n setCursorLine(newLineIdx);\n setCursorCol(0);\n if (newLineIdx >= scrollOffset + rows) {\n setScrollOffset(newLineIdx - rows + 1);\n }\n }\n return;\n }\n\n if (key.upArrow) {\n if (cursorLine > 0) {\n const newLineIdx = cursorLine - 1;\n const targetLine = lines[newLineIdx] ?? '';\n setCursorLine(newLineIdx);\n setCursorCol(Math.min(cursorCol, targetLine.length));\n if (newLineIdx < scrollOffset) {\n setScrollOffset(newLineIdx);\n }\n }\n return;\n }\n\n if (key.downArrow) {\n if (cursorLine < lines.length - 1) {\n const newLineIdx = cursorLine + 1;\n const targetLine = lines[newLineIdx] ?? '';\n setCursorLine(newLineIdx);\n setCursorCol(Math.min(cursorCol, targetLine.length));\n if (newLineIdx >= scrollOffset + rows) {\n setScrollOffset(newLineIdx - rows + 1);\n }\n }\n return;\n }\n\n if (key.escape || key.tab) return;\n\n // Regular character input\n if (input && input.length > 0) {\n const currentLine = lines[cursorLine] ?? '';\n const newLine = currentLine.slice(0, cursorCol) + input + currentLine.slice(cursorCol);\n const newLines = [...lines.slice(0, cursorLine), newLine, ...lines.slice(cursorLine + 1)];\n setValue(joinLines(newLines));\n setCursorCol(cursorCol + input.length);\n }\n });\n\n const borderColor = isFocused ? theme.colors.focusRing : theme.colors.border;\n const lines = getLines(value);\n const visibleLines = lines.slice(scrollOffset, scrollOffset + rows);\n\n // Pad to always show `rows` rows\n const paddedLines: string[] = [...visibleLines];\n while (paddedLines.length < rows) {\n paddedLines.push('');\n }\n\n const isEmpty = value.length === 0;\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text bold>{label}</Text>}\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={borderColor} paddingX={1}>\n {paddedLines.map((line, rowIdx) => {\n const absoluteLineIdx = rowIdx + scrollOffset;\n const isActiveLine = isFocused && absoluteLineIdx === cursorLine;\n\n if (isEmpty && rowIdx === 0) {\n return (\n <Box key={rowIdx} flexDirection=\"row\">\n <Text color={theme.colors.mutedForeground}>{placeholder}</Text>\n {isFocused && <Text color={theme.colors.focusRing}>█</Text>}\n </Box>\n );\n }\n\n if (isActiveLine) {\n const before = line.slice(0, cursorCol);\n const after = line.slice(cursorCol);\n return (\n <Box key={rowIdx} flexDirection=\"row\">\n <Text color={theme.colors.foreground}>{before}</Text>\n <Text color={theme.colors.focusRing}>█</Text>\n <Text color={theme.colors.foreground}>{after}</Text>\n </Box>\n );\n }\n\n return (\n <Box key={rowIdx}>\n <Text color={theme.colors.foreground}>{line}</Text>\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface PasswordInputProps {\n value?: string;\n onChange?: (value: string) => void;\n onSubmit?: (value: string) => void;\n placeholder?: string;\n mask?: string;\n showToggle?: boolean;\n label?: string;\n id?: string;\n}\n\nexport function PasswordInput({\n value: controlledValue,\n onChange,\n onSubmit,\n placeholder = '',\n mask = '●',\n showToggle = false,\n label,\n id,\n}: PasswordInputProps) {\n const [internalValue, setInternalValue] = useState('');\n const [isVisible, setIsVisible] = useState(false);\n const theme = useTheme();\n const { isFocused } = useFocus({ id });\n\n const value = controlledValue ?? internalValue;\n\n function setValue(newVal: string) {\n onChange ? onChange(newVal) : setInternalValue(newVal);\n }\n\n useInput((input, key) => {\n if (!isFocused) return;\n\n // Ctrl+H toggles visibility when showToggle is enabled\n if (showToggle && input === '\\x08') {\n setIsVisible((v) => !v);\n return;\n }\n\n if (key.return) {\n onSubmit?.(value);\n return;\n }\n\n if (key.backspace || key.delete) {\n setValue(value.slice(0, -1));\n return;\n }\n\n if (key.escape || key.upArrow || key.downArrow || key.tab) return;\n\n if (input && input.length > 0) {\n setValue(value + input);\n }\n });\n\n const displayValue = isVisible ? value : mask.repeat(value.length);\n const borderColor = isFocused ? theme.colors.focusRing : theme.colors.border;\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text bold>{label}</Text>}\n <Box flexDirection=\"row\" alignItems=\"center\" gap={1}>\n <Box borderStyle=\"round\" borderColor={borderColor} paddingX={1}>\n <Text color={value ? theme.colors.foreground : theme.colors.mutedForeground}>\n {displayValue || placeholder}\n </Text>\n {isFocused && <Text color={theme.colors.focusRing}>█</Text>}\n </Box>\n {showToggle && isFocused && (\n <Text color={theme.colors.mutedForeground}>\n {isVisible ? 'Ctrl+H hide' : 'Ctrl+H show'}\n </Text>\n )}\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface NumberInputProps {\n value?: number;\n onChange?: (value: number) => void;\n onSubmit?: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n placeholder?: string;\n label?: string;\n id?: string;\n format?: (n: number) => string;\n}\n\nexport function NumberInput({\n value: controlledValue,\n onChange,\n onSubmit,\n min,\n max,\n step = 1,\n placeholder = '',\n label,\n id,\n format,\n}: NumberInputProps) {\n const [internalValue, setInternalValue] = useState<number | undefined>(undefined);\n // Buffer holds raw digit string while user is typing\n const [buffer, setBuffer] = useState<string>('');\n const theme = useTheme();\n const { isFocused } = useFocus({ id });\n\n const value = controlledValue ?? internalValue;\n\n function clamp(n: number): number {\n let result = n;\n if (min !== undefined) result = Math.max(min, result);\n if (max !== undefined) result = Math.min(max, result);\n return result;\n }\n\n function commitValue(n: number) {\n const clamped = clamp(n);\n onChange ? onChange(clamped) : setInternalValue(clamped);\n setBuffer(String(clamped));\n }\n\n useInput((input, key) => {\n if (!isFocused) return;\n\n if (key.upArrow) {\n const current = value ?? 0;\n commitValue(current + step);\n return;\n }\n\n if (key.downArrow) {\n const current = value ?? 0;\n commitValue(current - step);\n return;\n }\n\n if (key.return) {\n const parsed = buffer !== '' ? parseFloat(buffer) : value;\n if (parsed !== undefined && !isNaN(parsed)) {\n const clamped = clamp(parsed);\n onSubmit?.(clamped);\n }\n return;\n }\n\n if (key.backspace || key.delete) {\n const newBuffer = buffer.slice(0, -1);\n setBuffer(newBuffer);\n if (newBuffer === '' || newBuffer === '-') {\n // Leave value as-is until valid\n return;\n }\n const parsed = parseFloat(newBuffer);\n if (!isNaN(parsed)) {\n onChange ? onChange(clamp(parsed)) : setInternalValue(clamp(parsed));\n }\n return;\n }\n\n if (key.escape || key.tab) return;\n\n // Allow digits, one leading minus, and one decimal point\n if (input && /^[\\d.\\-]$/.test(input)) {\n // Prevent multiple dots or minus not at start\n if (input === '-' && buffer.length > 0) return;\n if (input === '.' && buffer.includes('.')) return;\n\n const newBuffer = buffer + input;\n setBuffer(newBuffer);\n const parsed = parseFloat(newBuffer);\n if (!isNaN(parsed)) {\n onChange ? onChange(clamp(parsed)) : setInternalValue(clamp(parsed));\n }\n }\n });\n\n const borderColor = isFocused ? theme.colors.focusRing : theme.colors.border;\n\n // Display: prefer buffer while focused (so partial input like \"-\" shows), else formatted value\n let displayValue = '';\n if (isFocused && buffer !== '') {\n displayValue = buffer;\n } else if (value !== undefined) {\n displayValue = format ? format(value) : String(value);\n }\n\n const stepHint = `↑ +${step} ↓ -${step}`;\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text bold>{label}</Text>}\n <Box flexDirection=\"row\" alignItems=\"center\" gap={1}>\n <Box borderStyle=\"round\" borderColor={borderColor} paddingX={1}>\n <Text color={displayValue ? theme.colors.foreground : theme.colors.mutedForeground}>\n {displayValue || placeholder}\n </Text>\n {isFocused && <Text color={theme.colors.focusRing}>█</Text>}\n </Box>\n {isFocused && <Text color={theme.colors.mutedForeground}>{stepHint}</Text>}\n </Box>\n </Box>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface SearchInputProps<T = string> {\n options?: T[];\n getValue?: (item: T) => string;\n value?: string;\n onChange?: (query: string) => void;\n onSelect?: (item: T) => void;\n placeholder?: string;\n label?: string;\n maxResults?: number;\n id?: string;\n}\n\nexport function SearchInput<T = string>({\n options,\n getValue,\n value: controlledValue,\n onChange,\n onSelect,\n placeholder = 'Search...',\n label,\n maxResults = 5,\n id,\n}: SearchInputProps<T>) {\n const [internalValue, setInternalValue] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [showResults, setShowResults] = useState(false);\n const theme = useTheme();\n const { isFocused } = useFocus({ id });\n\n const query = controlledValue ?? internalValue;\n\n function getItemValue(item: T): string {\n if (getValue) return getValue(item);\n return String(item);\n }\n\n function setQuery(newQuery: string) {\n onChange ? onChange(newQuery) : setInternalValue(newQuery);\n }\n\n const filteredResults = useMemo(() => {\n if (!options || options.length === 0) return [];\n if (!query) return options.slice(0, maxResults);\n const lower = query.toLowerCase();\n return options\n .filter((item) => getItemValue(item).toLowerCase().includes(lower))\n .slice(0, maxResults);\n }, [options, query, maxResults]);\n\n useInput((input, key) => {\n if (!isFocused) return;\n\n if (key.escape) {\n setQuery('');\n setShowResults(false);\n setSelectedIndex(0);\n return;\n }\n\n if (key.upArrow) {\n if (showResults && filteredResults.length > 0) {\n setSelectedIndex((i) => Math.max(0, i - 1));\n }\n return;\n }\n\n if (key.downArrow) {\n if (filteredResults.length > 0) {\n setShowResults(true);\n setSelectedIndex((i) => Math.min(filteredResults.length - 1, i + 1));\n }\n return;\n }\n\n if (key.return) {\n if (showResults && filteredResults.length > 0) {\n onSelect?.(filteredResults[selectedIndex]!);\n setQuery(getItemValue(filteredResults[selectedIndex]!));\n setShowResults(false);\n setSelectedIndex(0);\n }\n return;\n }\n\n if (key.backspace || key.delete) {\n const newQuery = query.slice(0, -1);\n setQuery(newQuery);\n setSelectedIndex(0);\n if (newQuery.length === 0) {\n setShowResults(false);\n }\n return;\n }\n\n if (key.tab) return;\n\n if (input && input.length > 0) {\n const newQuery = query + input;\n setQuery(newQuery);\n setSelectedIndex(0);\n if (options && options.length > 0) {\n setShowResults(true);\n }\n }\n });\n\n const borderColor = isFocused ? theme.colors.focusRing : theme.colors.border;\n const hasResults = showResults && filteredResults.length > 0;\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text bold>{label}</Text>}\n <Box borderStyle=\"round\" borderColor={borderColor} paddingX={1}>\n <Text color={theme.colors.mutedForeground}>{'🔍 '}</Text>\n <Text color={query ? theme.colors.foreground : theme.colors.mutedForeground}>\n {query || placeholder}\n </Text>\n {isFocused && <Text color={theme.colors.focusRing}>█</Text>}\n </Box>\n {hasResults && (\n <Box flexDirection=\"column\" paddingLeft={2}>\n {filteredResults.map((item, idx) => {\n const isSelected = idx === selectedIndex;\n return (\n <Box key={idx} flexDirection=\"row\">\n <Text color={isSelected ? theme.colors.focusRing : theme.colors.mutedForeground}>\n {isSelected ? '› ' : ' '}\n </Text>\n <Text color={isSelected ? theme.colors.foreground : theme.colors.mutedForeground}>\n {getItemValue(item)}\n </Text>\n </Box>\n );\n })}\n </Box>\n )}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface CheckboxProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n label?: string;\n indeterminate?: boolean;\n disabled?: boolean;\n id?: string;\n}\n\nexport function Checkbox({\n checked: controlledChecked,\n onChange,\n label,\n indeterminate = false,\n disabled = false,\n id,\n}: CheckboxProps) {\n const [internalChecked, setInternalChecked] = useState(false);\n const theme = useTheme();\n const { isFocused } = useFocus({ id });\n\n const checked = controlledChecked ?? internalChecked;\n\n useInput((input) => {\n if (!isFocused || disabled) return;\n if (input === ' ') {\n const next = !checked;\n onChange ? onChange(next) : setInternalChecked(next);\n }\n });\n\n const icon = indeterminate ? '▪' : checked ? '■' : '□';\n const iconColor = disabled\n ? theme.colors.mutedForeground\n : checked || indeterminate\n ? theme.colors.primary\n : theme.colors.border;\n\n return (\n <Box gap={1}>\n <Text color={isFocused ? theme.colors.focusRing : iconColor} bold={isFocused}>\n {icon}\n </Text>\n {label && (\n <Text\n color={disabled ? theme.colors.mutedForeground : theme.colors.foreground}\n dimColor={disabled}\n >\n {label}\n </Text>\n )}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface SelectOption<T = string> {\n value: T;\n label: string;\n hint?: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps<T = string> {\n options: SelectOption<T>[];\n value?: T;\n onChange?: (value: T) => void;\n onSubmit?: (value: T) => void;\n label?: string;\n cursor?: string;\n cursorColor?: string;\n}\n\nexport function Select<T = string>({\n options,\n value: controlledValue,\n onChange,\n onSubmit,\n label,\n cursor = '›',\n cursorColor,\n}: SelectProps<T>) {\n const theme = useTheme();\n const [activeIndex, setActiveIndex] = useState(0);\n\n const resolvedCursorColor = cursorColor ?? theme.colors.primary;\n\n useInput((input, key) => {\n if (key.upArrow) {\n setActiveIndex((i) => {\n let next = i - 1;\n while (next >= 0 && options[next]?.disabled) next--;\n return next < 0 ? i : next;\n });\n } else if (key.downArrow) {\n setActiveIndex((i) => {\n let next = i + 1;\n while (next < options.length && options[next]?.disabled) next++;\n return next >= options.length ? i : next;\n });\n } else if (key.return) {\n const opt = options[activeIndex];\n if (opt && !opt.disabled) {\n onChange?.(opt.value);\n onSubmit?.(opt.value);\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text bold>{label}</Text>}\n {options.map((opt, idx) => {\n const isActive = idx === activeIndex;\n const isSelected = controlledValue !== undefined && opt.value === controlledValue;\n return (\n <Box key={idx} gap={1}>\n <Text color={isActive ? resolvedCursorColor : undefined}>\n {isActive ? cursor : ' '}\n </Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isActive\n ? resolvedCursorColor\n : theme.colors.foreground\n }\n bold={isActive || isSelected}\n dimColor={opt.disabled}\n >\n {opt.label}\n </Text>\n {opt.hint && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {opt.hint}\n </Text>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface MultiSelectOption<T = string> {\n value: T;\n label: string;\n hint?: string;\n disabled?: boolean;\n}\n\nexport interface MultiSelectProps<T = string> {\n options: MultiSelectOption<T>[];\n value?: T[];\n onChange?: (values: T[]) => void;\n onSubmit?: (values: T[]) => void;\n cursor?: string;\n checkmark?: string;\n height?: number;\n}\n\nexport function MultiSelect<T = string>({\n options,\n value: controlledValue,\n onChange,\n onSubmit,\n cursor = '›',\n checkmark = '◉',\n height,\n}: MultiSelectProps<T>) {\n const theme = useTheme();\n const [activeIndex, setActiveIndex] = useState(0);\n const [internalSelected, setInternalSelected] = useState<T[]>([]);\n\n const selected = controlledValue ?? internalSelected;\n\n const scrollOffset = (() => {\n if (!height) return 0;\n const half = Math.floor(height / 2);\n const maxOffset = options.length - height;\n const offset = activeIndex - half;\n if (offset < 0) return 0;\n if (offset > maxOffset) return Math.max(0, maxOffset);\n return offset;\n })();\n\n const visibleOptions = height ? options.slice(scrollOffset, scrollOffset + height) : options;\n\n useInput((input, key) => {\n if (key.upArrow) {\n setActiveIndex((i) => {\n let next = i - 1;\n while (next >= 0 && options[next]?.disabled) next--;\n return next < 0 ? i : next;\n });\n } else if (key.downArrow) {\n setActiveIndex((i) => {\n let next = i + 1;\n while (next < options.length && options[next]?.disabled) next++;\n return next >= options.length ? i : next;\n });\n } else if (input === ' ') {\n const opt = options[activeIndex];\n if (!opt || opt.disabled) return;\n const isSelected = selected.includes(opt.value);\n const next = isSelected ? selected.filter((v) => v !== opt.value) : [...selected, opt.value];\n if (controlledValue === undefined) {\n setInternalSelected(next);\n }\n onChange?.(next);\n } else if (key.return) {\n onSubmit?.(selected);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {visibleOptions.map((opt, visibleIdx) => {\n const idx = scrollOffset + visibleIdx;\n const isActive = idx === activeIndex;\n const isSelected = selected.includes(opt.value);\n const icon = isSelected ? checkmark : '○';\n\n return (\n <Box key={idx} gap={1}>\n <Text color={isActive ? theme.colors.primary : undefined}>\n {isActive ? cursor : ' '}\n </Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isSelected\n ? theme.colors.primary\n : theme.colors.foreground\n }\n dimColor={opt.disabled}\n >\n {icon}\n </Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isActive\n ? theme.colors.primary\n : theme.colors.foreground\n }\n bold={isActive}\n dimColor={opt.disabled}\n >\n {opt.label}\n </Text>\n {opt.hint && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {opt.hint}\n </Text>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface RadioOption<T = string> {\n value: T;\n label: string;\n hint?: string;\n disabled?: boolean;\n}\n\nexport interface RadioGroupProps<T = string> {\n options: RadioOption<T>[];\n value?: T;\n onChange?: (value: T) => void;\n name?: string;\n cursor?: string;\n}\n\nexport function RadioGroup<T = string>({\n options,\n value: controlledValue,\n onChange,\n name: _name,\n cursor = '›',\n}: RadioGroupProps<T>) {\n const theme = useTheme();\n const [activeIndex, setActiveIndex] = useState(() => {\n if (controlledValue === undefined) return 0;\n const idx = options.findIndex((o) => o.value === controlledValue);\n return idx >= 0 ? idx : 0;\n });\n const [internalValue, setInternalValue] = useState<T | undefined>(controlledValue);\n\n const selected = controlledValue ?? internalValue;\n\n const select = (idx: number) => {\n const opt = options[idx];\n if (!opt || opt.disabled) return;\n if (controlledValue === undefined) {\n setInternalValue(opt.value);\n }\n onChange?.(opt.value);\n };\n\n useInput((input, key) => {\n if (key.upArrow) {\n setActiveIndex((i) => {\n let next = i - 1;\n while (next >= 0 && options[next]?.disabled) next--;\n return next < 0 ? i : next;\n });\n } else if (key.downArrow) {\n setActiveIndex((i) => {\n let next = i + 1;\n while (next < options.length && options[next]?.disabled) next++;\n return next >= options.length ? i : next;\n });\n } else if (input === ' ' || key.return) {\n select(activeIndex);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {options.map((opt, idx) => {\n const isActive = idx === activeIndex;\n const isSelected = selected !== undefined && opt.value === selected;\n const icon = isSelected ? '◉' : '○';\n\n return (\n <Box key={idx} gap={1}>\n <Text color={isActive ? theme.colors.primary : undefined}>\n {isActive ? cursor : ' '}\n </Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isSelected\n ? theme.colors.primary\n : theme.colors.foreground\n }\n dimColor={opt.disabled}\n >\n {icon}\n </Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isActive\n ? theme.colors.primary\n : theme.colors.foreground\n }\n bold={isActive || isSelected}\n dimColor={opt.disabled}\n >\n {opt.label}\n </Text>\n {opt.hint && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {opt.hint}\n </Text>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface CheckboxGroupOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps {\n label?: string;\n options: CheckboxGroupOption[];\n value?: string[];\n onChange?: (values: string[]) => void;\n min?: number;\n max?: number;\n}\n\nexport function CheckboxGroup({\n label,\n options,\n value: controlledValue,\n onChange,\n min,\n max,\n}: CheckboxGroupProps) {\n const theme = useTheme();\n const [activeIndex, setActiveIndex] = useState(0);\n const [internalSelected, setInternalSelected] = useState<string[]>([]);\n const [error, setError] = useState<string | undefined>(undefined);\n\n const selected = controlledValue ?? internalSelected;\n\n const validateAndUpdate = (next: string[]) => {\n if (min !== undefined && next.length < min) {\n setError(`Select at least ${min} option${min === 1 ? '' : 's'}.`);\n } else if (max !== undefined && next.length > max) {\n setError(`Select at most ${max} option${max === 1 ? '' : 's'}.`);\n return;\n } else {\n setError(undefined);\n }\n if (controlledValue === undefined) {\n setInternalSelected(next);\n }\n onChange?.(next);\n };\n\n useInput((input, key) => {\n if (key.upArrow) {\n setActiveIndex((i) => {\n let next = i - 1;\n while (next >= 0 && options[next]?.disabled) next--;\n return next < 0 ? i : next;\n });\n } else if (key.downArrow) {\n setActiveIndex((i) => {\n let next = i + 1;\n while (next < options.length && options[next]?.disabled) next++;\n return next >= options.length ? i : next;\n });\n } else if (input === ' ') {\n const opt = options[activeIndex];\n if (!opt || opt.disabled) return;\n const isSelected = selected.includes(opt.value);\n const next = isSelected ? selected.filter((v) => v !== opt.value) : [...selected, opt.value];\n validateAndUpdate(next);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {label && (\n <Text bold color={theme.colors.foreground}>\n {label}\n </Text>\n )}\n {options.map((opt, idx) => {\n const isActive = idx === activeIndex;\n const isSelected = selected.includes(opt.value);\n const icon = isSelected ? '◉' : '○';\n\n return (\n <Box key={idx} gap={1}>\n <Text color={isActive ? theme.colors.primary : undefined}>{isActive ? '›' : ' '}</Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isSelected\n ? theme.colors.primary\n : theme.colors.foreground\n }\n dimColor={opt.disabled}\n >\n {icon}\n </Text>\n <Text\n color={\n opt.disabled\n ? theme.colors.mutedForeground\n : isActive\n ? theme.colors.primary\n : theme.colors.foreground\n }\n bold={isActive}\n dimColor={opt.disabled}\n >\n {opt.label}\n </Text>\n </Box>\n );\n })}\n {error && <Text color={theme.colors.error}>{error}</Text>}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface TagInputProps {\n value?: string[];\n onChange?: (tags: string[]) => void;\n placeholder?: string;\n maxTags?: number;\n delimiter?: string;\n}\n\nexport function TagInput({\n value: controlledValue,\n onChange,\n placeholder = 'Type and press Enter…',\n maxTags,\n}: TagInputProps) {\n const theme = useTheme();\n const [internalTags, setInternalTags] = useState<string[]>([]);\n const [inputText, setInputText] = useState('');\n\n const tags = controlledValue ?? internalTags;\n\n const updateTags = (next: string[]) => {\n if (controlledValue === undefined) {\n setInternalTags(next);\n }\n onChange?.(next);\n };\n\n const addTag = () => {\n const trimmed = inputText.trim();\n if (!trimmed) return;\n if (maxTags !== undefined && tags.length >= maxTags) return;\n updateTags([...tags, trimmed]);\n setInputText('');\n };\n\n const removeLastTag = () => {\n if (tags.length === 0) return;\n updateTags(tags.slice(0, -1));\n };\n\n useInput((input, key) => {\n if (key.return) {\n addTag();\n } else if (key.backspace || key.delete) {\n if (inputText.length > 0) {\n setInputText((t) => t.slice(0, -1));\n } else {\n removeLastTag();\n }\n } else if (\n !key.ctrl &&\n !key.meta &&\n !key.upArrow &&\n !key.downArrow &&\n !key.leftArrow &&\n !key.rightArrow &&\n !key.escape &&\n !key.tab\n ) {\n if (input) {\n setInputText((t) => t + input);\n }\n }\n });\n\n const atMax = maxTags !== undefined && tags.length >= maxTags;\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n <Box flexWrap=\"wrap\" gap={1}>\n {tags.map((tag, idx) => (\n <Box key={idx}>\n <Text bold>[</Text>\n <Text>{tag}</Text>\n <Text bold> ×]</Text>\n </Box>\n ))}\n </Box>\n <Box gap={1}>\n <Text color={theme.colors.primary}>{'›'}</Text>\n {atMax ? (\n <Text color={theme.colors.mutedForeground} dimColor>\n {`Max ${maxTags} tag${maxTags === 1 ? '' : 's'} reached`}\n </Text>\n ) : (\n <Text color={inputText ? theme.colors.foreground : theme.colors.mutedForeground}>\n {inputText || placeholder}\n </Text>\n )}\n </Box>\n </Box>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface ListItem {\n key: string;\n label: string;\n description?: string;\n color?: string;\n}\n\nexport interface ListProps {\n items: ListItem[];\n onSelect?: (item: ListItem) => void;\n filterable?: boolean;\n height?: number;\n cursor?: string;\n}\n\nexport function List({\n items,\n onSelect,\n filterable = false,\n height = 10,\n cursor = '›',\n}: ListProps) {\n const theme = useTheme();\n const [activeIndex, setActiveIndex] = useState(0);\n const [filter, setFilter] = useState('');\n\n const filtered = useMemo(() => {\n if (!filter) return items;\n const q = filter.toLowerCase();\n return items.filter((item) => item.label.toLowerCase().includes(q));\n }, [items, filter]);\n\n useInput((input, key) => {\n if (key.upArrow) {\n setActiveIndex((i) => Math.max(0, i - 1));\n } else if (key.downArrow) {\n setActiveIndex((i) => Math.min(filtered.length - 1, i + 1));\n } else if (key.return) {\n const item = filtered[activeIndex];\n if (item) onSelect?.(item);\n } else if (filterable && key.backspace) {\n setFilter((f) => f.slice(0, -1));\n } else if (filterable && !key.escape && !key.return && !key.upArrow && !key.downArrow) {\n setFilter((f) => f + input);\n }\n });\n\n const visible = filtered.slice(0, height);\n\n return (\n <Box flexDirection=\"column\">\n {filterable && (\n <Box borderStyle=\"round\" borderColor={theme.colors.border} paddingX={1} marginBottom={1}>\n <Text dimColor={!filter}>{filter || 'Type to filter…'}</Text>\n </Box>\n )}\n {visible.map((item, idx) => {\n const isActive = idx === activeIndex;\n return (\n <Box key={item.key} gap={1}>\n <Text color={isActive ? theme.colors.primary : undefined}>\n {isActive ? cursor : ' '}\n </Text>\n <Text\n color={item.color ?? (isActive ? theme.colors.primary : theme.colors.foreground)}\n bold={isActive}\n >\n {item.label}\n </Text>\n {item.description && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {item.description}\n </Text>\n )}\n </Box>\n );\n })}\n {filtered.length > height && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {filtered.length - height} more…\n </Text>\n )}\n </Box>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface Column<T = Record<string, unknown>> {\n key: keyof T & string;\n header: string;\n width?: number;\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface TableProps<T extends Record<string, unknown> = Record<string, unknown>> {\n data: T[];\n columns: Column<T>[];\n sortable?: boolean;\n selectable?: boolean;\n onSelect?: (row: T) => void;\n maxRows?: number;\n borderColor?: string;\n}\n\nfunction pad(str: string, width: number, align: 'left' | 'right' | 'center' = 'left'): string {\n const s = String(str);\n if (s.length >= width) return s.slice(0, width);\n const diff = width - s.length;\n if (align === 'right') return ' '.repeat(diff) + s;\n if (align === 'center') {\n const left = Math.floor(diff / 2);\n const right = diff - left;\n return ' '.repeat(left) + s + ' '.repeat(right);\n }\n return s + ' '.repeat(diff);\n}\n\nexport function Table<T extends Record<string, unknown> = Record<string, unknown>>({\n data,\n columns,\n sortable = false,\n selectable = false,\n onSelect,\n maxRows = 20,\n borderColor,\n}: TableProps<T>) {\n const theme = useTheme();\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc');\n const [activeRow, setActiveRow] = useState(0);\n const [sortColIdx, setSortColIdx] = useState(0);\n\n const resolvedBorderColor = borderColor ?? theme.colors.border;\n\n const sorted = useMemo(() => {\n if (!sortKey) return data;\n return [...data].sort((a, b) => {\n const av = a[sortKey];\n const bv = b[sortKey];\n const cmp = String(av).localeCompare(String(bv));\n return sortDir === 'asc' ? cmp : -cmp;\n });\n }, [data, sortKey, sortDir]);\n\n const visible = sorted.slice(0, maxRows);\n\n useInput((input, key) => {\n if (key.upArrow) setActiveRow((r) => Math.max(0, r - 1));\n else if (key.downArrow) setActiveRow((r) => Math.min(visible.length - 1, r + 1));\n else if (key.return && selectable) onSelect?.(visible[activeRow] as T);\n else if (sortable && key.leftArrow) setSortColIdx((i) => Math.max(0, i - 1));\n else if (sortable && key.rightArrow) setSortColIdx((i) => Math.min(columns.length - 1, i + 1));\n else if (sortable && input === 's') {\n const col = columns[sortColIdx];\n if (!col) return;\n if (sortKey === col.key) {\n setSortDir((d) => (d === 'asc' ? 'desc' : 'asc'));\n } else {\n setSortKey(col.key);\n setSortDir('asc');\n }\n }\n });\n\n // Auto-size columns\n const colWidths = columns.map((col) => {\n const dataMax = data.reduce((max, row) => Math.max(max, String(row[col.key] ?? '').length), 0);\n return col.width ?? Math.max(col.header.length, dataMax) + 2;\n });\n\n const headerRow = columns\n .map((col, i) => pad(col.header, colWidths[i] ?? col.header.length, col.align))\n .join(' │ ');\n const separator = colWidths.map((w) => '─'.repeat(w)).join('─┼─');\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={resolvedBorderColor}>\n {/* Header */}\n <Box paddingX={1}>\n <Text bold color={theme.colors.primary}>\n {headerRow}\n </Text>\n </Box>\n <Box paddingX={1}>\n <Text color={resolvedBorderColor}>{separator}</Text>\n </Box>\n {/* Rows */}\n {visible.map((row, rowIdx) => {\n const isActive = rowIdx === activeRow && selectable;\n const cells = columns\n .map((col, i) => pad(String(row[col.key] ?? ''), colWidths[i] ?? 8, col.align))\n .join(' │ ');\n return (\n <Box key={rowIdx} paddingX={1}>\n <Text\n color={isActive ? theme.colors.selectionForeground : theme.colors.foreground}\n inverse={isActive}\n >\n {cells}\n </Text>\n </Box>\n );\n })}\n {data.length > maxRows && (\n <Box paddingX={1}>\n <Text color={theme.colors.mutedForeground} dimColor>\n … {data.length - maxRows} more rows\n </Text>\n </Box>\n )}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface CardProps {\n title?: string;\n subtitle?: string;\n children: ReactNode;\n footer?: ReactNode;\n borderColor?: string;\n width?: number;\n}\n\nexport function Card({ title, subtitle, children, footer, borderColor, width }: CardProps) {\n const theme = useTheme();\n const resolvedBorderColor = borderColor ?? theme.colors.border;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={resolvedBorderColor}\n width={width}\n paddingX={1}\n paddingY={0}\n >\n {(title || subtitle) && (\n <Box flexDirection=\"column\" paddingBottom={1}>\n {title && (\n <Text bold color={theme.colors.foreground}>\n {title}\n </Text>\n )}\n {subtitle && (\n <Text dimColor color={theme.colors.mutedForeground}>\n {subtitle}\n </Text>\n )}\n </Box>\n )}\n <Box flexDirection=\"column\">{children}</Box>\n {footer && (\n <Box flexDirection=\"column\" marginTop={1} paddingTop={1}>\n <Text color={resolvedBorderColor}>{'─'.repeat(30)}</Text>\n <Box marginTop={0}>{footer}</Box>\n </Box>\n )}\n </Box>\n );\n}\n","import React, { useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface KeyValueItem {\n key: string;\n value: ReactNode;\n color?: string;\n}\n\nexport interface KeyValueProps {\n items: KeyValueItem[];\n keyWidth?: number;\n separator?: string;\n keyColor?: string;\n valueColor?: string;\n}\n\nexport function KeyValue({\n items,\n keyWidth,\n separator = ':',\n keyColor,\n valueColor,\n}: KeyValueProps) {\n const theme = useTheme();\n\n const resolvedKeyWidth = useMemo(() => {\n if (keyWidth !== undefined) return keyWidth;\n return items.reduce((max, item) => Math.max(max, item.key.length), 0) + 1;\n }, [items, keyWidth]);\n\n const resolvedKeyColor = keyColor ?? theme.colors.mutedForeground;\n const resolvedValueColor = valueColor ?? theme.colors.foreground;\n\n return (\n <Box flexDirection=\"column\">\n {items.map((item, idx) => {\n const paddedKey = item.key.padEnd(resolvedKeyWidth, ' ');\n return (\n <Box key={idx} flexDirection=\"row\" gap={1}>\n <Text color={resolvedKeyColor}>{paddedKey}</Text>\n <Text color={resolvedKeyColor}>{separator}</Text>\n <Text color={item.color ?? resolvedValueColor}>{item.value}</Text>\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport interface DefinitionItem {\n term: string;\n description: string;\n}\n\nexport interface DefinitionProps {\n items: DefinitionItem[];\n termColor?: string;\n}\n\nexport function Definition({ items, termColor }: DefinitionProps) {\n const theme = useTheme();\n const resolvedTermColor = termColor ?? theme.colors.primary;\n\n return (\n <Box flexDirection=\"column\">\n {items.map((item, idx) => (\n <Box key={idx} flexDirection=\"column\" marginBottom={idx < items.length - 1 ? 1 : 0}>\n <Text bold color={resolvedTermColor}>\n {item.term}\n </Text>\n <Box paddingLeft={2}>\n <Text color={theme.colors.foreground}>{item.description}</Text>\n </Box>\n </Box>\n ))}\n </Box>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface VirtualListProps<T> {\n items: T[];\n renderItem: (item: T, index: number, isActive: boolean) => ReactNode;\n height: number;\n onSelect?: (item: T, index: number) => void;\n cursor?: string;\n overscan?: number;\n}\n\nexport function VirtualList<T>({\n items,\n renderItem,\n height,\n onSelect,\n overscan = 2,\n}: VirtualListProps<T>) {\n const theme = useTheme();\n const [activeIndex, setActiveIndex] = useState(0);\n const [windowStart, setWindowStart] = useState(0);\n\n useInput((_input, key) => {\n if (key.upArrow) {\n setActiveIndex((prev) => {\n const next = Math.max(0, prev - 1);\n setWindowStart((ws) => Math.min(ws, next));\n return next;\n });\n } else if (key.downArrow) {\n setActiveIndex((prev) => {\n const next = Math.min(items.length - 1, prev + 1);\n setWindowStart((ws) => {\n if (next >= ws + height) return next - height + 1;\n return ws;\n });\n return next;\n });\n } else if (key.return) {\n const item = items[activeIndex];\n if (item !== undefined) onSelect?.(item, activeIndex);\n }\n });\n\n const visibleStart = Math.max(0, windowStart - overscan);\n const visibleEnd = Math.min(items.length, windowStart + height + overscan);\n const visibleItems = useMemo(\n () => items.slice(visibleStart, visibleEnd),\n [items, visibleStart, visibleEnd]\n );\n\n // Scrollbar calculations\n const thumbSize = Math.max(1, Math.floor((height * height) / items.length));\n const thumbPosition =\n items.length <= height\n ? 0\n : Math.floor((activeIndex / (items.length - 1)) * (height - thumbSize));\n\n const scrollbar = useMemo(() => {\n return Array.from({ length: height }, (_, i) => {\n if (i >= thumbPosition && i < thumbPosition + thumbSize) return '█';\n return '│';\n });\n }, [height, thumbPosition, thumbSize]);\n\n return (\n <Box flexDirection=\"row\">\n <Box flexDirection=\"column\" flexGrow={1}>\n {visibleItems.map((item, localIdx) => {\n const globalIdx = visibleStart + localIdx;\n const isVisible = globalIdx >= windowStart && globalIdx < windowStart + height;\n if (!isVisible) return null;\n const isActive = globalIdx === activeIndex;\n return <Box key={globalIdx}>{renderItem(item, globalIdx, isActive)}</Box>;\n })}\n </Box>\n {items.length > height && (\n <Box flexDirection=\"column\" marginLeft={1}>\n {scrollbar.map((char, i) => (\n <Text\n key={i}\n color={char === '█' ? theme.colors.primary : theme.colors.mutedForeground}\n >\n {char}\n </Text>\n ))}\n </Box>\n )}\n </Box>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface TreeNode {\n key: string;\n label: string;\n children?: TreeNode[];\n icon?: string;\n}\n\nexport interface TreeProps {\n nodes: TreeNode[];\n onSelect?: (node: TreeNode) => void;\n defaultExpanded?: string[];\n}\n\ninterface FlatNode {\n node: TreeNode;\n depth: number;\n hasChildren: boolean;\n}\n\nfunction flattenTree(nodes: TreeNode[], expandedKeys: Set<string>, depth = 0): FlatNode[] {\n const result: FlatNode[] = [];\n for (const node of nodes) {\n const hasChildren = Boolean(node.children && node.children.length > 0);\n result.push({ node, depth, hasChildren });\n if (hasChildren && expandedKeys.has(node.key)) {\n const childFlat = flattenTree(node.children!, expandedKeys, depth + 1);\n result.push(...childFlat);\n }\n }\n return result;\n}\n\nexport function Tree({ nodes, onSelect, defaultExpanded = [] }: TreeProps) {\n const theme = useTheme();\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set(defaultExpanded));\n const [activeIndex, setActiveIndex] = useState(0);\n\n const flatNodes = useMemo(() => flattenTree(nodes, expandedKeys), [nodes, expandedKeys]);\n\n useInput((_input, key) => {\n const current = flatNodes[activeIndex];\n\n if (key.upArrow) {\n setActiveIndex((i) => Math.max(0, i - 1));\n } else if (key.downArrow) {\n setActiveIndex((i) => Math.min(flatNodes.length - 1, i + 1));\n } else if (key.rightArrow || _input === ' ') {\n if (current?.hasChildren && !expandedKeys.has(current.node.key)) {\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n next.add(current.node.key);\n return next;\n });\n }\n } else if (key.leftArrow) {\n if (current?.hasChildren && expandedKeys.has(current.node.key)) {\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n next.delete(current.node.key);\n return next;\n });\n }\n } else if (key.return) {\n if (current) onSelect?.(current.node);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {flatNodes.map(({ node, depth, hasChildren }, idx) => {\n const isActive = idx === activeIndex;\n const isExpanded = expandedKeys.has(node.key);\n\n let prefix = ' '.repeat(depth);\n let indicator: string;\n if (hasChildren) {\n indicator = isExpanded ? '▼' : '▶';\n } else {\n indicator = node.icon ?? '•';\n }\n\n return (\n <Box key={node.key} flexDirection=\"row\">\n <Text>{prefix}</Text>\n <Text color={isActive ? theme.colors.primary : theme.colors.mutedForeground}>\n {indicator}{' '}\n </Text>\n <Text bold={isActive} color={isActive ? theme.colors.primary : theme.colors.foreground}>\n {node.label}\n </Text>\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React from 'react';\nimport { Text } from 'ink';\nimport { useAnimation, useTheme } from '@termui/core';\n\nexport type SpinnerStyle =\n | 'dots'\n | 'line'\n | 'star'\n | 'clock'\n | 'bounce'\n | 'bar'\n | 'arc'\n | 'arrow'\n | 'toggle'\n | 'box'\n | 'pipe'\n | 'earth';\n\nconst FRAMES: Record<SpinnerStyle, string[]> = {\n dots: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n line: ['—', '\\\\', '|', '/'],\n star: ['✶', '✸', '✹', '✺', '✹', '✸'],\n clock: ['🕐', '🕑', '🕒', '🕓', '🕔', '🕕', '🕖', '🕗', '🕘', '🕙', '🕚', '🕛'],\n bounce: ['⠁', '⠂', '⠄', '⡀', '⡈', '⠠', '⠐', '⠈'],\n bar: ['▏', '▎', '▍', '▌', '▋', '▊', '▉', '█', '▉', '▊', '▋', '▌', '▍', '▎'],\n arc: ['◜', '◠', '◝', '◞', '◡', '◟'],\n arrow: ['←', '↖', '↑', '↗', '→', '↘', '↓', '↙'],\n toggle: ['⊶', '⊷'],\n box: ['▖', '▘', '▝', '▗'],\n pipe: ['┤', '┘', '┴', '└', '├', '┌', '┬', '┐'],\n earth: ['🌍', '🌎', '🌏'],\n};\n\nexport interface SpinnerProps {\n style?: SpinnerStyle;\n label?: string;\n color?: string;\n fps?: number;\n}\n\nexport function Spinner({ style: spinnerStyle = 'dots', label, color, fps = 12 }: SpinnerProps) {\n const theme = useTheme();\n const frame = useAnimation(fps);\n const frames = FRAMES[spinnerStyle];\n const icon = frames[frame % frames.length];\n const resolvedColor = color ?? theme.colors.primary;\n\n return (\n <Text>\n <Text color={resolvedColor}>{icon}</Text>\n {label && <Text> {label}</Text>}\n </Text>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport interface ProgressBarProps {\n value: number; // 0–100\n total?: number; // if set, value is current, total is max\n width?: number;\n showPercent?: boolean;\n showEta?: boolean;\n fillChar?: string;\n emptyChar?: string;\n color?: string;\n label?: string;\n}\n\nexport function ProgressBar({\n value,\n total,\n width = 30,\n showPercent = true,\n showEta = false,\n fillChar = '█',\n emptyChar = '░',\n color,\n label,\n}: ProgressBarProps) {\n const theme = useTheme();\n const resolvedColor = color ?? theme.colors.primary;\n\n const percent =\n total !== undefined\n ? Math.min(100, Math.round((value / total) * 100))\n : Math.min(100, Math.round(value));\n const filled = Math.round((percent / 100) * width);\n const empty = width - filled;\n\n const bar = fillChar.repeat(filled) + emptyChar.repeat(empty);\n\n return (\n <Box flexDirection=\"column\">\n {label && <Text>{label}</Text>}\n <Box gap={1}>\n <Text color={resolvedColor}>{bar}</Text>\n {showPercent && <Text color={theme.colors.mutedForeground}>{percent}%</Text>}\n {total !== undefined && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {value}/{total}\n </Text>\n )}\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport type AlertVariant = 'success' | 'error' | 'warning' | 'info';\n\nconst ICONS: Record<AlertVariant, string> = {\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n};\n\nexport interface AlertProps {\n variant?: AlertVariant;\n title?: string;\n children?: ReactNode;\n icon?: string;\n}\n\nexport function Alert({ variant = 'info', title, children, icon }: AlertProps) {\n const theme = useTheme();\n\n const variantColor = (() => {\n switch (variant) {\n case 'success':\n return theme.colors.success;\n case 'error':\n return theme.colors.error;\n case 'warning':\n return theme.colors.warning;\n default:\n return theme.colors.info;\n }\n })();\n\n const resolvedIcon = icon ?? ICONS[variant];\n\n return (\n <Box\n borderStyle=\"round\"\n borderColor={variantColor}\n paddingX={1}\n paddingY={0}\n flexDirection=\"column\"\n >\n <Box gap={1}>\n <Text color={variantColor} bold>\n {resolvedIcon}\n </Text>\n {title && (\n <Text bold color={variantColor}>\n {title}\n </Text>\n )}\n </Box>\n {children && <Text>{children}</Text>}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\nimport { Spinner } from './Spinner.js';\n\nexport type StatusVariant = 'success' | 'error' | 'warning' | 'info' | 'loading' | 'pending';\n\nconst ICONS: Record<Exclude<StatusVariant, 'loading'>, string> = {\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n pending: '○',\n};\n\nexport interface StatusMessageProps {\n variant?: StatusVariant;\n children: ReactNode;\n icon?: string;\n}\n\nexport function StatusMessage({ variant = 'info', children, icon }: StatusMessageProps) {\n const theme = useTheme();\n\n const variantColor = (() => {\n switch (variant) {\n case 'success':\n return theme.colors.success;\n case 'error':\n return theme.colors.error;\n case 'warning':\n return theme.colors.warning;\n case 'loading':\n return theme.colors.primary;\n case 'pending':\n return theme.colors.muted;\n default:\n return theme.colors.info;\n }\n })();\n\n return (\n <Box gap={1} flexDirection=\"row\">\n {variant === 'loading' ? (\n <Spinner style=\"dots\" color={variantColor} />\n ) : (\n <Text color={variantColor}>\n {icon ?? ICONS[variant as Exclude<StatusVariant, 'loading'>]}\n </Text>\n )}\n <Text>{children}</Text>\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme, useInterval } from '@termui/core';\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info';\n\nconst ICONS: Record<ToastVariant, string> = {\n success: '✓',\n error: '✗',\n warning: '⚠',\n info: 'ℹ',\n};\n\nexport interface ToastProps {\n message: string;\n variant?: ToastVariant;\n duration?: number;\n onDismiss?: () => void;\n icon?: string;\n}\n\nconst BAR_WIDTH = 20;\nconst TICK_MS = 100;\n\nexport function Toast({ message, variant = 'info', duration = 3000, onDismiss, icon }: ToastProps) {\n const theme = useTheme();\n const [elapsed, setElapsed] = useState(0);\n const [dismissed, setDismissed] = useState(false);\n\n const variantColor = (() => {\n switch (variant) {\n case 'success':\n return theme.colors.success;\n case 'error':\n return theme.colors.error;\n case 'warning':\n return theme.colors.warning;\n default:\n return theme.colors.info;\n }\n })();\n\n // Auto-dismiss after duration\n useEffect(() => {\n const id = setTimeout(() => {\n setDismissed(true);\n onDismiss?.();\n }, duration);\n return () => clearTimeout(id);\n }, [duration, onDismiss]);\n\n // Tick every 100ms for countdown display\n useInterval(\n () => {\n setElapsed((e) => Math.min(e + TICK_MS, duration));\n },\n dismissed ? null : TICK_MS\n );\n\n if (dismissed) return null;\n\n const remaining = Math.max(0, duration - elapsed);\n const remainingSeconds = (remaining / 1000).toFixed(1);\n const progress = remaining / duration; // 1.0 → 0.0\n const filledChars = Math.round(progress * BAR_WIDTH);\n const emptyChars = BAR_WIDTH - filledChars;\n const bar = '█'.repeat(filledChars) + '░'.repeat(emptyChars);\n\n const resolvedIcon = icon ?? ICONS[variant];\n\n return (\n <Box\n borderStyle=\"round\"\n borderColor={variantColor}\n paddingX={1}\n paddingY={0}\n flexDirection=\"column\"\n >\n <Box gap={1}>\n <Text color={variantColor} bold>\n {resolvedIcon}\n </Text>\n <Text>{message}</Text>\n </Box>\n <Box gap={1}>\n <Text color={variantColor}>{bar}</Text>\n <Text color={theme.colors.muted}>{remainingSeconds}s</Text>\n </Box>\n </Box>\n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text, useInput } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport type BannerVariant = 'info' | 'warning' | 'error' | 'success' | 'neutral';\n\nconst ICONS: Record<BannerVariant, string> = {\n info: 'ℹ',\n warning: '⚠',\n error: '✗',\n success: '✓',\n neutral: '·',\n};\n\nexport interface BannerProps {\n children: ReactNode;\n variant?: BannerVariant;\n icon?: string;\n title?: string;\n dismissible?: boolean;\n onDismiss?: () => void;\n}\n\nexport function Banner({\n children,\n variant = 'info',\n icon,\n title,\n dismissible = false,\n onDismiss,\n}: BannerProps) {\n const theme = useTheme();\n const [dismissed, setDismissed] = useState(false);\n\n const variantColor = (() => {\n switch (variant) {\n case 'success':\n return theme.colors.success;\n case 'error':\n return theme.colors.error;\n case 'warning':\n return theme.colors.warning;\n case 'neutral':\n return theme.colors.muted;\n default:\n return theme.colors.info;\n }\n })();\n\n useInput((_, key) => {\n if (dismissible && key.escape) {\n setDismissed(true);\n onDismiss?.();\n }\n });\n\n if (dismissed) return null;\n\n const resolvedIcon = icon ?? ICONS[variant];\n\n return (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\" gap={1}>\n <Text color={variantColor}>┃</Text>\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\" gap={1}>\n <Text color={variantColor}>{resolvedIcon}</Text>\n {title && (\n <Text bold color={variantColor}>\n {title}:\n </Text>\n )}\n <Text>{children}</Text>\n </Box>\n {dismissible && (\n <Text color={theme.colors.muted} dimColor>\n press Esc to dismiss\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme, useAnimation } from '@termui/core';\n\nexport interface SkeletonProps {\n width?: number;\n height?: number;\n animated?: boolean;\n}\n\nexport function Skeleton({ width = 20, height = 1, animated = true }: SkeletonProps) {\n const theme = useTheme();\n // fps=4 gives slow shimmer; frame increments at ~4 fps\n const frame = useAnimation(4);\n\n // Offset cycles 0 → width repeatedly\n const offset = animated ? frame % (width + 6) : -1;\n\n const buildRow = (): string => {\n let row = '';\n for (let i = 0; i < width; i++) {\n const inHighlight = i >= offset - 3 && i <= offset + 3;\n row += inHighlight ? '█' : '░';\n }\n return row;\n };\n\n const rows = Array.from({ length: height }, (_, rowIndex) => {\n // Stagger each row's shimmer slightly by shifting the offset\n const rowOffset = animated ? (frame + rowIndex * 2) % (width + 6) : -1;\n let row = '';\n for (let i = 0; i < width; i++) {\n const inHighlight = i >= rowOffset - 3 && i <= rowOffset + 3;\n row += inHighlight ? '█' : '░';\n }\n return row;\n });\n\n return (\n <Box flexDirection=\"column\">\n {rows.map((row, i) => (\n <Text key={i}>\n {row.split('').map((char, j) => (\n <Text key={j} color={char === '█' ? theme.colors.mutedForeground : theme.colors.muted}>\n {char}\n </Text>\n ))}\n </Text>\n ))}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\n\nexport type ProgressCircleSize = 'sm' | 'md' | 'lg';\n\nexport interface ProgressCircleProps {\n value: number;\n size?: ProgressCircleSize;\n color?: string;\n label?: string;\n showPercent?: boolean;\n}\n\nconst BRAILLE_CHARS = ['○', '◔', '◑', '◕', '●', '◉', '⬤', '●'];\n\n// 3×3 arc chars for md/lg sizes\nconst MD_TOP = ['▄▄▄', '▄██▄'];\nconst MD_MID_EMPTY = '█ █';\nconst MD_MID_FILL = '█████';\nconst MD_BOT = ['▀▀▀', '▀██▀'];\n\nfunction getSmChar(value: number): string {\n const clamped = Math.max(0, Math.min(100, value));\n const step = Math.floor((clamped / 100) * 7);\n return BRAILLE_CHARS[step];\n}\n\nexport function ProgressCircle({\n value,\n size = 'sm',\n color,\n label,\n showPercent = false,\n}: ProgressCircleProps) {\n const theme = useTheme();\n const clamped = Math.max(0, Math.min(100, value));\n const resolvedColor = color ?? theme.colors.primary;\n\n if (size === 'sm') {\n const char = getSmChar(clamped);\n return (\n <Box flexDirection=\"column\" alignItems=\"flex-start\">\n <Box flexDirection=\"row\" gap={1}>\n <Text color={resolvedColor}>{char}</Text>\n {showPercent && <Text color={theme.colors.muted}>{Math.round(clamped)}%</Text>}\n </Box>\n {label && <Text color={theme.colors.muted}>{label}</Text>}\n </Box>\n );\n }\n\n // md and lg: render percentage inside compact brackets\n // lg adds more padding / a border ring\n const percentLabel = `${Math.round(clamped)}%`;\n\n if (size === 'md') {\n return (\n <Box flexDirection=\"column\" alignItems=\"flex-start\">\n <Box flexDirection=\"row\">\n <Text color={resolvedColor}>⟨</Text>\n <Text color={resolvedColor} bold>\n {percentLabel}\n </Text>\n <Text color={resolvedColor}>⟩</Text>\n </Box>\n {label && <Text color={theme.colors.muted}>{label}</Text>}\n </Box>\n );\n }\n\n // lg: 3-line arc representation\n const fillLevel = clamped / 100; // 0.0 → 1.0\n // Top arc always shown; mid row fills from bottom; bot arc always shown\n const topArc = ' ▄█▄';\n const midLeft = '█';\n const midRight = '█';\n const midInner = fillLevel >= 0.5 ? '███' : ' ';\n const botArc = ' ▀█▀';\n\n return (\n <Box flexDirection=\"column\" alignItems=\"flex-start\">\n <Text color={resolvedColor}>{topArc}</Text>\n <Box flexDirection=\"row\">\n <Text color={resolvedColor}>{midLeft}</Text>\n <Text color={fillLevel > 0 ? resolvedColor : theme.colors.muted}>{midInner}</Text>\n <Text color={resolvedColor}>{midRight}</Text>\n </Box>\n <Text color={resolvedColor}>{botArc}</Text>\n {showPercent && <Text color={theme.colors.muted}>{percentLabel}</Text>}\n {label && <Text color={theme.colors.muted}>{label}</Text>}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text, useStdout } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface Tab {\n key: string;\n label: string;\n content: ReactNode;\n}\n\nexport interface TabsProps {\n tabs: Tab[];\n defaultTab?: string;\n activeTab?: string;\n onTabChange?: (key: string) => void;\n borderColor?: string;\n}\n\nexport function Tabs({\n tabs,\n defaultTab,\n activeTab: controlledTab,\n onTabChange,\n borderColor,\n}: TabsProps) {\n const theme = useTheme();\n const { stdout } = useStdout();\n const [internalTab, setInternalTab] = useState(defaultTab ?? tabs[0]?.key ?? '');\n const activeKey = controlledTab ?? internalTab;\n const activeIndex = tabs.findIndex((t) => t.key === activeKey);\n\n const resolvedBorderColor = borderColor ?? theme.colors.border;\n\n function switchTab(nextKey: string | undefined) {\n if (!nextKey || nextKey === activeKey) return;\n // Clear the entire screen before switching so Ink redraws from a clean\n // slate — prevents old lines from a taller tab persisting as ghost content.\n stdout.write('\\x1b[2J\\x1b[H');\n onTabChange ? onTabChange(nextKey) : setInternalTab(nextKey);\n }\n\n useInput((input, key) => {\n if (key.leftArrow || (key.shift && key.tab)) {\n switchTab(tabs[Math.max(0, activeIndex - 1)]?.key);\n } else if (key.rightArrow || key.tab) {\n switchTab(tabs[Math.min(tabs.length - 1, activeIndex + 1)]?.key);\n }\n });\n\n const activeTab = tabs.find((t) => t.key === activeKey);\n\n return (\n <Box flexDirection=\"column\">\n {/* Tab bar — plain row, no border */}\n <Box paddingX={2} gap={0}>\n {tabs.map((tab, idx) => {\n const isActive = tab.key === activeKey;\n return (\n <Box key={tab.key}>\n <Text\n color={isActive ? theme.colors.primary : theme.colors.mutedForeground}\n bold={isActive}\n underline={isActive}\n >\n {tab.label}\n </Text>\n {idx < tabs.length - 1 && <Text color={resolvedBorderColor}> │ </Text>}\n </Box>\n );\n })}\n </Box>\n {/* Only the active tab's content is rendered */}\n <Box borderStyle=\"single\" borderColor={resolvedBorderColor} paddingX={1} paddingY={0}>\n {activeTab?.content}\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface BreadcrumbItem {\n label: string;\n key: string;\n onSelect?: () => void;\n}\n\nexport interface BreadcrumbProps {\n items: BreadcrumbItem[];\n separator?: string;\n activeKey?: string;\n}\n\nexport function Breadcrumb({ items, separator = '›', activeKey }: BreadcrumbProps) {\n const theme = useTheme();\n\n const activeIndex =\n activeKey !== undefined ? items.findIndex((i) => i.key === activeKey) : items.length - 1;\n\n useInput((_input, key) => {\n if (key.leftArrow && activeIndex > 0) {\n const prev = items[activeIndex - 1];\n if (prev?.onSelect) prev.onSelect();\n }\n });\n\n return (\n <Box flexDirection=\"row\" alignItems=\"center\">\n {items.map((item, idx) => {\n const isActive = idx === activeIndex;\n return (\n <Box key={item.key} flexDirection=\"row\" alignItems=\"center\">\n <Text\n color={isActive ? theme.colors.primary : theme.colors.mutedForeground}\n bold={isActive}\n >\n {item.label}\n </Text>\n {idx < items.length - 1 && (\n <Text color={theme.colors.mutedForeground}> {separator} </Text>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface PaginationProps {\n total: number;\n current: number;\n onChange?: (page: number) => void;\n showEdges?: boolean;\n siblings?: number;\n}\n\nfunction buildPages(total: number, current: number, siblings: number): (number | '...')[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n const pages: (number | '...')[] = [];\n\n // Always include first page\n pages.push(1);\n\n const leftSibling = Math.max(2, current - siblings);\n const rightSibling = Math.min(total - 1, current + siblings);\n\n if (leftSibling > 2) {\n pages.push('...');\n }\n\n for (let i = leftSibling; i <= rightSibling; i++) {\n pages.push(i);\n }\n\n if (rightSibling < total - 1) {\n pages.push('...');\n }\n\n // Always include last page\n pages.push(total);\n\n return pages;\n}\n\nexport function Pagination({\n total,\n current,\n onChange,\n showEdges = true,\n siblings = 1,\n}: PaginationProps) {\n const theme = useTheme();\n const [internalPage, setInternalPage] = useState(current);\n const activePage = current ?? internalPage;\n\n function goTo(page: number) {\n const clamped = Math.min(Math.max(1, page), total);\n if (clamped === activePage) return;\n if (onChange) {\n onChange(clamped);\n } else {\n setInternalPage(clamped);\n }\n }\n\n useInput((_input, key) => {\n if (key.leftArrow) goTo(activePage - 1);\n if (key.rightArrow) goTo(activePage + 1);\n });\n\n const pages = buildPages(total, activePage, siblings);\n\n return (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={1}>\n {/* Prev button */}\n <Text\n color={activePage === 1 ? theme.colors.mutedForeground : theme.colors.primary}\n dimColor={activePage === 1}\n >\n ‹\n </Text>\n\n {showEdges && total > 7 ? null : null}\n\n {pages.map((p, idx) => {\n if (p === '...') {\n return (\n <Text key={`ellipsis-${idx}`} color={theme.colors.mutedForeground}>\n …\n </Text>\n );\n }\n const isActive = p === activePage;\n return (\n <Text\n key={p}\n color={isActive ? theme.colors.primary : theme.colors.mutedForeground}\n bold={isActive}\n >\n {isActive ? `[${p}]` : `${p}`}\n </Text>\n );\n })}\n\n {/* Next button */}\n <Text\n color={activePage === total ? theme.colors.mutedForeground : theme.colors.primary}\n dimColor={activePage === total}\n >\n ›\n </Text>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface MenuItem {\n key: string;\n label: string;\n icon?: string;\n shortcut?: string;\n disabled?: boolean;\n separator?: boolean;\n children?: MenuItem[];\n}\n\nexport interface MenuProps {\n items: MenuItem[];\n onSelect?: (item: MenuItem) => void;\n title?: string;\n}\n\nexport function Menu({ items, onSelect, title }: MenuProps) {\n const theme = useTheme();\n const [focusIndex, setFocusIndex] = useState(0);\n const [submenuStack, setSubmenuStack] = useState<MenuItem[][]>([]);\n\n const activeItems = submenuStack.length > 0 ? submenuStack[submenuStack.length - 1]! : items;\n\n // Selectable items (non-separator, non-disabled)\n const selectableIndices = activeItems\n .map((item, idx) => ({ item, idx }))\n .filter(({ item }) => !item.separator && !item.disabled)\n .map(({ idx }) => idx);\n\n function moveFocus(direction: 1 | -1) {\n const currentPos = selectableIndices.indexOf(focusIndex);\n const nextPos = currentPos + direction;\n if (nextPos >= 0 && nextPos < selectableIndices.length) {\n setFocusIndex(selectableIndices[nextPos]!);\n }\n }\n\n function openSubmenu(item: MenuItem) {\n if (item.children && item.children.length > 0) {\n setSubmenuStack((prev) => [...prev, item.children!]);\n setFocusIndex(0);\n }\n }\n\n function closeSubmenu() {\n if (submenuStack.length > 0) {\n setSubmenuStack((prev) => prev.slice(0, -1));\n setFocusIndex(0);\n }\n }\n\n function activateItem(item: MenuItem) {\n if (item.disabled || item.separator) return;\n if (item.children && item.children.length > 0) {\n openSubmenu(item);\n } else {\n onSelect?.(item);\n }\n }\n\n useInput((_input, key) => {\n if (key.upArrow) {\n moveFocus(-1);\n } else if (key.downArrow) {\n moveFocus(1);\n } else if (key.return) {\n const item = activeItems[focusIndex];\n if (item) activateItem(item);\n } else if (key.rightArrow) {\n const item = activeItems[focusIndex];\n if (item?.children && item.children.length > 0) openSubmenu(item);\n } else if (key.leftArrow) {\n closeSubmenu();\n } else if (key.escape) {\n closeSubmenu();\n }\n });\n\n const depth = submenuStack.length;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n paddingX={1}\n paddingY={0}\n marginLeft={depth * 2}\n >\n {title && (\n <Box marginBottom={1}>\n <Text bold color={theme.colors.primary}>\n {title}\n </Text>\n </Box>\n )}\n {activeItems.map((item, idx) => {\n if (item.separator) {\n return (\n <Box key={item.key}>\n <Text color={theme.colors.mutedForeground}>{'─'.repeat(20)}</Text>\n </Box>\n );\n }\n\n const isFocused = idx === focusIndex;\n\n return (\n <Box key={item.key} justifyContent=\"space-between\">\n <Box flexDirection=\"row\" gap={1}>\n <Text color={isFocused ? theme.colors.primary : 'transparent'}>\n {isFocused ? '›' : ' '}\n </Text>\n {item.icon && (\n <Text\n color={item.disabled ? theme.colors.mutedForeground : theme.colors.foreground}\n >\n {item.icon}\n </Text>\n )}\n <Text\n color={\n item.disabled\n ? theme.colors.mutedForeground\n : isFocused\n ? theme.colors.primary\n : theme.colors.foreground\n }\n bold={isFocused && !item.disabled}\n dimColor={item.disabled}\n >\n {item.label}\n </Text>\n {item.children && item.children.length > 0 && (\n <Text color={theme.colors.mutedForeground}>›</Text>\n )}\n </Box>\n {item.shortcut && <Text color={theme.colors.mutedForeground}>{item.shortcut}</Text>}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\n\nexport interface SidebarItem {\n key: string;\n label: string;\n icon?: string;\n badge?: string | number;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items: SidebarItem[];\n activeKey?: string;\n onSelect?: (key: string) => void;\n collapsed?: boolean;\n width?: number;\n title?: string;\n}\n\nfunction flattenItems(\n items: SidebarItem[],\n expandedKeys: Set<string>,\n depth = 0\n): { item: SidebarItem; depth: number }[] {\n const result: { item: SidebarItem; depth: number }[] = [];\n for (const item of items) {\n result.push({ item, depth });\n if (item.children && expandedKeys.has(item.key)) {\n result.push(...flattenItems(item.children, expandedKeys, depth + 1));\n }\n }\n return result;\n}\n\nexport function Sidebar({\n items,\n activeKey,\n onSelect,\n collapsed = false,\n width = 20,\n title,\n}: SidebarProps) {\n const theme = useTheme();\n const [focusIndex, setFocusIndex] = useState(0);\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());\n\n const effectiveWidth = collapsed ? 3 : width;\n const flatItems = flattenItems(items, expandedKeys);\n\n function toggleExpand(key: string) {\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n if (next.has(key)) {\n next.delete(key);\n } else {\n next.add(key);\n }\n return next;\n });\n }\n\n useInput((_input, key) => {\n if (key.upArrow) {\n setFocusIndex((prev) => Math.max(0, prev - 1));\n } else if (key.downArrow) {\n setFocusIndex((prev) => Math.min(flatItems.length - 1, prev + 1));\n } else if (key.return) {\n const entry = flatItems[focusIndex];\n if (!entry) return;\n if (entry.item.children && entry.item.children.length > 0) {\n toggleExpand(entry.item.key);\n } else {\n onSelect?.(entry.item.key);\n }\n } else if (key.rightArrow) {\n const entry = flatItems[focusIndex];\n if (entry?.item.children && entry.item.children.length > 0) {\n setExpandedKeys((prev) => new Set([...prev, entry.item.key]));\n }\n } else if (key.leftArrow) {\n const entry = flatItems[focusIndex];\n if (entry?.item.children && expandedKeys.has(entry.item.key)) {\n setExpandedKeys((prev) => {\n const next = new Set(prev);\n next.delete(entry.item.key);\n return next;\n });\n }\n }\n });\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n width={effectiveWidth}\n paddingX={0}\n paddingY={0}\n >\n {title && !collapsed && (\n <Box paddingX={1} marginBottom={1}>\n <Text bold color={theme.colors.primary}>\n {title}\n </Text>\n </Box>\n )}\n {flatItems.map(({ item, depth }, idx) => {\n const isFocused = idx === focusIndex;\n const isActive = item.key === activeKey;\n const indent = collapsed ? 0 : depth * 2;\n const hasChildren = item.children && item.children.length > 0;\n const isExpanded = expandedKeys.has(item.key);\n\n if (collapsed) {\n return (\n <Box key={item.key} paddingX={0}>\n <Text\n color={\n isActive\n ? theme.colors.primary\n : isFocused\n ? theme.colors.foreground\n : theme.colors.mutedForeground\n }\n bold={isActive}\n >\n {item.icon ?? item.label.charAt(0)}\n </Text>\n </Box>\n );\n }\n\n return (\n <Box key={item.key} flexDirection=\"row\" alignItems=\"center\">\n {/* Active indicator */}\n <Text color={isActive ? theme.colors.primary : 'transparent'}>\n {isActive ? '▌' : ' '}\n </Text>\n {/* Indent */}\n {indent > 0 && <Text>{' '.repeat(indent)}</Text>}\n {/* Expand indicator */}\n {hasChildren ? (\n <Text color={theme.colors.mutedForeground}>{isExpanded ? '▾ ' : '▸ '}</Text>\n ) : (\n <Text>{' '}</Text>\n )}\n {/* Icon */}\n {item.icon && (\n <Text color={isActive ? theme.colors.primary : theme.colors.mutedForeground}>\n {item.icon}{' '}\n </Text>\n )}\n {/* Label */}\n <Text\n color={\n isActive\n ? theme.colors.primary\n : isFocused\n ? theme.colors.foreground\n : theme.colors.mutedForeground\n }\n bold={isActive || isFocused}\n >\n {item.label}\n </Text>\n {/* Badge */}\n {item.badge !== undefined && (\n <Box marginLeft={1}>\n <Text color={theme.colors.primary}>{item.badge}</Text>\n </Box>\n )}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n width?: number;\n children?: ReactNode;\n}\n\nexport function Modal({ open, onClose, title, width = 60, children }: ModalProps) {\n const theme = useTheme();\n\n useInput(\n (input, key) => {\n if (!open) return;\n if (key.escape) onClose();\n },\n { isActive: open }\n );\n\n if (!open) return null;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.colors.primary}\n width={width}\n paddingX={1}\n paddingY={0}\n >\n {title && (\n <Box marginBottom={1} borderStyle=\"single\" borderColor={theme.colors.border} paddingX={1}>\n <Text bold color={theme.colors.primary}>\n {title}\n </Text>\n </Box>\n )}\n <Box flexDirection=\"column\">{children}</Box>\n <Box marginTop={1}>\n <Text color={theme.colors.mutedForeground} dimColor>\n Press Esc to close\n </Text>\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface DialogProps {\n title?: string;\n children: ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n variant?: 'default' | 'danger';\n isOpen?: boolean;\n}\n\nexport function Dialog({\n title,\n children,\n confirmLabel = 'OK',\n cancelLabel = 'Cancel',\n onConfirm,\n onCancel,\n variant = 'default',\n isOpen = false,\n}: DialogProps) {\n const theme = useTheme();\n // focusedButton: 0 = cancel, 1 = confirm\n const [focusedButton, setFocusedButton] = useState<0 | 1>(0);\n\n useInput(\n (_input, key) => {\n if (!isOpen) return;\n if (key.tab || key.leftArrow || key.rightArrow) {\n setFocusedButton((prev) => (prev === 0 ? 1 : 0));\n } else if (key.return) {\n if (focusedButton === 1) {\n onConfirm?.();\n } else {\n onCancel?.();\n }\n } else if (key.escape) {\n onCancel?.();\n }\n },\n { isActive: isOpen }\n );\n\n if (!isOpen) return null;\n\n const confirmColor = variant === 'danger' ? (theme.colors.error ?? 'red') : theme.colors.primary;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={variant === 'danger' ? (theme.colors.error ?? 'red') : theme.colors.primary}\n paddingX={1}\n paddingY={0}\n >\n {title && (\n <Box marginBottom={1}>\n <Text\n bold\n color={variant === 'danger' ? (theme.colors.error ?? 'red') : theme.colors.primary}\n >\n {title}\n </Text>\n </Box>\n )}\n <Box marginBottom={1} flexDirection=\"column\">\n {children}\n </Box>\n <Box flexDirection=\"row\" gap={2} justifyContent=\"flex-end\" marginTop={1}>\n <Text\n color={focusedButton === 0 ? theme.colors.foreground : theme.colors.mutedForeground}\n bold={focusedButton === 0}\n inverse={focusedButton === 0}\n >\n {' '}\n {cancelLabel}{' '}\n </Text>\n <Text\n color={focusedButton === 1 ? confirmColor : theme.colors.mutedForeground}\n bold={focusedButton === 1}\n inverse={focusedButton === 1}\n >\n {' '}\n {confirmLabel}{' '}\n </Text>\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport type DrawerEdge = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface DrawerProps {\n isOpen?: boolean;\n edge?: DrawerEdge;\n title?: string;\n children: ReactNode;\n onClose?: () => void;\n width?: number;\n height?: number;\n}\n\nexport function Drawer({\n isOpen = false,\n edge = 'right',\n title,\n children,\n onClose,\n width = 40,\n height = 10,\n}: DrawerProps) {\n const theme = useTheme();\n\n useInput(\n (_input, key) => {\n if (!isOpen) return;\n if (key.escape) onClose?.();\n },\n { isActive: isOpen }\n );\n\n if (!isOpen) return null;\n\n const isHorizontal = edge === 'left' || edge === 'right';\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n width={isHorizontal ? width : undefined}\n height={!isHorizontal ? height : undefined}\n paddingX={1}\n paddingY={0}\n >\n <Box justifyContent=\"space-between\" marginBottom={1}>\n {title ? (\n <Text bold color={theme.colors.primary}>\n {title}\n </Text>\n ) : (\n <Text> </Text>\n )}\n <Text color={theme.colors.mutedForeground} dimColor>\n Esc to close\n </Text>\n </Box>\n <Box flexDirection=\"column\" flexGrow={1}>\n {children}\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface TooltipProps {\n children: ReactNode;\n content: string;\n position?: 'top' | 'bottom' | 'left' | 'right';\n isVisible?: boolean;\n}\n\nexport function Tooltip({ children, content, position = 'top', isVisible = false }: TooltipProps) {\n const theme = useTheme();\n\n const tooltipBox = (\n <Box borderStyle=\"single\" borderColor={theme.colors.border} paddingX={1} paddingY={0}>\n <Text color={theme.colors.foreground}>{content}</Text>\n </Box>\n );\n\n if (!isVisible) {\n return <Box>{children}</Box>;\n }\n\n if (position === 'top') {\n return (\n <Box flexDirection=\"column\" alignItems=\"flex-start\">\n {tooltipBox}\n <Text color={theme.colors.mutedForeground}>↓</Text>\n <Box>{children}</Box>\n </Box>\n );\n }\n\n if (position === 'bottom') {\n return (\n <Box flexDirection=\"column\" alignItems=\"flex-start\">\n <Box>{children}</Box>\n <Text color={theme.colors.mutedForeground}>↑</Text>\n {tooltipBox}\n </Box>\n );\n }\n\n if (position === 'left') {\n return (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={1}>\n {tooltipBox}\n <Box>{children}</Box>\n </Box>\n );\n }\n\n // right\n return (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={1}>\n <Box>{children}</Box>\n {tooltipBox}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface PopoverProps {\n trigger: ReactNode;\n children: ReactNode;\n isOpen?: boolean;\n onClose?: () => void;\n title?: string;\n}\n\nexport function Popover({ trigger, children, isOpen = false, onClose, title }: PopoverProps) {\n const theme = useTheme();\n\n useInput(\n (_input, key) => {\n if (!isOpen) return;\n if (key.escape) onClose?.();\n },\n { isActive: isOpen }\n );\n\n return (\n <Box flexDirection=\"column\" alignItems=\"flex-start\">\n <Box>{trigger}</Box>\n {isOpen && (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={theme.colors.border}\n paddingX={1}\n paddingY={0}\n marginTop={0}\n >\n {title && (\n <Box marginBottom={1}>\n <Text bold color={theme.colors.primary}>\n {title}\n </Text>\n </Box>\n )}\n <Box flexDirection=\"column\">{children}</Box>\n <Box marginTop={1}>\n <Text color={theme.colors.mutedForeground} dimColor>\n Press Esc to close\n </Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n}\n","import React, { useState, useCallback, createContext, useContext } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\ninterface FormContextValue {\n values: Record<string, unknown>;\n errors: Record<string, string>;\n isDirty: boolean;\n setFieldValue: (name: string, value: unknown) => void;\n setFieldError: (name: string, error: string) => void;\n}\n\nconst FormContext = createContext<FormContextValue>({\n values: {},\n errors: {},\n isDirty: false,\n setFieldValue: () => {},\n setFieldError: () => {},\n});\n\nexport function useFormContext() {\n return useContext(FormContext);\n}\n\nexport interface FormField {\n name: string;\n validate?: (value: unknown) => string | null;\n}\n\nexport interface FormProps {\n onSubmit: (values: Record<string, unknown>) => void;\n initialValues?: Record<string, unknown>;\n fields?: FormField[];\n children: ReactNode;\n}\n\nexport function Form({ onSubmit, initialValues = {}, fields = [], children }: FormProps) {\n const theme = useTheme();\n const [values, setValues] = useState<Record<string, unknown>>(initialValues);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [isDirty, setIsDirty] = useState(false);\n\n const setFieldValue = useCallback((name: string, value: unknown) => {\n setValues((v) => ({ ...v, [name]: value }));\n setIsDirty(true);\n }, []);\n\n const setFieldError = useCallback((name: string, error: string) => {\n setErrors((e) => ({ ...e, [name]: error }));\n }, []);\n\n useInput((input, key) => {\n if (key.ctrl && input === 's') {\n // Validate all fields\n const newErrors: Record<string, string> = {};\n for (const field of fields) {\n const err = field.validate ? field.validate(values[field.name]) : null;\n if (err) newErrors[field.name] = err;\n }\n if (Object.keys(newErrors).length > 0) {\n setErrors(newErrors);\n return;\n }\n onSubmit(values);\n }\n });\n\n return (\n <FormContext.Provider value={{ values, errors, isDirty, setFieldValue, setFieldError }}>\n <Box flexDirection=\"column\" gap={1}>\n {children}\n <Text color={theme.colors.mutedForeground} dimColor>\n Press Ctrl+S to submit\n </Text>\n </Box>\n </FormContext.Provider>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface FormFieldProps {\n label: string;\n children: ReactNode;\n error?: string;\n hint?: string;\n required?: boolean;\n}\n\nexport function FormField({ label, children, error, hint, required }: FormFieldProps) {\n const theme = useTheme();\n\n return (\n <Box flexDirection=\"column\" gap={0}>\n <Box gap={0}>\n <Text bold>{label}</Text>\n {required && <Text color={theme.colors.error}> *</Text>}\n </Box>\n <Box>{children}</Box>\n {hint && !error && (\n <Text color={theme.colors.mutedForeground} dimColor>\n {hint}\n </Text>\n )}\n {error && (\n <Text color={theme.colors.error}>\n {'✗ '}\n {error}\n </Text>\n )}\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme, useInput } from '@termui/core';\n\nexport interface ConfirmProps {\n message: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n confirmLabel?: string;\n cancelLabel?: string;\n defaultValue?: boolean;\n variant?: 'default' | 'danger';\n}\n\nexport function Confirm({\n message,\n onConfirm,\n onCancel,\n confirmLabel = 'Yes',\n cancelLabel = 'No',\n defaultValue = false,\n variant = 'default',\n}: ConfirmProps) {\n const theme = useTheme();\n const [selected, setSelected] = useState<boolean>(defaultValue);\n\n useInput((input, key) => {\n if (key.leftArrow || key.rightArrow) {\n setSelected((s) => !s);\n } else if (key.return) {\n if (selected) {\n onConfirm?.();\n } else {\n onCancel?.();\n }\n } else if (input === 'y' || input === 'Y') {\n onConfirm?.();\n } else if (input === 'n' || input === 'N') {\n onCancel?.();\n }\n });\n\n const yesColor = variant === 'danger' ? theme.colors.error : theme.colors.primary;\n\n return (\n <Box flexDirection=\"column\" gap={0}>\n <Text>\n <Text color={theme.colors.primary}>{'? '}</Text>\n {message}\n </Text>\n <Box gap={2} paddingLeft={2}>\n <Box gap={1}>\n {selected ? (\n <Text color={yesColor} bold>\n {'› '}\n {confirmLabel}\n </Text>\n ) : (\n <Text color={theme.colors.mutedForeground}>\n {' '}\n {confirmLabel}\n </Text>\n )}\n </Box>\n <Box gap={1}>\n {!selected ? (\n <Text bold>\n {'› '}\n {cancelLabel}\n </Text>\n ) : (\n <Text color={theme.colors.mutedForeground}>\n {' '}\n {cancelLabel}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme, useInput } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface WizardStep {\n key: string;\n title: string;\n content: ReactNode;\n validate?: () => boolean | string;\n}\n\nexport interface WizardProps {\n steps: WizardStep[];\n onComplete?: (completedSteps: string[]) => void;\n onCancel?: () => void;\n showProgress?: boolean;\n}\n\nexport function Wizard({ steps, onComplete, onCancel, showProgress = true }: WizardProps) {\n const theme = useTheme();\n const [currentStep, setCurrentStep] = useState(0);\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const isLast = currentStep === steps.length - 1;\n const isFirst = currentStep === 0;\n\n useInput((input, key) => {\n if (key.escape) {\n onCancel?.();\n return;\n }\n\n const goNext = (key.tab && !key.shift) || key.rightArrow;\n const goBack = (key.tab && key.shift) || key.leftArrow;\n\n if (goNext) {\n const step = steps[currentStep];\n if (step.validate) {\n const result = step.validate();\n if (result !== true) {\n setValidationError(typeof result === 'string' ? result : 'Validation failed');\n return;\n }\n }\n setValidationError(null);\n if (isLast) {\n onComplete?.(steps.map((s) => s.key));\n } else {\n setCurrentStep((i) => i + 1);\n }\n } else if (goBack) {\n setValidationError(null);\n if (!isFirst) {\n setCurrentStep((i) => i - 1);\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n {showProgress && (\n <Box flexDirection=\"row\" alignItems=\"center\">\n {steps.map((step, index) => {\n const isCompleted = index < currentStep;\n const isCurrent = index === currentStep;\n\n let icon: string;\n let iconColor: string;\n if (isCompleted) {\n icon = '●';\n iconColor = theme.colors.success;\n } else if (isCurrent) {\n icon = '◉';\n iconColor = theme.colors.primary;\n } else {\n icon = '○';\n iconColor = theme.colors.mutedForeground;\n }\n\n return (\n <Box key={step.key} flexDirection=\"row\" alignItems=\"center\">\n <Text color={iconColor} bold={isCurrent}>\n {icon} {step.title}\n </Text>\n {index < steps.length - 1 && (\n <Text color={theme.colors.mutedForeground}> ─── </Text>\n )}\n </Box>\n );\n })}\n </Box>\n )}\n\n <Box flexDirection=\"column\" gap={1}>\n {steps[currentStep]?.content}\n </Box>\n\n {validationError && (\n <Text color={theme.colors.error}>\n {'✗ '}\n {validationError}\n </Text>\n )}\n\n <Box flexDirection=\"row\" gap={2}>\n {!isFirst && <Text color={theme.colors.mutedForeground}>[← Back]</Text>}\n {isLast ? (\n <Text color={theme.colors.primary} bold>\n [Finish]\n </Text>\n ) : (\n <Text color={theme.colors.primary} bold>\n [Next →]\n </Text>\n )}\n </Box>\n </Box>\n );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { useTheme } from '@termui/core';\nimport type { ReactNode } from 'react';\n\nexport interface PanelProps {\n title?: string;\n titleColor?: string;\n borderColor?: string;\n borderStyle?:\n | 'single'\n | 'double'\n | 'round'\n | 'bold'\n | 'singleDouble'\n | 'doubleSingle'\n | 'classic';\n width?: number;\n height?: number;\n paddingX?: number;\n paddingY?: number;\n children?: ReactNode;\n}\n\nexport function Panel({\n title,\n titleColor,\n borderColor,\n borderStyle,\n width,\n height,\n paddingX = 1,\n paddingY = 0,\n children,\n}: PanelProps) {\n const theme = useTheme();\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle={borderStyle ?? theme.border.style}\n borderColor={borderColor ?? theme.colors.border}\n width={width}\n height={height}\n >\n {title && (\n <Box\n paddingX={paddingX}\n borderStyle=\"single\"\n borderColor={borderColor ?? theme.colors.border}\n >\n <Text bold color={titleColor ?? theme.colors.primary}>\n {title}\n </Text>\n </Box>\n )}\n <Box flexDirection=\"column\" paddingX={paddingX} paddingY={paddingY}>\n {children}\n </Box>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Box, Text } from 'ink';\nimport { useInput, useFocus, useTheme } from '@termui/core';\n\nexport interface ToggleProps {\n checked?: boolean;\n onChange?: (checked: boolean) => void;\n label?: string;\n onLabel?: string;\n offLabel?: string;\n id?: string;\n disabled?: boolean;\n}\n\nexport function Toggle({\n checked: controlledChecked,\n onChange,\n label,\n onLabel = 'ON',\n offLabel = 'OFF',\n id,\n disabled = false,\n}: ToggleProps) {\n const theme = useTheme();\n const { isFocused } = useFocus({ id });\n const [internalChecked, setInternalChecked] = useState(false);\n const checked = controlledChecked ?? internalChecked;\n\n useInput((input) => {\n if (!isFocused || disabled) return;\n if (input === ' ') {\n const next = !checked;\n onChange ? onChange(next) : setInternalChecked(next);\n }\n });\n\n const trackColor = checked ? theme.colors.success : theme.colors.mutedForeground;\n const focusColor = isFocused ? theme.colors.focusRing : trackColor;\n const stateLabel = checked ? onLabel : offLabel;\n\n return (\n <Box gap={1} alignItems=\"center\">\n <Box borderStyle=\"round\" borderColor={focusColor} paddingX={1}>\n <Text color={focusColor} bold={checked}>\n {checked ? '●' : '○'} {stateLabel}\n </Text>\n </Box>\n {label && (\n <Text color={disabled ? theme.colors.mutedForeground : theme.colors.foreground}>\n {label}\n </Text>\n )}\n </Box>\n );\n}\n"],"mappings":"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A,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,GAAG;AAAA,IACD,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,IACR,CAAC,GAAG,GAAG,CAAC;AAAA,EACV;AAAA,EACA,KAAK;AAAA,IACH,CAAC,GAAG,GAAG,CAA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","names":["Box","jsx","Box","jsx","Box","jsx","Box","Box","Text","jsx","jsxs","Box","Text","Box","jsx","React","Box","jsx","Box","jsx","Box","jsx","jsx","Text","Box","Text","jsx","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","Box","Text","jsx","Box","Text","Box","Text","jsx","jsxs","Text","Box","useState","Box","Text","jsx","jsxs","useState","newVal","Box","Text","useState","Box","Text","jsx","jsxs","useState","lines","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","useMemo","Box","Text","jsx","jsxs","useState","useMemo","Box","Text","useState","useMemo","Box","Text","jsx","jsxs","useState","useMemo","Box","Text","Box","Text","jsx","jsxs","Box","Text","useMemo","Box","Text","jsx","jsxs","useMemo","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","useMemo","Box","Text","jsx","jsxs","useState","useMemo","Box","Text","useState","useMemo","Box","Text","jsx","jsxs","useState","useMemo","Box","Text","Text","jsx","jsxs","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","ICONS","Box","Text","useState","Box","Text","jsx","jsxs","ICONS","useState","Box","Text","useState","Box","Text","useInput","jsx","jsxs","ICONS","useState","useInput","Box","Text","Box","Text","jsx","Box","Text","Box","Text","jsx","jsxs","jsxs","Box","jsx","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text","Box","Text","jsx","jsxs","Box","Text","useState","Box","Text","jsx","jsxs","useState","Box","Text"]}