@moldable-ai/ui 0.2.22 → 0.2.25

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 (492) hide show
  1. package/dist/catalog/catalog-coverage.d.ts +1 -1
  2. package/dist/catalog/catalog-manifest.d.ts +1 -1
  3. package/dist/catalog/catalog-manifest.js +1 -1
  4. package/dist/catalog/component-catalog.d.ts +1 -1
  5. package/dist/catalog/component-catalog.js +2 -2
  6. package/dist/catalog/core-catalog-exclusions.d.ts +1 -1
  7. package/dist/catalog/core-catalog-exclusions.d.ts.map +1 -1
  8. package/dist/catalog/core-catalog-exclusions.js +1 -150
  9. package/dist/catalog/core-catalog.d.ts +1 -1
  10. package/dist/catalog/core-catalog.d.ts.map +1 -1
  11. package/dist/catalog/core-catalog.js +11 -7
  12. package/dist/catalog/core-collection-stories.d.ts +1 -1
  13. package/dist/catalog/core-collection-stories.d.ts.map +1 -1
  14. package/dist/catalog/core-collection-stories.js +40 -8
  15. package/dist/catalog/core-control-stories.d.ts +1 -1
  16. package/dist/catalog/core-control-stories.d.ts.map +1 -1
  17. package/dist/catalog/core-control-stories.js +48 -20
  18. package/dist/catalog/core-feedback-stories.d.ts +1 -1
  19. package/dist/catalog/core-feedback-stories.d.ts.map +1 -1
  20. package/dist/catalog/core-feedback-stories.js +89 -10
  21. package/dist/catalog/core-form-stories.d.ts +3 -0
  22. package/dist/catalog/core-form-stories.d.ts.map +1 -0
  23. package/dist/catalog/core-form-stories.js +56 -0
  24. package/dist/catalog/core-foundation-stories.d.ts +1 -1
  25. package/dist/catalog/core-foundation-stories.js +7 -7
  26. package/dist/catalog/core-layout-stories.d.ts +3 -0
  27. package/dist/catalog/core-layout-stories.d.ts.map +1 -0
  28. package/dist/catalog/core-layout-stories.js +78 -0
  29. package/dist/catalog/core-navigation-stories.d.ts +1 -1
  30. package/dist/catalog/core-navigation-stories.d.ts.map +1 -1
  31. package/dist/catalog/core-navigation-stories.js +25 -3
  32. package/dist/catalog/core-overlay-stories.d.ts +1 -1
  33. package/dist/catalog/core-overlay-stories.d.ts.map +1 -1
  34. package/dist/catalog/core-overlay-stories.js +113 -8
  35. package/dist/catalog/index.d.ts +6 -6
  36. package/dist/catalog/index.js +6 -6
  37. package/dist/components/app-error-boundary.js +2 -2
  38. package/dist/components/chat/chat-image-lightbox.js +3 -3
  39. package/dist/components/chat/chat-input.js +5 -5
  40. package/dist/components/chat/chat-message.js +17 -17
  41. package/dist/components/chat/chat-messages.d.ts +1 -1
  42. package/dist/components/chat/chat-messages.js +3 -3
  43. package/dist/components/chat/chat-panel.d.ts +6 -6
  44. package/dist/components/chat/chat-panel.d.ts.map +1 -1
  45. package/dist/components/chat/chat-panel.js +33 -33
  46. package/dist/components/chat/checkpoint-badge.js +3 -3
  47. package/dist/components/chat/conversation-history.d.ts.map +1 -1
  48. package/dist/components/chat/conversation-history.js +13 -13
  49. package/dist/components/chat/index.d.ts +20 -15
  50. package/dist/components/chat/index.d.ts.map +1 -1
  51. package/dist/components/chat/index.js +20 -15
  52. package/dist/components/chat/markdown.js +1 -1
  53. package/dist/components/chat/model-effort-selector.js +10 -10
  54. package/dist/components/chat/model-selector.js +4 -4
  55. package/dist/components/chat/reasoning-effort-selector.js +4 -4
  56. package/dist/components/chat/restore-dialog.js +3 -3
  57. package/dist/components/chat/thinking-timeline.js +2 -2
  58. package/dist/components/chat/tool-approval.d.ts +1 -1
  59. package/dist/components/chat/tool-approval.d.ts.map +1 -1
  60. package/dist/components/chat/tool-approval.js +9 -9
  61. package/dist/components/chat/tool-handlers.d.ts +2 -2
  62. package/dist/components/chat/tool-handlers.js +90 -90
  63. package/dist/components/chat/voice-orb-audio.d.ts +16 -0
  64. package/dist/components/chat/voice-orb-audio.d.ts.map +1 -0
  65. package/dist/components/chat/voice-orb-audio.js +110 -0
  66. package/dist/components/chat/voice-orb-renderer.d.ts +51 -0
  67. package/dist/components/chat/voice-orb-renderer.d.ts.map +1 -0
  68. package/dist/components/chat/voice-orb-renderer.js +410 -0
  69. package/dist/components/chat/voice-orb-shaders.d.ts +3 -0
  70. package/dist/components/chat/voice-orb-shaders.d.ts.map +1 -0
  71. package/dist/components/chat/voice-orb-shaders.js +355 -0
  72. package/dist/components/chat/voice-orb-types.d.ts +24 -0
  73. package/dist/components/chat/voice-orb-types.d.ts.map +1 -0
  74. package/dist/components/chat/voice-orb-types.js +73 -0
  75. package/dist/components/chat/voice-orb.d.ts +20 -0
  76. package/dist/components/chat/voice-orb.d.ts.map +1 -0
  77. package/dist/components/chat/voice-orb.js +67 -0
  78. package/dist/components/code-block.js +1 -1
  79. package/dist/components/hardware/bluetooth-panel.d.ts +2 -2
  80. package/dist/components/hardware/bluetooth-panel.js +10 -10
  81. package/dist/components/hardware/camera-preview.js +6 -6
  82. package/dist/components/hardware/capability-badge.d.ts +2 -2
  83. package/dist/components/hardware/capability-badge.js +2 -2
  84. package/dist/components/hardware/capability-matrix.d.ts +1 -1
  85. package/dist/components/hardware/capability-matrix.js +5 -5
  86. package/dist/components/hardware/clipboard-button.d.ts +1 -1
  87. package/dist/components/hardware/clipboard-button.js +2 -2
  88. package/dist/components/hardware/device-list.js +1 -1
  89. package/dist/components/hardware/display-map.d.ts +1 -1
  90. package/dist/components/hardware/display-map.js +7 -7
  91. package/dist/components/hardware/haptic-button.d.ts +2 -2
  92. package/dist/components/hardware/haptic-button.js +3 -3
  93. package/dist/components/hardware/hardware-panel.js +1 -1
  94. package/dist/components/hardware/hid-panel.d.ts +2 -2
  95. package/dist/components/hardware/hid-panel.js +10 -10
  96. package/dist/components/hardware/index.d.ts +26 -26
  97. package/dist/components/hardware/index.js +26 -26
  98. package/dist/components/hardware/live-indicator.js +1 -1
  99. package/dist/components/hardware/local-auth-button.d.ts +2 -2
  100. package/dist/components/hardware/local-auth-button.js +4 -4
  101. package/dist/components/hardware/location-panel.d.ts +1 -1
  102. package/dist/components/hardware/location-panel.js +6 -6
  103. package/dist/components/hardware/microphone-meter.js +7 -7
  104. package/dist/components/hardware/midi-monitor.d.ts +2 -2
  105. package/dist/components/hardware/midi-monitor.js +9 -9
  106. package/dist/components/hardware/notification-panel.d.ts +1 -1
  107. package/dist/components/hardware/notification-panel.js +8 -8
  108. package/dist/components/hardware/power-blocker-controller.d.ts +1 -1
  109. package/dist/components/hardware/power-blocker-controller.js +1 -1
  110. package/dist/components/hardware/power-panel.d.ts +1 -1
  111. package/dist/components/hardware/power-panel.js +9 -9
  112. package/dist/components/hardware/readout.js +1 -1
  113. package/dist/components/hardware/screen-share-preview.js +5 -5
  114. package/dist/components/hardware/secure-storage-panel.d.ts +1 -1
  115. package/dist/components/hardware/secure-storage-panel.js +9 -9
  116. package/dist/components/hardware/serial-console.d.ts +2 -2
  117. package/dist/components/hardware/serial-console.js +10 -10
  118. package/dist/components/hardware/shortcut-recorder.d.ts +1 -1
  119. package/dist/components/hardware/shortcut-recorder.js +4 -4
  120. package/dist/components/hardware/stream-log.js +1 -1
  121. package/dist/components/hardware/system-audio-monitor.d.ts +1 -1
  122. package/dist/components/hardware/system-audio-monitor.js +9 -9
  123. package/dist/components/hardware/usb-panel.d.ts +5 -5
  124. package/dist/components/hardware/usb-panel.js +10 -10
  125. package/dist/components/hardware/use-capability.d.ts +1 -1
  126. package/dist/components/hardware/use-capability.js +1 -1
  127. package/dist/components/markdown.js +5 -5
  128. package/dist/components/native-capabilities/bluetooth-panel.d.ts +2 -2
  129. package/dist/components/native-capabilities/bluetooth-panel.d.ts.map +1 -1
  130. package/dist/components/native-capabilities/bluetooth-panel.js +17 -17
  131. package/dist/components/native-capabilities/camera-preview.d.ts.map +1 -1
  132. package/dist/components/native-capabilities/camera-preview.js +7 -7
  133. package/dist/components/native-capabilities/capability-badge.d.ts +2 -2
  134. package/dist/components/native-capabilities/capability-badge.js +4 -4
  135. package/dist/components/native-capabilities/capability-matrix.d.ts +1 -1
  136. package/dist/components/native-capabilities/capability-matrix.js +7 -7
  137. package/dist/components/native-capabilities/clipboard-button.d.ts +1 -1
  138. package/dist/components/native-capabilities/clipboard-button.js +2 -2
  139. package/dist/components/native-capabilities/device-list.js +4 -4
  140. package/dist/components/native-capabilities/display-map.d.ts +1 -1
  141. package/dist/components/native-capabilities/display-map.d.ts.map +1 -1
  142. package/dist/components/native-capabilities/display-map.js +11 -11
  143. package/dist/components/native-capabilities/haptic-button.d.ts +2 -2
  144. package/dist/components/native-capabilities/haptic-button.js +3 -3
  145. package/dist/components/native-capabilities/hid-panel.d.ts +2 -2
  146. package/dist/components/native-capabilities/hid-panel.d.ts.map +1 -1
  147. package/dist/components/native-capabilities/hid-panel.js +14 -14
  148. package/dist/components/native-capabilities/index.d.ts +26 -26
  149. package/dist/components/native-capabilities/index.js +26 -26
  150. package/dist/components/native-capabilities/live-indicator.js +3 -3
  151. package/dist/components/native-capabilities/local-auth-button.d.ts +2 -2
  152. package/dist/components/native-capabilities/local-auth-button.js +4 -4
  153. package/dist/components/native-capabilities/location-panel.d.ts +1 -1
  154. package/dist/components/native-capabilities/location-panel.d.ts.map +1 -1
  155. package/dist/components/native-capabilities/location-panel.js +8 -8
  156. package/dist/components/native-capabilities/microphone-meter.js +9 -9
  157. package/dist/components/native-capabilities/midi-monitor.d.ts +2 -2
  158. package/dist/components/native-capabilities/midi-monitor.d.ts.map +1 -1
  159. package/dist/components/native-capabilities/midi-monitor.js +11 -11
  160. package/dist/components/native-capabilities/native-capability-panel.js +6 -6
  161. package/dist/components/native-capabilities/notification-panel.d.ts +1 -1
  162. package/dist/components/native-capabilities/notification-panel.js +9 -9
  163. package/dist/components/native-capabilities/power-blocker-controller.d.ts +1 -1
  164. package/dist/components/native-capabilities/power-blocker-controller.js +1 -1
  165. package/dist/components/native-capabilities/power-panel.d.ts +1 -1
  166. package/dist/components/native-capabilities/power-panel.d.ts.map +1 -1
  167. package/dist/components/native-capabilities/power-panel.js +12 -12
  168. package/dist/components/native-capabilities/readout.d.ts.map +1 -1
  169. package/dist/components/native-capabilities/readout.js +2 -2
  170. package/dist/components/native-capabilities/screen-share-preview.js +6 -6
  171. package/dist/components/native-capabilities/secure-storage-panel.d.ts +1 -1
  172. package/dist/components/native-capabilities/secure-storage-panel.d.ts.map +1 -1
  173. package/dist/components/native-capabilities/secure-storage-panel.js +11 -11
  174. package/dist/components/native-capabilities/serial-console.d.ts +2 -2
  175. package/dist/components/native-capabilities/serial-console.d.ts.map +1 -1
  176. package/dist/components/native-capabilities/serial-console.js +11 -11
  177. package/dist/components/native-capabilities/shortcut-recorder.d.ts +1 -1
  178. package/dist/components/native-capabilities/shortcut-recorder.js +5 -5
  179. package/dist/components/native-capabilities/stream-log.js +3 -3
  180. package/dist/components/native-capabilities/system-audio-monitor.d.ts +1 -1
  181. package/dist/components/native-capabilities/system-audio-monitor.js +12 -12
  182. package/dist/components/native-capabilities/usb-panel.d.ts +5 -5
  183. package/dist/components/native-capabilities/usb-panel.js +15 -15
  184. package/dist/components/native-capabilities/use-capability.d.ts +1 -1
  185. package/dist/components/native-capabilities/use-capability.js +1 -1
  186. package/dist/components/rich-media-player.js +3 -3
  187. package/dist/components/ui/accordion.js +3 -3
  188. package/dist/components/ui/alert-dialog.d.ts +2 -2
  189. package/dist/components/ui/alert-dialog.d.ts.map +1 -1
  190. package/dist/components/ui/alert-dialog.js +16 -10
  191. package/dist/components/ui/alert.d.ts +1 -1
  192. package/dist/components/ui/alert.d.ts.map +1 -1
  193. package/dist/components/ui/alert.js +11 -11
  194. package/dist/components/ui/app-frame.d.ts +7 -1
  195. package/dist/components/ui/app-frame.d.ts.map +1 -1
  196. package/dist/components/ui/app-frame.js +52 -16
  197. package/dist/components/ui/avatar.js +5 -5
  198. package/dist/components/ui/badge.d.ts +1 -1
  199. package/dist/components/ui/badge.js +4 -4
  200. package/dist/components/ui/breadcrumb.js +2 -2
  201. package/dist/components/ui/button-group.d.ts +1 -1
  202. package/dist/components/ui/button-group.js +4 -4
  203. package/dist/components/ui/button.d.ts +1 -1
  204. package/dist/components/ui/button.d.ts.map +1 -1
  205. package/dist/components/ui/button.js +16 -16
  206. package/dist/components/ui/calendar.d.ts +1 -1
  207. package/dist/components/ui/calendar.d.ts.map +1 -1
  208. package/dist/components/ui/calendar.js +15 -15
  209. package/dist/components/ui/card.js +3 -3
  210. package/dist/components/ui/carousel.d.ts +1 -1
  211. package/dist/components/ui/carousel.js +4 -4
  212. package/dist/components/ui/chart.js +5 -5
  213. package/dist/components/ui/checkbox.d.ts.map +1 -1
  214. package/dist/components/ui/checkbox.js +2 -2
  215. package/dist/components/ui/collapsible.js +3 -3
  216. package/dist/components/ui/color-well.js +2 -2
  217. package/dist/components/ui/combobox.js +9 -9
  218. package/dist/components/ui/command.d.ts +1 -1
  219. package/dist/components/ui/command.d.ts.map +1 -1
  220. package/dist/components/ui/command.js +9 -9
  221. package/dist/components/ui/confirm-dialog.d.ts +1 -1
  222. package/dist/components/ui/confirm-dialog.js +2 -2
  223. package/dist/components/ui/context-menu.d.ts +16 -5
  224. package/dist/components/ui/context-menu.d.ts.map +1 -1
  225. package/dist/components/ui/context-menu.js +92 -16
  226. package/dist/components/ui/date-field.d.ts.map +1 -1
  227. package/dist/components/ui/date-field.js +8 -8
  228. package/dist/components/ui/date-picker.d.ts +2 -2
  229. package/dist/components/ui/date-picker.js +7 -7
  230. package/dist/components/ui/dialog.d.ts +2 -2
  231. package/dist/components/ui/dialog.d.ts.map +1 -1
  232. package/dist/components/ui/dialog.js +16 -8
  233. package/dist/components/ui/drawer.js +4 -4
  234. package/dist/components/ui/dropdown-menu.d.ts +15 -5
  235. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  236. package/dist/components/ui/dropdown-menu.js +98 -16
  237. package/dist/components/ui/edge-fade.js +1 -1
  238. package/dist/components/ui/empty.d.ts +1 -1
  239. package/dist/components/ui/empty.js +5 -5
  240. package/dist/components/ui/error-boundary-view.d.ts.map +1 -1
  241. package/dist/components/ui/error-boundary-view.js +3 -3
  242. package/dist/components/ui/field.d.ts +1 -1
  243. package/dist/components/ui/field.d.ts.map +1 -1
  244. package/dist/components/ui/field.js +9 -9
  245. package/dist/components/ui/form.js +4 -4
  246. package/dist/components/ui/grid.d.ts.map +1 -1
  247. package/dist/components/ui/grid.js +5 -5
  248. package/dist/components/ui/hover-card.js +2 -2
  249. package/dist/components/ui/icon-button.d.ts +1 -1
  250. package/dist/components/ui/icon-button.js +3 -3
  251. package/dist/components/ui/index.d.ts +77 -77
  252. package/dist/components/ui/index.js +77 -77
  253. package/dist/components/ui/input-group.d.ts +2 -2
  254. package/dist/components/ui/input-group.js +14 -14
  255. package/dist/components/ui/input-otp.js +3 -3
  256. package/dist/components/ui/input.js +2 -2
  257. package/dist/components/ui/inspector.d.ts +1 -1
  258. package/dist/components/ui/inspector.js +6 -6
  259. package/dist/components/ui/item.d.ts +1 -1
  260. package/dist/components/ui/item.js +7 -7
  261. package/dist/components/ui/kbd.js +2 -2
  262. package/dist/components/ui/label.js +2 -2
  263. package/dist/components/ui/list.d.ts.map +1 -1
  264. package/dist/components/ui/list.js +5 -5
  265. package/dist/components/ui/material.js +3 -3
  266. package/dist/components/ui/menu-items.d.ts +28 -0
  267. package/dist/components/ui/menu-items.d.ts.map +1 -0
  268. package/dist/components/ui/menu-items.js +111 -0
  269. package/dist/components/ui/menubar.js +11 -11
  270. package/dist/components/ui/message-scroller-controller.d.ts +1 -1
  271. package/dist/components/ui/message-scroller-controller.js +1 -1
  272. package/dist/components/ui/message-scroller-primitive.d.ts +1 -1
  273. package/dist/components/ui/message-scroller-primitive.js +1 -1
  274. package/dist/components/ui/message-scroller.d.ts +2 -2
  275. package/dist/components/ui/message-scroller.js +3 -3
  276. package/dist/components/ui/navigation-button-group.d.ts +2 -2
  277. package/dist/components/ui/navigation-button-group.js +2 -2
  278. package/dist/components/ui/navigation-menu.js +6 -6
  279. package/dist/components/ui/notification-dot.js +2 -2
  280. package/dist/components/ui/number-input.js +8 -8
  281. package/dist/components/ui/pagination.d.ts +1 -1
  282. package/dist/components/ui/pagination.js +2 -2
  283. package/dist/components/ui/panel.d.ts +1 -1
  284. package/dist/components/ui/panel.js +3 -3
  285. package/dist/components/ui/popover.d.ts +1 -1
  286. package/dist/components/ui/popover.js +3 -3
  287. package/dist/components/ui/progress.js +2 -2
  288. package/dist/components/ui/radio-group.d.ts.map +1 -1
  289. package/dist/components/ui/radio-group.js +2 -2
  290. package/dist/components/ui/resizable.d.ts +1 -1
  291. package/dist/components/ui/resizable.d.ts.map +1 -1
  292. package/dist/components/ui/resizable.js +15 -4
  293. package/dist/components/ui/scroll-area.d.ts.map +1 -1
  294. package/dist/components/ui/scroll-area.js +3 -3
  295. package/dist/components/ui/search-field.js +7 -7
  296. package/dist/components/ui/segmented-control.js +9 -9
  297. package/dist/components/ui/select.d.ts.map +1 -1
  298. package/dist/components/ui/select.js +6 -6
  299. package/dist/components/ui/separator.js +1 -1
  300. package/dist/components/ui/sheet.js +4 -4
  301. package/dist/components/ui/sidebar.d.ts +5 -5
  302. package/dist/components/ui/sidebar.d.ts.map +1 -1
  303. package/dist/components/ui/sidebar.js +111 -24
  304. package/dist/components/ui/skeleton.js +2 -2
  305. package/dist/components/ui/slider.d.ts +3 -1
  306. package/dist/components/ui/slider.d.ts.map +1 -1
  307. package/dist/components/ui/slider.js +3 -3
  308. package/dist/components/ui/sonner.js +1 -1
  309. package/dist/components/ui/spinner.js +1 -1
  310. package/dist/components/ui/split-view.js +1 -1
  311. package/dist/components/ui/status.d.ts +1 -1
  312. package/dist/components/ui/status.d.ts.map +1 -1
  313. package/dist/components/ui/status.js +10 -9
  314. package/dist/components/ui/switch.js +2 -2
  315. package/dist/components/ui/table.d.ts.map +1 -1
  316. package/dist/components/ui/table.js +7 -7
  317. package/dist/components/ui/tabs.js +3 -3
  318. package/dist/components/ui/text.d.ts +2 -2
  319. package/dist/components/ui/text.js +19 -19
  320. package/dist/components/ui/textarea.js +2 -2
  321. package/dist/components/ui/toggle-group.d.ts +1 -1
  322. package/dist/components/ui/toggle-group.js +4 -4
  323. package/dist/components/ui/toggle.d.ts +1 -1
  324. package/dist/components/ui/toggle.js +10 -10
  325. package/dist/components/ui/toolbar.d.ts +7 -7
  326. package/dist/components/ui/toolbar.js +7 -7
  327. package/dist/components/ui/tooltip.d.ts +2 -2
  328. package/dist/components/ui/tooltip.js +5 -5
  329. package/dist/index.d.ts +21 -20
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +21 -20
  332. package/dist/lib/frame-lifecycle.d.ts +27 -0
  333. package/dist/lib/frame-lifecycle.d.ts.map +1 -1
  334. package/dist/lib/frame-lifecycle.js +136 -0
  335. package/dist/lib/host-date-time-picker.d.ts +1 -1
  336. package/dist/lib/host-date-time-picker.js +1 -1
  337. package/dist/lib/host-file-dialog.d.ts +1 -1
  338. package/dist/lib/host-file-dialog.js +1 -1
  339. package/dist/lib/host-native-menu.d.ts +48 -7
  340. package/dist/lib/host-native-menu.d.ts.map +1 -1
  341. package/dist/lib/host-native-menu.js +56 -1
  342. package/dist/lib/host-services.js +1 -1
  343. package/dist/lib/host-share.d.ts +1 -1
  344. package/dist/lib/host-share.js +1 -1
  345. package/dist/lib/host-web-surface.d.ts +31 -0
  346. package/dist/lib/host-web-surface.d.ts.map +1 -0
  347. package/dist/lib/host-web-surface.js +116 -0
  348. package/dist/lib/native-capabilities/access.d.ts +2 -2
  349. package/dist/lib/native-capabilities/access.js +2 -2
  350. package/dist/lib/native-capabilities/bluetooth-access.d.ts +1 -1
  351. package/dist/lib/native-capabilities/bluetooth-access.js +2 -2
  352. package/dist/lib/native-capabilities/bluetooth-connection.d.ts +1 -1
  353. package/dist/lib/native-capabilities/bluetooth-connection.js +1 -1
  354. package/dist/lib/native-capabilities/bluetooth-gatt.d.ts +1 -1
  355. package/dist/lib/native-capabilities/bluetooth-gatt.js +1 -1
  356. package/dist/lib/native-capabilities/bluetooth-internal.d.ts +2 -2
  357. package/dist/lib/native-capabilities/bluetooth-internal.js +1 -1
  358. package/dist/lib/native-capabilities/bluetooth-native-fallback.d.ts +2 -2
  359. package/dist/lib/native-capabilities/bluetooth-native-fallback.js +2 -2
  360. package/dist/lib/native-capabilities/bluetooth.d.ts +6 -6
  361. package/dist/lib/native-capabilities/bluetooth.js +4 -4
  362. package/dist/lib/native-capabilities/bridge.d.ts +1 -1
  363. package/dist/lib/native-capabilities/bridge.js +2 -2
  364. package/dist/lib/native-capabilities/capabilities.d.ts +1 -1
  365. package/dist/lib/native-capabilities/capabilities.js +1 -1
  366. package/dist/lib/native-capabilities/clipboard.js +2 -2
  367. package/dist/lib/native-capabilities/device-io-errors.d.ts +1 -1
  368. package/dist/lib/native-capabilities/device-io-errors.js +1 -1
  369. package/dist/lib/native-capabilities/displays.d.ts +1 -1
  370. package/dist/lib/native-capabilities/displays.js +1 -1
  371. package/dist/lib/native-capabilities/global-shortcuts.d.ts +2 -2
  372. package/dist/lib/native-capabilities/global-shortcuts.js +1 -1
  373. package/dist/lib/native-capabilities/haptics.d.ts +1 -1
  374. package/dist/lib/native-capabilities/haptics.js +1 -1
  375. package/dist/lib/native-capabilities/hid-native.d.ts +2 -2
  376. package/dist/lib/native-capabilities/hid-native.js +3 -3
  377. package/dist/lib/native-capabilities/hid.js +5 -5
  378. package/dist/lib/native-capabilities/index.d.ts +39 -39
  379. package/dist/lib/native-capabilities/index.js +21 -21
  380. package/dist/lib/native-capabilities/local-authentication.d.ts +1 -1
  381. package/dist/lib/native-capabilities/local-authentication.js +1 -1
  382. package/dist/lib/native-capabilities/location.js +1 -1
  383. package/dist/lib/native-capabilities/media-permissions.d.ts +1 -1
  384. package/dist/lib/native-capabilities/media-permissions.js +1 -1
  385. package/dist/lib/native-capabilities/media.d.ts +1 -1
  386. package/dist/lib/native-capabilities/media.js +2 -2
  387. package/dist/lib/native-capabilities/midi-access.d.ts +1 -1
  388. package/dist/lib/native-capabilities/midi-access.js +3 -3
  389. package/dist/lib/native-capabilities/midi-internal.d.ts +1 -1
  390. package/dist/lib/native-capabilities/midi-internal.js +1 -1
  391. package/dist/lib/native-capabilities/midi-native-fallback.d.ts +1 -1
  392. package/dist/lib/native-capabilities/midi-native-fallback.js +2 -2
  393. package/dist/lib/native-capabilities/midi-ports.d.ts +1 -1
  394. package/dist/lib/native-capabilities/midi-ports.js +1 -1
  395. package/dist/lib/native-capabilities/midi.d.ts +5 -5
  396. package/dist/lib/native-capabilities/midi.js +3 -3
  397. package/dist/lib/native-capabilities/native-device-io.d.ts +1 -1
  398. package/dist/lib/native-capabilities/native-device-io.js +1 -1
  399. package/dist/lib/native-capabilities/native-device-lifecycle.js +1 -1
  400. package/dist/lib/native-capabilities/notifications.d.ts +2 -2
  401. package/dist/lib/native-capabilities/notifications.js +1 -1
  402. package/dist/lib/native-capabilities/power-session.d.ts +2 -2
  403. package/dist/lib/native-capabilities/power-session.js +1 -1
  404. package/dist/lib/native-capabilities/secure-storage.d.ts +1 -1
  405. package/dist/lib/native-capabilities/secure-storage.js +1 -1
  406. package/dist/lib/native-capabilities/serial-native.d.ts +2 -2
  407. package/dist/lib/native-capabilities/serial-native.js +3 -3
  408. package/dist/lib/native-capabilities/serial.js +5 -5
  409. package/dist/lib/native-capabilities/system-audio.d.ts +1 -1
  410. package/dist/lib/native-capabilities/system-audio.js +1 -1
  411. package/dist/lib/native-capabilities/usb-native.d.ts +2 -2
  412. package/dist/lib/native-capabilities/usb-native.js +3 -3
  413. package/dist/lib/native-capabilities/usb.js +5 -5
  414. package/dist/lib/native-hardware/bluetooth-access.d.ts +1 -1
  415. package/dist/lib/native-hardware/bluetooth-access.js +1 -1
  416. package/dist/lib/native-hardware/bluetooth-connection.d.ts +1 -1
  417. package/dist/lib/native-hardware/bluetooth-connection.js +1 -1
  418. package/dist/lib/native-hardware/bluetooth-gatt.d.ts +1 -1
  419. package/dist/lib/native-hardware/bluetooth-gatt.js +1 -1
  420. package/dist/lib/native-hardware/bluetooth-internal.d.ts +2 -2
  421. package/dist/lib/native-hardware/bluetooth-internal.js +1 -1
  422. package/dist/lib/native-hardware/bluetooth-native-fallback.d.ts +2 -2
  423. package/dist/lib/native-hardware/bluetooth-native-fallback.js +2 -2
  424. package/dist/lib/native-hardware/bluetooth.d.ts +6 -6
  425. package/dist/lib/native-hardware/bluetooth.js +4 -4
  426. package/dist/lib/native-hardware/bridge.d.ts +1 -1
  427. package/dist/lib/native-hardware/bridge.js +2 -2
  428. package/dist/lib/native-hardware/capabilities.d.ts +1 -1
  429. package/dist/lib/native-hardware/capabilities.js +1 -1
  430. package/dist/lib/native-hardware/clipboard.js +1 -1
  431. package/dist/lib/native-hardware/device-io-errors.d.ts +1 -1
  432. package/dist/lib/native-hardware/device-io-errors.js +1 -1
  433. package/dist/lib/native-hardware/displays.d.ts +1 -1
  434. package/dist/lib/native-hardware/displays.js +1 -1
  435. package/dist/lib/native-hardware/global-shortcuts.d.ts +2 -2
  436. package/dist/lib/native-hardware/global-shortcuts.js +1 -1
  437. package/dist/lib/native-hardware/haptics.d.ts +1 -1
  438. package/dist/lib/native-hardware/haptics.js +1 -1
  439. package/dist/lib/native-hardware/hid-native.d.ts +2 -2
  440. package/dist/lib/native-hardware/hid-native.js +3 -3
  441. package/dist/lib/native-hardware/hid.js +4 -4
  442. package/dist/lib/native-hardware/index.d.ts +37 -37
  443. package/dist/lib/native-hardware/index.js +20 -20
  444. package/dist/lib/native-hardware/local-authentication.d.ts +1 -1
  445. package/dist/lib/native-hardware/local-authentication.js +1 -1
  446. package/dist/lib/native-hardware/location.js +1 -1
  447. package/dist/lib/native-hardware/media-permissions.d.ts +1 -1
  448. package/dist/lib/native-hardware/media-permissions.js +1 -1
  449. package/dist/lib/native-hardware/media.d.ts +1 -1
  450. package/dist/lib/native-hardware/media.js +1 -1
  451. package/dist/lib/native-hardware/midi-access.d.ts +1 -1
  452. package/dist/lib/native-hardware/midi-access.js +2 -2
  453. package/dist/lib/native-hardware/midi-internal.d.ts +1 -1
  454. package/dist/lib/native-hardware/midi-internal.js +1 -1
  455. package/dist/lib/native-hardware/midi-native-fallback.d.ts +1 -1
  456. package/dist/lib/native-hardware/midi-native-fallback.js +2 -2
  457. package/dist/lib/native-hardware/midi-ports.d.ts +1 -1
  458. package/dist/lib/native-hardware/midi-ports.js +1 -1
  459. package/dist/lib/native-hardware/midi.d.ts +5 -5
  460. package/dist/lib/native-hardware/midi.js +3 -3
  461. package/dist/lib/native-hardware/native-device-io.d.ts +1 -1
  462. package/dist/lib/native-hardware/native-device-io.js +1 -1
  463. package/dist/lib/native-hardware/native-device-lifecycle.js +1 -1
  464. package/dist/lib/native-hardware/notifications.d.ts +2 -2
  465. package/dist/lib/native-hardware/notifications.js +1 -1
  466. package/dist/lib/native-hardware/power-session.d.ts +2 -2
  467. package/dist/lib/native-hardware/power-session.js +1 -1
  468. package/dist/lib/native-hardware/secure-storage.d.ts +1 -1
  469. package/dist/lib/native-hardware/secure-storage.js +1 -1
  470. package/dist/lib/native-hardware/serial-native.d.ts +2 -2
  471. package/dist/lib/native-hardware/serial-native.js +3 -3
  472. package/dist/lib/native-hardware/serial.js +4 -4
  473. package/dist/lib/native-hardware/system-audio.d.ts +1 -1
  474. package/dist/lib/native-hardware/system-audio.js +1 -1
  475. package/dist/lib/native-hardware/usb-native.d.ts +2 -2
  476. package/dist/lib/native-hardware/usb-native.js +3 -3
  477. package/dist/lib/native-hardware/usb.js +4 -4
  478. package/dist/lib/theme.js +1 -1
  479. package/docs/design-tokens.md +28 -6
  480. package/docs/foundations.md +4 -2
  481. package/package.json +4 -2
  482. package/src/components/ui/confirm-dialog.md +97 -0
  483. package/src/components/ui/context-menu.md +158 -0
  484. package/src/components/ui/dropdown-menu.md +165 -0
  485. package/src/components/ui/hover-card.md +90 -0
  486. package/src/components/ui/select.md +111 -0
  487. package/src/lib/host-date-time-picker.md +29 -0
  488. package/src/lib/host-file-dialog.md +76 -0
  489. package/src/lib/host-native-menu.md +67 -0
  490. package/src/lib/host-share.md +36 -0
  491. package/src/lib/host-web-surface.md +66 -0
  492. package/src/styles/index.css +141 -68
