termcast 1.3.32 → 1.3.34

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 (327) hide show
  1. package/dist/action-utils.d.ts.map +1 -1
  2. package/dist/action-utils.js +8 -0
  3. package/dist/action-utils.js.map +1 -1
  4. package/dist/apis/cache.d.ts +1 -2
  5. package/dist/apis/cache.d.ts.map +1 -1
  6. package/dist/apis/cache.js +138 -54
  7. package/dist/apis/cache.js.map +1 -1
  8. package/dist/apis/clipboard.d.ts.map +1 -1
  9. package/dist/apis/clipboard.js +4 -0
  10. package/dist/apis/clipboard.js.map +1 -1
  11. package/dist/apis/oauth.d.ts.map +1 -1
  12. package/dist/apis/oauth.js +31 -4
  13. package/dist/apis/oauth.js.map +1 -1
  14. package/dist/build.d.ts +0 -1
  15. package/dist/build.d.ts.map +1 -1
  16. package/dist/build.js +30 -51
  17. package/dist/build.js.map +1 -1
  18. package/dist/cli.js +31 -14
  19. package/dist/cli.js.map +1 -1
  20. package/dist/compile.d.ts.map +1 -1
  21. package/dist/compile.js +5 -1
  22. package/dist/compile.js.map +1 -1
  23. package/dist/components/actions.d.ts +14 -0
  24. package/dist/components/actions.d.ts.map +1 -1
  25. package/dist/components/actions.js +151 -59
  26. package/dist/components/actions.js.map +1 -1
  27. package/dist/components/alert.d.ts.map +1 -1
  28. package/dist/components/alert.js +6 -5
  29. package/dist/components/alert.js.map +1 -1
  30. package/dist/components/animation-tick.d.ts +1 -1
  31. package/dist/components/animation-tick.js +1 -1
  32. package/dist/components/animation-tick.js.map +1 -1
  33. package/dist/components/detail.d.ts +5 -31
  34. package/dist/components/detail.d.ts.map +1 -1
  35. package/dist/components/detail.js +36 -52
  36. package/dist/components/detail.js.map +1 -1
  37. package/dist/components/dropdown.d.ts +1 -1
  38. package/dist/components/dropdown.d.ts.map +1 -1
  39. package/dist/components/dropdown.js +50 -22
  40. package/dist/components/dropdown.js.map +1 -1
  41. package/dist/components/footer.d.ts.map +1 -1
  42. package/dist/components/footer.js +19 -18
  43. package/dist/components/footer.js.map +1 -1
  44. package/dist/components/form/checkbox.d.ts.map +1 -1
  45. package/dist/components/form/checkbox.js +12 -11
  46. package/dist/components/form/checkbox.js.map +1 -1
  47. package/dist/components/form/date-picker.d.ts.map +1 -1
  48. package/dist/components/form/date-picker.js +7 -22
  49. package/dist/components/form/date-picker.js.map +1 -1
  50. package/dist/components/form/description.d.ts +1 -1
  51. package/dist/components/form/description.d.ts.map +1 -1
  52. package/dist/components/form/description.js +6 -5
  53. package/dist/components/form/description.js.map +1 -1
  54. package/dist/components/form/dropdown.d.ts.map +1 -1
  55. package/dist/components/form/dropdown.js +53 -50
  56. package/dist/components/form/dropdown.js.map +1 -1
  57. package/dist/components/form/file-autocomplete.d.ts.map +1 -1
  58. package/dist/components/form/file-autocomplete.js +5 -4
  59. package/dist/components/form/file-autocomplete.js.map +1 -1
  60. package/dist/components/form/file-picker.d.ts.map +1 -1
  61. package/dist/components/form/file-picker.js +23 -22
  62. package/dist/components/form/file-picker.js.map +1 -1
  63. package/dist/components/form/form-end.d.ts.map +1 -1
  64. package/dist/components/form/form-end.js +6 -4
  65. package/dist/components/form/form-end.js.map +1 -1
  66. package/dist/components/form/form-field-wrapper.d.ts +15 -0
  67. package/dist/components/form/form-field-wrapper.d.ts.map +1 -0
  68. package/dist/components/form/form-field-wrapper.js +29 -0
  69. package/dist/components/form/form-field-wrapper.js.map +1 -0
  70. package/dist/components/form/index.d.ts.map +1 -1
  71. package/dist/components/form/index.js +31 -30
  72. package/dist/components/form/index.js.map +1 -1
  73. package/dist/components/form/password-field.d.ts.map +1 -1
  74. package/dist/components/form/password-field.js +7 -6
  75. package/dist/components/form/password-field.js.map +1 -1
  76. package/dist/components/form/separator.d.ts.map +1 -1
  77. package/dist/components/form/separator.js +3 -2
  78. package/dist/components/form/separator.js.map +1 -1
  79. package/dist/components/form/tagpicker.d.ts.map +1 -1
  80. package/dist/components/form/tagpicker.js +2 -1
  81. package/dist/components/form/tagpicker.js.map +1 -1
  82. package/dist/components/form/text-area.d.ts.map +1 -1
  83. package/dist/components/form/text-area.js +7 -6
  84. package/dist/components/form/text-area.js.map +1 -1
  85. package/dist/components/form/text-field.d.ts.map +1 -1
  86. package/dist/components/form/text-field.js +7 -6
  87. package/dist/components/form/text-field.js.map +1 -1
  88. package/dist/components/form/use-form-navigation.d.ts.map +1 -1
  89. package/dist/components/form/use-form-navigation.js +4 -4
  90. package/dist/components/form/use-form-navigation.js.map +1 -1
  91. package/dist/components/form/with-left-border.d.ts +15 -0
  92. package/dist/components/form/with-left-border.d.ts.map +1 -1
  93. package/dist/components/form/with-left-border.js +21 -9
  94. package/dist/components/form/with-left-border.js.map +1 -1
  95. package/dist/components/icon.d.ts +14 -0
  96. package/dist/components/icon.d.ts.map +1 -1
  97. package/dist/components/icon.js +60 -0
  98. package/dist/components/icon.js.map +1 -1
  99. package/dist/components/image.d.ts +47 -2
  100. package/dist/components/image.d.ts.map +1 -1
  101. package/dist/components/image.js +46 -7
  102. package/dist/components/image.js.map +1 -1
  103. package/dist/components/list.d.ts +5 -0
  104. package/dist/components/list.d.ts.map +1 -1
  105. package/dist/components/list.js +188 -132
  106. package/dist/components/list.js.map +1 -1
  107. package/dist/components/loading-bar.d.ts.map +1 -1
  108. package/dist/components/loading-bar.js +4 -3
  109. package/dist/components/loading-bar.js.map +1 -1
  110. package/dist/components/metadata.d.ts +70 -0
  111. package/dist/components/metadata.d.ts.map +1 -0
  112. package/dist/components/metadata.js +82 -0
  113. package/dist/components/metadata.js.map +1 -0
  114. package/dist/components/theme-picker.d.ts.map +1 -1
  115. package/dist/components/theme-picker.js +3 -2
  116. package/dist/components/theme-picker.js.map +1 -1
  117. package/dist/descendants-v2.d.ts +60 -0
  118. package/dist/descendants-v2.d.ts.map +1 -0
  119. package/dist/descendants-v2.js +144 -0
  120. package/dist/descendants-v2.js.map +1 -0
  121. package/dist/examples/actions-context.d.ts +2 -0
  122. package/dist/examples/actions-context.d.ts.map +1 -0
  123. package/dist/examples/actions-context.js +33 -0
  124. package/dist/examples/actions-context.js.map +1 -0
  125. package/dist/examples/form-basic.d.ts.map +1 -1
  126. package/dist/examples/form-basic.js +1 -1
  127. package/dist/examples/form-basic.js.map +1 -1
  128. package/dist/examples/form-dropdown.js +1 -1
  129. package/dist/examples/form-dropdown.js.map +1 -1
  130. package/dist/examples/internal/custom-action-renderables.d.ts +70 -0
  131. package/dist/examples/internal/custom-action-renderables.d.ts.map +1 -0
  132. package/dist/examples/internal/custom-action-renderables.js +163 -0
  133. package/dist/examples/internal/custom-action-renderables.js.map +1 -0
  134. package/dist/examples/internal/custom-dropdown.d.ts +99 -0
  135. package/dist/examples/internal/custom-dropdown.d.ts.map +1 -0
  136. package/dist/examples/internal/custom-dropdown.js +270 -0
  137. package/dist/examples/internal/custom-dropdown.js.map +1 -0
  138. package/dist/examples/internal/custom-renderable-form.d.ts +43 -0
  139. package/dist/examples/internal/custom-renderable-form.d.ts.map +1 -0
  140. package/dist/examples/internal/custom-renderable-form.js +284 -0
  141. package/dist/examples/internal/custom-renderable-form.js.map +1 -0
  142. package/dist/examples/internal/custom-renderable-list-default-search.d.ts +2 -0
  143. package/dist/examples/internal/custom-renderable-list-default-search.d.ts.map +1 -0
  144. package/dist/examples/internal/custom-renderable-list-default-search.js +16 -0
  145. package/dist/examples/internal/custom-renderable-list-default-search.js.map +1 -0
  146. package/dist/examples/internal/custom-renderable-list-v2-default-search.d.ts +2 -0
  147. package/dist/examples/internal/custom-renderable-list-v2-default-search.d.ts.map +1 -0
  148. package/dist/examples/internal/custom-renderable-list-v2-default-search.js +24 -0
  149. package/dist/examples/internal/custom-renderable-list-v2-default-search.js.map +1 -0
  150. package/dist/examples/internal/custom-renderable-list-v2.d.ts +189 -0
  151. package/dist/examples/internal/custom-renderable-list-v2.d.ts.map +1 -0
  152. package/dist/examples/internal/custom-renderable-list-v2.js +708 -0
  153. package/dist/examples/internal/custom-renderable-list-v2.js.map +1 -0
  154. package/dist/examples/internal/custom-renderable-list.d.ts +72 -0
  155. package/dist/examples/internal/custom-renderable-list.d.ts.map +1 -0
  156. package/dist/examples/internal/custom-renderable-list.js +544 -0
  157. package/dist/examples/internal/custom-renderable-list.js.map +1 -0
  158. package/dist/examples/internal/rhf-custom-ref.js +5 -4
  159. package/dist/examples/internal/rhf-custom-ref.js.map +1 -1
  160. package/dist/examples/internal/scrollbox-with-descendants.js +4 -2
  161. package/dist/examples/internal/scrollbox-with-descendants.js.map +1 -1
  162. package/dist/examples/list-controlled-search.d.ts +2 -0
  163. package/dist/examples/list-controlled-search.d.ts.map +1 -0
  164. package/dist/examples/list-controlled-search.js +12 -0
  165. package/dist/examples/list-controlled-search.js.map +1 -0
  166. package/dist/examples/list-detail-metadata.js +1 -1
  167. package/dist/examples/list-detail-metadata.js.map +1 -1
  168. package/dist/examples/simple-image-mask.d.ts +8 -0
  169. package/dist/examples/simple-image-mask.d.ts.map +1 -0
  170. package/dist/examples/simple-image-mask.js +12 -0
  171. package/dist/examples/simple-image-mask.js.map +1 -0
  172. package/dist/examples/toast-variations.js +1 -1
  173. package/dist/examples/toast-variations.js.map +1 -1
  174. package/dist/extensions/dev.d.ts.map +1 -1
  175. package/dist/extensions/dev.js +3 -2
  176. package/dist/extensions/dev.js.map +1 -1
  177. package/dist/extensions/react-refresh-init.d.ts.map +1 -1
  178. package/dist/extensions/react-refresh-init.js +4 -3
  179. package/dist/extensions/react-refresh-init.js.map +1 -1
  180. package/dist/index.d.ts +3 -2
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +1 -1
  183. package/dist/index.js.map +1 -1
  184. package/dist/internal/date-picker-widget.d.ts.map +1 -1
  185. package/dist/internal/date-picker-widget.js +2 -1
  186. package/dist/internal/date-picker-widget.js.map +1 -1
  187. package/dist/internal/dialog.d.ts +6 -0
  188. package/dist/internal/dialog.d.ts.map +1 -1
  189. package/dist/internal/dialog.js +59 -18
  190. package/dist/internal/dialog.js.map +1 -1
  191. package/dist/internal/navigation.d.ts.map +1 -1
  192. package/dist/internal/navigation.js +8 -1
  193. package/dist/internal/navigation.js.map +1 -1
  194. package/dist/internal/offscreen.d.ts +3 -0
  195. package/dist/internal/offscreen.d.ts.map +1 -1
  196. package/dist/internal/offscreen.js +5 -0
  197. package/dist/internal/offscreen.js.map +1 -1
  198. package/dist/internal/providers.d.ts.map +1 -1
  199. package/dist/internal/providers.js +20 -3
  200. package/dist/internal/providers.js.map +1 -1
  201. package/dist/internal/scrollbox.d.ts.map +1 -1
  202. package/dist/internal/scrollbox.js +3 -2
  203. package/dist/internal/scrollbox.js.map +1 -1
  204. package/dist/logger.d.ts.map +1 -1
  205. package/dist/logger.js +4 -0
  206. package/dist/logger.js.map +1 -1
  207. package/dist/preload.js +5 -17
  208. package/dist/preload.js.map +1 -1
  209. package/dist/state.d.ts +4 -0
  210. package/dist/state.d.ts.map +1 -1
  211. package/dist/state.js +4 -0
  212. package/dist/state.js.map +1 -1
  213. package/dist/test-border-overlay.d.ts +2 -0
  214. package/dist/test-border-overlay.d.ts.map +1 -0
  215. package/dist/test-border-overlay.js +7 -0
  216. package/dist/test-border-overlay.js.map +1 -0
  217. package/dist/test-layout-2.d.ts +2 -0
  218. package/dist/test-layout-2.d.ts.map +1 -0
  219. package/dist/test-layout-2.js +5 -0
  220. package/dist/test-layout-2.js.map +1 -0
  221. package/dist/test-layout.d.ts +2 -0
  222. package/dist/test-layout.d.ts.map +1 -0
  223. package/dist/test-layout.js +7 -0
  224. package/dist/test-layout.js.map +1 -0
  225. package/dist/theme.d.ts +1 -2
  226. package/dist/theme.d.ts.map +1 -1
  227. package/dist/theme.js +5 -9
  228. package/dist/theme.js.map +1 -1
  229. package/dist/utils/run-command.d.ts +1 -1
  230. package/dist/utils/run-command.d.ts.map +1 -1
  231. package/dist/utils/run-command.js +27 -7
  232. package/dist/utils/run-command.js.map +1 -1
  233. package/dist/utils.d.ts +1 -0
  234. package/dist/utils.d.ts.map +1 -1
  235. package/dist/utils.js +44 -23
  236. package/dist/utils.js.map +1 -1
  237. package/dist/watcher.d.ts.map +1 -1
  238. package/dist/watcher.js +24 -4
  239. package/dist/watcher.js.map +1 -1
  240. package/package.json +14 -12
  241. package/src/action-utils.tsx +10 -0
  242. package/src/apis/cache.test.ts +35 -3
  243. package/src/apis/cache.tsx +184 -59
  244. package/src/apis/clipboard.tsx +5 -0
  245. package/src/apis/oauth.tsx +33 -4
  246. package/src/build.tsx +35 -58
  247. package/src/cli.tsx +156 -134
  248. package/src/compile.tsx +6 -3
  249. package/src/compile.vitest.tsx +33 -15
  250. package/src/components/actions.tsx +230 -99
  251. package/src/components/alert.tsx +11 -10
  252. package/src/components/animation-tick.tsx +1 -1
  253. package/src/components/detail.tsx +56 -151
  254. package/src/components/dropdown.tsx +70 -36
  255. package/src/components/footer.tsx +58 -33
  256. package/src/components/form/checkbox.tsx +30 -32
  257. package/src/components/form/date-picker.tsx +27 -47
  258. package/src/components/form/description.tsx +19 -18
  259. package/src/components/form/dropdown.tsx +95 -103
  260. package/src/components/form/file-autocomplete.tsx +9 -8
  261. package/src/components/form/file-picker.tsx +46 -46
  262. package/src/components/form/form-end.tsx +6 -4
  263. package/src/components/form/index.tsx +38 -48
  264. package/src/components/form/password-field.tsx +25 -27
  265. package/src/components/form/separator.tsx +3 -2
  266. package/src/components/form/tagpicker.tsx +2 -1
  267. package/src/components/form/text-area.tsx +25 -30
  268. package/src/components/form/text-field.tsx +25 -27
  269. package/src/components/form/use-form-navigation.tsx +4 -5
  270. package/src/components/form/with-left-border.tsx +48 -10
  271. package/src/components/icon.tsx +69 -0
  272. package/src/components/image.tsx +60 -7
  273. package/src/components/list.tsx +270 -202
  274. package/src/components/loading-bar.tsx +4 -3
  275. package/src/components/metadata.tsx +217 -0
  276. package/src/components/theme-picker.tsx +3 -2
  277. package/src/examples/actions-context.tsx +63 -0
  278. package/src/examples/actions-context.vitest.tsx +110 -0
  279. package/src/examples/actions-dialog-layout.vitest.tsx +2 -1
  280. package/src/examples/file-autocomplete.vitest.tsx +15 -15
  281. package/src/examples/form-basic.tsx +12 -0
  282. package/src/examples/form-basic.vitest.tsx +74 -74
  283. package/src/examples/form-dropdown.tsx +8 -0
  284. package/src/examples/form-dropdown.vitest.tsx +364 -421
  285. package/src/examples/form-tagpicker.vitest.tsx +56 -54
  286. package/src/examples/github.vitest.tsx +252 -0
  287. package/src/examples/internal/rhf-custom-ref.tsx +16 -15
  288. package/src/examples/internal/scrollbox-with-descendants.tsx +4 -2
  289. package/src/examples/internal/simple-dialog.tsx +1 -1
  290. package/src/examples/internal/simple-scrollbox.vitest.tsx +14 -9
  291. package/src/examples/list-controlled-search.tsx +28 -0
  292. package/src/examples/list-controlled-search.vitest.tsx +49 -0
  293. package/src/examples/list-detail-metadata.tsx +8 -5
  294. package/src/examples/list-detail-metadata.vitest.tsx +22 -22
  295. package/src/examples/list-dropdown-default.vitest.tsx +12 -12
  296. package/src/examples/list-scrollbox.vitest.tsx +52 -38
  297. package/src/examples/list-with-detail.vitest.tsx +45 -41
  298. package/src/examples/list-with-dropdown.vitest.tsx +5 -5
  299. package/src/examples/list-with-sections.vitest.tsx +65 -12
  300. package/src/examples/list-with-toast.vitest.tsx +4 -4
  301. package/src/examples/simple-file-picker.vitest.tsx +12 -12
  302. package/src/examples/simple-grid.vitest.tsx +53 -53
  303. package/src/examples/simple-image-mask.tsx +58 -0
  304. package/src/examples/simple-navigation.vitest.tsx +19 -19
  305. package/src/examples/store.vitest.tsx +1 -1
  306. package/src/examples/swift-extension.vitest.tsx +4 -2
  307. package/src/examples/synonyms.vitest.tsx +31 -9
  308. package/src/examples/toast-action.vitest.tsx +8 -8
  309. package/src/examples/toast-variations.tsx +1 -1
  310. package/src/examples/toast-variations.vitest.tsx +69 -134
  311. package/src/extensions/dev.tsx +3 -2
  312. package/src/extensions/dev.vitest.tsx +65 -28
  313. package/src/extensions/react-refresh-init.tsx +4 -3
  314. package/src/index.tsx +3 -1
  315. package/src/internal/date-picker-widget.tsx +2 -1
  316. package/src/internal/dialog.tsx +100 -28
  317. package/src/internal/navigation.tsx +8 -1
  318. package/src/internal/offscreen.tsx +10 -0
  319. package/src/internal/providers.tsx +34 -8
  320. package/src/internal/scrollbox.tsx +4 -2
  321. package/src/logger.tsx +4 -0
  322. package/src/preload.tsx +5 -17
  323. package/src/state.tsx +12 -0
  324. package/src/theme.tsx +6 -9
  325. package/src/utils/run-command.tsx +32 -8
  326. package/src/utils.tsx +58 -23
  327. package/src/watcher.tsx +26 -6
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Descendants V2 - Generic renderable-based descendants pattern
3
+ *
4
+ * This provides a bridge between opentui's lifecycle (onLifecyclePass) and React state.
5
+ * Items self-register when added to the tree, React owns the item list in state.
6
+ *
7
+ * Usage:
8
+ * const { Root, Item, ItemRenderable } = createDescendantsV2<MyItemProps>('my-list')
9
+ *
10
+ * <Root ref={rootRefCallback} onRegisterItem={(item) => setItems(prev => [...prev, item])}>
11
+ * <Item props={{ value: 'foo', title: 'Foo' }}>
12
+ * {children}
13
+ * </Item>
14
+ * </Root>
15
+ *
16
+ * React handles filtering/selection/navigation - renderables just handle registration.
17
+ */
18
+ import React from 'react';
19
+ import { BoxRenderable, } from '@opentui/core';
20
+ import { extend } from '@opentui/react';
21
+ // ─────────────────────────────────────────────────────────────────────────────
22
+ // Tree traversal helper
23
+ // ─────────────────────────────────────────────────────────────────────────────
24
+ function findParent(node, ParentClass) {
25
+ let current = node.parent ?? undefined;
26
+ while (current) {
27
+ if (current instanceof ParentClass) {
28
+ return current;
29
+ }
30
+ current = current.parent ?? undefined;
31
+ }
32
+ return undefined;
33
+ }
34
+ export class DescendantItemRenderable extends BoxRenderable {
35
+ props = {};
36
+ _parent;
37
+ _registered = false;
38
+ _RootClass;
39
+ constructor(ctx, options, RootClass) {
40
+ super(ctx, { ...options, flexDirection: 'row', width: '100%' });
41
+ this._RootClass = RootClass;
42
+ if (options.props) {
43
+ this.props = options.props;
44
+ }
45
+ this.onLifecyclePass = () => {
46
+ if (!this._registered) {
47
+ this._parent = findParent(this, this._RootClass);
48
+ if (this._parent) {
49
+ this._parent.registerItem(this);
50
+ this._registered = true;
51
+ }
52
+ }
53
+ };
54
+ }
55
+ // Called when removed from tree
56
+ destroy() {
57
+ if (this._registered && this._parent) {
58
+ this._parent.unregisterItem(this);
59
+ this._registered = false;
60
+ }
61
+ super.destroy();
62
+ }
63
+ }
64
+ export class DescendantsRootRenderable extends BoxRenderable {
65
+ // Callbacks to notify React state
66
+ onRegisterItem;
67
+ onUnregisterItem;
68
+ constructor(ctx, options) {
69
+ super(ctx, options);
70
+ if (options.onRegisterItem) {
71
+ this.onRegisterItem = options.onRegisterItem;
72
+ }
73
+ if (options.onUnregisterItem) {
74
+ this.onUnregisterItem = options.onUnregisterItem;
75
+ }
76
+ }
77
+ registerItem(item) {
78
+ console.log('[descendants-v2] registerItem', item.props);
79
+ this.onRegisterItem?.(item);
80
+ }
81
+ unregisterItem(item) {
82
+ console.log('[descendants-v2] unregisterItem', item.props);
83
+ this.onUnregisterItem?.(item);
84
+ }
85
+ }
86
+ export function createDescendantsV2(name) {
87
+ const rootElementName = `termcast-${name}-root`;
88
+ const itemElementName = `termcast-${name}-item`;
89
+ // Create subclass so findParent finds the right root (not another descendants instance)
90
+ class NamedRootRenderable extends DescendantsRootRenderable {
91
+ }
92
+ class NamedItemRenderable extends BoxRenderable {
93
+ props = {};
94
+ _parent;
95
+ _registered = false;
96
+ constructor(ctx, options) {
97
+ super(ctx, { ...options, flexDirection: 'row', width: '100%' });
98
+ if (options.props) {
99
+ this.props = options.props;
100
+ }
101
+ this.onLifecyclePass = () => {
102
+ if (!this._registered) {
103
+ this._parent = findParent(this, NamedRootRenderable);
104
+ if (this._parent) {
105
+ this._parent.registerItem(this);
106
+ this._registered = true;
107
+ }
108
+ }
109
+ };
110
+ }
111
+ destroy() {
112
+ if (this._registered && this._parent) {
113
+ this._parent.unregisterItem(this);
114
+ this._registered = false;
115
+ }
116
+ super.destroy();
117
+ }
118
+ }
119
+ // Register custom elements with opentui - pass class constructors directly
120
+ extend({
121
+ [rootElementName]: NamedRootRenderable,
122
+ [itemElementName]: NamedItemRenderable,
123
+ });
124
+ // React components with proper types
125
+ const Root = (props) => {
126
+ const renderCount = React.useRef(0);
127
+ renderCount.current += 1;
128
+ console.log('[descendants-v2] Root render', 'count:', renderCount.current);
129
+ return React.createElement(rootElementName, props);
130
+ };
131
+ const Item = (props) => {
132
+ const renderCount = React.useRef(0);
133
+ renderCount.current += 1;
134
+ console.log('[descendants-v2] Item render', 'count:', renderCount.current);
135
+ return React.createElement(itemElementName, props);
136
+ };
137
+ return {
138
+ Root,
139
+ Item,
140
+ ItemRenderable: NamedItemRenderable,
141
+ RootRenderable: NamedRootRenderable,
142
+ };
143
+ }
144
+ //# sourceMappingURL=descendants-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descendants-v2.js","sourceRoot":"","sources":["../src/descendants-v2.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=actions-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-context.d.ts","sourceRoot":"","sources":["../../src/examples/actions-context.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ /**
3
+ * Example validating that ActionPanel preserves React context through portals.
4
+ *
5
+ * A custom React context (CounterContext) provides a counter value. The
6
+ * CounterAction component reads from this context at render time and closes
7
+ * over it in its onAction callback. If the portal preserves context correctly,
8
+ * the toast will show the matching prop and context values.
9
+ */
10
+ import { createContext, useContext, useState } from 'react';
11
+ import { List, ActionPanel, Action, showToast, Toast, renderWithProviders } from 'termcast';
12
+ const CounterContext = createContext(0);
13
+ // Action component that reads from context at render time
14
+ function CounterAction({ counter }) {
15
+ // Read from context - this works because the portal preserves the
16
+ // React tree context from the source component
17
+ const contextValue = useContext(CounterContext);
18
+ return (_jsx(Action, { title: "Show Counter", onAction: () => {
19
+ // Both the prop and context value should match
20
+ showToast({
21
+ title: `prop=${counter} ctx=${contextValue}`,
22
+ style: Toast.Style.Success,
23
+ });
24
+ } }));
25
+ }
26
+ function ActionsContextExample() {
27
+ const [counter, setCounter] = useState(42);
28
+ return (_jsx(CounterContext.Provider, { value: counter, children: _jsx(List, { navigationTitle: "Context Test", searchBarPlaceholder: "Search...", children: _jsx(List.Item, { title: `Counter: ${counter}`, subtitle: "Press enter to show counter via action", actions: _jsxs(ActionPanel, { children: [_jsx(CounterAction, { counter: counter }), _jsx(Action, { title: "Increment", onAction: () => {
29
+ setCounter((c) => c + 1);
30
+ } })] }) }) }) }));
31
+ }
32
+ await renderWithProviders(_jsx(ActionsContextExample, {}));
33
+ //# sourceMappingURL=actions-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-context.js","sourceRoot":"","sources":["../../src/examples/actions-context.tsx"],"names":[],"mappings":";AAAA;;;;;;;GAOG;AACH,OAAc,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE3F,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;AAEvC,0DAA0D;AAC1D,SAAS,aAAa,CAAC,EAAE,OAAO,EAAuB;IACrD,kEAAkE;IAClE,+CAA+C;IAC/C,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAE/C,OAAO,CACL,KAAC,MAAM,IACL,KAAK,EAAC,cAAc,EACpB,QAAQ,EAAE,GAAG,EAAE;YACb,+CAA+C;YAC/C,SAAS,CAAC;gBACR,KAAK,EAAE,QAAQ,OAAO,QAAQ,YAAY,EAAE;gBAC5C,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO;aAC3B,CAAC,CAAA;QACJ,CAAC,GACD,CACH,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE1C,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YACrC,KAAC,IAAI,IACH,eAAe,EAAC,cAAc,EAC9B,oBAAoB,EAAC,WAAW,YAEhC,KAAC,IAAI,CAAC,IAAI,IACR,KAAK,EAAE,YAAY,OAAO,EAAE,EAC5B,QAAQ,EAAC,wCAAwC,EACjD,OAAO,EACL,MAAC,WAAW,eACV,KAAC,aAAa,IAAC,OAAO,EAAE,OAAO,GAAI,EACnC,KAAC,MAAM,IACL,KAAK,EAAC,WAAW,EACjB,QAAQ,EAAE,GAAG,EAAE;gCACb,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;4BAC1B,CAAC,GACD,IACU,GAEhB,GACG,GACiB,CAC3B,CAAA;AACH,CAAC;AAED,MAAM,mBAAmB,CAAC,KAAC,qBAAqB,KAAG,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-basic.d.ts","sourceRoot":"","sources":["../../src/examples/form-basic.tsx"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,IAAI,GAAG,CAiHtC"}
1
+ {"version":3,"file":"form-basic.d.ts","sourceRoot":"","sources":["../../src/examples/form-basic.tsx"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,IAAI,GAAG,CA6HtC"}
@@ -15,7 +15,7 @@ export function FormBasicExample() {
15
15
  message: 'All form data has been captured successfully',
16
16
  });
17
17
  };
