@rezi-ui/core 0.1.0-alpha.60 → 0.1.0-alpha.63

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 (345) hide show
  1. package/dist/app/createApp/breadcrumbs.d.ts +38 -0
  2. package/dist/app/createApp/breadcrumbs.d.ts.map +1 -0
  3. package/dist/app/createApp/breadcrumbs.js +65 -0
  4. package/dist/app/createApp/breadcrumbs.js.map +1 -0
  5. package/dist/app/createApp/config.d.ts +25 -0
  6. package/dist/app/createApp/config.d.ts.map +1 -0
  7. package/dist/app/createApp/config.js +130 -0
  8. package/dist/app/createApp/config.js.map +1 -0
  9. package/dist/app/createApp/eventLoop.d.ts +95 -0
  10. package/dist/app/createApp/eventLoop.d.ts.map +1 -0
  11. package/dist/app/createApp/eventLoop.js +384 -0
  12. package/dist/app/createApp/eventLoop.js.map +1 -0
  13. package/dist/app/createApp/guards.d.ts +21 -0
  14. package/dist/app/createApp/guards.d.ts.map +1 -0
  15. package/dist/app/createApp/guards.js +54 -0
  16. package/dist/app/createApp/guards.js.map +1 -0
  17. package/dist/app/createApp/keybindings.d.ts +28 -0
  18. package/dist/app/createApp/keybindings.d.ts.map +1 -0
  19. package/dist/app/createApp/keybindings.js +113 -0
  20. package/dist/app/createApp/keybindings.js.map +1 -0
  21. package/dist/app/createApp/renderLoop.d.ts +64 -0
  22. package/dist/app/createApp/renderLoop.d.ts.map +1 -0
  23. package/dist/app/createApp/renderLoop.js +305 -0
  24. package/dist/app/createApp/renderLoop.js.map +1 -0
  25. package/dist/app/createApp.d.ts +3 -39
  26. package/dist/app/createApp.d.ts.map +1 -1
  27. package/dist/app/createApp.js +403 -1205
  28. package/dist/app/createApp.js.map +1 -1
  29. package/dist/app/widgetRenderer/constraintState.d.ts +98 -0
  30. package/dist/app/widgetRenderer/constraintState.d.ts.map +1 -0
  31. package/dist/app/widgetRenderer/constraintState.js +563 -0
  32. package/dist/app/widgetRenderer/constraintState.js.map +1 -0
  33. package/dist/app/widgetRenderer/fileNodeCache.d.ts +2 -0
  34. package/dist/app/widgetRenderer/fileNodeCache.d.ts.map +1 -1
  35. package/dist/app/widgetRenderer/fileNodeCache.js +31 -0
  36. package/dist/app/widgetRenderer/fileNodeCache.js.map +1 -1
  37. package/dist/app/widgetRenderer/filePickerRouting.d.ts +12 -1
  38. package/dist/app/widgetRenderer/filePickerRouting.d.ts.map +1 -1
  39. package/dist/app/widgetRenderer/filePickerRouting.js +63 -14
  40. package/dist/app/widgetRenderer/filePickerRouting.js.map +1 -1
  41. package/dist/app/widgetRenderer/focusState.d.ts +46 -0
  42. package/dist/app/widgetRenderer/focusState.d.ts.map +1 -0
  43. package/dist/app/widgetRenderer/focusState.js +122 -0
  44. package/dist/app/widgetRenderer/focusState.js.map +1 -0
  45. package/dist/app/widgetRenderer/keyboardRouting.d.ts.map +1 -1
  46. package/dist/app/widgetRenderer/keyboardRouting.js.map +1 -1
  47. package/dist/app/widgetRenderer/mouseRouting.d.ts +5 -0
  48. package/dist/app/widgetRenderer/mouseRouting.d.ts.map +1 -1
  49. package/dist/app/widgetRenderer/mouseRouting.js +78 -8
  50. package/dist/app/widgetRenderer/mouseRouting.js.map +1 -1
  51. package/dist/app/widgetRenderer/overlayShortcuts.d.ts.map +1 -1
  52. package/dist/app/widgetRenderer/overlayShortcuts.js +14 -4
  53. package/dist/app/widgetRenderer/overlayShortcuts.js.map +1 -1
  54. package/dist/app/widgetRenderer/overlayState.d.ts +198 -0
  55. package/dist/app/widgetRenderer/overlayState.d.ts.map +1 -0
  56. package/dist/app/widgetRenderer/overlayState.js +590 -0
  57. package/dist/app/widgetRenderer/overlayState.js.map +1 -0
  58. package/dist/app/widgetRenderer/routeEngineEvent.d.ts +189 -0
  59. package/dist/app/widgetRenderer/routeEngineEvent.d.ts.map +1 -0
  60. package/dist/app/widgetRenderer/routeEngineEvent.js +527 -0
  61. package/dist/app/widgetRenderer/routeEngineEvent.js.map +1 -0
  62. package/dist/app/widgetRenderer.d.ts +2 -1
  63. package/dist/app/widgetRenderer.d.ts.map +1 -1
  64. package/dist/app/widgetRenderer.js +334 -1707
  65. package/dist/app/widgetRenderer.js.map +1 -1
  66. package/dist/forms/internal/arrayState.d.ts +35 -0
  67. package/dist/forms/internal/arrayState.d.ts.map +1 -0
  68. package/dist/forms/internal/arrayState.js +238 -0
  69. package/dist/forms/internal/arrayState.js.map +1 -0
  70. package/dist/forms/internal/bindings.d.ts +46 -0
  71. package/dist/forms/internal/bindings.d.ts.map +1 -0
  72. package/dist/forms/internal/bindings.js +161 -0
  73. package/dist/forms/internal/bindings.js.map +1 -0
  74. package/dist/forms/internal/dev.d.ts +4 -0
  75. package/dist/forms/internal/dev.d.ts.map +1 -0
  76. package/dist/forms/internal/dev.js +21 -0
  77. package/dist/forms/internal/dev.js.map +1 -0
  78. package/dist/forms/internal/state.d.ts +52 -0
  79. package/dist/forms/internal/state.d.ts.map +1 -0
  80. package/dist/forms/internal/state.js +240 -0
  81. package/dist/forms/internal/state.js.map +1 -0
  82. package/dist/forms/internal/submit.d.ts +43 -0
  83. package/dist/forms/internal/submit.d.ts.map +1 -0
  84. package/dist/forms/internal/submit.js +165 -0
  85. package/dist/forms/internal/submit.js.map +1 -0
  86. package/dist/forms/internal/wizard.d.ts +53 -0
  87. package/dist/forms/internal/wizard.d.ts.map +1 -0
  88. package/dist/forms/internal/wizard.js +311 -0
  89. package/dist/forms/internal/wizard.js.map +1 -0
  90. package/dist/forms/useForm.d.ts.map +1 -1
  91. package/dist/forms/useForm.js +90 -1117
  92. package/dist/forms/useForm.js.map +1 -1
  93. package/dist/index.d.ts +1 -1
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -1
  96. package/dist/index.js.map +1 -1
  97. package/dist/keybindings/manager.d.ts.map +1 -1
  98. package/dist/keybindings/manager.js.map +1 -1
  99. package/dist/keybindings/parser.d.ts.map +1 -1
  100. package/dist/keybindings/parser.js +10 -5
  101. package/dist/keybindings/parser.js.map +1 -1
  102. package/dist/layout/dropdownGeometry.d.ts +8 -0
  103. package/dist/layout/dropdownGeometry.d.ts.map +1 -1
  104. package/dist/layout/dropdownGeometry.js +40 -0
  105. package/dist/layout/dropdownGeometry.js.map +1 -1
  106. package/dist/layout/engine/layoutEngine.js +1 -1
  107. package/dist/layout/engine/layoutEngine.js.map +1 -1
  108. package/dist/layout/kinds/overlays.d.ts.map +1 -1
  109. package/dist/layout/kinds/stack.d.ts +1 -3
  110. package/dist/layout/kinds/stack.d.ts.map +1 -1
  111. package/dist/layout/kinds/stack.js +11 -1523
  112. package/dist/layout/kinds/stack.js.map +1 -1
  113. package/dist/layout/kinds/stackParts/axis.d.ts +32 -0
  114. package/dist/layout/kinds/stackParts/axis.d.ts.map +1 -0
  115. package/dist/layout/kinds/stackParts/axis.js +61 -0
  116. package/dist/layout/kinds/stackParts/axis.js.map +1 -0
  117. package/dist/layout/kinds/stackParts/constraintPlan.d.ts +18 -0
  118. package/dist/layout/kinds/stackParts/constraintPlan.d.ts.map +1 -0
  119. package/dist/layout/kinds/stackParts/constraintPlan.js +434 -0
  120. package/dist/layout/kinds/stackParts/constraintPlan.js.map +1 -0
  121. package/dist/layout/kinds/stackParts/layout.d.ts +6 -0
  122. package/dist/layout/kinds/stackParts/layout.d.ts.map +1 -0
  123. package/dist/layout/kinds/stackParts/layout.js +376 -0
  124. package/dist/layout/kinds/stackParts/layout.js.map +1 -0
  125. package/dist/layout/kinds/stackParts/measure.d.ts +6 -0
  126. package/dist/layout/kinds/stackParts/measure.d.ts.map +1 -0
  127. package/dist/layout/kinds/stackParts/measure.js +212 -0
  128. package/dist/layout/kinds/stackParts/measure.js.map +1 -0
  129. package/dist/layout/kinds/stackParts/shared.d.ts +31 -0
  130. package/dist/layout/kinds/stackParts/shared.d.ts.map +1 -0
  131. package/dist/layout/kinds/stackParts/shared.js +94 -0
  132. package/dist/layout/kinds/stackParts/shared.js.map +1 -0
  133. package/dist/layout/kinds/stackParts/wrap.d.ts +26 -0
  134. package/dist/layout/kinds/stackParts/wrap.d.ts.map +1 -0
  135. package/dist/layout/kinds/stackParts/wrap.js +374 -0
  136. package/dist/layout/kinds/stackParts/wrap.js.map +1 -0
  137. package/dist/layout/validate/interactive.d.ts +106 -0
  138. package/dist/layout/validate/interactive.d.ts.map +1 -0
  139. package/dist/layout/validate/interactive.js +430 -0
  140. package/dist/layout/validate/interactive.js.map +1 -0
  141. package/dist/layout/validate/layoutConstraints.d.ts +51 -0
  142. package/dist/layout/validate/layoutConstraints.d.ts.map +1 -0
  143. package/dist/layout/validate/layoutConstraints.js +100 -0
  144. package/dist/layout/validate/layoutConstraints.js.map +1 -0
  145. package/dist/layout/validate/primitives.d.ts +31 -0
  146. package/dist/layout/validate/primitives.d.ts.map +1 -0
  147. package/dist/layout/validate/primitives.js +299 -0
  148. package/dist/layout/validate/primitives.js.map +1 -0
  149. package/dist/layout/validate/shared.d.ts +23 -0
  150. package/dist/layout/validate/shared.d.ts.map +1 -0
  151. package/dist/layout/validate/shared.js +32 -0
  152. package/dist/layout/validate/shared.js.map +1 -0
  153. package/dist/layout/validate/spacing.d.ts +21 -0
  154. package/dist/layout/validate/spacing.d.ts.map +1 -0
  155. package/dist/layout/validate/spacing.js +33 -0
  156. package/dist/layout/validate/spacing.js.map +1 -0
  157. package/dist/layout/validateProps.d.ts +5 -159
  158. package/dist/layout/validateProps.d.ts.map +1 -1
  159. package/dist/layout/validateProps.js +1 -832
  160. package/dist/layout/validateProps.js.map +1 -1
  161. package/dist/pipeline.js +1 -1
  162. package/dist/pipeline.js.map +1 -1
  163. package/dist/renderer/renderToDrawlist/renderTree.d.ts +1 -1
  164. package/dist/renderer/renderToDrawlist/renderTree.d.ts.map +1 -1
  165. package/dist/renderer/renderToDrawlist/renderTree.js +3 -3
  166. package/dist/renderer/renderToDrawlist/renderTree.js.map +1 -1
  167. package/dist/renderer/renderToDrawlist/types.d.ts +2 -0
  168. package/dist/renderer/renderToDrawlist/types.d.ts.map +1 -1
  169. package/dist/renderer/renderToDrawlist/widgets/containers.d.ts.map +1 -1
  170. package/dist/renderer/renderToDrawlist/widgets/containers.js +1 -1
  171. package/dist/renderer/renderToDrawlist/widgets/containers.js.map +1 -1
  172. package/dist/renderer/renderToDrawlist/widgets/files.d.ts +2 -1
  173. package/dist/renderer/renderToDrawlist/widgets/files.d.ts.map +1 -1
  174. package/dist/renderer/renderToDrawlist/widgets/files.js +30 -3
  175. package/dist/renderer/renderToDrawlist/widgets/files.js.map +1 -1
  176. package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts +1 -1
  177. package/dist/renderer/renderToDrawlist/widgets/overlays.d.ts.map +1 -1
  178. package/dist/renderer/renderToDrawlist/widgets/overlays.js +26 -6
  179. package/dist/renderer/renderToDrawlist/widgets/overlays.js.map +1 -1
  180. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.d.ts.map +1 -1
  181. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.js +52 -18
  182. package/dist/renderer/renderToDrawlist/widgets/renderFormWidgets.js.map +1 -1
  183. package/dist/renderer/renderToDrawlist.d.ts +0 -8
  184. package/dist/renderer/renderToDrawlist.d.ts.map +1 -1
  185. package/dist/renderer/renderToDrawlist.js +1 -9
  186. package/dist/renderer/renderToDrawlist.js.map +1 -1
  187. package/dist/runtime/commit/composite.d.ts +11 -0
  188. package/dist/runtime/commit/composite.d.ts.map +1 -0
  189. package/dist/runtime/commit/composite.js +238 -0
  190. package/dist/runtime/commit/composite.js.map +1 -0
  191. package/dist/runtime/commit/container.d.ts +7 -0
  192. package/dist/runtime/commit/container.d.ts.map +1 -0
  193. package/dist/runtime/commit/container.js +350 -0
  194. package/dist/runtime/commit/container.js.map +1 -0
  195. package/dist/runtime/commit/equality.d.ts +20 -0
  196. package/dist/runtime/commit/equality.d.ts.map +1 -0
  197. package/dist/runtime/commit/equality.js +436 -0
  198. package/dist/runtime/commit/equality.js.map +1 -0
  199. package/dist/runtime/commit/errorBoundary.d.ts +7 -0
  200. package/dist/runtime/commit/errorBoundary.d.ts.map +1 -0
  201. package/dist/runtime/commit/errorBoundary.js +53 -0
  202. package/dist/runtime/commit/errorBoundary.js.map +1 -0
  203. package/dist/runtime/commit/shared.d.ts +138 -0
  204. package/dist/runtime/commit/shared.d.ts.map +1 -0
  205. package/dist/runtime/commit/shared.js +11 -0
  206. package/dist/runtime/commit/shared.js.map +1 -0
  207. package/dist/runtime/commit/transitions.d.ts +9 -0
  208. package/dist/runtime/commit/transitions.d.ts.map +1 -0
  209. package/dist/runtime/commit/transitions.js +93 -0
  210. package/dist/runtime/commit/transitions.js.map +1 -0
  211. package/dist/runtime/commit/validation.d.ts +16 -0
  212. package/dist/runtime/commit/validation.d.ts.map +1 -0
  213. package/dist/runtime/commit/validation.js +157 -0
  214. package/dist/runtime/commit/validation.js.map +1 -0
  215. package/dist/runtime/commit.d.ts +7 -117
  216. package/dist/runtime/commit.d.ts.map +1 -1
  217. package/dist/runtime/commit.js +13 -1394
  218. package/dist/runtime/commit.js.map +1 -1
  219. package/dist/runtime/localState.d.ts +4 -0
  220. package/dist/runtime/localState.d.ts.map +1 -1
  221. package/dist/runtime/localState.js.map +1 -1
  222. package/dist/runtime/widgetMeta/collector.d.ts +77 -0
  223. package/dist/runtime/widgetMeta/collector.d.ts.map +1 -0
  224. package/dist/runtime/widgetMeta/collector.js +293 -0
  225. package/dist/runtime/widgetMeta/collector.js.map +1 -0
  226. package/dist/runtime/widgetMeta/focusContainers.d.ts +44 -0
  227. package/dist/runtime/widgetMeta/focusContainers.d.ts.map +1 -0
  228. package/dist/runtime/widgetMeta/focusContainers.js +190 -0
  229. package/dist/runtime/widgetMeta/focusContainers.js.map +1 -0
  230. package/dist/runtime/widgetMeta/focusInfo.d.ts +19 -0
  231. package/dist/runtime/widgetMeta/focusInfo.d.ts.map +1 -0
  232. package/dist/runtime/widgetMeta/focusInfo.js +172 -0
  233. package/dist/runtime/widgetMeta/focusInfo.js.map +1 -0
  234. package/dist/runtime/widgetMeta/helpers.d.ts +47 -0
  235. package/dist/runtime/widgetMeta/helpers.d.ts.map +1 -0
  236. package/dist/runtime/widgetMeta/helpers.js +182 -0
  237. package/dist/runtime/widgetMeta/helpers.js.map +1 -0
  238. package/dist/runtime/widgetMeta.d.ts +12 -175
  239. package/dist/runtime/widgetMeta.d.ts.map +1 -1
  240. package/dist/runtime/widgetMeta.js +6 -847
  241. package/dist/runtime/widgetMeta.js.map +1 -1
  242. package/dist/ui/capabilities.d.ts.map +1 -1
  243. package/dist/ui/designTokens.d.ts.map +1 -1
  244. package/dist/widgets/accordion.d.ts.map +1 -1
  245. package/dist/widgets/accordion.js +8 -13
  246. package/dist/widgets/accordion.js.map +1 -1
  247. package/dist/widgets/factories/advanced.d.ts +20 -0
  248. package/dist/widgets/factories/advanced.d.ts.map +1 -0
  249. package/dist/widgets/factories/advanced.js +75 -0
  250. package/dist/widgets/factories/advanced.js.map +1 -0
  251. package/dist/widgets/factories/basic.d.ts +14 -0
  252. package/dist/widgets/factories/basic.d.ts.map +1 -0
  253. package/dist/widgets/factories/basic.js +44 -0
  254. package/dist/widgets/factories/basic.js.map +1 -0
  255. package/dist/widgets/factories/feedback.d.ts +20 -0
  256. package/dist/widgets/factories/feedback.d.ts.map +1 -0
  257. package/dist/widgets/factories/feedback.js +102 -0
  258. package/dist/widgets/factories/feedback.js.map +1 -0
  259. package/dist/widgets/factories/helpers.d.ts +41 -0
  260. package/dist/widgets/factories/helpers.d.ts.map +1 -0
  261. package/dist/widgets/factories/helpers.js +72 -0
  262. package/dist/widgets/factories/helpers.js.map +1 -0
  263. package/dist/widgets/factories/interactive.d.ts +15 -0
  264. package/dist/widgets/factories/interactive.d.ts.map +1 -0
  265. package/dist/widgets/factories/interactive.js +46 -0
  266. package/dist/widgets/factories/interactive.js.map +1 -0
  267. package/dist/widgets/factories/layoutShell.d.ts +22 -0
  268. package/dist/widgets/factories/layoutShell.d.ts.map +1 -0
  269. package/dist/widgets/factories/layoutShell.js +190 -0
  270. package/dist/widgets/factories/layoutShell.js.map +1 -0
  271. package/dist/widgets/factories/media.d.ts +14 -0
  272. package/dist/widgets/factories/media.d.ts.map +1 -0
  273. package/dist/widgets/factories/media.js +25 -0
  274. package/dist/widgets/factories/media.js.map +1 -0
  275. package/dist/widgets/factories/navigation.d.ts +10 -0
  276. package/dist/widgets/factories/navigation.d.ts.map +1 -0
  277. package/dist/widgets/factories/navigation.js +24 -0
  278. package/dist/widgets/factories/navigation.js.map +1 -0
  279. package/dist/widgets/field.d.ts +6 -1
  280. package/dist/widgets/field.d.ts.map +1 -1
  281. package/dist/widgets/field.js +8 -2
  282. package/dist/widgets/field.js.map +1 -1
  283. package/dist/widgets/filePicker.d.ts +5 -0
  284. package/dist/widgets/filePicker.d.ts.map +1 -0
  285. package/dist/widgets/filePicker.js +136 -0
  286. package/dist/widgets/filePicker.js.map +1 -0
  287. package/dist/widgets/protocol.d.ts +0 -6
  288. package/dist/widgets/protocol.d.ts.map +1 -1
  289. package/dist/widgets/protocol.js +0 -6
  290. package/dist/widgets/protocol.js.map +1 -1
  291. package/dist/widgets/select.js +1 -1
  292. package/dist/widgets/select.js.map +1 -1
  293. package/dist/widgets/splitPane.d.ts.map +1 -1
  294. package/dist/widgets/splitPane.js.map +1 -1
  295. package/dist/widgets/table.d.ts.map +1 -1
  296. package/dist/widgets/table.js +43 -1
  297. package/dist/widgets/table.js.map +1 -1
  298. package/dist/widgets/tree.d.ts.map +1 -1
  299. package/dist/widgets/types/advanced.d.ts +611 -0
  300. package/dist/widgets/types/advanced.d.ts.map +1 -0
  301. package/dist/widgets/types/advanced.js +2 -0
  302. package/dist/widgets/types/advanced.js.map +1 -0
  303. package/dist/widgets/types/base.d.ts +933 -0
  304. package/dist/widgets/types/base.d.ts.map +1 -0
  305. package/dist/widgets/types/base.js +2 -0
  306. package/dist/widgets/types/base.js.map +1 -0
  307. package/dist/widgets/types/forms.d.ts +136 -0
  308. package/dist/widgets/types/forms.d.ts.map +1 -0
  309. package/dist/widgets/types/forms.js +2 -0
  310. package/dist/widgets/types/forms.js.map +1 -0
  311. package/dist/widgets/types/navigation.d.ts +83 -0
  312. package/dist/widgets/types/navigation.d.ts.map +1 -0
  313. package/dist/widgets/types/navigation.js +2 -0
  314. package/dist/widgets/types/navigation.js.map +1 -0
  315. package/dist/widgets/types/overlaysShell.d.ts +223 -0
  316. package/dist/widgets/types/overlaysShell.d.ts.map +1 -0
  317. package/dist/widgets/types/overlaysShell.js +2 -0
  318. package/dist/widgets/types/overlaysShell.js.map +1 -0
  319. package/dist/widgets/types/table.d.ts +104 -0
  320. package/dist/widgets/types/table.d.ts.map +1 -0
  321. package/dist/widgets/types/table.js +2 -0
  322. package/dist/widgets/types/table.js.map +1 -0
  323. package/dist/widgets/types/tree.d.ts +64 -0
  324. package/dist/widgets/types/tree.d.ts.map +1 -0
  325. package/dist/widgets/types/tree.js +2 -0
  326. package/dist/widgets/types/tree.js.map +1 -0
  327. package/dist/widgets/types.d.ts +14 -2123
  328. package/dist/widgets/types.d.ts.map +1 -1
  329. package/dist/widgets/ui.d.ts +37 -843
  330. package/dist/widgets/ui.d.ts.map +1 -1
  331. package/dist/widgets/ui.js +37 -1262
  332. package/dist/widgets/ui.js.map +1 -1
  333. package/package.json +2 -2
  334. package/dist/constraints/aggregation.d.ts +0 -17
  335. package/dist/constraints/aggregation.d.ts.map +0 -1
  336. package/dist/constraints/aggregation.js +0 -59
  337. package/dist/constraints/aggregation.js.map +0 -1
  338. package/dist/renderer/renderToDrawlist/overflowCulling.d.ts +0 -3
  339. package/dist/renderer/renderToDrawlist/overflowCulling.d.ts.map +0 -1
  340. package/dist/renderer/renderToDrawlist/overflowCulling.js +0 -81
  341. package/dist/renderer/renderToDrawlist/overflowCulling.js.map +0 -1
  342. package/dist/widgets/tests/protocol.test.d.ts +0 -2
  343. package/dist/widgets/tests/protocol.test.d.ts.map +0 -1
  344. package/dist/widgets/tests/protocol.test.js +0 -120
  345. package/dist/widgets/tests/protocol.test.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ import type { FocusZoneNavigation } from "../../widgets/types.js";