@@ -0,0 +1,111 @@
1
+ # Select
2
+
3
+ ## Purpose
4
+
5
+ `Select` chooses one value from a short, fixed set. Use it when every option is
6
+ known before the menu opens and scanning the list is faster than typing.
7
+
8
+ Use `Combobox` when users need to filter a longer list, create a value, fetch
9
+ remote results, or select multiple values. Use `RadioGroup` when a small set of
10
+ important choices should remain visible, and `DropdownMenu` for commands rather
11
+ than form values.
12
+
13
+ ## Usage patterns
14
+
15
+ ```tsx
16
+ import {
17
+ Select,
18
+ SelectContent,
19
+ SelectGroup,
20
+ SelectItem,
21
+ SelectLabel,
22
+ SelectTrigger,
23
+ SelectValue,
24
+ } from '@moldable-ai/ui'
25
+
26
+ function SortSelect() {
27
+ return (
28
+ <>
29
+ <label htmlFor="sort-order">Sort</label>
30
+ <Select defaultValue="updated">
31
+ <SelectTrigger id="sort-order" size="sm">
32
+ <SelectValue placeholder="Choose an order" />
33
+ </SelectTrigger>
34
+ <SelectContent position="popper" align="start">
35
+ <SelectGroup>
36
+ <SelectLabel>Sort by</SelectLabel>
37
+ <SelectItem value="updated">Recently updated</SelectItem>
38
+ <SelectItem value="created">Date created</SelectItem>
39
+ <SelectItem value="name">Name</SelectItem>
40
+ </SelectGroup>
41
+ </SelectContent>
42
+ </Select>
43
+ </>
44
+ )
45
+ }
46
+ ```
47
+
48
+ Give the trigger a visible external label or an accessible name. Placeholder
49
+ text describes the missing value; it does not replace a label.
50
+
51
+ ## Anatomy
52
+
53
+ Compose `Select` with `SelectTrigger`, `SelectValue`, `SelectContent`, and one
54
+ or more `SelectItem` children. `SelectGroup`, `SelectLabel`, and
55
+ `SelectSeparator` organize a longer fixed list. Scroll buttons are included by
56
+ `SelectContent`.
57
+
58
+ ## API summary
59
+
60
+ - `Select` supports `value`, `defaultValue`, `onValueChange`, `open`,
61
+ `defaultOpen`, `onOpenChange`, `disabled`, `required`, `name`,
62
+ `autoComplete`, `form`, and `dir`.
63
+ - `SelectTrigger` accepts button props and `size="sm" | "default"`.
64
+ - `SelectValue` accepts `placeholder`.
65
+ - `SelectContent` accepts `position="item-aligned" | "popper"` and Radix
66
+ positioning props such as `align`. This wrapper defaults `align` to `center`.
67
+ - `SelectItem` requires a string `value` and supports `disabled` and
68
+ `textValue`.
69
+
70
+ ## States and interaction
71
+
72
+ Use controlled `value` when selection affects other state immediately; use
73
+ `defaultValue` for an isolated uncontrolled field. Disable only unavailable
74
+ items rather than the entire select when some choices remain valid. Keep item
75
+ labels stable while the menu is open.
76
+
77
+ The trigger uses the control shape and body-text roles. The menu uses
78
+ `bg-popover`, `text-popover-foreground`, `rounded-overlay`, and
79
+ `shadow-overlay`; focused options use the semantic accent roles. Preserve those
80
+ roles instead of adding raw fills, radii, or shadows.
81
+
82
+ ## Keyboard and accessibility
83
+
84
+ Radix supplies listbox keyboard navigation, typeahead, focus management, and
85
+ selection semantics. Do not replace `SelectItem` with buttons or add nested
86
+ interactive controls. Associate a visible label with the trigger, and make
87
+ disabled state apparent without relying on color alone.
88
+
89
+ ## Do
90
+
91
+ - Use concise, mutually exclusive option labels.
92
+ - Put the current value in `value` or `defaultValue`, not in placeholder text.
93
+ - Use `position="popper"` when the menu should align to the trigger rather than
94
+ the selected item.
95
+ - Use `SelectLabel` when groups need names.
96
+
97
+ ## Don't
98
+
99
+ - Do not use `Select` for searchable, creatable, remote, or multi-value data;
100
+ use `Combobox`.
101
+ - Do not put actions, links, checkboxes, or explanatory paragraphs in the
102
+ option list.
103
+ - Do not use it for two or three choices that users must compare at a glance;
104
+ use `RadioGroup`.
105
+ - Do not deep-import the implementation; import from `@moldable-ai/ui`.
106
+
107
+ ## Moldable considerations
108
+
109
+ `Select` is the portable renderer-owned control in app webviews. Keep required
110
+ choices available through keyboard and pointer input, and do not replace it
111
+ with a host-native command menu.
@@ -0,0 +1,29 @@
1
+ # Host date/time picker
2
+
3
+ `useHostDateTimePicker()` and `pickDateTimeWithHost()` opt a call site into the
4
+ host-owned system picker when the Moldable host advertises it.
5
+
6
+ ```tsx
7
+ const picker = useHostDateTimePicker()
8
+ const buttonRef = useRef<HTMLButtonElement>(null)
9
+
10
+ const result = await picker.pick('datetime', {
11
+ value: '2026-07-26T14:30:00',
12
+ min: '2026-01-01T00:00:00',
13
+ anchor: buttonRef.current ?? undefined,
14
+ })
15
+ ```
16
+
17
+ `mode` is `"date"`, `"time"`, or `"datetime"`. `value`, `min`, and `max` use
18
+ the matching timezone-free ISO form: `YYYY-MM-DD`, `HH:mm[:ss]`, or
19
+ `YYYY-MM-DDTHH:mm[:ss]`. This matches portable form controls and avoids
20
+ converting a calendar date through UTC. Native confirmation returns the same
21
+ mode-specific form. Click-away or close resolves with `status: "cancelled"`.
22
+
23
+ Native presentation is per-call-site opt-in. When the service is unavailable,
24
+ the helper returns `status: "fallback"` together with the mode and range. It
25
+ does not open renderer UI: the caller should keep using the portable
26
+ `DatePicker`, `DateField`, or calendar popover as its default experience.
27
+
28
+ An explicit `AbortSignal` abort rejects with `AbortError` and asks the host to
29
+ dismiss an open native popover. `timeoutMs` can lower the host default timeout.
@@ -0,0 +1,76 @@
1
+ # Host file dialog
2
+
3
+ `useHostFileDialog()`, `openFileDialogWithHost()`, and
4
+ `saveFileDialogWithHost()` opt a call site into the host-owned macOS open/save
5
+ sheet when Moldable advertises `fileDialog`.
6
+
7
+ The fallback is intentionally only a routing signal:
8
+
9
+ ```tsx
10
+ const fileDialog = useHostFileDialog()
11
+
12
+ async function chooseFiles() {
13
+ const result = await fileDialog.open({
14
+ title: 'Import notes',
15
+ filters: [{ name: 'Text', extensions: ['txt', 'md'] }],
16
+ defaultLocation: 'documents',
17
+ properties: { multiple: true },
18
+ })
19
+
20
+ if (result.status === 'fallback') {
21
+ portableFileInputRef.current?.click()
22
+ return
23
+ }
24
+ if (result.status === 'completed') {
25
+ await importSelectedPaths(result.paths)
26
+ }
27
+ }
28
+
29
+ return (
30
+ <>
31
+ <Button onClick={chooseFiles}>Import</Button>
32
+ <input ref={portableFileInputRef} type="file" multiple hidden />
33
+ </>
34
+ )
35
+ ```
36
+
37
+ This SDK does not build or trigger the portable `<input type="file">` flow.
38
+ Callers own that cross-platform UI and route to it when the result is
39
+ `{ status: "fallback" }`.
40
+
41
+ ## Result representation
42
+
43
+ For v1, completed native results contain absolute path strings. This preserves
44
+ parity with Moldable's legacy app-facing `moldable:select-folder` API; there is
45
+ currently no external-file asset or opaque-handle scheme. A selected path is
46
+ not additional filesystem authority: this service only selects a location and
47
+ adds no read or write API.
48
+
49
+ ## Defined v1 behavior
50
+
51
+ - `filters` accepts at most 32 named filters. Each filter has 1–64 extensions,
52
+ written without a leading dot. On macOS the validated names describe the
53
+ filter groups, while AppKit receives the deduplicated union of their
54
+ extensions as its allowed file types.
55
+ - `defaultLocation` maps `documents`, `downloads`, and `desktop` to those
56
+ conventional folders under the user's home directory; `home` maps to the
57
+ home directory; `appData` maps to the requesting app's
58
+ `workspaces/{workspaceId}/apps/{appId}/data` directory.
59
+ - Open `multiple` defaults to `false`.
60
+ - Open `directories` defaults to `false`; when true the panel chooses
61
+ directories instead of files.
62
+ - Open and save `createDirectories` default to `false`; when true AppKit shows
63
+ its New Folder control.
64
+ - Open `showHidden` defaults to `false`; when true hidden entries are initially
65
+ visible. The user may still use AppKit's standard hidden-file shortcut.
66
+ - Save `defaultName` initializes the filename field and must be a filename, not
67
+ a path.
68
+ - `title` and `buttonLabel` set AppKit's panel title and confirmation prompt.
69
+ AppKit sheets may not visibly render a titlebar, but the value is still
70
+ applied to the panel.
71
+ - Unknown and mode-inappropriate properties are rejected before presentation.
72
+
73
+ The panel is presented as a sheet owned by the requesting embedded or dedicated
74
+ host window. User cancellation resolves with `{ status: "cancelled" }`. An
75
+ `AbortSignal` abort rejects with `AbortError` and asks the host to cancel the
76
+ request-ID-keyed AppKit panel.
@@ -0,0 +1,67 @@
1
+ # Host native menu
2
+
3
+ `useHostNativeMenu()` and `openNativeMenuWithHost()` opt a call site into a
4
+ host-owned AppKit menu when the Moldable host advertises `nativeMenu`. The
5
+ portable Radix `ContextMenu` remains the cross-platform implementation and is
6
+ owned by the caller.
7
+
8
+ The intended integration shape is to try the native menu from the same pointer
9
+ handler that would open the portable menu, then leave or restore the portable
10
+ path when the host is unavailable:
11
+
12
+ ```tsx
13
+ const nativeMenu = useHostNativeMenu()
14
+ const [portableOpen, setPortableOpen] = useState(false)
15
+
16
+ async function handleContextMenu(event: React.MouseEvent) {
17
+ if (!nativeMenu.available) {
18
+ // Do not prevent the event. ContextMenuTrigger opens the portable menu.
19
+ return
20
+ }
21
+
22
+ event.preventDefault()
23
+ const result = await nativeMenu.open(menuItems, {
24
+ position: { x: event.clientX, y: event.clientY },
25
+ })
26
+
27
+ if (result.status === 'completed') {
28
+ runCommand(result.selectedId)
29
+ } else if (result.status === 'fallback') {
30
+ setPortableOpen(true)
31
+ }
32
+ }
33
+
34
+ return (
35
+ <ContextMenu open={portableOpen} onOpenChange={setPortableOpen}>
36
+ <ContextMenuTrigger asChild>
37
+ <div onContextMenu={handleContextMenu}>{children}</div>
38
+ </ContextMenuTrigger>
39
+ <ContextMenuContent>{/* existing portable items */}</ContextMenuContent>
40
+ </ContextMenu>
41
+ )
42
+ ```
43
+
44
+ The request requires exactly one app-viewport placement: an `anchor` element or
45
+ rect, or a pointer `position`. Item depth is capped at 3 and the whole tree at
46
+ 200 items. Selectable item IDs are non-empty and unique across the tree.
47
+ Checkboxes support `true`, `false`, and `"mixed"`; radio items reject
48
+ `"mixed"`.
49
+
50
+ `destructive` is reserved in v1. It is validated and carried through the
51
+ service but is deliberately not rendered with native destructive styling. The
52
+ portable menu may continue to render its destructive variant.
53
+
54
+ Shortcuts use AppKit's
55
+ [`NSMenuItem.keyEquivalent`](https://developer.apple.com/documentation/appkit/nsmenuitem/keyequivalent)
56
+ and modifier mask so AppKit draws the conventional shortcut label. The menu is
57
+ a transient popup attached to the requesting host window and is never installed
58
+ as the application's main menu, so these values do not register global app
59
+ shortcuts. AppKit may still match the equivalent while that popup is actively
60
+ tracking; callers must treat the field as display metadata and keep command
61
+ handling keyed by the returned `selectedId`.
62
+
63
+ Click-away and Escape resolve with `{ status: "cancelled" }`. An explicit
64
+ `AbortSignal` abort rejects with `AbortError` and asks the host to call
65
+ `cancelTracking()` on the request-ID-keyed open menu. When native menus are not
66
+ advertised, the helper resolves with `{ status: "fallback" }` without opening
67
+ renderer UI.
@@ -0,0 +1,36 @@
1
+ # Host share
2
+
3
+ `useHostShare()` and `shareWithHost()` provide one share API across Moldable
4
+ hosts and ordinary browsers.
5
+
6
+ ```tsx
7
+ const share = useHostShare()
8
+ const buttonRef = useRef<HTMLButtonElement>(null)
9
+
10
+ await share.share(
11
+ [
12
+ { kind: 'text', text: 'A useful note' },
13
+ { kind: 'url', url: 'https://example.com/note' },
14
+ ],
15
+ { anchor: buttonRef.current ?? undefined },
16
+ )
17
+ ```
18
+
19
+ The decision flow is:
20
+
21
+ 1. When the host advertises `share`, the SDK sends a host-service request. The
22
+ host translates the supplied element or rect from app-viewport coordinates
23
+ and presents the native picker.
24
+ 2. Without that advertisement, text and URL items use `navigator.share` when
25
+ Web Share is available.
26
+ 3. Otherwise the promise resolves with `status: "fallback"` and returns the
27
+ original items. The caller can then expose its own copy or download UI.
28
+ File references always take this path outside a native Moldable host because
29
+ a browser cannot dereference a workspace-local path.
30
+
31
+ Native dismissal is represented by the envelope's terminal `cancelled` status;
32
+ the SDK maps it to `{ status: "cancelled", method: "native" }`. Web Share
33
+ dismissal resolves with the equivalent `web` result. An explicit `AbortSignal`
34
+ abort rejects with `AbortError`; on the native path the envelope also asks the
35
+ host to dismiss the open picker. `timeoutMs` can lower the host's default
36
+ timeout.
@@ -0,0 +1,66 @@
1
+ # Host web surface
2
+
3
+ `useHostWebSurface()` controls a native child webview supplied by the Moldable
4
+ desktop host. It is progressive enhancement: `available` is `true` only in a
5
+ dedicated app window whose manifest declares:
6
+
7
+ ```json
8
+ {
9
+ "nativeCapabilities": ["webSurface"]
10
+ }
11
+ ```
12
+
13
+ Embedded app views, older hosts, and apps without the declaration receive
14
+ `available: false`. Keep an iframe or reader implementation for those cases.
15
+
16
+ ```tsx
17
+ import { useEffect } from 'react'
18
+ import { useHostWebSurface } from '@moldable-ai/ui'
19
+
20
+ function LivePage({
21
+ url,
22
+ bounds,
23
+ }: {
24
+ url: string
25
+ bounds: { x: number; y: number; width: number; height: number }
26
+ }) {
27
+ const { available, create, destroy, onNavState, setBounds } =
28
+ useHostWebSurface()
29
+
30
+ useEffect(() => {
31
+ if (!available) return
32
+
33
+ void create('active-tab', url, bounds)
34
+ const unsubscribe = onNavState((state) => {
35
+ if (state.surfaceId === 'active-tab') {
36
+ console.log(state.url, state.canGoBack, state.canGoForward)
37
+ }
38
+ })
39
+
40
+ return () => {
41
+ unsubscribe()
42
+ void destroy('active-tab')
43
+ }
44
+ }, [available, create, destroy, onNavState, url])
45
+
46
+ useEffect(() => {
47
+ if (available) {
48
+ void setBounds('active-tab', bounds)
49
+ }
50
+ }, [available, bounds, setBounds])
51
+
52
+ return available ? null : <iframe title="Live page" src={url} />
53
+ }
54
+ ```
55
+
56
+ Bounds are logical pixels relative to the app content viewport. Re-send them
57
+ when a `ResizeObserver` reports a layout change. The host also re-clamps the
58
+ last requested bounds after native window resizes.
59
+
60
+ Native child webviews paint above app DOM. Call `setVisible(surfaceId, false)`
61
+ before showing a renderer-owned dialog or overlay, then restore visibility
62
+ when it closes. Host-native menus already paint above the surface.
63
+
64
+ All methods accept the standard host-service `{ signal, timeoutMs }` options.
65
+ Invalid input throws a `TypeError`; cancellation, timeout, and host failures
66
+ reject with the same errors as other host-service adapters.