18
- return (_jsxs(Form, { actions: _jsx(ActionPanel, { children: _jsx(Action.SubmitForm, { title: 'Submit Form', onSubmit: handleSubmit }) }), children: [_jsx(Form.Description, { title: 'Form Component Demo', text: 'This demonstrates all available form input types. Use arrow keys or Tab to navigate between fields.' }), _jsx(Form.Separator, {}), _jsx(Form.TextField, { id: 'username', title: 'Username', placeholder: 'Enter your username', defaultValue: '', info: 'Required field' }), _jsx(Form.PasswordField, { id: 'password', title: 'Password', placeholder: 'Enter secure password', info: 'Must be at least 8 characters' }), _jsx(Form.TextArea, { id: 'bio', title: 'Biography', placeholder: 'Tell us about yourself...', info: 'Maximum 500 characters', defaultValue: '' }), _jsx(Form.Checkbox, { id: 'newsletter', title: 'Email Preferences', label: 'Subscribe to newsletter', defaultValue: false, info: 'Receive weekly updates' }), _jsxs(Form.Dropdown, { id: 'country', title: 'Country', placeholder: 'Select your country', info: 'Your country of residence', children: [_jsxs(Form.Dropdown.Section, { title: 'Americas', children: [_jsx(Form.Dropdown.Item, { value: 'us', title: 'United States', icon: '\uD83C\uDDFA\uD83C\uDDF8' }), _jsx(Form.Dropdown.Item, { value: 'ca', title: 'Canada', icon: '\uD83C\uDDE8\uD83C\uDDE6' }), _jsx(Form.Dropdown.Item, { value: 'mx', title: 'Mexico', icon: '\uD83C\uDDF2\uD83C\uDDFD' })] }), _jsxs(Form.Dropdown.Section, { title: 'Europe', children: [_jsx(Form.Dropdown.Item, { value: 'gb', title: 'United Kingdom', icon: '\uD83C\uDDEC\uD83C\uDDE7' }), _jsx(Form.Dropdown.Item, { value: 'fr', title: 'France', icon: '\uD83C\uDDEB\uD83C\uDDF7' }), _jsx(Form.Dropdown.Item, { value: 'de', title: 'Germany', icon: '\uD83C\uDDE9\uD83C\uDDEA' })] })] }), _jsx(Form.DatePicker, { id: 'birthdate', title: 'Date of Birth', type: Form.DatePicker.Type.Date, info: 'Format: YYYY-MM-DD' }), _jsx(Form.FilePicker, { id: 'documents', title: 'Upload Documents', info: 'Select one or more documents to attach', allowMultipleSelection: true, canChooseFiles: true, canChooseDirectories: false }), _jsx(Form.Separator, {}), _jsx(Form.Description, { title: 'Form Navigation', text: '\u2022 \u2191\u2193/Tab: Navigate fields | Space: Toggle checkbox | Enter/Space: Open dropdown | ^K/\u2318\u21B5: Show actions' }), submittedData && (_jsx(Form.Description, { title: 'Submitted Data:', text: JSON.stringify(submittedData, null, 2) }))] }));
18
+ return (_jsxs(Form, { actions: _jsx(ActionPanel, { children: _jsx(Action.SubmitForm, { title: 'Submit Form', onSubmit: handleSubmit }) }), children: [_jsx(Form.Description, { title: 'Form Component Demo', text: 'This demonstrates all available form input types. Use arrow keys or Tab to navigate between fields.' }), _jsx(Form.Separator, {}), _jsx(Form.TextField, { id: 'username', title: 'Username', placeholder: 'Enter your username', defaultValue: '', info: 'Required field' }), _jsx(Form.PasswordField, { id: 'password', title: 'Password', placeholder: 'Enter secure password', info: 'Must be at least 8 characters' }), _jsx(Form.TextArea, { id: 'bio', title: 'Biography', placeholder: 'Tell us about yourself...', info: 'Maximum 500 characters', defaultValue: '' }), _jsx(Form.Checkbox, { id: 'newsletter', title: 'Email Preferences', label: 'Subscribe to newsletter', defaultValue: false, info: 'Receive weekly updates' }), _jsxs(Form.Dropdown, { id: 'country', title: 'Country', placeholder: 'Select your country', info: 'Your country of residence', children: [_jsxs(Form.Dropdown.Section, { title: 'Americas', children: [_jsx(Form.Dropdown.Item, { value: 'us', title: 'United States', icon: '\uD83C\uDDFA\uD83C\uDDF8' }), _jsx(Form.Dropdown.Item, { value: 'ca', title: 'Canada', icon: '\uD83C\uDDE8\uD83C\uDDE6' }), _jsx(Form.Dropdown.Item, { value: 'mx', title: 'Mexico', icon: '\uD83C\uDDF2\uD83C\uDDFD' })] }), _jsxs(Form.Dropdown.Section, { title: 'Europe', children: [_jsx(Form.Dropdown.Item, { value: 'gb', title: 'United Kingdom', icon: '\uD83C\uDDEC\uD83C\uDDE7' }), _jsx(Form.Dropdown.Item, { value: 'fr', title: 'France', icon: '\uD83C\uDDEB\uD83C\uDDF7' }), _jsx(Form.Dropdown.Item, { value: 'de', title: 'Germany', icon: '\uD83C\uDDE9\uD83C\uDDEA' })] })] }), _jsx(Form.Dropdown, { id: 'emptyDropdown', title: 'Empty Dropdown', placeholder: 'No items available' }), _jsx(Form.TextField, { id: 'minimalField', title: 'Minimal Field', placeholder: 'No info text' }), _jsx(Form.DatePicker, { id: 'birthdate', title: 'Date of Birth', type: Form.DatePicker.Type.Date, info: 'Format: YYYY-MM-DD' }), _jsx(Form.FilePicker, { id: 'documents', title: 'Upload Documents', info: 'Select one or more documents to attach', allowMultipleSelection: true, canChooseFiles: true, canChooseDirectories: false }), _jsx(Form.Separator, {}), _jsx(Form.Description, { title: 'Form Navigation', text: '\u2022 \u2191\u2193/Tab: Navigate fields | Space: Toggle checkbox | Enter/Space: Open dropdown | ^K/\u2318\u21B5: Show actions' }), submittedData && (_jsx(Form.Description, { title: 'Submitted Data:', text: JSON.stringify(submittedData, null, 2) }))] }));
19
19
  }
