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 @@
1
+ {"version":3,"file":"custom-renderable-list-v2.js","sourceRoot":"","sources":["../../../src/examples/internal/custom-renderable-list-v2.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyIG;AAEH,OAAO,EAEL,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GAGnB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AA0B7C,MAAM,kBAAkB,GAAG,MAAM,CAAuB,GAAG,EAAE,CAAC,CAAC;IAC7D,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,KAAK;IACtB,iBAAiB,EAAE,IAAI;CACxB,CAAC,CAAC,CAAA;AAkCH,gFAAgF;AAChF,wDAAwD;AACxD,gFAAgF;AAEhF,8DAA8D;AAC9D,SAAS,UAAU,CAAI,IAAgB,EAAE,IAAwC;IAC/E,IAAI,OAAO,GAAsB,IAAI,CAAC,MAAM,CAAA;IAC5C,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;IAC1B,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,gFAAgF;AAChF,qEAAqE;AACrE,gFAAgF;AAEhF,MAAM,+BAAgC,SAAQ,aAAa;IACjD,UAAU,CAAuB;IAEzC,0CAA0C;IACnC,QAAQ,CAAW;IACnB,QAAQ,CAAa;IACrB,SAAS,GAAG,EAAE,CAAA;IACd,YAAY,CAAS;IACrB,MAAM,CAAS,CAAC,8CAA8C;IAC9D,MAAM,CAAkB,CAAC,gCAAgC;IAEhE,gCAAgC;IACzB,YAAY,GAAG,CAAC,CAAC,CAAA;IACjB,OAAO,CAAqC;IAEnD,YAAY,GAAkB,EAAE,OAAqC;QACnE,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC/D,+CAA+C;QAE/C,2DAA2D;QAC3D,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;gBACxD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAA;gBACnE,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC;QACH,CAAC,CAAA;QAED,yDAAyD;QACzD,IAAI,CAAC,WAAW,GAAG,CAAC,KAAK,EAAE,EAAE;YAC3B,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAChF,CAAC,CAAA;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,iEAAiE;AACjE,gFAAgF;AAEhF,MAAM,kCAAmC,SAAQ,aAAa;IACpD,UAAU,CAAuB;IAEzC,qBAAqB;IACd,YAAY,CAAS;IAE5B,YAAY,GAAkB,EAAE,OAAwC;QACtE,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAClE,+CAA+C;QAE/C,2DAA2D;QAC3D,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;gBACxD,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,CAAA;YACxC,CAAC;QACH,CAAC,CAAA;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,qEAAqE;AACrE,gFAAgF;AAEhF,MAAM,oCAAqC,SAAQ,aAAa;IACtD,UAAU,CAAuB;IAEzC,sDAAsD;IAC/C,UAAU,GAAG,UAAU,CAAA;IACvB,gBAAgB,CAAS;IAEhC,YAAY,GAAkB,EAAE,OAA0C;QACxE,iDAAiD;QACjD,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;QAE1C,2DAA2D;QAC3D,IAAI,CAAC,eAAe,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAA;gBACxD,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAA;YAC1C,CAAC;QACH,CAAC,CAAA;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,0EAA0E;AAC1E,gFAAgF;AAEhF,MAAM,oBAAqB,SAAQ,aAAa;IAC9C,qEAAqE;IAC7D,eAAe,GAAG,IAAI,GAAG,EAAmC,CAAA;IAC5D,kBAAkB,GAAG,IAAI,GAAG,EAAsC,CAAA;IAClE,SAAS,CAAuC;IAExD,iBAAiB;IACT,WAAW,GAAG,EAAE,CAAA;IAExB,oCAAoC;IAC5B,SAAS,CAAqB;IAC9B,WAAW,CAAoB;IAC/B,UAAU,CAAgB;IAElC,sDAAsD;IAC9C,YAAY,GAAG,WAAW,CAAA;IAClC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IACD,IAAI,WAAW,CAAC,KAAa;QAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QACzB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAA;IACtC,CAAC;IAED,+CAA+C;IACvC,mBAAmB,GAAG,EAAE,CAAA;IAChC,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,mBAAmB,CAAA;IACjC,CAAC;IACD,IAAI,kBAAkB,CAAC,KAAa;QAClC,IAAI,IAAI,CAAC,mBAAmB,KAAK,KAAK;YAAE,OAAM;QAC9C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;QAChC,wBAAwB;QACxB,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,+CAA+C;IACjD,CAAC;IAED,4EAA4E;IAC5E,wCAAwC;IACxC,4EAA4E;IAE5E,iDAAiD;IAC1C,iBAAiB,CAA8B;IAEtD,kCAAkC;IAC1B,eAAe,GAAkB,IAAI,CAAA;IAC7C,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IACD,IAAI,cAAc,CAAC,KAAoB;QACrC,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK;YAAE,OAAM;QAC1C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAA;QAE5B,kDAAkD;QAClD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAA;YAC/D,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACrC,kBAAkB,CAAC,QAAQ,CAAC;oBAC1B,aAAa,EAAE,IAAI,CAAC,YAAY;oBAChC,cAAc,EAAE,KAAK;iBACtB,CAAC,CAAA;gBACF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IAC5B,qBAAqB,CAAC,KAAa;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,CAAA;QACrE,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,CAAA;QACnC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,4EAA4E;IAC5E,gCAAgC;IAChC,4EAA4E;IAE5E,4DAA4D;IACpD,gBAAgB,GAAG,KAAK,CAAA;IAChC,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,gBAAgB,CAAA;IAC9B,CAAC;IACD,IAAI,eAAe,CAAC,KAAc;QAChC,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK;YAAE,OAAM;QAC3C,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;QAC7B,kBAAkB,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IAED,oEAAoE;IAC5D,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,kBAAkB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QACD,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,CAAA;QAC7E,kBAAkB,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;IAC1E,CAAC;IAED,YAAY,GAAkB,EAAE,OAA0B;QACxD,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAA;QAEnD,8FAA8F;QAC9F,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,GAAG,EAAE;YAC7C,WAAW,EAAE,WAAW;YACxB,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,MAAM;YACb,WAAW,EAAE;gBACX,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;gBACpC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;aACvC;SACF,CAAC,CAAA;QACF,IAAI,CAAC,WAAW,CAAC,eAAe,GAAG,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAC1D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;QAExB,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,CAAC,GAAG,EAAE;YAC5C,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,QAAQ;SACxB,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE;YACxC,OAAO,EAAE,SAAS;SACnB,CAAC,CAAA;QAEF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACzB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAE1B,8EAA8E;QAC9E,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE;YACvB,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAClE,CAAC,CAAA;QAED,yDAAyD;QACzD,+DAA+D;IACjE,CAAC;IAED,4EAA4E;IAC5E,2CAA2C;IAC3C,4EAA4E;IAE5E,GAAG,CAAC,KAAiB,EAAE,KAAc;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACzC,CAAC;IAED,YAAY,CAAC,KAAc,EAAE,MAAgB;QAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,4EAA4E;IAC5E,yDAAyD;IACzD,4EAA4E;IAE5E,YAAY,CAAC,IAAqC;QAChD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,eAAe,CAAC,OAA2C;QACzD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,iBAAiB,CAAC,SAA+C;QAC/D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E,cAAc,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;YAAE,OAAM;QACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;QACxB,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAEO,QAAQ;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;QACnC,IAAI,YAAY,GAAG,CAAC,CAAA;QAEpB,6CAA6C;QAC7C,8EAA8E;QAC9E,kFAAkF;QAClF,MAAM,UAAU,GAA8B,EAAE,CAAA;QAChD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;YACzD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;YACtB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACjD,gDAAgD;YAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAA;YAC/D,CAAC;QACH,CAAC;QAED,iDAAiD;QACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;YACxE,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACjE,OAAO,CAAC,OAAO,GAAG,eAAe,CAAA;QACnC,CAAC;QAED,qCAAqC;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAA;QACvD,IAAI,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1F,6CAA6C;QAC7C,0EAA0E;QAC1E,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,CAAC,CAAA;YAC1E,IAAI,UAAU,IAAI,UAAU,CAAC,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjD,gBAAgB,GAAG,UAAU,CAAC,YAAY,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,mEAAmE;QACnE,MAAM,kBAAkB,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;QAClE,kBAAkB,CAAC,QAAQ,CAAC;YAC1B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM;YAC3B,aAAa,EAAE,kBAAkB;YACjC,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,UAAU;SACX,CAAC,CAAA;QAEF,sDAAsD;QACtD,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAEtE,2FAA2F;QAC3F,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IAEO,SAAS,CAAC,IAAqC,EAAE,KAAa;QACpE,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAA;QAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC1C,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,KAAK,IAAI,GAAG,CAAA;QACd,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,KAAK,IAAI,GAAG,CAAA;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,4EAA4E;IAC5E,6BAA6B;IAC7B,4EAA4E;IAEpE,WAAW,CAAC,IAAgB;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,KAAK,IAAI,CAAC,SAAS,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACnD,OAAO,IAAI,CAAA;YACb,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,WAAW;QACjB,6CAA6C;QAC7C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACzC,CAAC;IAGO,gBAAgB,CAAC,YAAoB,EAAE,UAAkB,EAAE,WAAmB;QACpF,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,WAAW;YACnC,CAAC,CAAC,GAAG,YAAY,OAAO,UAAU,wBAAwB,WAAW,GAAG;YACxE,CAAC,CAAC,GAAG,YAAY,OAAO,UAAU,QAAQ,CAAA;IAC9C,CAAC;IAED,4EAA4E;IAC5E,uCAAuC;IACvC,4EAA4E;IAE5E,aAAa,CAAC,KAAa;QACzB,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAA;QACrE,IAAI,YAAY,KAAK,CAAC;YAAE,OAAM;QAE9B,MAAM,QAAQ,GAAG,CAAC,aAAa,GAAG,KAAK,GAAG,YAAY,CAAC,GAAG,YAAY,CAAA;QACtE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC5B,mCAAmC;QACnC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;QACpC,+BAA+B;QAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAA;IAC5B,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,CAAA;QACrE,IAAI,CAAC,IAAI;YAAE,OAAM;QAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAA;QAE5D,MAAM,SAAS,GAAG,KAAK,GAAG,UAAU,CAAA;QACpC,MAAM,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;QAClE,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAA;IACzD,CAAC;IAED,gBAAgB;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,CAAA;QAC7E,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAA;IACpB,CAAC;IAED,iDAAiD;IACjD,oBAAoB;QAClB,MAAM,EAAE,aAAa,EAAE,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAA;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,CAAA;QAC7E,OAAO,IAAI,EAAE,SAAS,CAAA;IACxB,CAAC;IAED,4CAA4C;IAC5C,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAA;QACrC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU;YAChC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB;SAC7C,CAAA;IACH,CAAC;CACF;AAED,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,MAAM,CAAC;IACL,gBAAgB,EAAE,oBAAoB;IACtC,6BAA6B,EAAE,+BAA+B;IAC9D,gCAAgC,EAAE,kCAAkC;IACpE,mCAAmC,EAAE,oCAAoC;CAC1E,CAAC,CAAA;AAEF,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,6BAA6B;AAC7B,SAAS,YAAY,CAAC,EAAE,SAAS,EAA0B;IACzD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAA;IAE9B,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAA;YACjC,QAAQ,CAAC,QAAQ,CAAC;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC5C,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,4CAAoB,SAAS,IAAI,kBAAkB,IAAQ,EAC3D,eAAM,SAAS,EAAE,CAAC,mCAA2B,IACzC,CACP,CAAA;AACH,CAAC;AAiBD,SAAS,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAa;IAC9H,MAAM,OAAO,GAAG,MAAM,CAAuB,IAAI,CAAC,CAAA;IAClD,MAAM,OAAO,GAAG,YAAY,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,sCAAsC;IACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAC9D,MAAM,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IAC1D,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAC5D,2CAA2C;IAC3C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAA;IACxE,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;IAElE,sCAAsC;IACtC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAEzD,sBAAsB;IACtB,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAM;QACxC,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;QACxD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;QACzD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAA;QAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAA;YAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAA;YACjC,QAAQ,CAAC,QAAQ,CAAC;gBAChB,WAAW,EAAE;oBACX,GAAG,KAAK,CAAC,WAAW;oBACpB;wBACE,OAAO,EAAE,KAAC,YAAY,IAAC,SAAS,EAAE,iBAAiB,GAAI;wBACvD,QAAQ,EAAE,QAAQ;qBACnB;iBACF;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,2EAA2E;IAC3E,MAAM,WAAW,GAAG,CAClB,0BACE,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,CAAC,EACX,WAAW,EAAE,WAAW,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,aAE/B,QAAQ,EAER,YAAY,KAAK,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,CACvC,eAAK,OAAO,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACrC,yBAAO,aAAa,EAAE,KAAK,IAAI,mBAAmB,WAAW,GAAG,GAAQ,EACvE,aAAa,EAAE,WAAW,IAAI,yBAAO,aAAa,CAAC,WAAW,GAAQ,IACnE,CACP,IAEc,CAClB,CAAA;IAED,4EAA4E;IAC5E,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,CACL,eAAK,aAAa,EAAC,KAAK,EAAC,QAAQ,EAAE,CAAC,aAClC,cAAK,KAAK,EAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,YACpC,WAAW,GACR,EACN,eAAM,UAAU,EAAE,CAAC,uBAAU,EAC7B,cAAK,KAAK,EAAC,KAAK,EAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAE,CAAC,YACnD,iBAAiB,IAAI,eAAM,EAAE,EAAE,KAAK,CAAC,SAAS,oCAA4B,GACvE,IACF,CACP,CAAA;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC;AAgBD,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAiB;IACxF,MAAM,UAAU,GAAG,MAAM,CAAkC,IAAI,CAAC,CAAA;IAChE,MAAM,aAAa,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;IAChE,oEAAoE;IACpE,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;IAChF,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,uEAAuE;IACvE,MAAM,UAAU,GAAG,SAAS,EAAE,YAAY,KAAK,aAAa,CAAA;IAE5D,OAAO,CACL,uCACE,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,KAAK,EAChB,YAAY,EAAE,QAAQ,EACtB,MAAM,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACnD,UAAU,EAAE,CAAC,aAGb,eAAM,UAAU,EAAE,CAAC,YAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAQ,EACtD,eAAM,UAAU,EAAE,CAAC,YAAG,KAAK,GAAQ,EAClC,QAAQ,IAAI,gBAAM,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,kBAAI,QAAQ,IAAQ,IAC7C,CAC/B,CAAA;AACH,CAAC;AAWD,SAAS,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAoB;IAC9D,OAAO,CACL,0CAAgC,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,aAE/D,KAAK,IAAI,CACR,gBAAM,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,8BAC5C,KAAK,qBACJ,CACR,EACA,QAAQ,IACsB,CAClC,CAAA;AACH,CAAC;AAWD,SAAS,mBAAmB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAsB;IACrE,OAAO,4CAAmC,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,GAAI,CAAA;AAChG,CAAC;AAED,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAEhF,UAAU,CAAC,IAAI,GAAG,cAAc,CAAA;AAChC,UAAU,CAAC,OAAO,GAAG,iBAAiB,CAAA;AACtC,UAAU,CAAC,SAAS,GAAG,mBAAmB,CAAA;AAE1C,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE;IAC3E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC7E,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IAC3E,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE;IAC7E,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;CAClF,CAAA;AAED,MAAM,UAAU,GAAG;IACjB,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IACxF,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE;IAC3F,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE;IACtF,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE;CAC9E,CAAA;AAED,8EAA8E;AAC9E,SAAS,WAAW,CAAC,EAAE,QAAQ,EAAiC;IAC9D,OAAO,wBAAM,QAAQ,GAAO,CAAA;AAC9B,CAAC;AAED,SAAS,OAAO;IACd,iDAAiD;IACjD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACjE,MAAM,OAAO,GAAG,YAAY,EAAE,CAAA;IAC9B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IAExB,0EAA0E;IAC1E,4EAA4E;IAC5E,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,aAAa,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;YACjC,aAAa,CAAC,MAAM,CAAC,CAAA;QACvB,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,uDAAuD;IACvD,MAAM,YAAY,GAAG,CAAC,IAAyE,EAAE,EAAE,CAAC,CAClG,eAAK,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,2CAAmB,IAAI,CAAC,KAAK,IAAQ,EACrC,eAAM,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,YAAG,IAAI,CAAC,QAAQ,GAAQ,EAC/D,gBAAM,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,2BAAa,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAQ,EACpF,gBAAM,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,qBAAO,IAAI,CAAC,EAAE,IAAQ,IACzD,CACP,CAAA;IAED,OAAO,CACL,eAAK,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aACjD,eAAM,YAAY,EAAE,CAAC,yDAAiD,EACtE,gBAAM,EAAE,EAAE,KAAK,CAAC,SAAS,2BAAa,UAAU,IAAI,QAAQ,IAAQ,EACpE,eAAM,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,sEAEnC,EACP,MAAC,UAAU,IACT,WAAW,EAAC,iBAAiB,EAC7B,cAAc,EAAE,UAAU,EAC1B,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE;oBACxB,aAAa,CAAC,EAAE,CAAC,CAAA;gBACnB,CAAC,EACD,eAAe,EAAE,IAAI,aAErB,KAAC,UAAU,CAAC,SAAS,IAAC,KAAK,EAAC,eAAe,EAAC,WAAW,EAAC,6BAA6B,GAAG,EACxF,KAAC,UAAU,CAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,YAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACpB,KAAC,WAAW,cACV,KAAC,UAAU,CAAC,IAAI,IACd,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAC1B,QAAQ,EAAE,GAAG,EAAE;oCACb,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;gCAC1D,CAAC,GACD,IAVc,IAAI,CAAC,EAAE,CAWX,CACf,CAAC,GACiB,EACrB,KAAC,UAAU,CAAC,OAAO,IAAC,KAAK,EAAC,YAAY,YACnC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,KAAC,UAAU,CAAC,IAAI,IAEd,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAC1B,QAAQ,EAAE,GAAG,EAAE;gCACb,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;4BAC1D,CAAC,IARI,IAAI,CAAC,EAAE,CASZ,CACH,CAAC,GACiB,IACV,IACT,CACP,CAAA;AACH,CAAC;AAED,2DAA2D;AAC3D,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,kBAAkB,CAAC,QAAQ,CAAC;QAC1B,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,WAAW,EAAE,EAAE;QACf,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,KAAK;QACtB,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAA;IACF,mBAAmB,CAAC,KAAC,OAAO,KAAG,CAAC,CAAA;AAClC,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Custom Renderable List Example
3
+ *
4
+ * This example uses opentui's extend() to register custom renderables
5
+ * that handle filtering, navigation, and selection imperatively.
6
+ *
7
+ * Uses unified ItemState/SectionState model for simplified state management.
8
+ *
9
+ * ## How React Props Work with opentui Renderables
10
+ *
11
+ * React props are applied via direct property assignment, NOT just constructor:
12
+ *
13
+ * 1. `createInstance()` - constructor called (props passed in options)
14
+ * 2. `setInitialProperties()` - iterates props, does `instance[propKey] = propValue`
15
+ * 3. `commitUpdate()` - on re-render, applies changed props via `instance[propKey] = propValue`
16
+ *
17
+ * This means:
18
+ * - Props don't need to be read from constructor options - React sets them after
19
+ * - Simple props (just stored/read later) can be public fields
20
+ * - Props that need side effects on change require setters
21
+ * - Constructor should just create the renderable structure
22
+ *
23
+ * Example:
24
+ * ```typescript
25
+ * class MyRenderable extends BoxRenderable {
26
+ * // Simple prop - no setter needed, React assigns directly
27
+ * public myLabel = ''
28
+ *
29
+ * // Prop that needs action on change - use setter
30
+ * private _activeIndex = 0
31
+ * get activeIndex() { return this._activeIndex }
32
+ * set activeIndex(value: number) {
33
+ * if (this._activeIndex === value) return
34
+ * this._activeIndex = value
35
+ * this.updateHighlight() // side effect
36
+ * this.requestRender()
37
+ * }
38
+ * }
39
+ * ```
40
+ */
41
+ import React from 'react';
42
+ interface ListProps {
43
+ children?: React.ReactNode;
44
+ placeholder?: string;
45
+ defaultSearchQuery?: string;
46
+ }
47
+ declare function CustomList({ children, placeholder, defaultSearchQuery }: ListProps): React.ReactNode;
48
+ declare namespace CustomList {
49
+ var Item: typeof CustomListItem;
50
+ var Section: typeof CustomListSection;
51
+ var EmptyView: typeof CustomListEmptyView;
52
+ }
53
+ interface ListItemProps {
54
+ title: string;
55
+ subtitle?: string;
56
+ keywords?: string[];
57
+ onAction?: () => void;
58
+ }
59
+ declare function CustomListItem({ title, subtitle, keywords, onAction }: ListItemProps): React.ReactNode;
60
+ interface ListSectionProps {
61
+ title: string;
62
+ children?: React.ReactNode;
63
+ }
64
+ declare function CustomListSection({ title, children }: ListSectionProps): React.ReactNode;
65
+ interface ListEmptyViewProps {
66
+ title?: string;
67
+ description?: string;
68
+ }
69
+ declare function CustomListEmptyView({ title, description }: ListEmptyViewProps): React.ReactNode;
70
+ declare function Example(): React.ReactNode;
71
+ export { CustomList, CustomListItem, Example };
72
+ //# sourceMappingURL=custom-renderable-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-renderable-list.d.ts","sourceRoot":"","sources":["../../../src/examples/internal/custom-renderable-list.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAeH,OAAO,KAAiB,MAAM,OAAO,CAAA;AAqhBrC,UAAU,SAAS;IACjB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,iBAAS,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,EAAE,SAAS,mBA+B3E;kBA/BQ,UAAU;;;;;AAiCnB,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,iBAAS,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,aAAa,mBAS7E;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,iBAAS,iBAAiB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,mBAM/D;AAED,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,iBAAS,mBAAmB,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,kBAAkB,mBAOtE;AA8BD,iBAAS,OAAO,oBAmCf;AAMD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,544 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "@opentui/react/jsx-runtime";
2
+ /**
3
+ * Custom Renderable List Example
4
+ *
5
+ * This example uses opentui's extend() to register custom renderables
6
+ * that handle filtering, navigation, and selection imperatively.
7
+ *
8
+ * Uses unified ItemState/SectionState model for simplified state management.
9
+ *
10
+ * ## How React Props Work with opentui Renderables
11
+ *
12
+ * React props are applied via direct property assignment, NOT just constructor:
13
+ *
14
+ * 1. `createInstance()` - constructor called (props passed in options)
15
+ * 2. `setInitialProperties()` - iterates props, does `instance[propKey] = propValue`
16
+ * 3. `commitUpdate()` - on re-render, applies changed props via `instance[propKey] = propValue`
17
+ *
18
+ * This means:
19
+ * - Props don't need to be read from constructor options - React sets them after
20
+ * - Simple props (just stored/read later) can be public fields
21
+ * - Props that need side effects on change require setters
22
+ * - Constructor should just create the renderable structure
23
+ *
24
+ * Example:
25
+ * ```typescript
26
+ * class MyRenderable extends BoxRenderable {
27
+ * // Simple prop - no setter needed, React assigns directly
28
+ * public myLabel = ''
29
+ *
30
+ * // Prop that needs action on change - use setter
31
+ * private _activeIndex = 0
32
+ * get activeIndex() { return this._activeIndex }
33
+ * set activeIndex(value: number) {
34
+ * if (this._activeIndex === value) return
35
+ * this._activeIndex = value
36
+ * this.updateHighlight() // side effect
37
+ * this.requestRender()
38
+ * }
39
+ * }
40
+ * ```
41
+ */
42
+ import { BoxRenderable, TextRenderable, ScrollBoxRenderable, TextareaRenderable, } from '@opentui/core';
43
+ import { extend, useKeyboard } from '@opentui/react';
44
+ import { useIsInFocus } from 'termcast/src/internal/focus-context';
45
+ import { useStore } from 'termcast/src/state';
46
+ import { useRef } from 'react';
47
+ import { renderWithProviders } from '../../utils';
48
+ // ─────────────────────────────────────────────────────────────────────────────
49
+ // Renderables
50
+ // - Section/Item: self-rendering (create their own child TextRenderables)
51
+ // - EmptyView: data holder (height:0, parent creates emptyBox from its data)
52
+ // ─────────────────────────────────────────────────────────────────────────────
53
+ // Generic helper to find parent of specific type by traversing up
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ function findParent(node, type) {
56
+ let current = node.parent;
57
+ while (current) {
58
+ if (current instanceof type) {
59
+ return current;
60
+ }
61
+ current = current.parent;
62
+ }
63
+ return undefined;
64
+ }
65
+ class CustomListSectionRenderable extends BoxRenderable {
66
+ headerText;
67
+ parentList;
68
+ // Prop with setter - updates header text when changed
69
+ _sectionTitle = '';
70
+ get sectionTitle() { return this._sectionTitle; }
71
+ set sectionTitle(value) {
72
+ this._sectionTitle = value;
73
+ this.headerText.content = value ? `── ${value} ──` : '';
74
+ this.headerText.height = value ? 'auto' : 0;
75
+ this.headerText.paddingTop = value ? 1 : 0;
76
+ }
77
+ constructor(ctx, options) {
78
+ super(ctx, { ...options, flexDirection: 'column', width: '100%' });
79
+ // Create header - React will set sectionTitle prop after constructor
80
+ this.headerText = new TextRenderable(ctx, {
81
+ content: '',
82
+ paddingTop: 1,
83
+ paddingLeft: 1,
84
+ });
85
+ super.add(this.headerText);
86
+ // Register with parent list after being added to tree
87
+ this.onLifecyclePass = () => {
88
+ if (!this.parentList) {
89
+ this.parentList = findParent(this, CustomListRenderable);
90
+ this.parentList?.registerSection(this);
91
+ }
92
+ };
93
+ }
94
+ }
95
+ class CustomListEmptyViewRenderable extends BoxRenderable {
96
+ // Simple props - just stored, read by parent list. No setter needed.
97
+ emptyTitle = 'No items';
98
+ emptyDescription;
99
+ parentList;
100
+ constructor(ctx, options) {
101
+ super(ctx, { ...options, visible: false });
102
+ // React will set emptyTitle/emptyDescription props after constructor
103
+ // Self-register with parent list after being added to tree
104
+ this.onLifecyclePass = () => {
105
+ if (!this.parentList) {
106
+ this.parentList = findParent(this, CustomListRenderable);
107
+ this.parentList?.registerEmptyView(this);
108
+ }
109
+ };
110
+ }
111
+ }
112
+ class CustomListItemRenderable extends BoxRenderable {
113
+ // Simple props - just stored/read for filtering. No setter needed.
114
+ keywords;
115
+ onAction;
116
+ section;
117
+ isSelected = false;
118
+ indicatorText;
119
+ titleText;
120
+ subtitleText;
121
+ parentList;
122
+ // Prop with setter - updates title text when changed
123
+ _itemTitle = '';
124
+ get itemTitle() { return this._itemTitle; }
125
+ set itemTitle(value) {
126
+ this._itemTitle = value;
127
+ this.titleText.content = value;
128
+ }
129
+ // Prop with setter - updates subtitle text when changed
130
+ _itemSubtitle;
131
+ get itemSubtitle() { return this._itemSubtitle; }
132
+ set itemSubtitle(value) {
133
+ this._itemSubtitle = value;
134
+ this.subtitleText.content = value ? ` ${value}` : '';
135
+ }
136
+ constructor(ctx, options) {
137
+ super(ctx, { ...options, flexDirection: 'row', width: '100%' });
138
+ // Create text renderables - React will set itemTitle/itemSubtitle props after constructor
139
+ this.indicatorText = new TextRenderable(ctx, { content: ' ' });
140
+ this.titleText = new TextRenderable(ctx, { content: '' });
141
+ this.subtitleText = new TextRenderable(ctx, { content: '' });
142
+ super.add(this.indicatorText);
143
+ super.add(this.titleText);
144
+ super.add(this.subtitleText);
145
+ // Register with parent list after being added to tree
146
+ this.onLifecyclePass = () => {
147
+ if (!this.parentList) {
148
+ this.parentList = findParent(this, CustomListRenderable);
149
+ this.section = findParent(this, CustomListSectionRenderable);
150
+ this.parentList?.registerItem(this);
151
+ }
152
+ };
153
+ // Example: register click handler directly on renderable
154
+ this.onMouseDown = (event) => {
155
+ console.log('CustomListItemRenderable clicked:', this.itemTitle, event);
156
+ };
157
+ }
158
+ get selected() { return this.isSelected; }
159
+ set selected(value) {
160
+ if (this.isSelected !== value) {
161
+ this.isSelected = value;
162
+ this.backgroundColor = value ? '#0066cc' : 'transparent';
163
+ this.indicatorText.content = value ? '› ' : ' ';
164
+ }
165
+ }
166
+ }
167
+ // ─────────────────────────────────────────────────────────────────────────────
168
+ // CustomListRenderable
169
+ // ─────────────────────────────────────────────────────────────────────────────
170
+ class CustomListRenderable extends BoxRenderable {
171
+ emptyView;
172
+ selectedIndex = 0;
173
+ searchQuery = '';
174
+ // Registered items/sections (they register themselves)
175
+ registeredItems = new Set();
176
+ registeredSections = new Set();
177
+ // Display components
178
+ searchInput;
179
+ scrollBox;
180
+ statusText;
181
+ emptyBox;
182
+ // Prop with setter - updates search input placeholder
183
+ _placeholder = 'Search...';
184
+ get placeholder() { return this._placeholder; }
185
+ set placeholder(value) {
186
+ this._placeholder = value;
187
+ this.searchInput.placeholder = value;
188
+ }
189
+ // Prop with setter - updates search input text and triggers refilter
190
+ get defaultSearchQuery() { return this.searchQuery; }
191
+ set defaultSearchQuery(value) {
192
+ if (this.searchQuery === value)
193
+ return;
194
+ this.searchQuery = value;
195
+ this.searchInput.editBuffer?.setText(value);
196
+ this.dirty = true;
197
+ this.requestRender();
198
+ }
199
+ constructor(ctx, options) {
200
+ super(ctx, { ...options, flexDirection: 'column' });
201
+ // Create search input - React will set placeholder/defaultSearchQuery props after constructor
202
+ this.searchInput = new TextareaRenderable(ctx, {
203
+ placeholder: 'Search...',
204
+ height: 1,
205
+ width: '100%',
206
+ keyBindings: [
207
+ { name: 'return', action: 'submit' },
208
+ { name: 'linefeed', action: 'submit' },
209
+ ],
210
+ });
211
+ this.searchInput.onContentChange = () => {
212
+ const value = this.searchInput.editBuffer?.getText() || '';
213
+ this.setSearchQuery(value);
214
+ };
215
+ this.searchInput.focus();
216
+ this.scrollBox = new ScrollBoxRenderable(ctx, {
217
+ flexGrow: 1,
218
+ flexDirection: 'column',
219
+ });
220
+ this.statusText = new TextRenderable(ctx, {
221
+ content: '0 items',
222
+ });
223
+ super.add(this.searchInput);
224
+ super.add(this.scrollBox);
225
+ super.add(this.statusText);
226
+ // Example: register key handler directly on renderable (logs all key presses)
227
+ this.onKeyDown = (key) => {
228
+ console.log('CustomListRenderable received key:', key.name, key);
229
+ };
230
+ }
231
+ // ─────────────────────────────────────────────────────────────────────────
232
+ // Child Management
233
+ //
234
+ // All React children are redirected to scrollBox for proper scrolling.
235
+ // Children self-register with the list via onLifecyclePass callback:
236
+ //
237
+ // 1. React calls list.add(child) for sections/items/emptyView
238
+ // 2. We forward to scrollBox.add(child), which sets child.parent
239
+ // 3. opentui calls child.onLifecyclePass() after parent is set
240
+ // 4. Child traverses up via findParent() to find this list
241
+ // 5. Child calls registerItem/Section/EmptyView to add itself to sets
242
+ // 6. scheduleUpdate() debounces and triggers refilter/selection
243
+ //
244
+ // This avoids the list needing to traverse the tree to find children.
245
+ // Stale refs are cleaned lazily in getAllItems/Sections by checking
246
+ // if items are still connected to the tree via parent chain.
247
+ // ─────────────────────────────────────────────────────────────────────────
248
+ add(child, index) {
249
+ return this.scrollBox.add(child, index);
250
+ }
251
+ registerItem(item) {
252
+ this.registeredItems.add(item);
253
+ this.dirty = true;
254
+ this.requestRender();
255
+ }
256
+ registerSection(section) {
257
+ this.registeredSections.add(section);
258
+ this.dirty = true;
259
+ this.requestRender();
260
+ }
261
+ registerEmptyView(emptyView) {
262
+ this.emptyView = emptyView;
263
+ }
264
+ // Single dirty flag - checked in render() to run all updates
265
+ dirty = false;
266
+ render(buffer, deltaTime) {
267
+ if (this.dirty) {
268
+ this.dirty = false;
269
+ this.refilter();
270
+ this.updateEmptyState();
271
+ this.updateStatus();
272
+ // Select first visible item if none selected
273
+ const visibleItems = this.getVisibleItems();
274
+ if (visibleItems.length > 0 && !visibleItems.some(i => i.selected)) {
275
+ this.selectedIndex = 0;
276
+ visibleItems[0].selected = true;
277
+ }
278
+ }
279
+ super.render(buffer, deltaTime);
280
+ }
281
+ // ─────────────────────────────────────────────────────────────────────────
282
+ // Helpers - use registered sets, clean stale refs
283
+ // ─────────────────────────────────────────────────────────────────────────
284
+ // Check if a renderable is still connected to this list
285
+ isConnected(node) {
286
+ let current = node.parent;
287
+ while (current) {
288
+ if (current === this.scrollBox || current === this) {
289
+ return true;
290
+ }
291
+ current = current.parent;
292
+ }
293
+ return false;
294
+ }
295
+ getAllItems() {
296
+ // Clean stale refs (items no longer in tree)
297
+ for (const item of this.registeredItems) {
298
+ if (!this.isConnected(item)) {
299
+ this.registeredItems.delete(item);
300
+ }
301
+ }
302
+ return Array.from(this.registeredItems);
303
+ }
304
+ getVisibleItems() {
305
+ return this.getAllItems().filter(item => item.visible);
306
+ }
307
+ getAllSections() {
308
+ // Clean stale refs
309
+ for (const section of this.registeredSections) {
310
+ if (!this.isConnected(section)) {
311
+ this.registeredSections.delete(section);
312
+ }
313
+ }
314
+ return Array.from(this.registeredSections);
315
+ }
316
+ // ─────────────────────────────────────────────────────────────────────────
317
+ // Filtering
318
+ // ─────────────────────────────────────────────────────────────────────────
319
+ setSearchQuery(query) {
320
+ if (this.searchQuery === query)
321
+ return;
322
+ // Deselect current before query change
323
+ const oldVisible = this.getVisibleItems();
324
+ if (oldVisible[this.selectedIndex]) {
325
+ oldVisible[this.selectedIndex].selected = false;
326
+ }
327
+ this.searchQuery = query;
328
+ this.selectedIndex = 0; // Reset to first item on query change
329
+ this.dirty = true;
330
+ this.requestRender();
331
+ }
332
+ refilter() {
333
+ const query = this.searchQuery.toLowerCase();
334
+ const allItems = this.getAllItems();
335
+ const allSections = this.getAllSections();
336
+ // Fast path: no query means all visible
337
+ // We use the `visible` prop instead of conditional rendering to keep elements
338
+ // in the tree - this preserves registration order and indexes for navigation
339
+ if (!query) {
340
+ for (const item of allItems) {
341
+ item.visible = true;
342
+ }
343
+ for (const section of allSections) {
344
+ section.visible = true;
345
+ }
346
+ return;
347
+ }
348
+ // Update item visibility
349
+ for (const item of allItems) {
350
+ item.visible = this.scoreItem(item, query) > 0;
351
+ }
352
+ // Update section visibility
353
+ for (const section of allSections) {
354
+ const sectionItems = allItems.filter(item => item.section === section);
355
+ const hasVisibleItems = sectionItems.some(item => item.visible);
356
+ section.visible = hasVisibleItems;
357
+ }
358
+ // Clamp selection
359
+ const visibleCount = this.getVisibleItems().length;
360
+ this.selectedIndex = Math.min(Math.max(0, this.selectedIndex), Math.max(0, visibleCount - 1));
361
+ }
362
+ scoreItem(item, query) {
363
+ let score = 0;
364
+ const title = item.itemTitle.toLowerCase();
365
+ if (title.includes(query)) {
366
+ score += title.startsWith(query) ? 2 : 1;
367
+ }
368
+ if (item.itemSubtitle?.toLowerCase().includes(query)) {
369
+ score += 0.6;
370
+ }
371
+ for (const kw of item.keywords || []) {
372
+ if (kw.toLowerCase().includes(query)) {
373
+ score += 0.3;
374
+ }
375
+ }
376
+ return score;
377
+ }
378
+ // ─────────────────────────────────────────────────────────────────────────
379
+ // Display
380
+ // ─────────────────────────────────────────────────────────────────────────
381
+ updateStatus() {
382
+ const visibleCount = this.getVisibleItems().length;
383
+ const totalCount = this.getAllItems().length;
384
+ this.statusText.content = this.searchQuery
385
+ ? `${visibleCount} of ${totalCount} items • Searching: "${this.searchQuery}"`
386
+ : `${visibleCount} of ${totalCount} items`;
387
+ }
388
+ updateEmptyState() {
389
+ const showEmpty = this.getVisibleItems().length === 0;
390
+ if (showEmpty && !this.emptyBox) {
391
+ this.emptyBox = new BoxRenderable(this.ctx, { padding: 1, flexDirection: 'column' });
392
+ if (this.emptyView) {
393
+ this.emptyBox.add(new TextRenderable(this.ctx, { content: this.emptyView.emptyTitle }));
394
+ if (this.emptyView.emptyDescription) {
395
+ this.emptyBox.add(new TextRenderable(this.ctx, { content: this.emptyView.emptyDescription }));
396
+ }
397
+ }
398
+ else {
399
+ this.emptyBox.add(new TextRenderable(this.ctx, {
400
+ content: this.searchQuery ? `No results for "${this.searchQuery}"` : 'No items',
401
+ }));
402
+ }
403
+ this.scrollBox.add(this.emptyBox);
404
+ }
405
+ else if (!showEmpty && this.emptyBox) {
406
+ this.scrollBox.remove(this.emptyBox.id);
407
+ this.emptyBox = undefined;
408
+ }
409
+ }
410
+ // ─────────────────────────────────────────────────────────────────────────
411
+ // Navigation
412
+ // ─────────────────────────────────────────────────────────────────────────
413
+ moveSelection(delta) {
414
+ const visibleItems = this.getVisibleItems();
415
+ if (visibleItems.length === 0)
416
+ return;
417
+ let newIndex = this.selectedIndex + delta;
418
+ if (newIndex < 0)
419
+ newIndex = visibleItems.length - 1;
420
+ if (newIndex >= visibleItems.length)
421
+ newIndex = 0;
422
+ if (newIndex === this.selectedIndex)
423
+ return;
424
+ // O(1) update: just change 2 items' selected state
425
+ visibleItems[this.selectedIndex].selected = false;
426
+ visibleItems[newIndex].selected = true;
427
+ this.selectedIndex = newIndex;
428
+ this.scrollToSelected();
429
+ }
430
+ scrollToSelected() {
431
+ const visibleItems = this.getVisibleItems();
432
+ const item = visibleItems[this.selectedIndex];
433
+ if (!item)
434
+ return;
435
+ // Use item's position for scrolling
436
+ const itemY = item.y;
437
+ const scrollBoxY = this.scrollBox.content.y;
438
+ const viewportHeight = this.scrollBox.viewport?.height || 10;
439
+ const relativeY = itemY - scrollBoxY;
440
+ const targetScrollTop = relativeY - Math.floor(viewportHeight / 2);
441
+ this.scrollBox.scrollTop = Math.max(0, targetScrollTop);
442
+ }
443
+ activateSelected() {
444
+ const visibleItems = this.getVisibleItems();
445
+ visibleItems[this.selectedIndex]?.onAction?.();
446
+ }
447
+ getSelectedItem() {
448
+ return this.getVisibleItems()[this.selectedIndex];
449
+ }
450
+ }
451
+ // ─────────────────────────────────────────────────────────────────────────────
452
+ // Register with opentui
453
+ // ─────────────────────────────────────────────────────────────────────────────
454
+ extend({
455
+ 'custom-list': CustomListRenderable,
456
+ 'custom-list-item': CustomListItemRenderable,
457
+ 'custom-list-section': CustomListSectionRenderable,
458
+ 'custom-list-empty-view': CustomListEmptyViewRenderable,
459
+ });
460
+ // ─────────────────────────────────────────────────────────────────────────────
461
+ // React Components
462
+ // ─────────────────────────────────────────────────────────────────────────────
463
+ function ActionDialog({ itemTitle }) {
464
+ const inFocus = useIsInFocus();
465
+ useKeyboard((evt) => {
466
+ if (!inFocus)
467
+ return;
468
+ if (evt.name === 'escape') {
469
+ const state = useStore.getState();
470
+ useStore.setState({
471
+ dialogStack: state.dialogStack.slice(0, -1),
472
+ });
473
+ }
474
+ });
475
+ return (_jsxs("box", { flexDirection: "column", padding: 1, children: [_jsxs("text", { children: ["Actions for: ", itemTitle || 'No item selected'] }), _jsx("text", { marginTop: 1, children: "Press ESC to close" })] }));
476
+ }
477
+ function CustomList({ children, placeholder, defaultSearchQuery }) {
478
+ const listRef = useRef(null);
479
+ const inFocus = useIsInFocus();
480
+ useKeyboard((evt) => {
481
+ if (!inFocus || !listRef.current)
482
+ return;
483
+ if (evt.name === 'up')
484
+ listRef.current.moveSelection(-1);
485
+ if (evt.name === 'down')
486
+ listRef.current.moveSelection(1);
487
+ if (evt.name === 'return')
488
+ listRef.current.activateSelected();
489
+ if (evt.name === 'k' && evt.ctrl) {
490
+ const selectedItem = listRef.current.getSelectedItem();
491
+ const state = useStore.getState();
492
+ useStore.setState({
493
+ dialogStack: [
494
+ ...state.dialogStack,
495
+ {
496
+ element: _jsx(ActionDialog, { itemTitle: selectedItem?.itemTitle }),
497
+ position: 'center',
498
+ },
499
+ ],
500
+ });
501
+ }
502
+ });
503
+ return (_jsx("custom-list", { ref: listRef, flexGrow: 1, placeholder: placeholder, defaultSearchQuery: defaultSearchQuery, children: children }));
504
+ }
505
+ function CustomListItem({ title, subtitle, keywords, onAction }) {
506
+ return (_jsx("custom-list-item", { itemTitle: title, itemSubtitle: subtitle, keywords: keywords, onAction: onAction }));
507
+ }
508
+ function CustomListSection({ title, children }) {
509
+ return (_jsx("custom-list-section", { sectionTitle: title, children: children }));
510
+ }
511
+ function CustomListEmptyView({ title, description }) {
512
+ return (_jsx("custom-list-empty-view", { emptyTitle: title, emptyDescription: description }));
513
+ }
514
+ CustomList.Item = CustomListItem;
515
+ CustomList.Section = CustomListSection;
516
+ CustomList.EmptyView = CustomListEmptyView;
517
+ // ─────────────────────────────────────────────────────────────────────────────
518
+ // Example
519
+ // ─────────────────────────────────────────────────────────────────────────────
520
+ const FRUITS = [
521
+ { title: 'Apple', subtitle: 'A red fruit', keywords: ['red'] },
522
+ { title: 'Banana', subtitle: 'A yellow fruit', keywords: ['yellow'] },
523
+ { title: 'Date', subtitle: 'A sweet fruit', keywords: ['sweet'] },
524
+ { title: 'Fig', subtitle: 'A small fruit', keywords: ['small'] },
525
+ { title: 'Grape', subtitle: 'A vine fruit', keywords: ['vine'] },
526
+ { title: 'Lemon', subtitle: 'A citrus fruit', keywords: ['citrus'] },
527
+ ];
528
+ const VEGETABLES = [
529
+ { title: 'Carrot', subtitle: 'An orange vegetable', keywords: ['orange'] },
530
+ { title: 'Eggplant', subtitle: 'A purple vegetable', keywords: ['purple'] },
531
+ { title: 'Jalapeno', subtitle: 'A spicy pepper', keywords: ['spicy'] },
532
+ { title: 'Kale', subtitle: 'A superfood', keywords: ['healthy'] },
533
+ ];
534
+ function ItemWrapper({ children }) {
535
+ return _jsx("box", { children: children });
536
+ }
537
+ function Example() {
538
+ return (_jsxs("box", { flexDirection: "column", padding: 1, flexGrow: 1, children: [_jsx("text", { marginBottom: 1, children: "Custom Renderable List (using extend)" }), _jsxs(CustomList, { placeholder: "Search items...", children: [_jsx(CustomList.EmptyView, { title: "Nothing found", description: "Try a different search term" }), _jsx(CustomList.Section, { title: "Fruits", children: FRUITS.map((item) => (_jsx(ItemWrapper, { children: _jsx(CustomList.Item, { title: item.title, subtitle: item.subtitle, keywords: item.keywords, onAction: () => console.log(`Selected: ${item.title}`) }) }, item.title))) }), _jsx(CustomList.Section, { title: "Vegetables", children: VEGETABLES.map((item) => (_jsx(CustomList.Item, { title: item.title, subtitle: item.subtitle, keywords: item.keywords, onAction: () => console.log(`Selected: ${item.title}`) }, item.title))) })] })] }));
539
+ }
540
+ if (import.meta.main) {
541
+ renderWithProviders(_jsx(Example, {}));
542
+ }
543
+ export { CustomList, CustomListItem, Example };
544
+ //# sourceMappingURL=custom-renderable-list.js.map