2
+ import type { RuntimeInstance } from "../commit.js";
3
+ export type FocusContainerKind = "focusZone" | "focusTrap" | "modal";
4
+ export type ContainerInfo = {
5
+ kind: "zone" | "trap";
6
+ id: string;
7
+ };
8
+ export declare function recordFocusContainerId(seen: Map<string, FocusContainerKind>, id: string, kind: FocusContainerKind): void;
9
+ /** Collected focus zone metadata. */
10
+ export type CollectedZone = Readonly<{
11
+ id: string;
12
+ tabIndex: number;
13
+ navigation: FocusZoneNavigation;
14
+ columns: number;
15
+ wrapAround: boolean;
16
+ focusableIds: readonly string[];
17
+ parentZoneId?: string;
18
+ onEnter?: () => void;
19
+ onExit?: () => void;
20
+ }>;
21
+ /** Collected focus trap metadata. */
22
+ export type CollectedTrap = Readonly<{
23
+ id: string;
24
+ kind?: "focusTrap" | "modal";
25
+ active: boolean;
26
+ returnFocusTo: string | null;
27
+ initialFocus: string | null;
28
+ focusableIds: readonly string[];
29
+ }>;
30
+ /**
31
+ * Collect all focus zones from a committed runtime tree.
32
+ *
33
+ * - Order: depth-first preorder
34
+ * - Each zone contains only the focusable ids directly within it (not in nested zones/traps)
35
+ */
36
+ export declare function collectFocusZones(tree: RuntimeInstance): ReadonlyMap<string, CollectedZone>;
37
+ /**
38
+ * Collect all focus traps from a committed runtime tree.
39
+ *
40
+ * - Order: depth-first preorder
41
+ * - Each trap contains only the focusable ids directly within it (not in nested zones/traps)
42
+ */
43
+ export declare function collectFocusTraps(tree: RuntimeInstance): ReadonlyMap<string, CollectedTrap>;
44
+ //# sourceMappingURL=focusContainers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusContainers.d.ts","sourceRoot":"","sources":["../../../src/runtime/widgetMeta/focusContainers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,WAAW,GAAG,OAAO,CAAC;AAErE,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAUlE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACrC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAMN;AAED,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,mBAAmB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC,CAAC;AAEH,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CACjC,CAAC,CAAC;AA0DH;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CA0F3F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAuD3F"}
@@ -0,0 +1,190 @@
1
+ import { ZrUiError } from "../../abi.js";
2
+ import { isEnabledInteractive, isFocusableInteractive } from "./helpers.js";
3
+ function duplicateFocusContainerDetail(id, firstKind, secondKind) {
4
+ return `Duplicate focus container id "${id}". First: <${firstKind}>, second: <${secondKind}>. Hint: focusZone, focusTrap, and modal ids must be unique across the tree.`;
5
+ }
6
+ export function recordFocusContainerId(seen, id, kind) {
7
+ const existing = seen.get(id);
8
+ if (existing !== undefined) {
9
+ throw new ZrUiError("ZRUI_DUPLICATE_ID", duplicateFocusContainerDetail(id, existing, kind));
10
+ }
11
+ seen.set(id, kind);
12
+ }
13
+ /**
14
+ * Collect focusable ids from a subtree (not traversing into nested zones/traps/modals).
15
+ */
16
+ function collectFocusableIdsInSubtree(node) {
17
+ const out = [];
18
+ const stack = [node];
19
+ while (stack.length > 0) {
20
+ const cur = stack.pop();
21
+ if (!cur)
22
+ continue;
23
+ // Don't traverse into nested zones or traps.
24
+ if (cur.vnode.kind === "focusZone" ||
25
+ cur.vnode.kind === "focusTrap" ||
26
+ cur.vnode.kind === "modal") {
27
+ continue;
28
+ }
29
+ const id = isFocusableInteractive(cur.vnode) ? isEnabledInteractive(cur.vnode) : null;
30
+ if (id !== null)
31
+ out.push(id);
32
+ for (let i = cur.children.length - 1; i >= 0; i--) {
33
+ const c = cur.children[i];
34
+ if (c)
35
+ stack.push(c);
36
+ }
37
+ }
38
+ return Object.freeze(out);
39
+ }
40
+ function collectFocusableIdsInTrapSubtree(node) {
41
+ const out = [];
42
+ const stack = [node];
43
+ while (stack.length > 0) {
44
+ const current = stack.pop();
45
+ if (!current)
46
+ continue;
47
+ if (current.vnode.kind === "focusTrap" || current.vnode.kind === "modal") {
48
+ continue;
49
+ }
50
+ const id = isFocusableInteractive(current.vnode) ? isEnabledInteractive(current.vnode) : null;
51
+ if (id !== null)
52
+ out.push(id);
53
+ for (let i = current.children.length - 1; i >= 0; i--) {
54
+ const child = current.children[i];
55
+ if (child)
56
+ stack.push(child);
57
+ }
58
+ }
59
+ return Object.freeze(out);
60
+ }
61
+ /**
62
+ * Collect all focus zones from a committed runtime tree.
63
+ *
64
+ * - Order: depth-first preorder
65
+ * - Each zone contains only the focusable ids directly within it (not in nested zones/traps)
66
+ */
67
+ export function collectFocusZones(tree) {
68
+ const m = new Map();
69
+ const seen = new Map();
70
+ const stack = [
71
+ { node: tree, parentZoneId: null },
72
+ ];
73
+ while (stack.length > 0) {
74
+ const item = stack.pop();
75
+ if (!item)
76
+ continue;
77
+ const node = item.node;
78
+ if (node.vnode.kind === "focusZone") {
79
+ const props = node.vnode.props;
80
+ const id = typeof props.id === "string" && props.id.length > 0 ? props.id : null;
81
+ if (id !== null) {
82
+ recordFocusContainerId(seen, id, "focusZone");
83
+ const tabIndex = typeof props.tabIndex === "number" ? props.tabIndex : 0;
84
+ const navigation = props.navigation === "linear" ||
85
+ props.navigation === "grid" ||
86
+ props.navigation === "none"
87
+ ? props.navigation
88
+ : "linear";
89
+ const columns = typeof props.columns === "number" && props.columns > 0 ? props.columns : 1;
90
+ const wrapAround = props.wrapAround !== false;
91
+ const onEnter = typeof props.onEnter === "function" ? props.onEnter : undefined;
92
+ const onExit = typeof props.onExit === "function" ? props.onExit : undefined;
93
+ // Collect focusable ids from zone children (not traversing into nested zones/traps)
94
+ const focusableIds = [];
95
+ for (const child of node.children) {
96
+ if (child.vnode.kind === "focusZone" ||
97
+ child.vnode.kind === "focusTrap" ||
98
+ child.vnode.kind === "modal") {
99
+ continue;
100
+ }
101
+ const childFocusables = collectFocusableIdsInSubtree(child);
102
+ focusableIds.push(...childFocusables);
103
+ }
104
+ const zone = {
105
+ id,
106
+ tabIndex,
107
+ navigation,
108
+ columns,
109
+ wrapAround,
110
+ focusableIds: Object.freeze(focusableIds),
111
+ };
112
+ if (item.parentZoneId !== null) {
113
+ zone.parentZoneId = item.parentZoneId;
114
+ }
115
+ if (onEnter !== undefined) {
116
+ zone.onEnter = onEnter;
117
+ }
118
+ if (onExit !== undefined) {
119
+ zone.onExit = onExit;
120
+ }
121
+ m.set(id, Object.freeze(zone));
122
+ }
123
+ }
124
+ // Continue traversing children for nested zones
125
+ let childParentZoneId = item.parentZoneId;
126
+ if (node.vnode.kind === "focusZone") {
127
+ const zoneId = node.vnode.props.id;
128
+ if (typeof zoneId === "string" && zoneId.length > 0) {
129
+ childParentZoneId = zoneId;
130
+ }
131
+ }
132
+ for (let i = node.children.length - 1; i >= 0; i--) {
133
+ const c = node.children[i];
134
+ if (c)
135
+ stack.push({ node: c, parentZoneId: childParentZoneId ?? null });
136
+ }
137
+ }
138
+ return m;
139
+ }
140
+ /**
141
+ * Collect all focus traps from a committed runtime tree.
142
+ *
143
+ * - Order: depth-first preorder
144
+ * - Each trap contains only the focusable ids directly within it (not in nested zones/traps)
145
+ */
146
+ export function collectFocusTraps(tree) {
147
+ const m = new Map();
148
+ const seen = new Map();
149
+ const stack = [tree];
150
+ while (stack.length > 0) {
151
+ const node = stack.pop();
152
+ if (!node)
153
+ continue;
154
+ if (node.vnode.kind === "focusTrap" || node.vnode.kind === "modal") {
155
+ const props = node.vnode.props;
156
+ const id = typeof props.id === "string" && props.id.length > 0 ? props.id : null;
157
+ if (id !== null) {
158
+ recordFocusContainerId(seen, id, node.vnode.kind);
159
+ const active = node.vnode.kind === "modal" ? true : props.active === true;
160
+ const returnFocusTo = typeof props.returnFocusTo === "string" ? props.returnFocusTo : null;
161
+ const initialFocus = typeof props.initialFocus === "string" ? props.initialFocus : null;
162
+ // Collect focusable ids from trap children, including nested zones but
163
+ // excluding nested traps/modals which manage their own focus scope.
164
+ const focusableIds = [];
165
+ for (const child of node.children) {
166
+ if (child.vnode.kind === "focusTrap" || child.vnode.kind === "modal")
167
+ continue;
168
+ const childFocusables = collectFocusableIdsInTrapSubtree(child);
169
+ focusableIds.push(...childFocusables);
170
+ }
171
+ m.set(id, Object.freeze({
172
+ id,
173
+ kind: node.vnode.kind,
174
+ active,
175
+ returnFocusTo,
176
+ initialFocus,
177
+ focusableIds: Object.freeze(focusableIds),
178
+ }));
179
+ }
180
+ }
181
+ // Continue traversing children for nested traps
182
+ for (let i = node.children.length - 1; i >= 0; i--) {
183
+ const c = node.children[i];
184
+ if (c)
185
+ stack.push(c);
186
+ }
187
+ }
188
+ return m;
189
+ }
190
+ //# sourceMappingURL=focusContainers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusContainers.js","sourceRoot":"","sources":["../../../src/runtime/widgetMeta/focusContainers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { RuntimeInstance } from "../commit.js";
2
+ /** Structured accessibility/focus semantics for a focusable widget. */
3
+ export type FocusInfo = Readonly<{
4
+ id: string | null;
5
+ kind: RuntimeInstance["vnode"]["kind"] | null;
6
+ accessibleLabel: string | null;
7
+ visibleLabel: string | null;
8
+ required: boolean;
9
+ errors: readonly string[];
10
+ announcement: string | null;
11
+ }>;
12
+ export type FieldContext = Readonly<{
13
+ label: string | null;
14
+ required: boolean;
15
+ error: string | null;
16
+ }>;
17
+ export declare function readFieldContext(vnode: RuntimeInstance["vnode"]): FieldContext | null;
18
+ export declare function buildFocusInfo(vnode: RuntimeInstance["vnode"], id: string, fieldStack: readonly FieldContext[]): FocusInfo;
19
+ //# sourceMappingURL=focusInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusInfo.d.ts","sourceRoot":"","sources":["../../../src/runtime/widgetMeta/focusInfo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,uEAAuE;AACvE,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC9C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC,CAAC;AAmHH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,YAAY,GAAG,IAAI,CAYrF;AA8CD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAC/B,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,SAAS,YAAY,EAAE,GAClC,SAAS,CAoBX"}
@@ -0,0 +1,172 @@
1
+ import { getSelectDisplayText } from "../../widgets/select.js";
2
+ import { readNonEmptyString } from "./helpers.js";
3
+ const EMPTY_ERRORS = Object.freeze([]);
4
+ function readFocusableVisibleLabel(vnode) {
5
+ switch (vnode.kind) {
6
+ case "button":
7
+ return readNonEmptyString(vnode.props.label);
8
+ case "link": {
9
+ const props = vnode.props;
10
+ return readNonEmptyString(props.label) ?? readNonEmptyString(props.url);
11
+ }
12
+ case "slider":
13
+ return readNonEmptyString(vnode.props.label);
14
+ case "checkbox":
15
+ return readNonEmptyString(vnode.props.label);
16
+ case "select": {
17
+ const props = vnode.props;
18
+ const value = typeof props.value === "string" ? props.value : "";
19
+ const options = Array.isArray(props.options)
20
+ ? props.options
21
+ : [];
22
+ return readNonEmptyString(getSelectDisplayText(value, options, readNonEmptyString(props.placeholder) ?? undefined));
23
+ }
24
+ case "radioGroup": {
25
+ const props = vnode.props;
26
+ const value = typeof props.value === "string" ? props.value : "";
27
+ const options = Array.isArray(props.options)
28
+ ? props.options
29
+ : [];
30
+ for (const option of options) {
31
+ if (typeof option?.value === "string" &&
32
+ option.value === value &&
33
+ typeof option.label === "string") {
34
+ return readNonEmptyString(option.label);
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ case "commandPalette":
40
+ return readNonEmptyString(vnode.props.placeholder);
41
+ case "filePicker":
42
+ return readNonEmptyString(vnode.props.rootPath);
43
+ case "diffViewer": {
44
+ const diff = vnode.props.diff;
45
+ if (diff && typeof diff === "object") {
46
+ return readNonEmptyString(diff.newPath) ?? readNonEmptyString(diff.oldPath);
47
+ }
48
+ return null;
49
+ }
50
+ case "toolApprovalDialog": {
51
+ const request = vnode.props.request;
52
+ if (request && typeof request === "object") {
53
+ return readNonEmptyString(request.toolName);
54
+ }
55
+ return null;
56
+ }
57
+ default:
58
+ return null;
59
+ }
60
+ }
61
+ function kindToAnnouncementPrefix(kind) {
62
+ switch (kind) {
63
+ case "button":
64
+ return "Button";
65
+ case "link":
66
+ return "Link";
67
+ case "input":
68
+ return "Input";
69
+ case "slider":
70
+ return "Slider";
71
+ case "virtualList":
72
+ return "List";
73
+ case "table":
74
+ return "Table";
75
+ case "tree":
76
+ return "Tree";
77
+ case "select":
78
+ return "Select";
79
+ case "checkbox":
80
+ return "Checkbox";
81
+ case "radioGroup":
82
+ return "Radio group";
83
+ case "commandPalette":
84
+ return "Command palette";
85
+ case "filePicker":
86
+ return "File picker";
87
+ case "fileTreeExplorer":
88
+ return "File tree explorer";
89
+ case "codeEditor":
90
+ return "Code editor";
91
+ case "diffViewer":
92
+ return "Diff viewer";
93
+ case "toolApprovalDialog":
94
+ return "Tool approval dialog";
95
+ case "logsConsole":
96
+ return "Logs console";
97
+ default:
98
+ return "Widget";
99
+ }
100
+ }
101
+ export function readFieldContext(vnode) {
102
+ if (vnode.kind !== "field")
103
+ return null;
104
+ const props = vnode.props;
105
+ return Object.freeze({
106
+ label: readNonEmptyString(props.label),
107
+ required: props.required === true,
108
+ error: readNonEmptyString(props.error),
109
+ });
110
+ }
111
+ function resolveFieldLabel(fieldStack) {
112
+ for (let i = fieldStack.length - 1; i >= 0; i--) {
113
+ const label = fieldStack[i]?.label;
114
+ if (label)
115
+ return label;
116
+ }
117
+ return null;
118
+ }
119
+ function resolveFieldRequired(fieldStack) {
120
+ for (let i = fieldStack.length - 1; i >= 0; i--) {
121
+ if (fieldStack[i]?.required === true)
122
+ return true;
123
+ }
124
+ return false;
125
+ }
126
+ function resolveFieldErrors(fieldStack) {
127
+ if (fieldStack.length === 0)
128
+ return EMPTY_ERRORS;
129
+ const out = [];
130
+ const seen = new Set();
131
+ for (let i = fieldStack.length - 1; i >= 0; i--) {
132
+ const error = fieldStack[i]?.error;
133
+ if (!error || seen.has(error))
134
+ continue;
135
+ seen.add(error);
136
+ out.push(error);
137
+ }
138
+ return out.length > 0 ? Object.freeze(out) : EMPTY_ERRORS;
139
+ }
140
+ function buildFocusAnnouncement(primary, required, errors) {
141
+ const parts = [primary];
142
+ if (required)
143
+ parts.push("Required");
144
+ if (errors.length === 1) {
145
+ const first = errors[0];
146
+ if (first)
147
+ parts.push(first);
148
+ }
149
+ else if (errors.length > 1) {
150
+ parts.push(`${String(errors.length)} validation errors`);
151
+ }
152
+ return parts.join(" — ");
153
+ }
154
+ export function buildFocusInfo(vnode, id, fieldStack) {
155
+ const accessibleLabel = readNonEmptyString(vnode.props.accessibleLabel);
156
+ const widgetLabel = readFocusableVisibleLabel(vnode);
157
+ const fieldLabel = resolveFieldLabel(fieldStack);
158
+ const visibleLabel = widgetLabel ?? fieldLabel;
159
+ const required = resolveFieldRequired(fieldStack);
160
+ const errors = resolveFieldErrors(fieldStack);
161
+ const primary = accessibleLabel ?? visibleLabel ?? `${kindToAnnouncementPrefix(vnode.kind)} ${id}`;
162
+ return Object.freeze({
163
+ id,
164
+ kind: vnode.kind,
165
+ accessibleLabel,
166
+ visibleLabel,
167
+ required,
168
+ errors,
169
+ announcement: buildFocusAnnouncement(primary, required, errors),
170
+ });
171
+ }
172
+ //# sourceMappingURL=focusInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusInfo.js","sourceRoot":"","sources":["../../../src/runtime/widgetMeta/focusInfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { RuntimeInstance } from "../commit.js";
2
+ import type { InstanceId } from "../instance.js";
3
+ /** Extract interactive widget ID from a node with a valid `id` prop. */
4
+ export declare function readInteractiveId(v: RuntimeInstance["vnode"]): string | null;
5
+ export declare function isFocusableInteractive(v: RuntimeInstance["vnode"]): boolean;
6
+ export declare function isEnabledInteractive(v: RuntimeInstance["vnode"]): string | null;
7
+ export declare function readNonEmptyString(v: unknown): string | null;
8
+ /** Metadata for an Input widget instance. */
9
+ export type InputMeta = Readonly<{
10
+ instanceId: InstanceId;
11
+ value: string;
12
+ disabled: boolean;
13
+ readOnly: boolean;
14
+ multiline: boolean;
15
+ rows: number;
16
+ wordWrap: boolean;
17
+ onInput?: (value: string, cursor: number) => void;
18
+ onBlur?: () => void;
19
+ }>;
20
+ /**
21
+ * Collect focusable ids from a committed runtime tree.
22
+ *
23
+ * - Order: depth-first preorder
24
+ * - Children: left-to-right
25
+ * - Focusable set: enabled focusable interactive widgets
26
+ */
27
+ export declare function collectFocusableIds(tree: RuntimeInstance): readonly string[];
28
+ /**
29
+ * Collect a deterministic enabled map (interactive id -> enabled) from a committed runtime tree.
30
+ *
31
+ * Interactive widgets are always included when their `id` is a non-empty string;
32
+ * enabled is `true` iff `disabled !== true`.
33
+ */
34
+ export declare function collectEnabledMap(tree: RuntimeInstance): ReadonlyMap<string, boolean>;
35
+ /**
36
+ * Collect ids that can produce a "press" action (Buttons).
37
+ *
38
+ * Includes Buttons with a non-empty string id, regardless of disabled state.
39
+ */
40
+ export declare function collectPressableIds(tree: RuntimeInstance): ReadonlySet<string>;
41
+ /**
42
+ * Collect a deterministic map of Input id -> { instanceId, value, disabled } from a committed runtime tree.
43
+ *
44
+ * Inputs are included when their `id` is a non-empty string and `value` is a string.
45
+ */
46
+ export declare function collectInputMetaById(tree: RuntimeInstance): ReadonlyMap<string, InputMeta>;
47
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/runtime/widgetMeta/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAM5E;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,OAAO,CAO3E;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAgB/E;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,6CAA6C;AAC7C,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,MAAM,EAAE,CAkB5E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BrF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAoB9E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAgE1F"}