20
20
  await renderWithProviders(_jsx(FormBasicExample, {}));
21
21
  //# sourceMappingURL=form-basic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-basic.js","sourceRoot":"","sources":["../../src/examples/form-basic.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-basic.js","sourceRoot":"","sources":["../../src/examples/form-basic.tsx"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ function FormDropdownExample() {
7
7
  const handleSubmit = (data) => {
8
8
  setSubmitted(data);
9
9
  };
10
- return (_jsxs(Form, { actions: _jsx(ActionPanel, { children: _jsx(Action.SubmitForm, { title: 'Submit Form', onSubmit: handleSubmit }) }), children: [_jsx(Form.Description, { title: 'Dropdown Component Demo', text: 'Test dropdown with sections, multiple selection, and more features' }), _jsxs(Form.Dropdown, { id: 'languages', title: 'Programming Languages', placeholder: 'Select languages...', info: 'Choose your preferred programming languages', hasMultipleSelection: true, defaultValue: ['typescript', 'rust'], children: [_jsxs(Form.Dropdown.Section, { title: 'Frontend', children: [_jsx(Form.Dropdown.Item, { value: 'typescript', title: 'TypeScript', icon: '\uD83D\uDCD8' }), _jsx(Form.Dropdown.Item, { value: 'javascript', title: 'JavaScript', icon: '\uD83D\uDCD2' }), _jsx(Form.Dropdown.Item, { value: 'react', title: 'React', icon: '\u269B\uFE0F' }), _jsx(Form.Dropdown.Item, { value: 'vue', title: 'Vue', icon: '\uD83D\uDC9A' }), _jsx(Form.Dropdown.Item, { value: 'svelte', title: 'Svelte', icon: '\uD83D\uDD25' })] }), _jsxs(Form.Dropdown.Section, { title: 'Backend', children: [_jsx(Form.Dropdown.Item, { value: 'node', title: 'Node.js', icon: '\uD83D\uDFE2' }), _jsx(Form.Dropdown.Item, { value: 'python', title: 'Python', icon: '\uD83D\uDC0D' }), _jsx(Form.Dropdown.Item, { value: 'go', title: 'Go', icon: '\uD83D\uDC39' }), _jsx(Form.Dropdown.Item, { value: 'rust', title: 'Rust', icon: '\uD83E\uDD80' }), _jsx(Form.Dropdown.Item, { value: 'java', title: 'Java', icon: '\u2615' })] }), _jsxs(Form.Dropdown.Section, { title: 'Mobile', children: [_jsx(Form.Dropdown.Item, { value: 'swift', title: 'Swift', icon: '\uD83E\uDD89' }), _jsx(Form.Dropdown.Item, { value: 'kotlin', title: 'Kotlin', icon: '\uD83D\uDFE3' }), _jsx(Form.Dropdown.Item, { value: 'flutter', title: 'Flutter', icon: '\uD83D\uDC99' }), _jsx(Form.Dropdown.Item, { value: 'react-native', title: 'React Native', icon: '\uD83D\uDCF1' })] })] }), _jsxs(Form.Dropdown, { id: 'theme', title: 'Editor Theme', placeholder: 'Choose a theme...', info: 'Select your preferred editor color theme', defaultValue: 'dracula', children: [_jsx(Form.Dropdown.Item, { value: 'monokai', title: 'Monokai', icon: '\uD83C\uDF11' }), _jsx(Form.Dropdown.Item, { value: 'dracula', title: 'Dracula', icon: '\uD83E\uDDDB' }), _jsx(Form.Dropdown.Item, { value: 'one-dark', title: 'One Dark', icon: '\uD83C\uDF1A' }), _jsx(Form.Dropdown.Item, { value: 'nord', title: 'Nord', icon: '\u2744\uFE0F' }), _jsx(Form.Dropdown.Item, { value: 'github', title: 'GitHub Light', icon: '\u2600\uFE0F' }), _jsx(Form.Dropdown.Item, { value: 'solarized-light', title: 'Solarized Light', icon: '\uD83C\uDF1E' }), _jsx(Form.Dropdown.Item, { value: 'one-light', title: 'One Light', icon: '\uD83D\uDCA1' })] }), _jsxs(Form.Dropdown, { id: 'priority', title: 'Task Priority', placeholder: 'Select priority level', children: [_jsx(Form.Dropdown.Item, { value: 'critical', title: 'Critical', icon: '\uD83D\uDD34' }), _jsx(Form.Dropdown.Item, { value: 'high', title: 'High', icon: '\uD83D\uDFE0' }), _jsx(Form.Dropdown.Item, { value: 'medium', title: 'Medium', icon: '\uD83D\uDFE1' }), _jsx(Form.Dropdown.Item, { value: 'low', title: 'Low', icon: '\uD83D\uDFE2' })] }), submitted && (_jsx(Form.Description, { title: 'Submitted Data', text: JSON.stringify(submitted, null, 2) }))] }));
10
+ return (_jsxs(Form, { actions: _jsx(ActionPanel, { children: _jsx(Action.SubmitForm, { title: 'Submit Form', onSubmit: handleSubmit }) }), children: [_jsx(Form.Description, { title: 'Dropdown Component Demo', text: 'Test dropdown with sections, multiple selection, and more features' }), _jsxs(Form.Dropdown, { id: 'languages', title: 'Programming Languages', placeholder: 'Select languages...', info: 'Choose your preferred programming languages', hasMultipleSelection: true, defaultValue: ['typescript', 'rust'], children: [_jsxs(Form.Dropdown.Section, { title: 'Frontend', children: [_jsx(Form.Dropdown.Item, { value: 'typescript', title: 'TypeScript', icon: '\uD83D\uDCD8' }), _jsx(Form.Dropdown.Item, { value: 'javascript', title: 'JavaScript', icon: '\uD83D\uDCD2' }), _jsx(Form.Dropdown.Item, { value: 'react', title: 'React', icon: '\u269B\uFE0F' }), _jsx(Form.Dropdown.Item, { value: 'vue', title: 'Vue', icon: '\uD83D\uDC9A' }), _jsx(Form.Dropdown.Item, { value: 'svelte', title: 'Svelte', icon: '\uD83D\uDD25' })] }), _jsxs(Form.Dropdown.Section, { title: 'Backend', children: [_jsx(Form.Dropdown.Item, { value: 'node', title: 'Node.js', icon: '\uD83D\uDFE2' }), _jsx(Form.Dropdown.Item, { value: 'python', title: 'Python', icon: '\uD83D\uDC0D' }), _jsx(Form.Dropdown.Item, { value: 'go', title: 'Go', icon: '\uD83D\uDC39' }), _jsx(Form.Dropdown.Item, { value: 'rust', title: 'Rust', icon: '\uD83E\uDD80' }), _jsx(Form.Dropdown.Item, { value: 'java', title: 'Java', icon: '\u2615' })] }), _jsxs(Form.Dropdown.Section, { title: 'Mobile', children: [_jsx(Form.Dropdown.Item, { value: 'swift', title: 'Swift', icon: '\uD83E\uDD89' }), _jsx(Form.Dropdown.Item, { value: 'kotlin', title: 'Kotlin', icon: '\uD83D\uDFE3' }), _jsx(Form.Dropdown.Item, { value: 'flutter', title: 'Flutter', icon: '\uD83D\uDC99' }), _jsx(Form.Dropdown.Item, { value: 'react-native', title: 'React Native', icon: '\uD83D\uDCF1' })] })] }), _jsxs(Form.Dropdown, { id: 'theme', title: 'Editor Theme', placeholder: 'Choose a theme...', info: 'Select your preferred editor color theme', defaultValue: 'dracula', children: [_jsx(Form.Dropdown.Item, { value: 'monokai', title: 'Monokai', icon: '\uD83C\uDF11' }), _jsx(Form.Dropdown.Item, { value: 'dracula', title: 'Dracula', icon: '\uD83E\uDDDB' }), _jsx(Form.Dropdown.Item, { value: 'one-dark', title: 'One Dark', icon: '\uD83C\uDF1A' }), _jsx(Form.Dropdown.Item, { value: 'nord', title: 'Nord', icon: '\u2744\uFE0F' }), _jsx(Form.Dropdown.Item, { value: 'github', title: 'GitHub Light', icon: '\u2600\uFE0F' }), _jsx(Form.Dropdown.Item, { value: 'solarized-light', title: 'Solarized Light', icon: '\uD83C\uDF1E' }), _jsx(Form.Dropdown.Item, { value: 'one-light', title: 'One Light', icon: '\uD83D\uDCA1' })] }), _jsxs(Form.Dropdown, { id: 'priority', title: 'Task Priority', placeholder: 'Select priority level', children: [_jsx(Form.Dropdown.Item, { value: 'critical', title: 'Critical', icon: '\uD83D\uDD34' }), _jsx(Form.Dropdown.Item, { value: 'high', title: 'High', icon: '\uD83D\uDFE0' }), _jsx(Form.Dropdown.Item, { value: 'medium', title: 'Medium', icon: '\uD83D\uDFE1' }), _jsx(Form.Dropdown.Item, { value: 'low', title: 'Low', icon: '\uD83D\uDFE2' })] }), _jsx(Form.Dropdown, { id: 'emptyDropdown', title: 'Empty Dropdown', placeholder: 'No options available' }), _jsx(Form.TextField, { id: 'afterEmpty', title: 'Field After Empty', placeholder: 'This should be close to empty dropdown' }), submitted && (_jsx(Form.Description, { title: 'Submitted Data', text: JSON.stringify(submitted, null, 2) }))] }));
11
11
  }
12
12
  await renderWithProviders(_jsx(FormDropdownExample, {}));
13
13
  //# sourceMappingURL=form-dropdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"form-dropdown.js","sourceRoot":"","sources":["../../src/examples/form-dropdown.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"form-dropdown.js","sourceRoot":"","sources":["../../src/examples/form-dropdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Custom Action Renderables Example
3
+ *
4
+ * Demonstrates using opentui renderable wrappers for actions:
5
+ * - CustomActionRenderable: thin wrapper storing title/onAction
6
+ * - CustomActionPanelRenderable: traverses opentui tree to find first action title
7
+ * - Offscreen rendering to extract first action title
8
+ * - Dialog to show actions when pressed
9
+ */
10
+ import { BoxRenderable, type RenderContext, type BoxOptions } from '@opentui/core';
11
+ import React from 'react';
12
+ interface CustomActionOptions extends BoxOptions {
13
+ actionTitle?: string;
14
+ onAction?: () => void;
15
+ }
16
+ declare class CustomActionRenderable extends BoxRenderable {
17
+ actionTitle: string;
18
+ onAction?: () => void;
19
+ constructor(ctx: RenderContext, options: CustomActionOptions);
20
+ }
21
+ interface CustomActionSectionOptions extends BoxOptions {
22
+ sectionTitle?: string;
23
+ }
24
+ declare class CustomActionSectionRenderable extends BoxRenderable {
25
+ sectionTitle?: string;
26
+ constructor(ctx: RenderContext, options: CustomActionSectionOptions);
27
+ }
28
+ interface CustomActionPanelOptions extends BoxOptions {
29
+ }
30
+ declare class CustomActionPanelRenderable extends BoxRenderable {
31
+ constructor(ctx: RenderContext, options: CustomActionPanelOptions);
32
+ getFirstActionTitle(): string;
33
+ getAllActions(): CustomActionRenderable[];
34
+ }
35
+ declare global {
36
+ namespace JSX {
37
+ interface IntrinsicElements {
38
+ 'custom-action': CustomActionOptions & {
39
+ ref?: React.Ref<CustomActionRenderable>;
40
+ };
41
+ 'custom-action-section': CustomActionSectionOptions & {
42
+ ref?: React.Ref<CustomActionSectionRenderable>;
43
+ };
44
+ 'custom-action-panel': CustomActionPanelOptions & {
45
+ ref?: React.Ref<CustomActionPanelRenderable>;
46
+ };
47
+ }
48
+ }
49
+ }
50
+ interface ActionProps {
51
+ title: string;
52
+ onAction?: () => void;
53
+ }
54
+ declare function Action({ title, onAction }: ActionProps): any;
55
+ interface ActionPanelSectionProps {
56
+ title?: string;
57
+ children?: React.ReactNode;
58
+ }
59
+ declare function ActionPanelSection({ title, children }: ActionPanelSectionProps): any;
60
+ interface ActionPanelProps {
61
+ children?: React.ReactNode;
62
+ }
63
+ interface ActionPanelType {
64
+ (props: ActionPanelProps): any;
65
+ Section: typeof ActionPanelSection;
66
+ }
67
+ declare const ActionPanel: ActionPanelType;
68
+ declare function Example(): any;
69
+ export { Action, ActionPanel, Example };
70
+ //# sourceMappingURL=custom-action-renderables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-action-renderables.d.ts","sourceRoot":"","sources":["../../../src/examples/internal/custom-action-renderables.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAA;AAEtB,OAAO,KAA2B,MAAM,OAAO,CAAA;AAkD/C,UAAU,mBAAoB,SAAQ,UAAU;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,cAAM,sBAAuB,SAAQ,aAAa;IACzC,WAAW,SAAK;IAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;gBAEhB,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB;CAG7D;AAMD,UAAU,0BAA2B,SAAQ,UAAU;IACrD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,cAAM,6BAA8B,SAAQ,aAAa;IAChD,YAAY,CAAC,EAAE,MAAM,CAAA;gBAEhB,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,0BAA0B;CAGpE;AAMD,UAAU,wBAAyB,SAAQ,UAAU;CAAG;AAExD,cAAM,2BAA4B,SAAQ,aAAa;gBACzC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,wBAAwB;IAKjE,mBAAmB,IAAI,MAAM;IAM7B,aAAa,IAAI,sBAAsB,EAAE;CAG1C;AAYD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,GAAG,CAAC;QACZ,UAAU,iBAAiB;YACzB,eAAe,EAAE,mBAAmB,GAAG;gBAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;aAAE,CAAA;YAClF,uBAAuB,EAAE,0BAA0B,GAAG;gBAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;aAAE,CAAA;YACxG,qBAAqB,EAAE,wBAAwB,GAAG;gBAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;aAAE,CAAA;SACnG;KACF;CACF;AAMD,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,iBAAS,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAG,GAAG,CAErD;AAED,UAAU,uBAAuB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,iBAAS,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,uBAAuB,GAAG,GAAG,CAM7E;AAED,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,UAAU,eAAe;IACvB,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAA;IAC9B,OAAO,EAAE,OAAO,kBAAkB,CAAA;CACnC;AAED,QAAA,MAAM,WAAW,EAAE,eAElB,CAAA;AA6GD,iBAAS,OAAO,IAAI,GAAG,CAqEtB;AAED,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,163 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ /**
3
+ * Custom Action Renderables Example
4
+ *
5
+ * Demonstrates using opentui renderable wrappers for actions:
6
+ * - CustomActionRenderable: thin wrapper storing title/onAction
7
+ * - CustomActionPanelRenderable: traverses opentui tree to find first action title
8
+ * - Offscreen rendering to extract first action title
9
+ * - Dialog to show actions when pressed
10
+ */
11
+ import { BoxRenderable, } from '@opentui/core';
12
+ import { extend, useKeyboard } from '@opentui/react';
13
+ import React, { useRef, useState } from 'react';
14
+ import { renderWithProviders } from '../../utils';
15
+ import { Theme } from 'termcast/src/theme';
16
+ import { Offscreen } from 'termcast/src/internal/offscreen';
17
+ import { CustomDropdown } from './custom-dropdown';
18
+ // ─────────────────────────────────────────────────────────────────────────────
19
+ // Helper: Find parent of specific type by traversing up
20
+ // ─────────────────────────────────────────────────────────────────────────────
21
+ function findParent(node, type) {
22
+ let current = node.parent;
23
+ while (current) {
24
+ if (current instanceof type) {
25
+ return current;
26
+ }
27
+ current = current.parent;
28
+ }
29
+ return undefined;
30
+ }
31
+ // ─────────────────────────────────────────────────────────────────────────────
32
+ // Helper: Find children of specific type by traversing down
33
+ // ─────────────────────────────────────────────────────────────────────────────
34
+ function findChildren(node, type) {
35
+ const results = [];
36
+ function traverse(current) {
37
+ if (current instanceof type) {
38
+ results.push(current);
39
+ }
40
+ // Traverse children using getChildren()
41
+ for (const child of current.getChildren()) {
42
+ traverse(child);
43
+ }
44
+ }
45
+ // Start from node's children, not node itself
46
+ for (const child of node.getChildren()) {
47
+ traverse(child);
48
+ }
49
+ return results;
50
+ }
51
+ class CustomActionRenderable extends BoxRenderable {
52
+ actionTitle = '';
53
+ onAction;
54
+ constructor(ctx, options) {
55
+ super(ctx, options);
56
+ }
57
+ }
58
+ class CustomActionSectionRenderable extends BoxRenderable {
59
+ sectionTitle;
60
+ constructor(ctx, options) {
61
+ super(ctx, options);
62
+ }
63
+ }
64
+ class CustomActionPanelRenderable extends BoxRenderable {
65
+ constructor(ctx, options) {
66
+ super(ctx, options);
67
+ }
68
+ // Get first action title by traversing children synchronously
69
+ getFirstActionTitle() {
70
+ const actions = findChildren(this, CustomActionRenderable);
71
+ return actions[0]?.actionTitle ?? '';
72
+ }
73
+ // Get all actions by traversing children
74
+ getAllActions() {
75
+ return findChildren(this, CustomActionRenderable);
76
+ }
77
+ }
78
+ // ─────────────────────────────────────────────────────────────────────────────
79
+ // Register custom elements with opentui
80
+ // ─────────────────────────────────────────────────────────────────────────────
81
+ extend({
82
+ 'custom-action': CustomActionRenderable,
83
+ 'custom-action-section': CustomActionSectionRenderable,
84
+ 'custom-action-panel': CustomActionPanelRenderable,
85
+ });
86
+ function Action({ title, onAction }) {
87
+ return _jsx("custom-action", { actionTitle: title, onAction: onAction });
88
+ }
89
+ function ActionPanelSection({ title, children }) {
90
+ return (_jsx("custom-action-section", { sectionTitle: title, children: children }));
91
+ }
92
+ const ActionPanel = ({ children }) => {
93
+ return _jsx("custom-action-panel", { children: children });
94
+ };
95
+ ActionPanel.Section = ActionPanelSection;
96
+ function ActionTitleExtractor({ actions, onTitleExtracted }) {
97
+ const containerRef = useRef(null);
98
+ // Traverse the opentui tree to find the ActionPanel and extract first title
99
+ React.useLayoutEffect(() => {
100
+ if (containerRef.current) {
101
+ // Find CustomActionPanelRenderable in subtree
102
+ const panels = findChildren(containerRef.current, CustomActionPanelRenderable);
103
+ if (panels.length > 0) {
104
+ const title = panels[0].getFirstActionTitle();
105
+ onTitleExtracted(title);
106
+ }
107
+ }
108
+ });
109
+ return (_jsx("box", { ref: containerRef, visible: false, height: 0, children: actions }));
110
+ }
111
+ function ActionsDropdown({ actions, onClose }) {
112
+ const panelRef = useRef(null);
113
+ const [allActions, setAllActions] = useState([]);
114
+ // After tree is built, extract actions (run once on mount)
115
+ React.useLayoutEffect(() => {
116
+ if (panelRef.current) {
117
+ setAllActions(panelRef.current.getAllActions());
118
+ }
119
+ }, []);
120
+ // Handle escape to close
121
+ useKeyboard((evt) => {
122
+ if (evt.name === 'escape') {
123
+ onClose();
124
+ }
125
+ });
126
+ return (_jsxs("box", { flexDirection: "column", padding: 1, border: ['top', 'bottom', 'left', 'right'], borderStyle: "single", borderColor: Theme.border, backgroundColor: Theme.background, children: [_jsx("text", { marginBottom: 1, children: "Actions" }), _jsx("box", { visible: false, height: 0, children: _jsx("custom-action-panel", { ref: panelRef, children: actions }) }), _jsx(CustomDropdown, { placeholder: "Search actions...", onSelect: (id) => {
127
+ const action = allActions.find((a) => a.actionTitle === id);
128
+ if (action?.onAction) {
129
+ action.onAction();
130
+ onClose();
131
+ }
132
+ }, children: allActions.map((action) => (_jsx(CustomDropdown.Item, { id: action.actionTitle, title: action.actionTitle }, action.actionTitle))) }), _jsx("text", { marginTop: 1, fg: Theme.textMuted, children: "\u2191\u2193 navigate \u2022 \u23CE select \u2022 esc close" })] }));
133
+ }
134
+ // ─────────────────────────────────────────────────────────────────────────────
135
+ // Example Component
136
+ // ─────────────────────────────────────────────────────────────────────────────
137
+ function Example() {
138
+ const [firstActionTitle, setFirstActionTitle] = useState('');
139
+ const [showDialog, setShowDialog] = useState(false);
140
+ // Sample actions
141
+ const actions = (_jsxs(ActionPanel, { children: [_jsxs(ActionPanel.Section, { title: "Main", children: [_jsx(Action, { title: "Eat Apple", onAction: () => {
142
+ console.log('Eating apple!');
143
+ } }), _jsx(Action, { title: "Cook Apple", onAction: () => {
144
+ console.log('Cooking apple!');
145
+ } })] }), _jsx(ActionPanel.Section, { title: "Other", children: _jsx(Action, { title: "Throw Apple", onAction: () => {
146
+ console.log('Throwing apple!');
147
+ } }) })] }));
148
+ useKeyboard((evt) => {
149
+ if (showDialog)
150
+ return; // Let dialog handle keys
151
+ if (evt.name === 'return') {
152
+ setShowDialog(true);
153
+ }
154
+ });
155
+ return (_jsxs("box", { flexDirection: "column", padding: 1, children: [_jsx("text", { marginBottom: 1, children: "Custom Action Renderables Example" }), _jsx("text", { children: "Press \u23CE to show actions" }), _jsxs("text", { marginTop: 1, children: ["First action: ", firstActionTitle || '(extracting...)'] }), _jsx(Offscreen, { children: _jsx(ActionTitleExtractor, { actions: actions, onTitleExtracted: setFirstActionTitle }) }), showDialog && (_jsx(ActionsDropdown, { actions: actions, onClose: () => {
156
+ setShowDialog(false);
157
+ } }))] }));
158
+ }
159
+ export { Action, ActionPanel, Example };
160
+ if (import.meta.main) {
161
+ renderWithProviders(_jsx(Example, {}));
162
+ }
163
+ //# sourceMappingURL=custom-action-renderables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-action-renderables.js","sourceRoot":"","sources":["../../../src/examples/internal/custom-action-renderables.tsx"],"names":[],"mappings":"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"}